{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap eef5cd8cf39c79506977","webpack:///./~/underscore/underscore.js","webpack:///./src/everlive/constants.ts","webpack:///./src/everlive/EverliveError.ts","webpack:///./src/everlive/utils.ts","webpack:///./src/common/platform.ts","webpack:///./src/everlive/query/Query.ts","webpack:///./~/process/browser.js","webpack:///./src/common/Constants.ts","webpack:///./~/path-browserify/index.js","webpack:///./src/everlive/Request.ts","webpack:///./src/everlive/services/RequestService.ts","webpack:///./~/inherits/inherits_browser.js","webpack:///./~/node-cryptojs-aes/lib/core.js","webpack:///./~/readable-stream/lib/_stream_duplex.js","webpack:///./src/everlive/dataQuery/DataQuery.ts","webpack:///./src/everlive/offline/offlineTransformations.ts","webpack:///./src/everlive/offline/persisters/BasePersister.ts","webpack:///./src/everlive/types/Data.ts","webpack:///./~/events/events.js","webpack:///./src/everlive/Expression.ts","webpack:///./src/everlive/offline/offlinePersisters.ts","webpack:///./src/everlive/query/AggregateQuery.ts","webpack:///./src/everlive/query/QueryBuilder.ts","webpack:///./src/everlive/reqwest.everlive.ts","webpack:///./~/buffer/index.js","webpack:///./~/component-type/index.js","webpack:///./~/core-util-is/lib/util.js","webpack:///./~/json-sql/lib/dialects/base/index.js","webpack:///./~/util/util.js","webpack:///./src/everlive/Everlive.ts","webpack:///./src/everlive/GeoPoint.ts","webpack:///./src/everlive/offline/offline.ts","webpack:///./src/everlive/offline/processors/OfflineQueryProcessor.ts","webpack:///./src/everlive/push/CordovaCurrentDevice.ts","webpack:///./src/everlive/push/NativeScriptCurrentDevice.ts","webpack:///./src/everlive/query/RequestOptionsBuilder.ts","webpack:///./src/everlive/storages/FileStore.ts","webpack:///./src/everlive/storages/LocalStore.ts","webpack:///./src/everlive/storages/SQLiteStore.ts","webpack:///./~/node-libs-browser/~/buffer/index.js","webpack:///./~/stream-browserify/index.js","webpack:///./~/timers-browserify/main.js","webpack:///./src/scripts/bs-expand-processor/Constants.js","webpack:///./src/common/EventEmitterExtended.ts","webpack:///./src/common/query/Query.ts","webpack:///./src/common/utils.ts","webpack:///./src/everlive/AutoQueue.ts","webpack:///./src/everlive/ExpandProcessor.ts","webpack:///./src/everlive/Push.ts","webpack:///./src/everlive/Setup.ts","webpack:///./src/everlive/auth/Authentication.ts","webpack:///./src/everlive/auth/AuthenticationSetup.ts","webpack:///./src/everlive/business-logic/BusinessLogic.ts","webpack:///./src/everlive/caching/CacheModule.ts","webpack:///./src/everlive/caching/caching.ts","webpack:///./src/everlive/dataQuery/DataQueryBuilder.ts","webpack:///./src/everlive/encryption/CryptographicProvider.ts","webpack:///./src/everlive/helpers/helpers.ts","webpack:///./src/everlive/helpers/html/htmlHelper.ts","webpack:///./src/everlive/helpers/html/htmlHelperOfflineModule.ts","webpack:///./src/everlive/helpers/html/htmlHelperResponsiveModule.ts","webpack:///./src/everlive/index.ts","webpack:///./src/everlive/kendo/kendo.everlive.ts","webpack:///./src/everlive/offline/OfflineFilesModule.ts","webpack:///./src/everlive/offline/OfflineFilesProcessor.ts","webpack:///./src/everlive/offline/OfflineStorageModule.ts","webpack:///./src/everlive/offline/persisters/FileSystemPersister.ts","webpack:///./src/everlive/offline/persisters/LocalStoragePersister.ts","webpack:///./src/everlive/offline/persisters/SQLitePersister.ts","webpack:///./src/everlive/offline/persisters/sqlite/FieldDefinition.ts","webpack:///./src/everlive/offline/persisters/sqlite/SystemDefinitions.ts","webpack:///./src/everlive/offline/processors/OfflineInMemoryQueryProcessor.ts","webpack:///./src/everlive/offline/processors/OfflineSQLiteQueryProcessor.ts","webpack:///./src/everlive/push/CurrentDevice.ts","webpack:///./src/everlive/query/EventQuery.ts","webpack:///./src/everlive/query/WhereQuery.ts","webpack:///./src/everlive/reqwest.nativescript.ts","webpack:///./src/everlive/reqwest.nodejs.ts","webpack:///./src/everlive/response/ResponseParserProcessor.ts","webpack:///./src/everlive/response/ResponseTransformProcessor.ts","webpack:///./src/everlive/storages/CordovaSQLiteStore.ts","webpack:///./src/everlive/storages/NativeScriptFileStore.ts","webpack:///./src/everlive/storages/NativeScriptSQLiteStore.ts","webpack:///./src/everlive/storages/WebFileStore.ts","webpack:///./src/everlive/types/Files.ts","webpack:///./src/everlive/types/Users.ts","webpack:///./src/everlive/types/preProcessors/DataPreprocessor.ts","webpack:///./src/everlive/types/preProcessors/OfflineQueryPreprocessor.ts","webpack:///./src/everlive/types/processors/AuthenticationProcessor.ts","webpack:///./src/everlive/types/processors/BusinessLogicQueryProcessor.ts","webpack:///./src/everlive/types/processors/CacheQueryProcessor.ts","webpack:///./src/everlive/types/processors/EventQueryProcessor.ts","webpack:///./src/everlive/types/processors/OfflineQueryProcessor.ts","webpack:///./src/everlive/types/processors/OnlineQueryProcessor.ts","webpack:///./~/buffer-shims/index.js","webpack:///./~/debug/browser.js","webpack:///./~/dot-component/index.js","webpack:///./~/isarray/index.js","webpack:///./~/mongo-eql/index.js","webpack:///./~/object-component/index.js","webpack:///./~/process-nextick-args/index.js","webpack:///./~/readable-stream/lib/_stream_transform.js","webpack:///./~/readable-stream/lib/_stream_writable.js","webpack:///./src/scripts/bs-expand-processor/ExpandError.js","webpack:///./~/async/dist/async.js","webpack:///./src/common/ProcessableObject.ts","webpack:///./src/common/dataQuery/DataQuery.ts","webpack:///./src/common/dataQuery/DataQueryBuilder.ts","webpack:///./src/common/errors.ts","webpack:///./src/everlive/docs/callbacks.ts","webpack:///./src/everlive/docs/resultTypes.ts","webpack:///./~/base64-js/lib/b64.js","webpack:///./~/ieee754/index.js","webpack:///./~/json-sql/lib/utils/templateChecks.js","webpack:///./~/jstimezonedetect/jstz.js","webpack:///./~/mingo/mingo.js","webpack:///./~/node-cryptojs-aes/cryptojs.js","webpack:///./~/readable-stream/lib/_stream_passthrough.js","webpack:///./~/readable-stream/lib/_stream_readable.js","webpack:///./~/string_decoder/index.js","webpack:///external \"http\"","webpack:///./src/common/CommonSetup.ts","webpack:///./src/common/Data.ts","webpack:///./src/common/Sdk.ts","webpack:///./src/common/dataQuery/Processor.ts","webpack:///./src/common/dataQuery/QueryProcessorIterator.ts","webpack:///./src/common/index.ts","webpack:///./src/common/mixins/mixins.ts","webpack:///./src/common/mixins/underscoreCompactObject.ts","webpack:///./src/common/mixins/underscoreDeepExtend.ts","webpack:///./src/common/mixins/underscoreIsObjectEmpty.ts","webpack:///./src/common/processors/ErrorProcessor.ts","webpack:///./src/index.everlive.ts","webpack:///./~/debug/debug.js","webpack:///./~/es6-promise/dist/es6-promise.js","webpack:///./~/json-sql/lib/builder.js","webpack:///./~/json-sql/lib/dialects/base/blocks.js","webpack:///./~/json-sql/lib/dialects/base/modifiers.js","webpack:///./~/json-sql/lib/dialects/base/operators/comparison.js","webpack:///./~/json-sql/lib/dialects/base/operators/fetching.js","webpack:///./~/json-sql/lib/dialects/base/operators/index.js","webpack:///./~/json-sql/lib/dialects/base/operators/logical.js","webpack:///./~/json-sql/lib/dialects/base/operators/state.js","webpack:///./~/json-sql/lib/dialects/base/templates.js","webpack:///./~/json-sql/lib/dialects/mssql/index.js","webpack:///./~/json-sql/lib/dialects/mysql/index.js","webpack:///./~/json-sql/lib/dialects/postgresql/blocks.js","webpack:///./~/json-sql/lib/dialects/postgresql/index.js","webpack:///./~/json-sql/lib/dialects/postgresql/operators/comparison.js","webpack:///./~/json-sql/lib/dialects/postgresql/operators/fetching.js","webpack:///./~/json-sql/lib/dialects/postgresql/operators/index.js","webpack:///./~/json-sql/lib/dialects/postgresql/templates.js","webpack:///./~/json-sql/lib/dialects/sqlite/blocks.js","webpack:///./~/json-sql/lib/dialects/sqlite/index.js","webpack:///./~/json-sql/lib/index.js","webpack:///./~/json-sql/lib/utils/valuesStore.js","webpack:///./~/json-stable-stringify/index.js","webpack:///./~/jsonify/index.js","webpack:///./~/jsonify/lib/parse.js","webpack:///./~/jsonify/lib/stringify.js","webpack:///./~/mongo-query/filter.js","webpack:///./~/mongo-query/index.js","webpack:///./~/mongo-query/mods.js","webpack:///./~/mongo-query/ops.js","webpack:///./~/ms/index.js","webpack:///./~/node-cryptojs-aes/lib/aes.js","webpack:///./~/node-cryptojs-aes/lib/cipher-core.js","webpack:///./~/node-cryptojs-aes/lib/enc-base64.js","webpack:///./~/node-cryptojs-aes/lib/evpkdf.js","webpack:///./~/node-cryptojs-aes/lib/jsonformatter.js","webpack:///./~/node-cryptojs-aes/lib/md5.js","webpack:///./~/readable-stream/duplex.js","webpack:///./~/readable-stream/lib/internal/streams/BufferList.js","webpack:///./~/readable-stream/passthrough.js","webpack:///./~/readable-stream/readable.js","webpack:///./~/readable-stream/transform.js","webpack:///./~/readable-stream/writable.js","webpack:///./~/reqwest/reqwest.js","webpack:///./~/type-component/index.js","webpack:///./~/util-deprecate/browser.js","webpack:///./~/util/support/isBufferBrowser.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///(webpack)/buildin/module.js","webpack:///./src/everlive ^\\.\\/.*$","webpack:///./src/scripts/bs-aggregation-translator/index.js","webpack:///./src/scripts/bs-expand-processor/ExecutionTree.js","webpack:///./src/scripts/bs-expand-processor/Processor.js","webpack:///./src/scripts/bs-expand-processor/RelationNode.js","webpack:///./src/scripts/bs-expand-processor/RelationTreeBuilder.js","webpack:///external \"application-settings\"","webpack:///external \"file-system\"","webpack:///external \"https\"","webpack:///external \"local-settings\"","webpack:///external \"nativescript-push-notifications\"","webpack:///external \"nativescript-sqlite\"","webpack:///external \"node-localstorage\"","webpack:///external \"platform\"","webpack:///external \"url\"","webpack:///external \"zlib\"","webpack:///vertx (ignored)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA,2FAA2F,MAAM,wCAAwC,EAAE,YAAY,EAAE,oDAAoD,MAAM,+BAA+B,EAAE,YAAY,EAAE,oDAAoD,MAAM,yBAAyB,EAAE,YAAY,EAAE,oDAAoD,MAAM,kCAAkC,EAAE,YAAY,EAAE,oDAAoD,MAAM,mDAAmD,EAAE,YAAY,EAAE,oDAAoD,MAAM,uCAAuC,EAAE,YAAY,EAAE,oDAAoD,MAAM,qCAAqC,EAAE,YAAY,EAAE,oDAAoD,MAAM,4BAA4B,EAAE,YAAY,EAAE,oDAAoD,MAAM,uBAAuB,EAAE,YAAY,EAAE,oDAAoD,MAAM,wBAAwB,EAAE,YAAY,EAAE;AACvlC;AACA;AACA;AACA,gGAAgG,MAAM,wCAAwC,EAAE,YAAY,EAAE,oDAAoD,MAAM,+BAA+B,EAAE,YAAY,EAAE,oDAAoD,MAAM,yBAAyB,EAAE,YAAY,EAAE,oDAAoD,MAAM,kCAAkC,EAAE,YAAY,EAAE,oDAAoD,MAAM,mDAAmD,EAAE,YAAY,EAAE,oDAAoD,MAAM,uCAAuC,EAAE,YAAY,EAAE,oDAAoD,MAAM,qCAAqC,EAAE,YAAY,EAAE,oDAAoD,MAAM,4BAA4B,EAAE,YAAY,EAAE,oDAAoD,MAAM,uBAAuB,EAAE,YAAY,EAAE,oDAAoD,MAAM,wBAAwB,EAAE,YAAY,EAAE;AAC5lC;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC,YAAY;AAClD;AACA;AACA,MAAK;AACL;AACA,wCAAuC,YAAY;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAoD;AACpD,IAAG;;AAEH;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,2CAA0C;AAC1C,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAiE,YAAY;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA,sBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kDAAiD,YAAY;AAC7D;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,WAAU,YAAY;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAqB,cAAc;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO,eAAe;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;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;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAqB,eAAe;AACpC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,0BAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,6CAA4C,mBAAmB;AAC/D;AACA;AACA,0CAAyC,YAAY;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;AACf,eAAc;AACd,eAAc;AACd,iBAAgB;AAChB,iBAAgB;AAChB,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP,sBAAqB;AACrB;;AAEA;AACA;AACA,MAAK;AACL,kBAAiB;;AAEjB;AACA,mDAAkD,EAAE,iBAAiB;;AAErE;AACA,yBAAwB,8BAA8B;AACtD,4BAA2B;;AAE3B;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mDAAkD,iBAAiB;;AAEnE;AACA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CAAC;KAC1C,CAAC;KAED,uBAAO,GAAP,UAAQ,EAAE,EAAE,IAAI;SACZ,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,uBAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;SAC/C,MAAM,CAAC,IAAI,CAAC;KAChB,CAAC;KACL,YAAC;AAAD,EAAC,CAhI0B,aAAW,GAgIrC;AAhIY,cAAK,QAgIjB;;;;;;;ACxID;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;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,wBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4BAA2B;AAC3B;AACA;AACA;AACA,6BAA4B,UAAU;;;;;;;ACnLtC;;IAEG;;AAEH,YAAY,kBAAkB;KAC1B,2DAAQ;KACR,+DAAM;KACN,+DAAM;KACN,+DAAM;KACN,uEAAU;KACV,mEAAQ;KACR,6DAAK;KACL,qEAAS;KACT,+DAAM;KACN,mEAAQ;KACR,wEAAU;KACV,sEAAS;KACT,wEAAU;KACV,wFAAkB;KAClB,8FAAqB;KACrB,4FAAoB;KACpB,gGAAsB;KACtB,sFAAiB;KACjB,kFAAe;KACf,wFAAkB;KAClB,kGAAuB;KACvB,sEAAS;KACT,0FAAmB;KACnB,8FAAqB;AACzB,EAAC,EAzBW,0BAAkB,KAAlB,0BAAkB,QAyB7B;AAzBD,KAAY,kBAAkB,GAAlB,0BAyBX;AAED;KAAA;KACA,CAAC;KAAD,gBAAC;AAAD,EAAC;AADY,kBAAS,YACrB;;;;;;;AChCD;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,iCAAgC,QAAQ;AACxC;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,8BAA6B,IAAI;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAU,oBAAoB;AAC9B;AACA;;AAEA;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A;AACA;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA,yBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,mBAAkB,MAAM;AACxB,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA,oBAAmB,MAAM;AACzB,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gCAA+B,kBAAkB;AACjD;AACA;AACA;AACA,cAAa;AACb;AACA,gCAA+B,kBAAkB;AACjD;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,YAAY;AACvC;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B,cAAc;AACzC;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B,kBAAkB;AAC7C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B,cAAc;AACzC;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B,qBAAqB;AAChD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA,oBAAmB,QAAQ;AAC3B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qCAAoC,sBAAsB;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA,MAAK;;AAEL;AACA;AACA;AACA,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,oBAA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ACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,SAAS;AAC5B;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,gBAAe,SAAS;AACxB;;AAEA;AACA;AACA,gBAAe,SAAS;AACxB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAG;AACH,qBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AA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C,KAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAanC,GAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;KAC/B,eAAO,GAAG,mBAAO,CAAC,GAAS,CAAC,CAAC;AACjC,EAAC;AAAC,KAAI,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;KACxB,eAAO,GAAG,mBAAO,CAAC,EAAwB,CAAC,CAAC;AAChD,EAAC;AAAC,KAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;KAClB,eAAO,GAAG,mBAAO,CAAC,EAAkB,CAAC,CAAC;AAC1C,EAAC;;;;;;;ACtBD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA,iBAAgB,oCAAoC;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,6BAA6B;AAChD;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,oBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAqB,QAAQ;AAC7B;AACA;AACA,IAAG;AACH;AACA,gBAAe,SAAS;AACxB;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mBAAkB;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAmB,SAAS;AAC5B;AACA;AACA,IAAG;AACH;AACA;AACA,oBAAmB,SAAS;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,wCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;;;;;;;AC3gDA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;;;;;;AC1GA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAqB,aAAa;;AAElC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,2BAA0B,KAAK,GAAG,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH,GAAE;AACF;AACA,sDAAqD,SAAS;AAC9D;AACA,uDAAsD;AACtD,wBAAuB,YAAY;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA,uCAAsC;AACtC;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAkB,IAAI,aAAa,KAAK,IAAI,MAAM;AAClD;AACA;AACA;;AAEA,2CAA0C;AAC1C;AACA;AACA,OAAM;AACN,MAAK;AACL;AACA;AACA;;AAEA;AACA,GAAE;AACF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAqC,2BAA2B;;AAEhE;AACA,KAAI;AACJ,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,GAAE;AACF;;;;;;;AC3VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,IAAG;AACH,wBAAuB,SAAS;AAChC;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;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,6CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;;AAGA;AACA;AACA,0DAAyD;AACzD;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA,YAAW;AACX;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,SAAS;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;ACzkBA,KAAY,CAAC,uBAAM,CAAY,CAAC;AAEhC,mCAAsB,EAAS,CAAC;AAChC,kCAAqB,EAAc,CAAC;AACpC,mCAAsB,EAAe,CAAC;AACtC,mCAAsB,EAAe,CAAC;AACtC,uCAA0B,CAAa,CAAC;AACxC,mCAAsB,CAAS,CAAC;AAChC,kCAAqB,EAAQ,CAAC;AAC9B,4CAA2B,EAAuB,CAAC;AA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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,cAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAwB,eAAe;AACvC;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,yBAAwB,QAAQ;AAChC;AACA,sBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,oBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,wDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAqB,QAAQ;AAC7B;AACA;AACA,IAAG;AACH;AACA,gBAAe,SAAS;AACxB;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAmB,SAAS;AAC5B;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;AC5vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;AC9HA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C,iBAAiB;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA,G;;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4B;;;;;;;;;;;;ACjBA,oCAA6B,EAAQ,CAAC;AACtC,wCAA8B,CAAY,CAAC;AAE3C;KAAA;SACI,aAAQ,GAAG,KAAK,CAAC;KAKrB,CAAC;KAHG,0BAAM,GAAN;SACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACzB,CAAC;KACL,gBAAC;AAAD,EAAC;AAED;;;;;;IAMG;AACH;KAA0C,wCAAY;KAAtD;SAA0C,8BAAY;KAkDtD,CAAC;KA/CG,mCAAI,GAAJ,UAAK,SAAiB;SAAE,cAAc;cAAd,WAAc,CAAd,sBAAc,CAAd,IAAc;aAAd,6BAAc;;SAClC,IAAI,CAAC,I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AAC,CAAC;SAChC,CAAC;SAED,MAAM,CAAC,+BAAc,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC;cACrD,IAAI,CAAC,UAAU,MAAM;aACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;SACzC,CAAC,EAAE,UAAU,GAAG;aACZ,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC/B,CAAC,CAAC,CAAC;KACX,CAAC;KACL,2BAAC;AAAD,EAAC;AAbD;uCAaC;;;;;;;ACfD;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1GA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;;;;;;;;;AC/KA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,oBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;AACA;AACA;;;;;;;ACjFA,kBAAiB;;AAEjB;AACA;AACA;;;;;;;;ACHA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,QAAQ;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;;ACnEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA,G;;;;;;ACnFA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK,EAAE;AACP,IAAG;AACH;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,E;;;;;;ACrLA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,aAAa;AAChB;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL,IAAG;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH,EAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kCAAiC;;AAEjC;;AAEA,4CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oDAAmD;AACnD;AACA;;AAEA;AACA;AACA,qCAAoC;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,qDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,E;;;;;;;ACtiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8B;;;;;;ACPA;AACA;AACA;AACA,gDAA+C;AAC/C,EAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,MAAM;AACjB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,EAAE;AACf;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;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;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,qBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA,8BAA6B,kBAAkB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA,+CAA8C,kBAAkB,EAAE;AAClE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,QAAQ;AACnB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA4B,yBAAyB;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B,4BAA4B;AACtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA,WAAU,gBAAgB;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAiB,8BAA8B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC;AACA,YAAW,KAAK;AAChB;AACA,YAAW,SAAS;AACpB;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAuB,6BAA6B;AACpD;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA,wBAAuB,6BAA6B;AACpD;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA,8BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA,YAAW,sBAAsB;AACjC;AACA,YAAW,KAAK;AAChB;AACA,YAAW,SAAS;AACpB;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,cAAa;AACb,UAAS;AACT;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,QAAQ;AACnB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA,YAAW,SAAS;AACpB;AACA,iEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA,4BAA2B,sDAAsD;AACjF,SAAQ;AACR,KAAI;AACJ;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,2BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;AACT,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA,cAAa;AACb;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB,cAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gDAA+C,EAAE;AACjD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,OAAO;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,sDAAqD,8BAA8B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAwC,8BAA8B;AACtE;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,4BAA2B,8CAA8C;AACzE;AACA,KAAI;AACJ;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA,4BAA2B,8CAA8C;AACzE,SAAQ;AACR;AACA,KAAI;AACJ;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;;AAEA;AACA;AACA,EAAC;AACD;AACA,EAAC;AACD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,+CAA8C;AAC9C,+CAA8C;;AAE9C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;;AAEA;AACA,uDAAsD;AACtD;;AAEA;AACA,sDAAqD;AACrD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,OAAO;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sDAAqD,+BAA+B;AACpF,cAAa,OAAO;AACpB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,OAAO;AACrB;AACA;AACA,eAAc,SAAS;AACvB;AACA;AACA;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,+BAA+B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,OAAO;AAClB,iDAAgD;AAChD;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,gBAAe,YAAY;AAC3B;AACA,KAAI;AACJ,gBAAe,YAAY;AAC3B;AACA,KAAI;AACJ,gBAAe,YAAY;AAC3B;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,EAAE;AACb,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA,cAAa,iCAAiC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA,YAAW,YAAY;AACvB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA;AACA;AACA,+BAA8B,wCAAwC;AACtE,aAAY;AACZ,+BAA8B,kDAAkD;AAChF;AACA,SAAQ;AACR,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb,UAAS;AACT;AACA,UAAS;AACT,MAAK;AACL,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAmD,mCAAmC;AACtF,aAAY,8BAA8B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,KAAK;AAChB;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,cAAa;AACb,UAAS;AACT;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAoB,sCAAsC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,sBAAqB;AACrB;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA,4BAA2B,YAAY;AACvC,SAAQ;AACR;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA,yCAAwC,gCAAgC;AACxE;AACA;AACA,mCAAkC,kCAAkC;AACpE;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yCAAwC,gCAAgC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,sBAAqB,kCAAkC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,oBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,SAAS;AACpB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,8CAA6C;AAC7C,SAAQ;AACR,oCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB,cAAa;AACb;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;;AAEA;AACA,0BAAyB,+BAA+B;AACxD;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA,0BAAyB,+BAA+B;AACxD;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,mCAAkC,yBAAyB;AAC3D;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA;AACA,UAAS;AACT;AACA;AACA,cAAa;AACb;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA2B,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAmC,qBAAqB;AACxD,UAAS;AACT,MAAK;AACL;AACA;AACA;;AAEA,wBAAuB,uBAAuB;AAC9C;AACA;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,iBAAgB;AAChB,KAAI;AACJ;AACA;;AAEA;AACA,4BAA2B,iCAAiC;AAC5D;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA,0BAAyB,6BAA6B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;;AAEA;AACA,8BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA,2BAA0B;AAC1B;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;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,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB;AACA;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,8CAA6C,OAAO;AACpD;AACA;AACA,cAAa;AACb;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA,EAAC;AACD;AACA,EAAC;AACD;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA,kBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA;AACA,aAAY;AACZ;AACA,KAAI;AACJ,sCAAqC;AACrC,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA,6BAA4B,kCAAkC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA,YAAW,iBAAiB;AAC5B;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa,OAAO;AACpB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,QAAQ;AACtB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,OAAO;AACrB;AACA;AACA,eAAc,SAAS;AACvB;AACA;AACA;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA;AACA,eAAc,SAAS;AACvB;AACA;AACA,eAAc,OAAO;AACrB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,QAAQ;AACtB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA,eAAc,SAAS;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB;AACA,KAAI;AACJ,YAAW,YAAY;AACvB;AACA,KAAI;AACJ;AACA;AACA,aAAY,YAAY,EAAE,YAAY,EAAE,YAAY;AACpD;AACA,KAAI;AACJ;AACA;AACA,eAAc,YAAY;AAC1B;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA,8BAA6B,+BAA+B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;AACA,cAAa,+BAA+B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,sCAAqC,OAAO;AAC5C;AACA;AACA;;AAEA;;AAEA;AACA,uBAAsB,gCAAgC;AACtD;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,YAAW,MAAM;AACjB,YAAW,EAAE;AACb,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB,cAAa;AACb;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA,UAAS;;AAET;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;AACL;;AAEA;AACA,+BAA8B,gCAAgC;AAC9D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA;AACA,KAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA,YAAW,MAAM;AACjB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA,2BAA0B,gCAAgC;AAC1D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,SAAS;AACtB;AACA;AACA,yCAAwC,SAAS;AACjD;AACA;AACA,YAAW,SAAS,GAAG,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,cAAc,UAAU,sBAAsB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA,iBAAgB,wBAAwB;AACxC;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,iDAAgD;AAChD;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;AACA,kCAAiC,+BAA+B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,YAAW,cAAc,UAAU,sBAAsB;AACzD;AACA,YAAW,SAAS;AACpB,cAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAgD;AAChD,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA;AACA,aAAY;AACZ;AACA,KAAI;AACJ,qCAAoC;AACpC,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;;AAEA;AACA,yBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,SAAS;AACpB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA,6BAA4B;AAC5B,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,6BAA4B,+BAA+B;AAC3D,UAAS;AACT,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb;AACA,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA,aAAY,aAAa;AACzB;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA,YAAW,SAAS,4BAA4B,6BAA6B;AAC7E;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,6BAA6B;AAChE;AACA;AACA;AACA;AACA;AACA,qBAAoB;AACpB;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA,YAAW,SAAS,iBAAiB,6BAA6B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;;AAEA;AACA,wBAAuB,+BAA+B;AACtD;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB;AACA,YAAW,SAAS,iBAAiB,6BAA6B;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,sBAAsB;AACjC,YAAW,EAAE;AACb;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ;AACA,KAAI;AACJ;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA;AACA;AACA,SAAQ;AACR,KAAI;AACJ,+BAA8B;AAC9B,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA,uBAAsB,2BAA2B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,yBAAwB;AACxB;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,kBAAkB,EAAE;AACvC;AACA;AACA;AACA;AACA,aAAY;AACZ,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA2B,gCAAgC;AAC3D;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA,YAAW,SAAS;AACpB;AACA,YAAW,SAAS;AACpB;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA,YAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kDAAiD,YAAY;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,EAAC,6BAAqD;;;;;;;AC3HtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAQ,WAAW;;AAEnB;AACA;AACA;AACA,SAAQ,WAAW;;AAEnB;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,SAAQ,WAAW;;AAEnB;AACA;AACA,SAAQ,UAAU;;AAElB;AACA;;;;;;;ACnFA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,KAAK;AAC1B,wBAAuB;AACvB;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,YAAW;;AAEX;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,sBAAqB,KAAK;AAC1B,wBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAe;AACf;AACA;;AAEA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAoB,YAAY;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA,EAAC;;;;;;;;ACrWD;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,iBAAgB;AAChB;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAA8B;AAC9B,IAAG;AACH;AACA,gBAAe;AACf;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf;AACA;;AAEA;AACA;AACA,kCAAiC,eAAe,IAAI;AACpD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAoC;AACpC;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,sBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,sBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oCAAmC,6BAA6B;AAChE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,gBAAe,OAAO;AACtB,iBAAgB,aAAa;AAC7B;AACA;AACA,kCAAiC,WAAW;AAC5C;AACA,MAAK;;AAEL;AACA;AACA,gBAAe,OAAO;AACtB,iBAAgB,aAAa;AAC7B;AACA;AACA,kCAAiC,YAAY;AAC7C;AACA,MAAK;;AAEL;AACA;AACA,gBAAe,OAAO;AACtB,iBAAgB,aAAa;AAC7B;AACA;AACA,kCAAiC,kBAAkB;AACnD;AACA,MAAK;;AAEL;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,wBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,kBAAkB;AACrC;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+E;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA,sBAAqB,uBAAuB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,sBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,0BAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA,0BAAyB,oBAAoB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,mBAAkB;AAClB;AACA;AACA;AACA,oDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C,SAAS;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,QAAO;;AAEP,MAAK;;AAEL;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,wBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;;;;;;AC7rED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uC;;;;;;ACTA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,G;;;;;;ACzBA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG,aAAa;AAChB;AACA;AACA,EAAC;AACD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA,4EAA2E,6EAA6E;AACxJ;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,uDAAsD;;AAEtD;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAsC;;AAEtC;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA2D;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gDAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAmB,SAAS;AAC5B;AACA,MAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA,6EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAmD;AACnD;AACA,oDAAmD,iEAAiE;AACpH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA;AACA;AACA,wCAAuC;AACvC,QAAO;AACP;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;AACA;AACA,wCAAuC;AACvC,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;;AAEA;AACA,iCAAgC,OAAO;AACvC;AACA;AACA;AACA,E;;;;;;;AC56BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAQ,OAAO;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AC5NA,kD;;;;;;;ACAA;KAAA;KAEA,CAAC;KAAD,kBAAC;AAAD,EAAC;AAFY,oBAAW,cAEvB;;;;;;;;;;;;;ACFD,+CAAkC,GAAqB,CAAC;AAGxD;KAAwC,8BAAiB;KACrD,oBACI,GAAQ,EACD,cAAsB,EACtB,QAAc;SAErB,kBAAM,GAAG,EAAE,cAAc,CAAC,CAAC;SAHpB,mBAAc,GAAd,cAAc,CAAQ;SACtB,aAAQ,GAAR,QAAQ,CAAM;KAGzB,CAAC;KACL,iBAAC;AAAD,EAAC,CARuC,qCAAiB,GAQxD;AARD;6BAQC;;;;;;;;;;;;;ACXD,uCAAiC,GAAuB,CAAC;AACzD,4CAA2B,GAA6B,CAAC;AACzD,8CAA+B,GAA8B,CAAC;AAE9D,kDAAmC,EAAwB,CAAC;AAK5D,KAAM,0BAA0B,GAAG,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACzE;KAAyB,uBAAoB;KAMzC,aACW,OAAY;SAEnB,iBAAO,CAAC;SAFD,YAAO,GAAP,OAAO,CAAK;SAGnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAErC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;SACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAEpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAEhD,IAAI,CAAC,sBAAsB,CAAC,IAAI,wBAAc,EAAE,CAAC,CAAC;KACtD,CAAC;KAED,2CAA6B,GAA7B,UAA8B,SAAS;SACnC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC1D,CAAC;KAED,wCAA0B,GAA1B,UAA2B,SAAS;SAChC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACvD,CAAC;KAED,4CAA8B,GAA9B,UAA+B,SAAS;SACpC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC3D,CAAC;KAED,oCAAsB,GAAtB,UAAuB,SAAS;SAC5B,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC5D,CAAC;KAED,8BAAgB,GAAhB,UAAoB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;SAC3C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACxE,CAAC;KAED,4BAAc,GAAd,UAAe,IAAS,EAAE,EAAE,EAAE,IAAI;SAAnB,oBAAS,GAAT,SAAS;SACpB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;KAChE,CAAC;KAED,kBAAI,GAAJ,UAAqB,IAAY;SAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAI,IAAI,CAAC,CAAC;KAClC,CAAC;KAES,oCAAsB,GAAhC;SACI,MAAM,CAAC,IAAI,8BAAkB,CAAC,IAAI,CAAC,CAAC;KACxC,CAAC;KAES,kCAAoB,GAA9B;SACI,MAAM,CAAC,IAAI,mCAAgB,EAAE,CAAC;KAClC,CAAC;KAES,uBAAS,GAAnB,UAAoB,OAAO;SACvB,MAAM,0BAA0B,CAAC;KACrC,CAAC;KAES,sBAAQ,GAAlB,UAAmC,IAAY;SAC3C,MAAM,0BAA0B,CAAC;KACrC,CAAC;KAES,gCAAkB,GAA5B;SACI,MAAM,0BAA0B,CAAC;KACrC,CAAC;KACL,UAAC;AAAD,EAAC,CAnEwB,2CAAoB,GAmE5C;AAnEY,YAAG,MAmEf;;;;;;;;AC7ED,oDAAqC,GAA0B,CAAC;AAChE,oCAAqB,GAAW,CAAC;AACjC,mCAAoB,EAAU,CAAC;AAG/B;KAMI,4BACW,GAAQ;SAAR,QAAG,GAAH,GAAG,CAAK;SAEf,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;SACxB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SACrB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;SACzB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC9B,CAAC;KAED,qCAAQ,GAAR,UAAS,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAM;SAAxC,iBA4CC;SA3CG,MAAM,CAAC,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;aAC/B,IAAM,QAAQ,GAAG,IAAI,+CAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;aAE/D,IAAI,eAAe,GAAG,IAAI,CAAC;aAC3B,IAAM,MAAM,GAAG,UAAC,SAAS,EAAE,KAAK;iBAC5B,YAAY,CAAC,eAAe,CAAC,CAAC;iBAC9B,eAAe,GAAG,UAAU,CAAC;qBACzB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,oCAAkC,SAAS,CAAC,WAAW,CAAC,IAAI,kBAAa,IAAI,CAAC,SAAS,CAAC,KAAK,CAAG,CAAC,CAAC,CAAC;iBACvI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,mEAAmE;iBAElF,IAAI,CAAC;qBACD,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;iBACpE,CAAE;iBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACT,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B,CAAC;aACL,CAAC,CAAC;aAEF,IAAM,OAAO,GAAG;iBACZ,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;iBACxC,YAAY,CAAC,eAAe,CAAC,CAAC;aAClC,CAAC,CAAC;aAEF,QAAQ;kBACH,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;kBAClB,IAAI,CAAC,KAAK,EAAE,eAAK;iBACd,OAAO,EAAE,CAAC;iBACV,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAC1B,CAAC,CAAC;kBACD,IAAI,CAAC,OAAO,EAAE,aAAG;iBACd,OAAO,EAAE,CAAC;iBACV,IAAM,cAAc,GAAG,KAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;iBAC5D,IAAM,KAAK,GAAG,cAAc,IAAI,GAAG,CAAC;iBACpC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB,CAAC,CAAC;kBACD,IAAI,CAAC,QAAQ,EAAE,gBAAM;iBAClB,OAAO,EAAE,CAAC;iBACV,MAAM,CAAC,MAAM,CAAC;qBACV,cAAM;qBACN,KAAK,EAAE,eAAM,CAAC,SAAS;kBAC1B,CAAC,CAAC;aACP,CAAC,CAAC;kBACD,KAAK,CAAC,KAAK,CAAC,CAAC;SACtB,CAAC,CAAC,CAAC;KACP,CAAC;KAED,wCAAW,GAAX,UAAY,KAAK,EAAE,IAAI;SACnB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC1D,CAAC;KAED,qCAAQ,GAAR,UAAS,KAAK,EAAE,IAAI,EAAE,KAAK;SACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC9D,CAAC;KAED,yCAAY,GAAZ,UAAa,KAAK,EAAE,IAAI,EAAE,KAAK;SAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAClE,CAAC;KAED,0CAAa,GAAb,UAAc,KAAK,EAAE,IAAI,EAAE,GAAG;SAC1B,IAAI,KAAK,GAAG,GAAG,CAAC;SAChB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAC;aAC1B,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SAC/C,CAAC,CAAC,CAAC;SAEH,MAAM,CAAC,KAAK,CAAC;KACjB,CAAC;KAED,oCAAO,GAAP,UAAW,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;SAAtC,iBAgBC;SAfG,MAAM,CAAC,aAAK,CAAC,YAAY,CAAI,UAAC,OAAO,EAAE,MAAM;aACzC,MAAM,CAAC,KAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;kBAC/B,IAAI,CAAC,eAAK;iBACP,MAAM,CAAC,KAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aAC7C,CAAC,CAAC;kBACD,IAAI,CAAC,eAAK;iBACP,MAAM,CAAC,KAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aACjD,CAAC,CAAC;kBACD,IAAI,CAAC,aAAG;iBACL,OAAO,CAAC,GAAG,CAAC,CAAC;aACjB,CAAC,CAAC;kBACD,KAAK,CAAC,aAAG;iBACN,MAAM,CAAC,GAAG,CAAC,CAAC;aAChB,CAAC,CAAC,CAAC;SACX,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KACvB,CAAC;KACL,yBAAC;AAAD,EAAC;AAnGY,2BAAkB,qBAmG9B;;;;;;;;;;;;;ACxGD,wCAAqB,CAAY,CAAC;AAElC,kDAAmC,EAAyB,CAAC;AAI7D;KAA4C,0CAAoB;KAW5D,gCAAY,UAAU,EAAE,KAAK;SACzB,iBAAO,CAAC;SAER,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;SAClB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;SAEnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;SAE7B,sBAAsB;SACtB,IAAI,CAAC,GAAG,GAAG,mBAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SAC3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;SAElC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC9B,CAAC;KAED,wCAAO,GAAP,UAAQ,KAA0B;SAA1B,qBAA0B,GAA1B,QAAQ,IAAI,CAAC,aAAa;SAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B,CAAC;KAED,sCAAK,GAAL,UAAM,KAAK;SACP,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC3B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;SACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;SAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B,CAAC;KAED,qCAAI,GAAJ,UAAK,KAAK;SACN,IAAI,CAAC,QAAQ,EAAE,CAAC;SAChB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;aAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC3B,CAAC;SAED,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;KACnD,CAAC;KAED,oCAAG,GAAH,UAAI,KAAK;SACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACnC,CAAC;KAED,uCAAM,GAAN,UAAO,MAAM;SACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KACvC,CAAC;KAED,sCAAK,GAAL,UAAM,KAAK;SACP,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACrC,CAAC;KACL,6BAAC;AAAD,EAAC,CA7D2C,2CAAoB,GA6D/D;AA7DY,+BAAsB,yBA6DlC;;;;;;;;ACnED,kCAAiC;AACjC,qBAAO,GAAiB,CAAC;;;;;;;;ACDzB,KAAY,CAAC,uBAAM,CAAY,CAAC;AAEhC,kDAAyB,GAAwB,CAAC;AAClD,qDAA4B,GAA2B,CAAC;AACxD,qDAAsB,GAA2B,CAAC;AAElD,EAAC,CAAC,KAAK,CAAC,EAAC,YAAY,EAAE,iCAAU,EAAC,CAAC,CAAC;AACpC,EAAC,CAAC,KAAK,CAAC,EAAC,eAAe,EAAE,uCAAa,EAAC,CAAC,CAAC;AAC1C,EAAC,CAAC,KAAK,CAAC,EAAC,eAAe,EAAE,iCAAO,EAAC,CAAC,CAAC;;;;;;;;ACRpC,KAAY,CAAC,uBAAM,CAAY,CAAC;AAEhC,kHAAiH;AACjH,wBAA8B,CAAC;KAC3B,IAAI,SAAS,GAAG,EAAE,CAAC;KACnB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,UAAS,CAAC,EAAE,CAAC;SACnB,EAAE,EAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;aAC/B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;SACpB,CAAC;KACL,CAAC,CAAC,CAAC;KAEH,MAAM,CAAC,SAAS,CAAC;AACrB,EAAC;AATe,sBAAa,gBAS5B;;;;;;;ACZD;;;;;;KAMI;;AAEJ,8IAA6I;AAE7I,KAAY,CAAC,uBAAM,CAAY,CAAC;AAEhC,qBAA2B,GAAG;KAC1B,IAAI,QAAQ,GAAG,cAAc,EACzB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;KAElC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,MAAM;SAC7C,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;aACtB,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1G,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7B,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/D,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxB,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC1D,CAAC;aACL,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACvD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACpD,MAAM,IAAI,KAAK,CAAC,+CAA+C,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;iBAClF,CAAC;iBAAC,IAAI,CAAC,CAAC;qBACJ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAO,CAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,IAAI;yBACtF,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBAC1B,CAAC,CAAC,CAAC;iBACP,CAAC;aACL,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBACzD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBACtD,MAAM,IAAI,KAAK,CAAC,iDAAiD,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;iBACpF,CAAC;iBAAC,IAAI,CAAC,CAAC;qBACJ,GAAG,CAAC,IAAI,CAAC,GAAS,CAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;iBACtE,CAAC;aACL,CAAC;aAAC,IAAI,CAAC,CAAC;iBACJ,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7B,CAAC;SACL,CAAC;KACL,CAAC,CAAC,CAAC;KACH,MAAM,CAAC,GAAG,CAAC;AACf,EAAC;AAnCe,mBAAU,aAmCzB;AAAA,EAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmDI;;;;;;;;ACpGJ,8DAA6D;AAC7D,KAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AAEvD,kBAAwB,GAAG;KAEvB,iCAAiC;KACjC,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;SAAC,MAAM,CAAC,IAAI,CAAC;KAE7B,2DAA2D;KAC3D,iCAAiC;KACjC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SAAI,MAAM,CAAC,KAAK,CAAC;KACpC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;SAAE,MAAM,CAAC,IAAI,CAAC;KAEnC,qDAAqD;KACrD,gCAAgC;KAChC,kDAAkD;KAClD,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;SAClB,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAAC,MAAM,CAAC,KAAK,CAAC;KACpD,CAAC;KAED,MAAM,CAAC,IAAI,CAAC;AAChB,EAAC;AAlBe,gBAAO,UAkBtB;;;;;;;;ACrBD,mCAAoB,EAAU,CAAC;AAE/B;KAAA;KASA,CAAC;KARG,qCAAY,GAAZ,UAAa,KAAK,EAAE,IAAI,EAAE,GAAG;SACzB,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;SAE7B,IAAI,+BAA+B,GAAG,KAAK,IAAI,KAAK,CAAC,gCAAgC,CAAC;SACtF,IAAI,OAAO,GAAG,aAAK,CAAC,cAAc,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;SAE/E,MAAM,CAAC,aAAK,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KAC5D,CAAC;KACL,qBAAC;AAAD,EAAC;AATD;iCASC;;;;;;;ACXD,6CAA4C;;AAE5C,yCAAyB,GAAa,CAAC;AACvC,uBAAQ,EAAE,CAAC;AAEX,qBAAO,GAAgB,CAAC,EAAC,uBAAuB;AAChD,mCAAyB,EAAkB,CAAC;AAK5C;mBAAe,gBAAQ,CAAC;AAExB,OAAM,CAAC,OAAO,GAAG,gBAAQ,CAAC;AAC1B,OAAM,CAAC,OAAO,CAAC,OAAO,GAAG,gBAAQ,CAAC;;;;;;;;ACblC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,aAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAmB,iBAAiB;AACpC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAiB,SAAS;AAC1B,6BAA4B;AAC5B,oDAAmD;AACnD;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA,0CAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA,0CAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;;;;;;aCvMA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC,qBAAqB;;AAEtB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kFAAiF;;AAEjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA0B,sBAAsB;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,SAAS;AAC1B;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;AACD;AACA,EAAC;AACD;AACA,EAAC;AACD;AACA,EAAC;AACD;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL,IAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA,WAAU,IAAI;AACd;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,wBAAwB;AACzC;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAiB,uCAAuC;AACxD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,QAAO;AACP;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;AACA,WAAU,MAAM;AAChB,WAAU,OAAO;AACjB;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA;AACA,MAAK;AACL,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAU,MAAM;AAChB;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA,sBAAqB,YAAY;AACjC;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;AACA,WAAU,IAAI;AACd;AACA,YAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAG;AACH;;AAEA;AACA,WAAU,SAAS;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA,YAAW;AACX,UAAS;AACT;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;;AAEA;AACA,aAAY,SAAS;AACrB,aAAY,SAAS;AACrB;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA,aAAY,SAAS;AACrB;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,EAAC;AACD;;;;;;;;ACtoCA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA8C;AAC9C,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,GAAE;AACF;AACA;AACA;;AAEA;AACA;;AAEA,8BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,qDAAoD,kBAAkB,MAAM;;AAE5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA,KAAI;AACJ;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;AACA,GAAE;AACF,WAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC/GA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iCAAgC,OAAO,GAAG,iCAAiC;AAC3E;AACA;AACA;AACA,uDAAsD;AACtD,yCAAwC,2BAA2B;AACnE,MAAK;AACL,wCAAuC;AACvC,2CAA0C,cAAc;AACxD;AACA,KAAI;;AAEJ,4BAA2B,YAAY;AACvC,IAAG;AACH;AACA;AACA;AACA,qCAAoC;;AAEpC;AACA,oDAAmD,WAAW;;AAE9D,wCAAuC,2BAA2B;AAClE,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAG;;AAEH;;AAEA;AACA;AACA;;AAEA;AACA,iDAAgD,kBAAkB;AAClE;;AAEA;AACA,GAAE;;AAEF;AACA,sCAAqC,mBAAmB;AACxD,GAAE;;AAEF;AACA;;AAEA,iCAAgC;;AAEhC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wCAAuC,yBAAyB;AAChE,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA,6CAA4C;;AAE5C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,wCAAuC,aAAa;AACpD;AACA;AACA;;AAEA,uCAAsC,mCAAmC;AACzE,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;;AAEA;AACA;AACA;;AAEA,4CAA2C,iBAAiB;;AAE5D;AACA,0CAAyC,mBAAmB;AAC5D;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA,mCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA,IAAG;AACH;AACA;AACA,6BAA4B,aAAa;AACzC;;AAEA;AACA,KAAI;AACJ;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;AACJ,IAAG;AACH;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAAyC,kBAAkB;AAC3D,MAAK;AACL,KAAI;AACJ,IAAG;AACH,GAAE;;AAEF;AACA;AACA;AACA,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA,GAAE;;AAEF;AACA,6CAA4C,wBAAwB;AACpE,GAAE;;AAEF;AACA,6CAA4C,yBAAyB;AACrE,GAAE;;AAEF;AACA;AACA,8CAA6C,iBAAiB;AAC9D,IAAG;AACH,GAAE;;AAEF;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAI;;AAEJ;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA;;AAEA;;AAEA;AACA,GAAE;;AAEF;AACA,8CAA6C,yBAAyB;;AAEtE;;AAEA;AACA,GAAE;AACF;;;;;;;ACzcA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;AACF;;;;;;;AC1BA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;;;;;ACpPA;;AAEA;;AAEA;AACA;AACA;AACA,uCAAsC,2BAA2B;AACjE;AACA,GAAE;;AAEF;AACA;AACA,uCAAsC,2BAA2B;AACjE;AACA,GAAE;;AAEF;AACA;AACA,uCAAsC,0BAA0B;AAChE;AACA,GAAE;;AAEF;AACA;AACA,uCAAsC,gCAAgC;AACtE;AACA,GAAE;;AAEF;AACA;AACA,8CAA6C,iBAAiB;AAC9D;AACA,GAAE;;AAEF;AACA;AACA,8CAA6C,iBAAiB;AAC9D;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL,KAAI;AACJ,+CAA8C,iBAAi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,MAAK;AACL;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA,GAAE;AACF;;;;;;;AC9DA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;;;;;;;AC3CA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA,GAAE;AACF;;;;;;;ACzDA;;AAEA;AACA;AACA;AACA,sBAAqB;AACrB,uCAAsC,2BAA2B;AACjE;AACA,GAAE;AACF;;;;;;;ACTA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACRA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAqB,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;AAC/E;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAE;;AAEF;AACA;AACA,4DAA2D,SAAS,KAAK,SAAS,EAAE,WAAW;;AAE/F;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;AChDA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,yCAAwC,UAAU;AAClD;;AAEA;AACA,GAAE;AACF;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,gCAA+B;;;;;;;AChB/B;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;ACPA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACvBA;;AAEA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA,2DAA0D,cAAc;;AAExE;AACA;AACA;AACA,6BAA4B;AAC5B,6BAA4B;AAC5B;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA2B,iBAAiB;AAC5C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,+BAA+B;AACpD;AACA,MAAK,GAAG,UAAU;AAClB;;AAEA;AACA,cAAa;AACb;;AAEA;AACA,+DAA8D;AAC9D;AACA;AACA;AACA;AACA;AACA;;;;;;;AClFA;AACA;;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;AACA;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;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA,sBAAqB;AACrB;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA;;AAEA;AACA;;AAEA,sBAAqB;AACrB,oBAAmB;AACnB;AACA,0BAAyB;AACzB,wBAAuB;AACvB,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA6B;AAC7B,4BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK,EAAE,WAAW;AAClB;;;;;;;AChRA;AACA;AACA;AACA;AACA,aAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,YAAY;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA2B,YAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uCAAsC;AACtC,eAAc,wDAAwD;AACtE,eAAc,0BAA0B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAoB,UAAU;AAC9B;;;;;;;;ACxJA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAY,eAAe;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2BAA0B,oBAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;;;;;;;AC5IA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qCAAoC,OAAO;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,yBAAyB;AAC9C;AACA;AACA,mBAAkB,qCAAqC;AACvD;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;;;;;;;;AChHA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,aAAY,SAAS;AACrB;;AAEA;AACA;AACA;AACA,0CAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,gBAAgB;AACvC;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,aAAY;AACZ;;AAEA;AACA,oCAAmC,OAAO;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB,aAAY,SAAS;AACrB;;AAEA;AACA;;AAEA,kBAAiB,gBAAgB;AACjC;;AAEA,oBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX,wBAAuB,aAAa;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,cAAc;AACzB,aAAY,QAAQ;AACpB;AACA;;AAEA;AACA;AACA;;;;;;;;ACrmBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AChGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,cAAc;AACzB,YAAW,OAAO;AAClB,aAAY,MAAM;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACpJA;;AAEA;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;AACA;AACA,wBAAuB,SAAS;AAChC;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA,kBAAiB;AACjB;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mCAAkC,mBAAmB;AACrD;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;;AAEA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gCAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;ACtND;;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,mBAAkB,OAAO;AACzB,mBAAkB,OAAO;AACzB,mBAAkB,OAAO;AACzB,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA,uBAAsB,UAAU;AAChC;AACA;;AAEA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,8EAA6E,kBAAkB;AAC/F;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA,8EAA6E,kBAAkB;AAC/F;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA,wGAAuG,kBAAkB;AACzH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAS;;AAET;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,MAAK;;AAEL;AACA;AACA;AACA,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,MAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,MAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,MAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,MAAM;AAC7B,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,MAAM;AAC7B,wBAAuB,OAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA,4BAA2B,eAAe;AAC1C;AACA;AACA;;AAEA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4BAA2B,mBAAmB;AAC9C;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA,uBAAsB,KAAK;AAC3B,uBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA,MAAK;;AAEL;AACA;AACA;AACA,mBAAkB,UAAU;AAC5B,mBAAkB,UAAU;AAC5B,mBAAkB,UAAU;AAC5B,mBAAkB,UAAU;AAC5B,mBAAkB,OAAO;AACzB,mBAAkB,KAAK;AACvB,mBAAkB,QAAQ;AAC1B,mBAAkB,OAAO;AACzB,mBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,aAAa;AAChC;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yCAAwC,qCAAqC;AAC7E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB,UAAU;AAChC;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,iBAAiB;AACpC,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iHAAgH,SAAS;AACzH,iHAAgH,0CAA0C;AAC1J;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,oBAAoB;AACvC,oBAAmB,UAAU;AAC7B,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,sHAAqH,0CAA0C;AAC/J,mHAAkH,0CAA0C;AAC5J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA,oBAAmB,oBAAoB;AACvC,oBAAmB,UAAU;AAC7B;AACA,qBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B,oBAAmB,iBAAiB;AACpC;AACA,qBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAqC,4BAA4B;;AAEjE;AACA;AACA;;AAEA;AACA,yCAAwC,+BAA+B;AACvE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB,IAAI;AAC1B;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,iBAAiB;AACpC,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,yHAAwH,kCAAkC;AAC1J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B,oBAAmB,oBAAoB;AACvC,oBAAmB,OAAO;AAC1B,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,8HAA6H,kCAAkC;AAC/J,2HAA0H,kCAAkC;AAC5J;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAK;AACL,EAAC;;;;;;;ACh2BD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,UAAU;AAC7B;AACA,qBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,4BAA2B,cAAc;AACzC;AACA;AACA;;AAEA;;AAEA,gCAA+B,sCAAsC;AACrE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;;AAET;AACA;AACA,EAAC;;;;;;;AC9GD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB,OAAO;AAC7B,uBAAsB,OAAO;AAC7B,uBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA,uDAAsD,aAAa;AACnE,uDAAsD,+BAA+B;AACrF;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA,oBAAmB,iBAAiB;AACpC,oBAAmB,iBAAiB;AACpC;AACA,qBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAA+B,gBAAgB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC,gBAAe,iBAAiB;AAChC,gBAAe,OAAO;AACtB;AACA,iBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,uDAAsD,aAAa;AACnE,uDAAsD,+BAA+B;AACrF;AACA;AACA;AACA;AACA,EAAC;;;;;;;ACvHD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uC;;;;;;AC7CA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAuB,QAAQ;AAC/B;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,4BAA2B,QAAQ;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;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;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4BAA2B,OAAO;AAClC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC;AACA,iBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe,iBAAiB;AAChC,gBAAe,iBAAiB;AAChC;AACA,iBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;AC/PD;;;;;;;ACAA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAe;AACf,+CAA8C;AAC9C;AACA;AACA;;AAEA;AACA,gBAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAsD;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;;;;;AC/DA;;;;;;;ACAA;AACA;AACA,oCAAkC;AAClC,IAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;ACfA;;;;;;;ACAA;;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAc,mCAAmC;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;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;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,oBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,iBAAiB;AACtC;AACA,wBAAuB,eAAe;AACtC;AACA;;AAEA,gBAAe,sBAAsB;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,OAAM,uBAAuB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;AACA;;AAEA,SAAQ,+BAA+B;AACvC;AACA;AACA;AACA,iBAAgB,yBAAyB;AACzC,MAAK;AACL;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;AACA,kBAAiB,mBAAmB;AACpC,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAiB,uBAAuB;AACxC;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAC;;;;;;;;ACpnBD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAW,MAAM;AACjB,aAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;AC5BA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA,E;;;;;;ACLA;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAiC,uDAAuD;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnNA;;AAEA;;AAEA;AACA;;AAEA;AACA,mBAAkB;AAClB,MAAK;AACL,mBAAkB;AAClB,MAAK;AACL,mBAAkB;AAClB,MAAK;AACL,mBAAkB;AAClB,MAAK;AACL,mBAAkB;AAClB,MAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,4EAA2E,wBAAwB,aAAa,OAAO,wBAAwB;AAC/I;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,gBAAe;AACf,kBAAiB;;AAEjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAY;AACZ;AACA;AACA;AACA,qBAAoB;;AAEpB;AACA;AACA;AACA;;AAEA;AACA,4BAA2B,2BAA2B;AACtD;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;;AAEA;AACA,qBAAoB;AACpB;AACA,eAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gCAA+B,eAAe;;AAE9C;AACA,wBAAuB,kCAAkC;AACzD;;AAEA,gCAA+B,eAAe;;AAE9C,kCAAiC,mBAAmB;;AAEpD;AACA;;AAEA,wC;;;;;;ACvHA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAkE;AAClE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA,MAAK;AACL,+EAA8E;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB,oCAAoC;AACvD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0DAAyD;AACzD,MAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAgB;AAChB,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB,iCAAiC;AACxD;AACA;AACA,MAAK;AACL,wFAAuF;AACvF;AACA;AACA,4BAA2B,iCAAiC;AAC5D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAuC,qCAAqC;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AC1SA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sFAAqF;AACrF;AACA,mGAAkG;AAClG;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,4BAA2B,oCAAoC;AAC/D;AACA;AACA;AACA;;AAEA;AACA,4BAA2B,mCAAmC;AAC9D;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,wBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL,qBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAQ;AACR;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA,4CAA2C,gCAAgC;AAC3E;AACA;AACA;AACA;AACA;AACA,0BAAyB;AACzB;AACA,uBAAsB,6CAA6C;AACnE;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,GAAE;AACF;AACA,kBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,wBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;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,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,qBAAoB,oCAAoC;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAI;AACJ,IAAG;AACH;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA,qBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAgB,mCAAmC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAE;AACF;AACA;AACA,6FAA4F;AAC5F;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAE;AACF;AACA;AACA;AACA,mBAAkB,QAAQ,sBAAsB;AAChD,KAAI;AACJ,mBAAkB;AAClB;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,WAAU;AACV,GAAE;AACF;AACA,GAAE;AACF;AACA,GAAE;AACF;AACA;AACA;;AAEA;;AAEA;;;;;;;ACzeA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA2C;AAC3C,iCAAgC;;AAEhC;;AAEA;AACA,kFAAiF;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACnHA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAI,cAAc,KAAK,UAAU;AACjC,KAAI,yBAAyB,KAAK,UAAU;AAC5C;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAiD;AACjD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;;AAEA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAS;AACT,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,sBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzYA,6DAA4D,iEAAiE,6BAA6B;AAC1J,kD;;;;;;ACDA,6DAA4D,wDAAwD,6BAA6B;AACjJ,kD;;;;;;ACDA,6DAA4D,kDAAkD,6BAA6B;AAC3I,kD;;;;;;ACDA,6DAA4D,2DAA2D,6BAA6B;AACpJ,kD;;;;;;ACDA,6DAA4D,4EAA4E,6BAA6B;AACrK,kD;;;;;;ACDA,6DAA4D,gEAAgE,6BAA6B;AACzJ,kD;;;;;;ACDA,6DAA4D,8DAA8D,6BAA6B;AACvJ,kD;;;;;;ACDA,6DAA4D,qDAAqD,6BAA6B;AAC9I,kD;;;;;;ACDA,6DAA4D,gDAAgD,6BAA6B;AACzI,kD;;;;;;ACDA,6DAA4D,iDAAiD,6BAA6B;AAC1I,kD;;;;;;ACDA,gB","file":"everlive.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"http\"), (function webpackLoadOptionalExternalModule() { try { return require(\"application-settings\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"file-system\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"https\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"local-settings\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"nativescript-push-notifications\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"nativescript-sqlite\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"node-localstorage\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"platform\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"url\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"zlib\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"http\", \"application-settings\", \"file-system\", \"https\", \"local-settings\", \"nativescript-push-notifications\", \"nativescript-sqlite\", \"node-localstorage\", \"platform\", \"url\", \"zlib\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Everlive\"] = factory(require(\"http\"), (function webpackLoadOptionalExternalModule() { try { return require(\"application-settings\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"file-system\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"https\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"local-settings\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"nativescript-push-notifications\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"nativescript-sqlite\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"node-localstorage\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"platform\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"url\"); } catch(e) {} }()), (function webpackLoadOptionalExternalModule() { try { return require(\"zlib\"); } catch(e) {} }()));\n\telse\n\t\troot[\"Everlive\"] = factory(root[\"http\"], root[\"application-settings\"], root[\"file-system\"], root[\"https\"], root[\"local-settings\"], root[\"nativescript-push-notifications\"], root[\"nativescript-sqlite\"], root[\"node-localstorage\"], root[\"platform\"], root[\"url\"], root[\"zlib\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_145__, __WEBPACK_EXTERNAL_MODULE_214__, __WEBPACK_EXTERNAL_MODULE_215__, __WEBPACK_EXTERNAL_MODULE_216__, __WEBPACK_EXTERNAL_MODULE_217__, __WEBPACK_EXTERNAL_MODULE_218__, __WEBPACK_EXTERNAL_MODULE_219__, __WEBPACK_EXTERNAL_MODULE_220__, __WEBPACK_EXTERNAL_MODULE_221__, __WEBPACK_EXTERNAL_MODULE_222__, __WEBPACK_EXTERNAL_MODULE_223__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \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\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap eef5cd8cf39c79506977\n **/","//     Underscore.js 1.8.2\n//     http://underscorejs.org\n//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` in the browser, or `exports` on the server.\n  var root = this;\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var\n    push             = ArrayProto.push,\n    slice            = ArrayProto.slice,\n    toString         = ObjProto.toString,\n    hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var\n    nativeIsArray      = Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = FuncProto.bind,\n    nativeCreate       = Object.create;\n\n  // Naked function reference for surrogate-prototype-swapping.\n  var Ctor = function(){};\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) {\n    if (obj instanceof _) return obj;\n    if (!(this instanceof _)) return new _(obj);\n    this._wrapped = obj;\n  };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for the old `require()` API. If we're in\n  // the browser, add `_` as a global object.\n  if (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root._ = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.8.2';\n\n  // Internal function that returns an efficient (for current engines) version\n  // of the passed-in callback, to be repeatedly applied in other Underscore\n  // functions.\n  var optimizeCb = function(func, context, argCount) {\n    if (context === void 0) return func;\n    switch (argCount == null ? 3 : argCount) {\n      case 1: return function(value) {\n        return func.call(context, value);\n      };\n      case 2: return function(value, other) {\n        return func.call(context, value, other);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(context, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(context, accumulator, value, index, collection);\n      };\n    }\n    return function() {\n      return func.apply(context, arguments);\n    };\n  };\n\n  // A mostly-internal function to generate callbacks that can be applied\n  // to each element in a collection, returning the desired result — either\n  // identity, an arbitrary callback, a property matcher, or a property accessor.\n  var cb = function(value, context, argCount) {\n    if (value == null) return _.identity;\n    if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n    if (_.isObject(value)) return _.matcher(value);\n    return _.property(value);\n  };\n  _.iteratee = function(value, context) {\n    return cb(value, context, Infinity);\n  };\n\n  // An internal function for creating assigner functions.\n  var createAssigner = function(keysFunc, undefinedOnly) {\n    return function(obj) {\n      var length = arguments.length;\n      if (length < 2 || obj == null) return obj;\n      for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n            keys = keysFunc(source),\n            l = keys.length;\n        for (var i = 0; i < l; i++) {\n          var key = keys[i];\n          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n        }\n      }\n      return obj;\n    };\n  };\n\n  // An internal function for creating a new object that inherits from another.\n  var baseCreate = function(prototype) {\n    if (!_.isObject(prototype)) return {};\n    if (nativeCreate) return nativeCreate(prototype);\n    Ctor.prototype = prototype;\n    var result = new Ctor;\n    Ctor.prototype = null;\n    return result;\n  };\n\n  // Helper for collection methods to determine whether a collection\n  // should be iterated as an array or as an object\n  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n  var isArrayLike = function(collection) {\n    var length = collection && collection.length;\n    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n  };\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles raw objects in addition to array-likes. Treats all\n  // sparse array-likes as if they were dense.\n  _.each = _.forEach = function(obj, iteratee, context) {\n    iteratee = optimizeCb(iteratee, context);\n    var i, length;\n    if (isArrayLike(obj)) {\n      for (i = 0, length = obj.length; i < length; i++) {\n        iteratee(obj[i], i, obj);\n      }\n    } else {\n      var keys = _.keys(obj);\n      for (i = 0, length = keys.length; i < length; i++) {\n        iteratee(obj[keys[i]], keys[i], obj);\n      }\n    }\n    return obj;\n  };\n\n  // Return the results of applying the iteratee to each element.\n  _.map = _.collect = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length,\n        results = Array(length);\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      results[index] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  };\n\n  // Create a reducing function iterating left or right.\n  function createReduce(dir) {\n    // Optimized iterator function as using arguments.length\n    // in the main function will deoptimize the, see #1991.\n    function iterator(obj, iteratee, memo, keys, index, length) {\n      for (; index >= 0 && index < length; index += dir) {\n        var currentKey = keys ? keys[index] : index;\n        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n      }\n      return memo;\n    }\n\n    return function(obj, iteratee, memo, context) {\n      iteratee = optimizeCb(iteratee, context, 4);\n      var keys = !isArrayLike(obj) && _.keys(obj),\n          length = (keys || obj).length,\n          index = dir > 0 ? 0 : length - 1;\n      // Determine the initial value if none is provided.\n      if (arguments.length < 3) {\n        memo = obj[keys ? keys[index] : index];\n        index += dir;\n      }\n      return iterator(obj, iteratee, memo, keys, index, length);\n    };\n  }\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`.\n  _.reduce = _.foldl = _.inject = createReduce(1);\n\n  // The right-associative version of reduce, also known as `foldr`.\n  _.reduceRight = _.foldr = createReduce(-1);\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, predicate, context) {\n    var key;\n    if (isArrayLike(obj)) {\n      key = _.findIndex(obj, predicate, context);\n    } else {\n      key = _.findKey(obj, predicate, context);\n    }\n    if (key !== void 0 && key !== -1) return obj[key];\n  };\n\n  // Return all the elements that pass a truth test.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, predicate, context) {\n    var results = [];\n    predicate = cb(predicate, context);\n    _.each(obj, function(value, index, list) {\n      if (predicate(value, index, list)) results.push(value);\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, predicate, context) {\n    return _.filter(obj, _.negate(cb(predicate)), context);\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n    }\n    return true;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Aliased as `any`.\n  _.some = _.any = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (predicate(obj[currentKey], currentKey, obj)) return true;\n    }\n    return false;\n  };\n\n  // Determine if the array or object contains a given value (using `===`).\n  // Aliased as `includes` and `include`.\n  _.contains = _.includes = _.include = function(obj, target, fromIndex) {\n    if (!isArrayLike(obj)) obj = _.values(obj);\n    return _.indexOf(obj, target, typeof fromIndex == 'number' && fromIndex) >= 0;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n    var isFunc = _.isFunction(method);\n    return _.map(obj, function(value) {\n      var func = isFunc ? method : value[method];\n      return func == null ? func : func.apply(value, args);\n    });\n  };\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, _.property(key));\n  };\n\n  // Convenience version of a common use case of `filter`: selecting only objects\n  // containing specific `key:value` pairs.\n  _.where = function(obj, attrs) {\n    return _.filter(obj, _.matcher(attrs));\n  };\n\n  // Convenience version of a common use case of `find`: getting the first object\n  // containing specific `key:value` pairs.\n  _.findWhere = function(obj, attrs) {\n    return _.find(obj, _.matcher(attrs));\n  };\n\n  // Return the maximum element (or element-based computation).\n  _.max = function(obj, iteratee, context) {\n    var result = -Infinity, lastComputed = -Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value > result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iteratee, context) {\n    var result = Infinity, lastComputed = Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value < result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed < lastComputed || computed === Infinity && result === Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Shuffle a collection, using the modern version of the\n  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n  _.shuffle = function(obj) {\n    var set = isArrayLike(obj) ? obj : _.values(obj);\n    var length = set.length;\n    var shuffled = Array(length);\n    for (var index = 0, rand; index < length; index++) {\n      rand = _.random(0, index);\n      if (rand !== index) shuffled[index] = shuffled[rand];\n      shuffled[rand] = set[index];\n    }\n    return shuffled;\n  };\n\n  // Sample **n** random values from a collection.\n  // If **n** is not specified, returns a single random element.\n  // The internal `guard` argument allows it to work with `map`.\n  _.sample = function(obj, n, guard) {\n    if (n == null || guard) {\n      if (!isArrayLike(obj)) obj = _.values(obj);\n      return obj[_.random(obj.length - 1)];\n    }\n    return _.shuffle(obj).slice(0, Math.max(0, n));\n  };\n\n  // Sort the object's values by a criterion produced by an iteratee.\n  _.sortBy = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    return _.pluck(_.map(obj, function(value, index, list) {\n      return {\n        value: value,\n        index: index,\n        criteria: iteratee(value, index, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria;\n      var b = right.criteria;\n      if (a !== b) {\n        if (a > b || a === void 0) return 1;\n        if (a < b || b === void 0) return -1;\n      }\n      return left.index - right.index;\n    }), 'value');\n  };\n\n  // An internal function used for aggregate \"group by\" operations.\n  var group = function(behavior) {\n    return function(obj, iteratee, context) {\n      var result = {};\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index) {\n        var key = iteratee(value, index, obj);\n        behavior(result, value, key);\n      });\n      return result;\n    };\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n  });\n\n  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n  // when you know that your index values will be unique.\n  _.indexBy = group(function(result, value, key) {\n    result[key] = value;\n  });\n\n  // Counts instances of an object that group by a certain criterion. Pass\n  // either a string attribute to count by, or a function that returns the\n  // criterion.\n  _.countBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key]++; else result[key] = 1;\n  });\n\n  // Safely create a real, live array from anything iterable.\n  _.toArray = function(obj) {\n    if (!obj) return [];\n    if (_.isArray(obj)) return slice.call(obj);\n    if (isArrayLike(obj)) return _.map(obj, _.identity);\n    return _.values(obj);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    if (obj == null) return 0;\n    return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n  };\n\n  // Split a collection into two arrays: one whose elements all satisfy the given\n  // predicate, and one whose elements all do not satisfy the predicate.\n  _.partition = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var pass = [], fail = [];\n    _.each(obj, function(value, key, obj) {\n      (predicate(value, key, obj) ? pass : fail).push(value);\n    });\n    return [pass, fail];\n  };\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head` and `take`. The **guard** check\n  // allows it to work with `_.map`.\n  _.first = _.head = _.take = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[0];\n    return _.initial(array, array.length - n);\n  };\n\n  // Returns everything but the last entry of the array. Especially useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array.\n  _.last = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[array.length - 1];\n    return _.rest(array, Math.max(0, array.length - n));\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n  // Especially useful on the arguments object. Passing an **n** will return\n  // the rest N values in the array.\n  _.rest = _.tail = _.drop = function(array, n, guard) {\n    return slice.call(array, n == null || guard ? 1 : n);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, _.identity);\n  };\n\n  // Internal implementation of a recursive `flatten` function.\n  var flatten = function(input, shallow, strict, startIndex) {\n    var output = [], idx = 0;\n    for (var i = startIndex || 0, length = input && input.length; i < length; i++) {\n      var value = input[i];\n      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n        //flatten current level of array or arguments object\n        if (!shallow) value = flatten(value, shallow, strict);\n        var j = 0, len = value.length;\n        output.length += len;\n        while (j < len) {\n          output[idx++] = value[j++];\n        }\n      } else if (!strict) {\n        output[idx++] = value;\n      }\n    }\n    return output;\n  };\n\n  // Flatten out an array, either recursively (by default), or just one level.\n  _.flatten = function(array, shallow) {\n    return flatten(array, shallow, false);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = function(array) {\n    return _.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n    if (array == null) return [];\n    if (!_.isBoolean(isSorted)) {\n      context = iteratee;\n      iteratee = isSorted;\n      isSorted = false;\n    }\n    if (iteratee != null) iteratee = cb(iteratee, context);\n    var result = [];\n    var seen = [];\n    for (var i = 0, length = array.length; i < length; i++) {\n      var value = array[i],\n          computed = iteratee ? iteratee(value, i, array) : value;\n      if (isSorted) {\n        if (!i || seen !== computed) result.push(value);\n        seen = computed;\n      } else if (iteratee) {\n        if (!_.contains(seen, computed)) {\n          seen.push(computed);\n          result.push(value);\n        }\n      } else if (!_.contains(result, value)) {\n        result.push(value);\n      }\n    }\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = function() {\n    return _.uniq(flatten(arguments, true, true));\n  };\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays.\n  _.intersection = function(array) {\n    if (array == null) return [];\n    var result = [];\n    var argsLength = arguments.length;\n    for (var i = 0, length = array.length; i < length; i++) {\n      var item = array[i];\n      if (_.contains(result, item)) continue;\n      for (var j = 1; j < argsLength; j++) {\n        if (!_.contains(arguments[j], item)) break;\n      }\n      if (j === argsLength) result.push(item);\n    }\n    return result;\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = function(array) {\n    var rest = flatten(arguments, true, true, 1);\n    return _.filter(array, function(value){\n      return !_.contains(rest, value);\n    });\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = function() {\n    return _.unzip(arguments);\n  };\n\n  // Complement of _.zip. Unzip accepts an array of arrays and groups\n  // each array's elements on shared indices\n  _.unzip = function(array) {\n    var length = array && _.max(array, 'length').length || 0;\n    var result = Array(length);\n\n    for (var index = 0; index < length; index++) {\n      result[index] = _.pluck(array, index);\n    }\n    return result;\n  };\n\n  // Converts lists into objects. Pass either a single array of `[key, value]`\n  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n  // the corresponding values.\n  _.object = function(list, values) {\n    var result = {};\n    for (var i = 0, length = list && list.length; i < length; i++) {\n      if (values) {\n        result[list[i]] = values[i];\n      } else {\n        result[list[i][0]] = list[i][1];\n      }\n    }\n    return result;\n  };\n\n  // Return the position of the first occurrence of an item in an array,\n  // or -1 if the item is not included in the array.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = function(array, item, isSorted) {\n    var i = 0, length = array && array.length;\n    if (typeof isSorted == 'number') {\n      i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;\n    } else if (isSorted && length) {\n      i = _.sortedIndex(array, item);\n      return array[i] === item ? i : -1;\n    }\n    if (item !== item) {\n      return _.findIndex(slice.call(array, i), _.isNaN);\n    }\n    for (; i < length; i++) if (array[i] === item) return i;\n    return -1;\n  };\n\n  _.lastIndexOf = function(array, item, from) {\n    var idx = array ? array.length : 0;\n    if (typeof from == 'number') {\n      idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1);\n    }\n    if (item !== item) {\n      return _.findLastIndex(slice.call(array, 0, idx), _.isNaN);\n    }\n    while (--idx >= 0) if (array[idx] === item) return idx;\n    return -1;\n  };\n\n  // Generator function to create the findIndex and findLastIndex functions\n  function createIndexFinder(dir) {\n    return function(array, predicate, context) {\n      predicate = cb(predicate, context);\n      var length = array != null && array.length;\n      var index = dir > 0 ? 0 : length - 1;\n      for (; index >= 0 && index < length; index += dir) {\n        if (predicate(array[index], index, array)) return index;\n      }\n      return -1;\n    };\n  }\n\n  // Returns the first index on an array-like that passes a predicate test\n  _.findIndex = createIndexFinder(1);\n\n  _.findLastIndex = createIndexFinder(-1);\n\n  // Use a comparator function to figure out the smallest index at which\n  // an object should be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iteratee, context) {\n    iteratee = cb(iteratee, context, 1);\n    var value = iteratee(obj);\n    var low = 0, high = array.length;\n    while (low < high) {\n      var mid = Math.floor((low + high) / 2);\n      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n    }\n    return low;\n  };\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (arguments.length <= 1) {\n      stop = start || 0;\n      start = 0;\n    }\n    step = step || 1;\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var range = Array(length);\n\n    for (var idx = 0; idx < length; idx++, start += step) {\n      range[idx] = start;\n    }\n\n    return range;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Determines whether to execute a function as a constructor\n  // or a normal function with the provided arguments\n  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n    var self = baseCreate(sourceFunc.prototype);\n    var result = sourceFunc.apply(self, args);\n    if (_.isObject(result)) return result;\n    return self;\n  };\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n  // available.\n  _.bind = function(func, context) {\n    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n    var args = slice.call(arguments, 2);\n    var bound = function() {\n      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n    };\n    return bound;\n  };\n\n  // Partially apply a function by creating a version that has had some of its\n  // arguments pre-filled, without changing its dynamic `this` context. _ acts\n  // as a placeholder, allowing any combination of arguments to be pre-filled.\n  _.partial = function(func) {\n    var boundArgs = slice.call(arguments, 1);\n    var bound = function() {\n      var position = 0, length = boundArgs.length;\n      var args = Array(length);\n      for (var i = 0; i < length; i++) {\n        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n      }\n      while (position < arguments.length) args.push(arguments[position++]);\n      return executeBound(func, bound, this, this, args);\n    };\n    return bound;\n  };\n\n  // Bind a number of an object's methods to that object. Remaining arguments\n  // are the method names to be bound. Useful for ensuring that all callbacks\n  // defined on an object belong to it.\n  _.bindAll = function(obj) {\n    var i, length = arguments.length, key;\n    if (length <= 1) throw new Error('bindAll must be passed function names');\n    for (i = 1; i < length; i++) {\n      key = arguments[i];\n      obj[key] = _.bind(obj[key], obj);\n    }\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memoize = function(key) {\n      var cache = memoize.cache;\n      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n      return cache[address];\n    };\n    memoize.cache = {};\n    return memoize;\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = function(func, wait) {\n    var args = slice.call(arguments, 2);\n    return setTimeout(function(){\n      return func.apply(null, args);\n    }, wait);\n  };\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = _.partial(_.delay, _, 1);\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time. Normally, the throttled function will run\n  // as much as it can, without ever going more than once per `wait` duration;\n  // but if you'd like to disable the execution on the leading edge, pass\n  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n  _.throttle = function(func, wait, options) {\n    var context, args, result;\n    var timeout = null;\n    var previous = 0;\n    if (!options) options = {};\n    var later = function() {\n      previous = options.leading === false ? 0 : _.now();\n      timeout = null;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    };\n    return function() {\n      var now = _.now();\n      if (!previous && options.leading === false) previous = now;\n      var remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0 || remaining > wait) {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        previous = now;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  _.debounce = function(func, wait, immediate) {\n    var timeout, args, context, timestamp, result;\n\n    var later = function() {\n      var last = _.now() - timestamp;\n\n      if (last < wait && last >= 0) {\n        timeout = setTimeout(later, wait - last);\n      } else {\n        timeout = null;\n        if (!immediate) {\n          result = func.apply(context, args);\n          if (!timeout) context = args = null;\n        }\n      }\n    };\n\n    return function() {\n      context = this;\n      args = arguments;\n      timestamp = _.now();\n      var callNow = immediate && !timeout;\n      if (!timeout) timeout = setTimeout(later, wait);\n      if (callNow) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n\n      return result;\n    };\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return _.partial(wrapper, func);\n  };\n\n  // Returns a negated version of the passed-in predicate.\n  _.negate = function(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var args = arguments;\n    var start = args.length - 1;\n    return function() {\n      var i = start;\n      var result = args[start].apply(this, arguments);\n      while (i--) result = args[i].call(this, result);\n      return result;\n    };\n  };\n\n  // Returns a function that will only be executed on and after the Nth call.\n  _.after = function(times, func) {\n    return function() {\n      if (--times < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  };\n\n  // Returns a function that will only be executed up to (but not including) the Nth call.\n  _.before = function(times, func) {\n    var memo;\n    return function() {\n      if (--times > 0) {\n        memo = func.apply(this, arguments);\n      }\n      if (times <= 1) func = null;\n      return memo;\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = _.partial(_.before, 2);\n\n  // Object Functions\n  // ----------------\n\n  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n  function collectNonEnumProps(obj, keys) {\n    var nonEnumIdx = nonEnumerableProps.length;\n    var constructor = obj.constructor;\n    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n    // Constructor is a special case.\n    var prop = 'constructor';\n    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n    while (nonEnumIdx--) {\n      prop = nonEnumerableProps[nonEnumIdx];\n      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n        keys.push(prop);\n      }\n    }\n  }\n\n  // Retrieve the names of an object's own properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`\n  _.keys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    if (nativeKeys) return nativeKeys(obj);\n    var keys = [];\n    for (var key in obj) if (_.has(obj, key)) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve all the property names of an object.\n  _.allKeys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    var keys = [];\n    for (var key in obj) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var values = Array(length);\n    for (var i = 0; i < length; i++) {\n      values[i] = obj[keys[i]];\n    }\n    return values;\n  };\n\n  // Returns the results of applying the iteratee to each element of the object\n  // In contrast to _.map it returns an object\n  _.mapObject = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys =  _.keys(obj),\n          length = keys.length,\n          results = {},\n          currentKey;\n      for (var index = 0; index < length; index++) {\n        currentKey = keys[index];\n        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n      }\n      return results;\n  };\n\n  // Convert an object into a list of `[key, value]` pairs.\n  _.pairs = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var pairs = Array(length);\n    for (var i = 0; i < length; i++) {\n      pairs[i] = [keys[i], obj[keys[i]]];\n    }\n    return pairs;\n  };\n\n  // Invert the keys and values of an object. The values must be serializable.\n  _.invert = function(obj) {\n    var result = {};\n    var keys = _.keys(obj);\n    for (var i = 0, length = keys.length; i < length; i++) {\n      result[obj[keys[i]]] = keys[i];\n    }\n    return result;\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = createAssigner(_.allKeys);\n\n  // Assigns a given object with all the own properties in the passed-in object(s)\n  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n  _.extendOwn = _.assign = createAssigner(_.keys);\n\n  // Returns the first key on an object that passes a predicate test\n  _.findKey = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = _.keys(obj), key;\n    for (var i = 0, length = keys.length; i < length; i++) {\n      key = keys[i];\n      if (predicate(obj[key], key, obj)) return key;\n    }\n  };\n\n  // Return a copy of the object only containing the whitelisted properties.\n  _.pick = function(object, oiteratee, context) {\n    var result = {}, obj = object, iteratee, keys;\n    if (obj == null) return result;\n    if (_.isFunction(oiteratee)) {\n      keys = _.allKeys(obj);\n      iteratee = optimizeCb(oiteratee, context);\n    } else {\n      keys = flatten(arguments, false, false, 1);\n      iteratee = function(value, key, obj) { return key in obj; };\n      obj = Object(obj);\n    }\n    for (var i = 0, length = keys.length; i < length; i++) {\n      var key = keys[i];\n      var value = obj[key];\n      if (iteratee(value, key, obj)) result[key] = value;\n    }\n    return result;\n  };\n\n   // Return a copy of the object without the blacklisted properties.\n  _.omit = function(obj, iteratee, context) {\n    if (_.isFunction(iteratee)) {\n      iteratee = _.negate(iteratee);\n    } else {\n      var keys = _.map(flatten(arguments, false, false, 1), String);\n      iteratee = function(value, key) {\n        return !_.contains(keys, key);\n      };\n    }\n    return _.pick(obj, iteratee, context);\n  };\n\n  // Fill in a given object with default properties.\n  _.defaults = createAssigner(_.allKeys, true);\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Returns whether an object has a given set of `key:value` pairs.\n  _.isMatch = function(object, attrs) {\n    var keys = _.keys(attrs), length = keys.length;\n    if (object == null) return !length;\n    var obj = Object(object);\n    for (var i = 0; i < length; i++) {\n      var key = keys[i];\n      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n    }\n    return true;\n  };\n\n\n  // Internal recursive comparison function for `isEqual`.\n  var eq = function(a, b, aStack, bStack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) return a !== 0 || 1 / a === 1 / b;\n    // A strict comparison is necessary because `null == undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n      case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return '' + a === '' + b;\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive.\n        // Object(NaN) is equivalent to NaN\n        if (+a !== +a) return +b !== +b;\n        // An `egal` comparison is performed for other numeric values.\n        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a === +b;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n                               _.isFunction(bCtor) && bCtor instanceof bCtor)\n                          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n    \n    // Initializing stack of traversed objects.\n    // It's done here since we only need them for objects and arrays comparison.\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) return bStack[length] === b;\n    }\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        if (!eq(a[length], b[length], aStack, bStack)) return false;\n      }\n    } else {\n      // Deep compare objects.\n      var keys = _.keys(a), key;\n      length = keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (_.keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = keys[length];\n        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n    return true;\n  };\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (obj == null) return true;\n    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n    return _.keys(obj).length === 0;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType === 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) === '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  };\n\n  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n    _['is' + name] = function(obj) {\n      return toString.call(obj) === '[object ' + name + ']';\n    };\n  });\n\n  // Define a fallback version of the method in browsers (ahem, IE < 9), where\n  // there isn't any inspectable \"Arguments\" type.\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return _.has(obj, 'callee');\n    };\n  }\n\n  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n  // IE 11 (#1621), and in Safari 8 (#1929).\n  if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n    _.isFunction = function(obj) {\n      return typeof obj == 'function' || false;\n    };\n  }\n\n  // Is a given object a finite number?\n  _.isFinite = function(obj) {\n    return isFinite(obj) && !isNaN(parseFloat(obj));\n  };\n\n  // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n  _.isNaN = function(obj) {\n    return _.isNumber(obj) && obj !== +obj;\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Shortcut function for checking if an object has a given property directly\n  // on itself (in other words, not on a prototype).\n  _.has = function(obj, key) {\n    return obj != null && hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iteratees.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Predicate-generating functions. Often useful outside of Underscore.\n  _.constant = function(value) {\n    return function() {\n      return value;\n    };\n  };\n\n  _.noop = function(){};\n\n  _.property = function(key) {\n    return function(obj) {\n      return obj == null ? void 0 : obj[key];\n    };\n  };\n\n  // Generates a function for a given object that returns a given property.\n  _.propertyOf = function(obj) {\n    return obj == null ? function(){} : function(key) {\n      return obj[key];\n    };\n  };\n\n  // Returns a predicate for checking whether an object has a given set of \n  // `key:value` pairs.\n  _.matcher = _.matches = function(attrs) {\n    attrs = _.extendOwn({}, attrs);\n    return function(obj) {\n      return _.isMatch(obj, attrs);\n    };\n  };\n\n  // Run a function **n** times.\n  _.times = function(n, iteratee, context) {\n    var accum = Array(Math.max(0, n));\n    iteratee = optimizeCb(iteratee, context, 1);\n    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n    return accum;\n  };\n\n  // Return a random integer between min and max (inclusive).\n  _.random = function(min, max) {\n    if (max == null) {\n      max = min;\n      min = 0;\n    }\n    return min + Math.floor(Math.random() * (max - min + 1));\n  };\n\n  // A (possibly faster) way to get the current timestamp as an integer.\n  _.now = Date.now || function() {\n    return new Date().getTime();\n  };\n\n   // List of HTML entities for escaping.\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  };\n  var unescapeMap = _.invert(escapeMap);\n\n  // Functions for escaping and unescaping strings to/from HTML interpolation.\n  var createEscaper = function(map) {\n    var escaper = function(match) {\n      return map[match];\n    };\n    // Regexes for identifying a key that needs to be escaped\n    var source = '(?:' + _.keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function(string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  };\n  _.escape = createEscaper(escapeMap);\n  _.unescape = createEscaper(unescapeMap);\n\n  // If the value of the named `property` is a function then invoke it with the\n  // `object` as context; otherwise, return it.\n  _.result = function(object, property, fallback) {\n    var value = object == null ? void 0 : object[property];\n    if (value === void 0) {\n      value = fallback;\n    }\n    return _.isFunction(value) ? value.call(object) : value;\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate : /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /(.)^/;\n\n  // Certain characters need to be escaped so that they can be put into a\n  // string literal.\n  var escapes = {\n    \"'\":      \"'\",\n    '\\\\':     '\\\\',\n    '\\r':     'r',\n    '\\n':     'n',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  var escapeChar = function(match) {\n    return '\\\\' + escapes[match];\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  // NB: `oldSettings` only exists for backwards compatibility.\n  _.template = function(text, settings, oldSettings) {\n    if (!settings && oldSettings) settings = oldSettings;\n    settings = _.defaults({}, settings, _.templateSettings);\n\n    // Combine delimiters into one regular expression via alternation.\n    var matcher = RegExp([\n      (settings.escape || noMatch).source,\n      (settings.interpolate || noMatch).source,\n      (settings.evaluate || noMatch).source\n    ].join('|') + '|$', 'g');\n\n    // Compile the template source, escaping string literals appropriately.\n    var index = 0;\n    var source = \"__p+='\";\n    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n      source += text.slice(index, offset).replace(escaper, escapeChar);\n      index = offset + match.length;\n\n      if (escape) {\n        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n      } else if (interpolate) {\n        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n      } else if (evaluate) {\n        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n      }\n\n      // Adobe VMs need the match returned to produce the correct offest.\n      return match;\n    });\n    source += \"';\\n\";\n\n    // If a variable is not specified, place data values in local scope.\n    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n      source + 'return __p;\\n';\n\n    try {\n      var render = new Function(settings.variable || 'obj', '_', source);\n    } catch (e) {\n      e.source = source;\n      throw e;\n    }\n\n    var template = function(data) {\n      return render.call(this, data, _);\n    };\n\n    // Provide the compiled source as a convenience for precompilation.\n    var argument = settings.variable || 'obj';\n    template.source = 'function(' + argument + '){\\n' + source + '}';\n\n    return template;\n  };\n\n  // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n  _.chain = function(obj) {\n    var instance = _(obj);\n    instance._chain = true;\n    return instance;\n  };\n\n  // OOP\n  // ---------------\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n\n  // Helper function to continue chaining intermediate results.\n  var result = function(instance, obj) {\n    return instance._chain ? _(obj).chain() : obj;\n  };\n\n  // Add your own custom functions to the Underscore object.\n  _.mixin = function(obj) {\n    _.each(_.functions(obj), function(name) {\n      var func = _[name] = obj[name];\n      _.prototype[name] = function() {\n        var args = [this._wrapped];\n        push.apply(args, arguments);\n        return result(this, func.apply(_, args));\n      };\n    });\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      var obj = this._wrapped;\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n      return result(this, obj);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  _.each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      return result(this, method.apply(this._wrapped, arguments));\n    };\n  });\n\n  // Extracts the result from a wrapped and chained object.\n  _.prototype.value = function() {\n    return this._wrapped;\n  };\n\n  // Provide unwrapping proxy for some methods used in engine operations\n  // such as arithmetic and JSON stringification.\n  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n  \n  _.prototype.toString = function() {\n    return '' + this._wrapped;\n  };\n\n  // AMD registration happens at the end for compatibility with AMD loaders\n  // that may not enforce next-turn semantics on modules. Even though general\n  // practice for AMD registration is to be anonymous, underscore registers\n  // as a named module because, like jQuery, it is a base library that is\n  // popular enough to be bundled in a third party lib, but not be part of\n  // an AMD load request. Those cases could generate an error when an\n  // anonymous define() is called outside of a loader request.\n  if (typeof define === 'function' && define.amd) {\n    define('underscore', [], function() {\n      return _;\n    });\n  }\n}.call(this));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/underscore/underscore.js\n ** module id = 1\n ** module chunks = 0\n **/","import { Constants as CommonConstants, DataQueryOperation } from '../common/Constants';\n\nexport { DataQueryOperation }\n\n/**\n * Constants used by the SDK* @typedef {Object} Everlive.Constants\n */\nexport class Constants extends CommonConstants {\n    static idField = 'Id';\n    static guidEmpty = '00000000-0000-0000-0000-000000000000';\n    static cloudFuncsEndpoint = 'Functions';\n    static sqlProceduresEndpoint = 'Invoke/SqlProcedures';\n    static everliveUrl = '//api.everlive.com/v1/';\n\n    static DataQueryOperation = DataQueryOperation;\n\n    /**\n     * A class used to represent the conflict resolution strategies.\n     * @property {string} ClientWins\n     * @property {string} ServerWins\n     * @property {string} Custom\n     * @typedef {string} Everlive.Constants.ConflictResolutionStrategy\n     */\n    static ConflictResolutionStrategy = {\n        ClientWins: 'clientWins',\n        ServerWins: 'serverWins',\n        Custom: 'custom'\n    };\n\n    static ConflictResolution = {\n        KeepServer: 'keepServer',\n        KeepClient: 'keepClient',\n        Custom: 'custom',\n        Skip: 'skip'\n    };\n    /**\n     * A class used to represent the available storage providers.\n     * @property {string} LocalStorage\n     * @property {string} FileSystem\n     * @property {string} Custom\n     * @typedef {string} Everlive.Constants.StorageProvider\n     */\n    static StorageProvider = {\n        LocalStorage: 'localStorage',\n        FileSystem: 'fileSystem',\n        SQLite: 'sqlite',\n        Custom: 'custom'\n    };\n\n    static DefaultStoragePath = 'el_store';\n\n    // the default location for storing files offline\n    static DefaultFilesStoragePath = 'el_file_store';\n\n    // the default location for storing offline to online location map\n    static DefaultFilesMetadataPath = 'el_file_mapping';\n\n    static EncryptionProvider = {\n        Default: 'default',\n        Custom: 'custom'\n    };\n\n    // The headers used by the Everlive services\n    static Headers = {\n        ContentType: 'content-type',\n\n        filter: 'x-everlive-filter',\n        select: 'x-everlive-fields',\n        sort: 'x-everlive-sort',\n        skip: 'x-everlive-skip',\n        take: 'x-everlive-take',\n        expand: 'x-everlive-expand',\n        singleField: 'x-everlive-single-field',\n        includeCount: 'x-everlive-include-count',\n        powerFields: 'x-everlive-power-fields',\n        debug: 'x-everlive-debug',\n        overrideSystemFields: 'x-everlive-override-system-fields',\n        sdk: 'x-everlive-sdk',\n        sync: 'x-everlive-sync',\n        aggregate: 'x-everlive-aggregate',\n        customParameters: 'x-everlive-custom-parameters'\n    };\n    //Constants for different platforms in Everlive\n    static Platform = {\n        WindowsPhone: 1,\n        Windows: 2,\n        Android: 3,\n        iOS: 4,\n        OSX: 5,\n        Blackberry: 6,\n        Nokia: 7,\n        Unknown: 100\n    };\n    static OperatorType = {\n        query: 1,\n\n        where: 100,\n        filter: 101,\n\n        and: 110,\n        or: 111,\n        not: 112,\n\n        equal: 120,\n        not_equal: 121,\n        lt: 122,\n        lte: 123,\n        gt: 124,\n        gte: 125,\n        isin: 126,\n        notin: 127,\n        all: 128,\n        size: 129,\n        regex: 130,\n        contains: 131,\n        startsWith: 132,\n        endsWith: 133,\n\n        nearShpere: 140,\n        withinBox: 141,\n        withinPolygon: 142,\n        withinShpere: 143,\n\n        select: 200,\n        exclude: 201,\n\n        order: 300,\n        order_desc: 301,\n\n        skip: 400,\n        take: 401,\n        expand: 402\n    };\n\n    /**\n     * A class used to represent the current authentication status of the {{site.bs}} JavaScript SDK instance.\n     * @property {string} unauthenticated Indicates that no user is authenticated.\n     * @property {string} masterKey Indicates that a master key authentication is used.\n     * @property {string} invalidAuthentication Indicates an authentication has been attempted, but it was invalid.\n     * @property {string} authenticated Indicates that a user is authenticated.\n     * @property {string} authenticating Indicates that a user is currently authenticating. Some requests might be pending and waiting for the user to authenticate.\n     * @property {string} expiredAuthentication Indicates that a user's authentication has expired and that the user must log back in.\n     * @typedef {string} Everlive.AuthStatus\n     */\n    static AuthStatus = {\n        unauthenticated: 'unauthenticated',\n        masterKey: 'masterKey',\n        invalidAuthentication: 'invalidAuthentication',\n        authenticated: 'authenticated',\n        expiredAuthentication: 'expiredAuthentication',\n        authenticating: 'authenticating'\n    };\n    static offlineItemStates = {\n        created: 'create',\n        modified: 'update',\n        deleted: 'delete'\n    };\n\n    /**\n     * HTTP Methods\n     * @typedef {string} constants.HttpMethod\n     * @property {string} GET\n     * @property {string} POST\n     * @property {string} PUT\n     * @property {string} DELETE\n     */\n    static HttpMethod = {\n        GET: 'GET',\n        POST: 'POST',\n        PUT: 'PUT',\n        DELETE: 'DELETE'\n    };\n    static maxDistanceConsts = {\n        radians: '$maxDistance',\n        km: '$maxDistanceInKilometers',\n        miles: '$maxDistanceInMiles'\n    };\n    static radiusConsts = {\n        radians: 'radius',\n        km: 'radiusInKilometers',\n        miles: 'radiusInMiles'\n    };\n\n    // using an invalid field name in the context of Everlive\n    // to ensure no naming collisions can occur\n    static offlineItemsStateMarker = '__everlive_offline_state';\n\n    static SyncErrors = {\n        generalError: 'generalError',\n        itemSyncError: 'itemSyncError'\n    };\n\n    static syncBatchSize = 10;\n\n    static AuthStoreKey = '__everlive_auth_key';\n    static CachingStoreKey = '__everlive_cache';\n\n    // the minimum interval between sync requests\n    static defaultSyncInterval = 1000 * 60 * 10; // 10 minutes\n    static fileUploadKey = 'fileUpload';\n    static fileUploadDelimiter = '_';\n\n    static FilesTypeNameLegacy = 'system.files';\n    static FilesTypeName = 'Files';\n    static MaxConcurrentDownloadTasks = 3;\n    static DefaultFilesystemStorageQuota = 10485760;\n\n    static Events = {\n        SyncStart: 'syncStart',\n        SyncEnd: 'syncEnd',\n        Processed: 'processed',\n        ItemProcessed: 'itemProcessed',\n        BeforeExecute: 'beforeExecute'\n    };\n\n    static Aggregation = {\n        MaxDocumentsCount: 100000\n    };\n\n    static Push = {\n        NotificationsType: 'Push/Notifications',\n        DevicesType: 'Push/Devices'\n    };\n\n    static EncodableHeaders = [\n        Constants.Headers.filter,\n        Constants.Headers.expand,\n        Constants.Headers.powerFields,\n        Constants.Headers.customParameters\n    ];\n\n    static SqliteTypes = {\n        Text: 'TEXT',\n        Number: 'INT',\n        Float: 'FLOAT'\n    };\n\n    static SqliteUnsupportedTypes = {\n        ARRAY: 'ARRAY',\n        OBJECT: 'OBJECT',\n        DATE: 'DATE',\n        BOOLEAN: 'BOOLEAN',\n        NULL: 'NULL'\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/constants.ts\n **/","import { Errors } from '../common/errors';\n\nexport class EverliveErrors extends Errors {\n    static itemNotFound = {\n        code: 801,\n        message: 'Item not found.'\n    };\n    static syncConflict = {\n        code: 10001,\n        message: 'A conflict occurred while syncing data.'\n    };\n    static syncError = {\n        code: 10002,\n        message: 'Synchronization failed for item.'\n    };\n    static syncInProgress = {\n        code: 10003,\n        message: 'Cannot perform operation while synchronization is in progress.'\n    };\n    static syncCancelledByUser = {\n        code: 10004,\n        message: 'Synchronization cancelled by user.'\n    };\n    static syncErrorUnknown = {\n        code: 10005,\n        message: 'An unknown error occurred while synchronizing. Please make sure there is internet connectivity.'\n    };\n    static operationNotSupportedOffline = {\n        code: 20000 // the error message is created dynamically based on the query filter for offline storage\n    };\n    static invalidId = {\n        code: 20001,\n        message: 'Invalid or missing Id in model.'\n    };\n    static bodyWithGetRequestNotSupported = {\n        code: 601,\n        message: 'Sending a request body is not supported for \"GET\" requests.'\n    };\n    static invalidOrMissingFunctionName = {\n        code: 601,\n        message: 'Invalid or missing cloud function name.'\n    };\n    static invalidOrMissingProcedureName = {\n        code: 601,\n        message: 'Invalid or missing procedure name.'\n    };\n    static generalDatabaseError = {\n        code: 107,\n        message: 'General database error.'\n    };\n    static invalidToken = {\n        code: 301,\n        message: 'Invalid access token.'\n    };\n    static expiredToken = {\n        code: 302,\n        message: 'Expired access token.'\n    };\n    static invalidExpandExpression = {\n        code: 618,\n        message: 'Invalid expand expression.'\n    };\n    static invalidRequest = {\n        code: 601,\n        message: 'Invalid request.'\n    };\n    static queryCancelled = {\n        code: 700,\n        message: 'Query cancelled.'\n    };\n    static missingContentType = {\n        code: 701,\n        message: 'ContentType not specified.'\n    };\n    static missingOrInvalidFileContent = {\n        code: 702,\n        message: 'Missing or invalid file content.'\n    };\n    static customFileSyncNotSupported = {\n        code: 703,\n        message: 'Custom ConflictResolution for files is not allowed.'\n    };\n    static cannotDownloadOffline = {\n        code: 704,\n        message: 'Cannot download a file while offline.'\n    };\n    static cannotForceCacheWhenDisabled = {\n        code: 705,\n        message: 'Cannot use forceCache while the caching is disabled.'\n    };\n    static filesNotSupportedInBrowser = {\n        code: 706,\n        message: 'Create and Update operations are not supported for Files in browsers while in offline mode.'\n    };\n    static pushNotSupportedOffline = {\n        code: 707,\n        message: 'Push is not supported in offline mode.'\n    };\n    static noOfflineSupport = {\n        code: 708,\n        message: 'You have instantiated the SDK without support for offline storage.'\n    };\n\tstatic cacheDisabled = {\n        code: 709 // the error message is created dynamically based on the cache operation\n    };\n    static singleValueExpected = {\n        code: 710\n    }\n}\n\nexport class EverliveErrorHelper {\n    static buildCacheDisabledErrorMessage = function (cacheOperation) {\n        return 'Cannot use ' + cacheOperation + ' while the caching is disabled.';\n    };\n\n    static buildSingleValueExpectedErrorMessage = function (operation) {\n        return 'A single value is expected in ' + operation + ' query modifier.';\n    }\n}\n\nexport class EverliveError extends Error {\n    private _err: Error;\n\n    name: string = 'EverliveError';\n    message: string;\n    code: number;\n\n    constructor(err: { message?: string, code?: number}) {\n        super(err.message);\n        this.message = err.message;\n        this.code = err.code;\n        this._err = new Error();\n    }\n\n    get stack(): string {\n        return this._err.stack;\n    }\n\n    public toJSON(): any {\n        return {\n            name: this.name,\n            message: this.message,\n            code: this.code,\n            stack: this.stack\n        };\n    }\n}\n\nexport enum DeviceRegistrationErrorType {\n    EverliveError = 1,\n    PluginError = 2\n}\n\nexport class DeviceRegistrationError extends EverliveError {\n    constructor(\n        public errorType: DeviceRegistrationErrorType,\n        message: string,\n        public additionalInformation?: any\n    ) {\n        super({message, code: additionalInformation && additionalInformation.code});\n    }\n    public static fromEverliveError(err: any): DeviceRegistrationError {\n        return new DeviceRegistrationError(\n            DeviceRegistrationErrorType.EverliveError, err.message, err);\n    }\n\n    public static fromPluginError(errorObj: any): DeviceRegistrationError {\n        var message = 'A plugin error occurred';\n        if (errorObj) {\n            if (typeof errorObj.error === 'string') {\n                message = errorObj.error;\n            } else if (typeof errorObj.message === 'string') {\n                message = errorObj.message;\n            }\n        }\n\n        return new DeviceRegistrationError(DeviceRegistrationErrorType.PluginError, message, errorObj);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/EverliveError.ts\n **/","declare const window: any, encodeURIComponent: any;\n\nimport * as _ from 'underscore';\nimport * as path from 'path';\n\nimport * as platform from '../common/platform';\nimport { Constants as constants } from './constants';\nimport { Utils as CommonUtils } from '../common/utils';\n\nconst unsupportedDbOperators = [\n    '$geoWithin',\n    '$geoIntersects',\n    '$near',\n    '$within',\n    '$nearSphere'\n];\n\nexport class DeviceRegistrationResult {\n    constructor(public token: string) {}\n}\n\nexport class Utils extends CommonUtils {\n    static normalizeKeys(obj: any) { //brings down all keys to the same level (lowerCase)\n        var normalizedKeys: any = {};\n\n        _.each(obj, function (val, key: string) {\n            var lowerKey = key.toLowerCase();\n\n            if (!normalizedKeys.hasOwnProperty(lowerKey)) {\n                normalizedKeys[lowerKey] = val;\n            }\n        });\n\n        return normalizedKeys;\n    }\n\n    static buildAuthHeader(setup, options?): {authorization: string} {\n        var authHeaderValue = null;\n        if (options && options.authHeaders === false) {\n            return authHeaderValue;\n        }\n        if (setup.token) {\n            authHeaderValue = (setup.tokenType || 'bearer') + ' ' + setup.token;\n        }\n        else if (setup.masterKey) {\n            authHeaderValue = 'masterkey ' + setup.masterKey;\n        }\n        if (authHeaderValue) {\n            return {authorization: authHeaderValue};\n        } else {\n            return null;\n        }\n    }\n\n    static buildUrl(setup): string {\n        var url = '';\n        if (typeof setup.scheme === 'string') {\n            url += setup.scheme + ':';\n        }\n        url += setup.url;\n        if (setup.appId) {\n            url += setup.appId + '/';\n        }\n        return url;\n    }\n\n    static getDbOperators(expression, shallow?: boolean) {\n        var dbOperators = [];\n\n        if (typeof expression === 'string' || typeof expression === 'number') {\n            return dbOperators;\n        }\n\n        var modifierKeys = Object.keys(expression || {});\n        _.each(modifierKeys, function (key) {\n            if (key.indexOf('$') === 0) {\n                dbOperators.push(key);\n            } else if (typeof expression[key] === 'object' && !shallow) {\n                dbOperators = dbOperators.concat(Utils.getDbOperators(expression[key]));\n            }\n        });\n\n        return dbOperators;\n    };\n\n    static disableRequestCache(url?, method?) {\n        if (method === 'GET') {\n            var timestamp = (new Date()).getTime();\n            var separator = url.indexOf('?') > -1 ? '&' : '?';\n            url += separator + '_el=' + timestamp;\n        }\n\n        return url;\n    }\n\n    static getUnsupportedOperators(filter) {\n        var dbOperators = Utils.getDbOperators(filter);\n        return _.intersection(dbOperators, unsupportedDbOperators);\n    }\n\n    static isQuerySupportedOffline(query) {\n        var queryParams = query.getQueryParameters();\n        var hasExpandExpression = !(<any>_).isEmptyObject(queryParams.expand);\n        var unsupportedOperators = Utils.getUnsupportedOperators(queryParams.filter);\n        var hasUnsupportedOperators = unsupportedOperators.length !== 0;\n        var isUnsupportedInOffline = hasExpandExpression || hasUnsupportedOperators;\n        return !isUnsupportedInOffline;\n    }\n\n    // http://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript/16245768#16245768\n    static b64toBlob(b64Data, contentType = '', sliceSize = 512) {\n        var byteCharacters = atob(b64Data);\n        var byteArrays = [];\n\n        for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n            var slice = byteCharacters.slice(offset, offset + sliceSize);\n\n            var byteNumbers = new Array(slice.length);\n            for (var i = 0; i < slice.length; i++) {\n                byteNumbers[i] = slice.charCodeAt(i);\n            }\n\n            var byteArray = new Uint8Array(byteNumbers);\n\n            byteArrays.push(byteArray);\n        }\n\n        var blob = new Blob(byteArrays, {type: contentType});\n        return blob;\n    }\n\n    // http://stackoverflow.com/questions/9267899/arraybuffer-to-base64-encoded-string\n    static arrayBufferToBase64(buffer) {\n        var binary = '';\n        var bytes = new Uint8Array(buffer);\n        var len = bytes.byteLength;\n        for (var i = 0; i < len; i++) {\n            binary += String.fromCharCode(bytes[i]);\n        }\n\n        return btoa(binary);\n    }\n\n    static transformPlatformPath(platformPath) {\n        if (!platformPath) {\n            return '';\n        }\n\n        if (platform.isWindowsPhone) {\n            if (platformPath.charAt(0) === '/' && platformPath.charAt(1) !== '/') {\n                platformPath = '/' + platformPath;\n            }\n        } else { //TODO: probably desktop too\n            if (platformPath.indexOf('file:/') !== -1 && platformPath.indexOf('file:///') === -1) {\n                platformPath = platformPath.replace('file:/', 'file:///');\n            }\n        }\n\n        return platformPath;\n    }\n\n    static _stringCompare(string, check) {\n        return string.toLowerCase() === check;\n    }\n\n    static startsWith(str, word){\n        return str.lastIndexOf(word, 0) === 0;\n    }\n\n    static endsWith(str, word){\n        return str.indexOf(word, str.length - word.length) !== -1;\n    }\n\n    static isContentType = {\n        files: function (collectionName) {\n            return Utils._stringCompare(collectionName, 'files');\n        },\n        users: function (collectionName) {\n            return Utils._stringCompare(collectionName, 'users');\n        },\n        pushNotifications: function (collectionName) {\n            return Utils._stringCompare(collectionName, constants.Push.NotificationsType.toLowerCase());\n        },\n        pushDevices: function (collectionName) {\n            return Utils._stringCompare(collectionName, constants.Push.DevicesType.toLowerCase());\n        }\n    };\n\n    static isElement = {\n        _isElement: function (el, check) {\n            var tag = el;\n\n            if (typeof tag !== 'string') {\n                if (el instanceof HTMLElement) {\n                    tag = el.tagName;\n                }\n            }\n\n            return Utils._stringCompare(tag, check);\n        },\n        image: function (el) {\n            return Utils.isElement._isElement(el, 'img');\n        },\n        anchor: function (el) {\n            return Utils.isElement._isElement(el, 'a');\n        }\n    };\n\n    static joinPath(...args: string[]) {\n        var paths = [].slice.apply(args).map(function (arg) {\n            return arg || '';\n        });\n\n        var joinedPath = path.join.apply(path, paths);\n        return Utils.transformPlatformPath(joinedPath);\n    }\n\n    static getId(obj) {\n        return obj.Id || obj._id || obj.id;\n    }\n\n    static _inAppBuilderSimulator() {\n        return typeof window !== 'undefined' && window.navigator && window.navigator.simulator;\n    }\n\n    static isValidId(input) {\n        var isValidString = typeof input === 'string' && input !== '';\n        var isValidNumber = typeof input === 'number' && !_.isNaN(input);\n\n        return isValidString || isValidNumber;\n    }\n\n    static modelHasValidId(model) {\n        var idToValidate = (typeof model === 'object' && model !== null) ? model.Id : model;\n        return Utils.isValidId(idToValidate);\n    }\n\n    static callbackAndPromiseErrorResponse(err, errorHandler): Promise<any> {\n        errorHandler = errorHandler || _.noop;\n        errorHandler(err);\n        return Promise.reject(err);\n    }\n\n    static toQueryString(obj: any) {\n        var queryString = '',\n            encode = encodeURIComponent,\n            append = function (k, v) {\n                queryString += encode(k) + '=' + encode(v) + '&'\n            };\n\n        if (_.isArray(obj)) {\n            for (var i = 0; obj && i < obj.length; i++) {\n                append((<any>obj[i]).name, (<any>obj[i]).value);\n            }\n        } else {\n            for (var propName in obj) {\n                if (!obj.hasOwnProperty(propName)) {\n                    continue;\n                }\n\n                var value = obj[propName];\n\n                if (_.isArray(value)) {\n                    for (i = 0; i < value.length; i++) {\n                        append(propName, value[i]);\n                    }\n                } else {\n                    append(propName, obj[propName]);\n                }\n            }\n        }\n\n        // spaces should be + according to spec\n        return queryString.replace(/&$/, '').replace(/%20/g, '+');\n    }\n\n    static lazyRequire(_dynamic_module_, exportName) {\n        exportName = exportName || _dynamic_module_;\n        var obj = {};\n\n        Object.defineProperty(obj, exportName, {\n            get: function () {\n                return require(_dynamic_module_);\n            }\n        });\n\n        return obj;\n    }\n\n    static promiseHash(obj: any): Promise<any> {\n        return Utils._mapPromises(obj, true).then((res) => {\n            let resultObj: any = {};\n\n            _.each<any>(res, (settlement, key) => {\n                if (settlement.state === 'fulfilled') {\n                    resultObj[key] = settlement.value;\n                }\n            });\n\n            return Promise.resolve(resultObj);\n        }, err => Promise.reject(err));\n    }\n\n    static promiseHashSettled(obj: any): Promise<any> {\n        return Utils._mapPromises(obj);\n    }\n\n    static promisesAllSettled(promises: Promise<any>[]): Promise<any> {\n        return Utils._mapPromises(promises);\n    }\n\n    private static _mapPromises(promises: Promise<any>[]|Object, stopOnError = false): Promise<any> {\n        let promiseCount = _.size(promises);\n        let resultObj: any = Array.isArray(promises) ? [] : {};\n\n        if (promiseCount === 0) {\n            return Promise.resolve(resultObj);\n        }\n\n        return new Promise<any>((resolve, reject) => {\n            let aborted = false;\n            let settledCount = 0;\n\n            let storeResponse = (response: any, key: string|number, isError = false) => {\n                if (aborted) return;\n                let settlement: PromiseSettlement;\n\n                if (isError) {\n                    settlement = { state: 'rejected', reason: response };\n                } else {\n                    settlement = { state: 'fulfilled', value: response };\n                }\n\n                resultObj[key] = settlement;\n                settledCount++;\n\n                if (settledCount === promiseCount) {\n                    resolve(resultObj);\n                }\n            };\n\n            _.each<any>(promises, (promise: Promise<any>, key: string|number) => {\n                promise.then((res) => {\n                    storeResponse(res, key);\n                    return Promise.resolve(res);\n                }, (err) => {\n                    if (stopOnError) {\n                        reject(err);\n                        aborted = true;\n                    }\n\n                    storeResponse(err, key, true);\n                    return Promise.reject(err);\n                });\n            });\n        });\n    }\n\n    static isOfflineStorageEnabled(setup: any) { //TODO: setup\n        const offlineStorageOptions = setup.offlineStorage || setup.offline;\n        return offlineStorageOptions && offlineStorageOptions.enabled !== false;\n    }\n\n    static existsAndIsNotEmpty(obj: string|Array<any>|Object) {\n        return (!!obj) && (_.size(obj) > 0);\n    }\n}\n\nexport type PromiseSettlementState = 'fulfilled' | 'rejected';\n\nexport type PromiseSettlement =\n    { state: PromiseSettlementState; value: any; }\n    | { state: PromiseSettlementState; reason: any; };\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/utils.ts\n **/","declare const android: any;\ndeclare const UIButton: any;\ndeclare const cordova: any;\ndeclare const define: any;\ndeclare const window: any;\n\nvar isNativeScript = Boolean(((typeof android !== 'undefined' && android && android.widget && android.widget.Button)\n|| (typeof UIButton !== 'undefined' && UIButton)));\n\nvar platform;\nvar isCordova = false;\nvar isWindowsPhone = false;\nvar isAndroid = false;\n\nif (typeof window !== 'undefined' && !isNativeScript) {\n    isCordova = /^file:\\/{3}[^\\/]|x-wmapp/i.test(window.location.href) && /ios|iphone|ipod|ipad|android|iemobile/i.test(navigator.userAgent);\n    isWindowsPhone = isCordova && /iemobile/i.test(navigator.userAgent);\n    isAndroid = isCordova && cordova.platformId === 'android';\n}\n\nvar isNodejs = typeof exports === 'object' && typeof window === 'undefined';\nvar isRequirejs = typeof define === 'function' && define.amd;\nvar isDesktop = !isNativeScript && !isCordova && !isNodejs;\n\nif (isNativeScript) {\n    platform = 'ns';\n} else if (isNodejs) {\n    platform = 'nodejs';\n} else if (isDesktop) {\n    platform = 'desktop';\n} else if (isCordova) {\n    platform = 'cordova';\n}\n\nvar isInAppBuilderSimulator = function () {\n    return typeof window !== 'undefined' && window.navigator && window.navigator.simulator;\n};\n\nexport {\n    isCordova,\n    isNativeScript,\n    isDesktop,\n    isWindowsPhone,\n    isAndroid,\n    isNodejs,\n    isRequirejs,\n    platform,\n    isInAppBuilderSimulator\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/platform.ts\n **/","import { Expression } from '../Expression';\nimport { Constants } from '../constants';\nimport { WhereQuery } from './WhereQuery';\nimport { QueryBuilder } from './QueryBuilder';\nimport { Query as CommonQuery } from '../../common/query/Query';\n\nconst OperatorType = Constants.OperatorType;\n\nexport class Query extends CommonQuery {\n    filter;\n    fields;\n    sort;\n    toskip;\n    totake;\n    expandExpression;\n    expr: Expression;\n    aggregateExpression;\n\n    /**\n     * @class Query\n     * @classdesc A query class used to describe a request that will be made to the {{site.bs}} JavaScript SDK.\n     * @param {object} [filter] A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @param {object} [fields] A [fields expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-subset-fields) definition.\n     * @param {object} [sort] A [sort expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-sorting) definition.\n     * @param {number} [skip] Number of items to skip. Used for paging.\n     * @param {number} [take] Number of items to take. Used for paging.\n     * @param {object} [expand] An [expand expression](http://docs.telerik.com/platform/backend-services/rest/data/relations/relations-defining) definition.\n     */\n    constructor(filter?, fields?, sort?, skip?, take?, expand?) {\n        super();\n\n        this.filter = filter;\n        this.fields = fields;\n        this.sort = sort;\n        this.toskip = skip;\n        this.totake = take;\n        this.expandExpression = expand;\n        this.expr = new Expression(OperatorType.query);\n    }\n\n    /** Applies a filter to the current query. This allows you to retrieve only a subset of the items based on various filtering criteria.\n     * @memberOf Query.prototype\n     * @method where\n     * @name where\n     * @param {object} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @returns {Query}\n     */\n    /** Defines a filter definition for the current query.\n     * @memberOf Query.prototype\n     * @method where\n     * @name where\n     * @returns {WhereQuery}\n     */\n    where(filter?: any): any { //TODO: common return type? whereQuery should extend query or common query?\n        if (filter) {\n            return this._simple(OperatorType.filter, [filter]);\n        } else {\n            return new WhereQuery(this);\n        }\n    }\n\n    // TODO\n    //exclude: function () {\n    //    return this._simple(OperatorType.exclude, arguments);\n    //},\n\n    /** Applies a fields selection to the current query. This allows you to retrieve only a subset of all available item fields.\n     * @memberOf Query.prototype\n     * @method select\n     * @param {object} fieldsExpression A [fields expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-subset-fields) definition.\n     * @returns {Query}\n     */\n    select(...args) {\n        return this._simple(OperatorType.select, args);\n    }\n\n    /** Sorts the items in the current query in descending order by the specified field.\n     * @memberOf Query.prototype\n     * @method orderDesc\n     * @param {string} field The field name to order by in descending order.\n     * @returns {Query}\n     */\n    order(field) {\n        return this._simple(OperatorType.order, [field]);\n    }\n\n    /** Skips a certain number of items from the beginning before returning the rest of the items. Used for paging.\n     * @memberOf Query.prototype\n     * @method skip\n     * @see [query.take]{@link query.take}\n     * @param {number} value The number of items to skip.\n     * @returns {Query}\n     */\n    orderDesc(field) {\n        return this._simple(OperatorType.order_desc, [field]);\n    }\n\n    /** Takes a specified number of items from the query result. Used for paging.\n     * @memberOf Query.prototype\n     * @method take\n     * @see [query.skip]{@link query.skip}\n     * @param {number} value The number of items to take.\n     * @returns {Query}\n     */\n    skip(value) {\n        return this._simple(OperatorType.skip, [value]);\n    }\n\n    /** Sets an expand expression for the current query. This allows you to retrieve complex data sets using a single query based on relations between data types.\n     * @memberOf Query.prototype\n     * @method expand\n     * @param {object} expandExpression An [expand expression](http://docs.telerik.com/platform/backend-services/rest/data/relations/relations-defining) definition.\n     * @returns {Query}\n     */\n    take(value) {\n        return this._simple(OperatorType.take, [value]);\n    }\n\n    /** Builds an object containing the different expressions that will be sent to {{site.tap}}. It basically translates any previously specified expressions into standard queries that {{site.tap}} can understand.\n     * @memberOf Query.prototype\n     * @method build\n     * @returns {{$where,$select,$sort,$skip,$take,$expand}}\n     */\n    expand(expandExpression) {\n        return this._simple(OperatorType.expand, [expandExpression]);\n    }\n\n    build() {\n        return new QueryBuilder(this).build();\n    }\n\n    _simple(op, oprs): Query {\n        var args = [].slice.call(oprs);\n        this.expr.addOperand(new Expression(op, args));\n        return this;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/query/Query.ts\n **/","// 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 = 7\n ** module chunks = 0\n **/","/**\n * Constants used by the SDK* @typedef {Object} Everlive.Constants\n */\n\nexport enum DataQueryOperation {\n    Read = 0,\n    Create,\n    Update,\n    Delete,\n    DeleteById,\n    ReadById,\n    Count,\n    RawUpdate,\n    SetAcl,\n    SetOwner,\n    UpdateById,\n    UserLogin,\n    UserLogout,\n    UserChangePassword,\n    UserLoginWithProvider,\n    UserLinkWithProvider,\n    UserUnlinkFromProvider,\n    UserResetPassword,\n    UserSetPassword,\n    FilesUpdateContent,\n    FilesGetDownloadUrlById,\n    Aggregate,\n    InvokeCloudFunction,\n    InvokeStoredProcedure\n}\n\nexport class Constants {\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/Constants.ts\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\n\nexports.extname = function(path) {\n  return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/path-browserify/index.js\n ** module id = 9\n ** module chunks = 0\n **/","import * as _ from 'underscore';\n\nimport { Utils } from './utils';\nimport { reqwest, ReqwestOptions } from './reqwest.everlive';\nimport { Constants } from './constants';\nimport { isNodejs } from '../common/platform';\nimport { Query } from './query/Query';\nimport { Setup } from './Setup';\nimport { RequestOptions } from './interfaces/RequestOptions';\n\nconst Headers = Constants.Headers;\nconst EncodableHeaders = Constants.EncodableHeaders;\nconst buildAuthHeader = Utils.buildAuthHeader;\nconst parseUtilities = Utils.parseUtilities;\nconst guardUnset = Utils.guardUnset;\n\nexport class Request {\n\n    static reviver = parseUtilities.getReviver();\n\n    static parsers = {\n        simple: {\n            result: parseUtilities.parseResult.bind(null, Request.reviver),\n            error: parseUtilities.parseXhrError.bind(null, Request.reviver)\n        },\n        single: {\n            result: parseUtilities.parseSingleResult.bind(null, Request.reviver),\n            error: parseUtilities.parseXhrError.bind(null, Request.reviver)\n        },\n        update: {\n            result: parseUtilities.parseUpdateResult.bind(null, Request.reviver),\n            error: parseUtilities.parseXhrError.bind(null, Request.reviver)\n        },\n        customRequest: {\n            result: _.identity,\n            error: parseUtilities.parseXhrResponse\n        }\n    };\n\n    static sendRequest(request) {\n        var url = request.buildUrl();\n        url = Utils.disableRequestCache(url, request.method);\n        request.method = request.method || Constants.HttpMethod.GET;\n        var data = request.method === Constants.HttpMethod.GET ? request.data : JSON.stringify(request.data);\n        request.headers['Accept'] = '*/*'; // Reqwest is case sensitive regarding this header\n\n        var requestParams: ReqwestOptions = {\n            url: url,\n            method: request.method,\n            data: data,\n            headers: request.headers,\n            contentType: 'application/json',\n            crossOrigin: false\n        };\n\n        if (!isNodejs) {\n            requestParams.crossOrigin = true;\n        }\n\n        return new Promise(function (resolve, reject) {\n            return reqwest(requestParams)\n                .then(function (res) {\n                    resolve(res);\n                }, function (err) {\n                    reject(err);\n                });\n        });\n    }\n\n    method: string;\n    endpoint: string;\n    data;\n    queryStringParams;\n\n    private _headers;\n\n    constructor(\n        public setup: Setup,\n        public options: RequestOptions\n    ) {\n        guardUnset(setup, 'setup');\n        guardUnset(options, 'options');\n        this.method = null;\n        this.endpoint = null;\n        this.data = null;\n\n        this._headers = {};\n\n        _.extend(this, options);\n        this._init(options);\n    }\n\n    //make sure that the headers are always normalized\n    get headers(): any {\n        return this._headers;\n    }\n\n    set headers(val) {\n        // If we let two identical headers with different casing slip into a request\n        // the browser concatenates them which brings chaos to earth\n        this._headers = Utils.normalizeKeys(val);\n    }\n\n    // Calls the underlying Ajax library\n    // If there is a logged in user for the Everlive instance then her/his authentication will be used.\n    static buildAuthHeader(setup, options?) {\n        return buildAuthHeader(setup, options);\n    }\n\n    send() {\n        return Request.sendRequest(this);\n    }\n\n    // Builds the URL of the target Everlive service\n    buildUrl() {\n        var url = Utils.buildUrl(this.setup) + this.endpoint;\n\n        if (_.size(this.queryStringParams)) {\n            url = url + '?' + Utils.toQueryString(this.queryStringParams);\n        }\n\n        return url;\n    }\n\n    // Processes the given query to return appropriate headers to be used by the request\n    static buildQueryHeaders(query) {\n        if (query) {\n            if (query instanceof Query) {\n                return Request._buildQueryHeaders(query);\n            } else {\n                return Request._buildFilterHeader(query.filter);\n            }\n        } else {\n            return {};\n        }\n    }\n\n    // Initialize the Request object by using the passed options\n    _init(options) {\n        _.extend(this.headers, Request.buildAuthHeader(this.setup, options), Request.buildQueryHeaders(options.query));\n        this.encodeHeaders();\n    }\n\n    // Translates an Everlive.Query to request headers\n    private static _buildQueryHeaders(query) {\n        query = query.build();\n        var headers = {};\n        if (query.$where !== null) {\n            headers[Headers.filter] = JSON.stringify(query.$where);\n        }\n        if (query.$select !== null) {\n            headers[Headers.select] = JSON.stringify(query.$select);\n        }\n        if (query.$sort !== null) {\n            headers[Headers.sort] = JSON.stringify(query.$sort);\n        }\n        if (query.$skip !== null) {\n            headers[Headers.skip] = query.$skip;\n        }\n        if (query.$take !== null) {\n            headers[Headers.take] = query.$take;\n        }\n        if (query.$expand !== null) {\n            headers[Headers.expand] = JSON.stringify(query.$expand);\n        }\n        if (query.$aggregate !== null) {\n            headers[Headers.aggregate] = JSON.stringify(query.$aggregate);\n        }\n\n        return headers;\n    }\n\n    private static _buildFilterHeader(filter) {\n        var headers = {};\n        headers[Headers.filter] = JSON.stringify(filter);\n        return headers;\n    }\n\n    encodeHeaders() {\n        var headers = this.headers;\n        _.each(EncodableHeaders, function (headerName) {\n            if (headers[headerName] !== undefined) {\n                headers[headerName] = encodeURIComponent(headers[headerName]);\n            }\n        });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/Request.ts\n **/","import {Request} from '../Request';\nimport {Utils} from '../utils';\nimport {RequestOptionsBuilder} from '../query/RequestOptionsBuilder';\nimport {EverliveErrors} from '../EverliveError';\nimport { Constants } from '../constants';\nimport { platform } from '../../common/platform';\n\nexport const RequestService = {\n    buildRequest(query, data) {\n        const getRequestOptionsFromQuery = RequestOptionsBuilder[query.operation];\n        const requestOptions = getRequestOptionsFromQuery(query);\n        this.setAdditionalHeaders(query, requestOptions);\n        return new Request(data.sdk.setup, requestOptions);\n    },\n\n    setAdditionalHeaders(query, requestOptions) {\n        if (query.isSync) {\n            requestOptions.headers[Constants.Headers.sync] = true;\n        }\n\n        var sdkHeaderValue = {\n            sdk: 'js',\n            platform: platform.platform\n        };\n\n        requestOptions.headers[Constants.Headers.sdk] = JSON.stringify(sdkHeaderValue);\n    },\n\n    /**\n     * Sends a request and if it must applies the result offline.\n     * @param query\n     * @param data\n     * @param [request]\n     * @returns {Promise} Resolves with the response.\n     */\n    handleRequestProcessing(query, data, request = this.buildRequest(query, data)) {\n        return new Promise(function (resolve, reject) {\n            let successData;\n\n            request.send()\n                .then(function (res) {\n                    successData = res;\n                    if (query.applyOffline) {\n                        return data.applyQueryOffline(query, successData);\n                    } else {\n                        return successData;\n                    }\n                }, function (err) {\n                    reject(err);\n                }).then(function () {\n                    resolve(successData);\n                }, function (err) {\n                    const notSupported = EverliveErrors.operationNotSupportedOffline.code;\n                    const notFound = EverliveErrors.itemNotFound.code;\n                \n                    const online = !query.canUseOffline || !query.useCache;\n                    if (online && (err.code === notSupported || err.code === notFound)) {\n                        resolve(successData);\n                    } else {\n                        reject(err);\n                    }\n                });\n        });\n    },\n\n    /**\n     * Sends a request.\n     * @param request\n     * @returns {Promise} Resolves with the parsed response.\n     */\n    sendRequest(request) {\n        return new Promise(function (resolve, reject) {\n            request.send()\n                .then(function (res) {\n                    const result = res.Result || res;\n                    const reviver = Utils.parseUtilities.getReviver();\n                    Utils.parseUtilities.parseResult(reviver, result);\n                    resolve(result);\n                }, function (err) {\n                    reject(err);\n                });\n        });\n    }\n};\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/services/RequestService.ts\n **/","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/inherits/inherits_browser.js\n ** module id = 12\n ** module chunks = 0\n **/","/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n/**\r\n * CryptoJS core components.\r\n */\r\nvar CryptoJS = CryptoJS || (function (Math, undefined) {\r\n    /**\r\n     * CryptoJS namespace.\r\n     */\r\n    var C = {};\r\n\r\n    /**\r\n     * Library namespace.\r\n     */\r\n    var C_lib = C.lib = {};\r\n\r\n    /**\r\n     * Base object for prototypal inheritance.\r\n     */\r\n    var Base = C_lib.Base = (function () {\r\n        function F() {}\r\n\r\n        return {\r\n            /**\r\n             * Creates a new object that inherits from this object.\r\n             *\r\n             * @param {Object} overrides Properties to copy into the new object.\r\n             *\r\n             * @return {Object} The new object.\r\n             *\r\n             * @static\r\n             *\r\n             * @example\r\n             *\r\n             *     var MyType = CryptoJS.lib.Base.extend({\r\n             *         field: 'value',\r\n             *\r\n             *         method: function () {\r\n             *         }\r\n             *     });\r\n             */\r\n            extend: function (overrides) {\r\n                // Spawn\r\n                F.prototype = this;\r\n                var subtype = new F();\r\n\r\n                // Augment\r\n                if (overrides) {\r\n                    subtype.mixIn(overrides);\r\n                }\r\n\r\n                // Create default initializer\r\n                if (!subtype.hasOwnProperty('init')) {\r\n                    subtype.init = function () {\r\n                        subtype.$super.init.apply(this, arguments);\r\n                    };\r\n                }\r\n\r\n                // Initializer's prototype is the subtype object\r\n                subtype.init.prototype = subtype;\r\n\r\n                // Reference supertype\r\n                subtype.$super = this;\r\n\r\n                return subtype;\r\n            },\r\n\r\n            /**\r\n             * Extends this object and runs the init method.\r\n             * Arguments to create() will be passed to init().\r\n             *\r\n             * @return {Object} The new object.\r\n             *\r\n             * @static\r\n             *\r\n             * @example\r\n             *\r\n             *     var instance = MyType.create();\r\n             */\r\n            create: function () {\r\n                var instance = this.extend();\r\n                instance.init.apply(instance, arguments);\r\n\r\n                return instance;\r\n            },\r\n\r\n            /**\r\n             * Initializes a newly created object.\r\n             * Override this method to add some logic when your objects are created.\r\n             *\r\n             * @example\r\n             *\r\n             *     var MyType = CryptoJS.lib.Base.extend({\r\n             *         init: function () {\r\n             *             // ...\r\n             *         }\r\n             *     });\r\n             */\r\n            init: function () {\r\n            },\r\n\r\n            /**\r\n             * Copies properties into this object.\r\n             *\r\n             * @param {Object} properties The properties to mix in.\r\n             *\r\n             * @example\r\n             *\r\n             *     MyType.mixIn({\r\n             *         field: 'value'\r\n             *     });\r\n             */\r\n            mixIn: function (properties) {\r\n                for (var propertyName in properties) {\r\n                    if (properties.hasOwnProperty(propertyName)) {\r\n                        this[propertyName] = properties[propertyName];\r\n                    }\r\n                }\r\n\r\n                // IE won't copy toString using the loop above\r\n                if (properties.hasOwnProperty('toString')) {\r\n                    this.toString = properties.toString;\r\n                }\r\n            },\r\n\r\n            /**\r\n             * Creates a copy of this object.\r\n             *\r\n             * @return {Object} The clone.\r\n             *\r\n             * @example\r\n             *\r\n             *     var clone = instance.clone();\r\n             */\r\n            clone: function () {\r\n                return this.init.prototype.extend(this);\r\n            }\r\n        };\r\n    }());\r\n\r\n    /**\r\n     * An array of 32-bit words.\r\n     *\r\n     * @property {Array} words The array of 32-bit words.\r\n     * @property {number} sigBytes The number of significant bytes in this word array.\r\n     */\r\n    var WordArray = C_lib.WordArray = Base.extend({\r\n        /**\r\n         * Initializes a newly created word array.\r\n         *\r\n         * @param {Array} words (Optional) An array of 32-bit words.\r\n         * @param {number} sigBytes (Optional) The number of significant bytes in the words.\r\n         *\r\n         * @example\r\n         *\r\n         *     var wordArray = CryptoJS.lib.WordArray.create();\r\n         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\r\n         *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\r\n         */\r\n        init: function (words, sigBytes) {\r\n            words = this.words = words || [];\r\n\r\n            if (sigBytes != undefined) {\r\n                this.sigBytes = sigBytes;\r\n            } else {\r\n                this.sigBytes = words.length * 4;\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Converts this word array to a string.\r\n         *\r\n         * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\r\n         *\r\n         * @return {string} The stringified word array.\r\n         *\r\n         * @example\r\n         *\r\n         *     var string = wordArray + '';\r\n         *     var string = wordArray.toString();\r\n         *     var string = wordArray.toString(CryptoJS.enc.Utf8);\r\n         */\r\n        toString: function (encoder) {\r\n            return (encoder || Hex).stringify(this);\r\n        },\r\n\r\n        /**\r\n         * Concatenates a word array to this word array.\r\n         *\r\n         * @param {WordArray} wordArray The word array to append.\r\n         *\r\n         * @return {WordArray} This word array.\r\n         *\r\n         * @example\r\n         *\r\n         *     wordArray1.concat(wordArray2);\r\n         */\r\n        concat: function (wordArray) {\r\n            // Shortcuts\r\n            var thisWords = this.words;\r\n            var thatWords = wordArray.words;\r\n            var thisSigBytes = this.sigBytes;\r\n            var thatSigBytes = wordArray.sigBytes;\r\n\r\n            // Clamp excess bits\r\n            this.clamp();\r\n\r\n            // Concat\r\n            if (thisSigBytes % 4) {\r\n                // Copy one byte at a time\r\n                for (var i = 0; i < thatSigBytes; i++) {\r\n                    var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n                    thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\r\n                }\r\n            } else if (thatWords.length > 0xffff) {\r\n                // Copy one word at a time\r\n                for (var i = 0; i < thatSigBytes; i += 4) {\r\n                    thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\r\n                }\r\n            } else {\r\n                // Copy all words at once\r\n                thisWords.push.apply(thisWords, thatWords);\r\n            }\r\n            this.sigBytes += thatSigBytes;\r\n\r\n            // Chainable\r\n            return this;\r\n        },\r\n\r\n        /**\r\n         * Removes insignificant bits.\r\n         *\r\n         * @example\r\n         *\r\n         *     wordArray.clamp();\r\n         */\r\n        clamp: function () {\r\n            // Shortcuts\r\n            var words = this.words;\r\n            var sigBytes = this.sigBytes;\r\n\r\n            // Clamp\r\n            words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\r\n            words.length = Math.ceil(sigBytes / 4);\r\n        },\r\n\r\n        /**\r\n         * Creates a copy of this word array.\r\n         *\r\n         * @return {WordArray} The clone.\r\n         *\r\n         * @example\r\n         *\r\n         *     var clone = wordArray.clone();\r\n         */\r\n        clone: function () {\r\n            var clone = Base.clone.call(this);\r\n            clone.words = this.words.slice(0);\r\n\r\n            return clone;\r\n        },\r\n\r\n        /**\r\n         * Creates a word array filled with random bytes.\r\n         *\r\n         * @param {number} nBytes The number of random bytes to generate.\r\n         *\r\n         * @return {WordArray} The random word array.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var wordArray = CryptoJS.lib.WordArray.random(16);\r\n         */\r\n        random: function (nBytes) {\r\n            var words = [];\r\n            for (var i = 0; i < nBytes; i += 4) {\r\n                words.push((Math.random() * 0x100000000) | 0);\r\n            }\r\n\r\n            return new WordArray.init(words, nBytes);\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Encoder namespace.\r\n     */\r\n    var C_enc = C.enc = {};\r\n\r\n    /**\r\n     * Hex encoding strategy.\r\n     */\r\n    var Hex = C_enc.Hex = {\r\n        /**\r\n         * Converts a word array to a hex string.\r\n         *\r\n         * @param {WordArray} wordArray The word array.\r\n         *\r\n         * @return {string} The hex string.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\r\n         */\r\n        stringify: function (wordArray) {\r\n            // Shortcuts\r\n            var words = wordArray.words;\r\n            var sigBytes = wordArray.sigBytes;\r\n\r\n            // Convert\r\n            var hexChars = [];\r\n            for (var i = 0; i < sigBytes; i++) {\r\n                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n                hexChars.push((bite >>> 4).toString(16));\r\n                hexChars.push((bite & 0x0f).toString(16));\r\n            }\r\n\r\n            return hexChars.join('');\r\n        },\r\n\r\n        /**\r\n         * Converts a hex string to a word array.\r\n         *\r\n         * @param {string} hexStr The hex string.\r\n         *\r\n         * @return {WordArray} The word array.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\r\n         */\r\n        parse: function (hexStr) {\r\n            // Shortcut\r\n            var hexStrLength = hexStr.length;\r\n\r\n            // Convert\r\n            var words = [];\r\n            for (var i = 0; i < hexStrLength; i += 2) {\r\n                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\r\n            }\r\n\r\n            return new WordArray.init(words, hexStrLength / 2);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Latin1 encoding strategy.\r\n     */\r\n    var Latin1 = C_enc.Latin1 = {\r\n        /**\r\n         * Converts a word array to a Latin1 string.\r\n         *\r\n         * @param {WordArray} wordArray The word array.\r\n         *\r\n         * @return {string} The Latin1 string.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\r\n         */\r\n        stringify: function (wordArray) {\r\n            // Shortcuts\r\n            var words = wordArray.words;\r\n            var sigBytes = wordArray.sigBytes;\r\n\r\n            // Convert\r\n            var latin1Chars = [];\r\n            for (var i = 0; i < sigBytes; i++) {\r\n                var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\r\n                latin1Chars.push(String.fromCharCode(bite));\r\n            }\r\n\r\n            return latin1Chars.join('');\r\n        },\r\n\r\n        /**\r\n         * Converts a Latin1 string to a word array.\r\n         *\r\n         * @param {string} latin1Str The Latin1 string.\r\n         *\r\n         * @return {WordArray} The word array.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\r\n         */\r\n        parse: function (latin1Str) {\r\n            // Shortcut\r\n            var latin1StrLength = latin1Str.length;\r\n\r\n            // Convert\r\n            var words = [];\r\n            for (var i = 0; i < latin1StrLength; i++) {\r\n                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\r\n            }\r\n\r\n            return new WordArray.init(words, latin1StrLength);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * UTF-8 encoding strategy.\r\n     */\r\n    var Utf8 = C_enc.Utf8 = {\r\n        /**\r\n         * Converts a word array to a UTF-8 string.\r\n         *\r\n         * @param {WordArray} wordArray The word array.\r\n         *\r\n         * @return {string} The UTF-8 string.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\r\n         */\r\n        stringify: function (wordArray) {\r\n            try {\r\n                return decodeURIComponent(escape(Latin1.stringify(wordArray)));\r\n            } catch (e) {\r\n                throw new Error('Malformed UTF-8 data');\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Converts a UTF-8 string to a word array.\r\n         *\r\n         * @param {string} utf8Str The UTF-8 string.\r\n         *\r\n         * @return {WordArray} The word array.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\r\n         */\r\n        parse: function (utf8Str) {\r\n            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Abstract buffered block algorithm template.\r\n     *\r\n     * The property blockSize must be implemented in a concrete subtype.\r\n     *\r\n     * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\r\n     */\r\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\r\n        /**\r\n         * Resets this block algorithm's data buffer to its initial state.\r\n         *\r\n         * @example\r\n         *\r\n         *     bufferedBlockAlgorithm.reset();\r\n         */\r\n        reset: function () {\r\n            // Initial values\r\n            this._data = new WordArray.init();\r\n            this._nDataBytes = 0;\r\n        },\r\n\r\n        /**\r\n         * Adds new data to this block algorithm's buffer.\r\n         *\r\n         * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\r\n         *\r\n         * @example\r\n         *\r\n         *     bufferedBlockAlgorithm._append('data');\r\n         *     bufferedBlockAlgorithm._append(wordArray);\r\n         */\r\n        _append: function (data) {\r\n            // Convert string to WordArray, else assume WordArray already\r\n            if (typeof data == 'string') {\r\n                data = Utf8.parse(data);\r\n            }\r\n\r\n            // Append\r\n            this._data.concat(data);\r\n            this._nDataBytes += data.sigBytes;\r\n        },\r\n\r\n        /**\r\n         * Processes available data blocks.\r\n         *\r\n         * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\r\n         *\r\n         * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\r\n         *\r\n         * @return {WordArray} The processed data.\r\n         *\r\n         * @example\r\n         *\r\n         *     var processedData = bufferedBlockAlgorithm._process();\r\n         *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\r\n         */\r\n        _process: function (doFlush) {\r\n            // Shortcuts\r\n            var data = this._data;\r\n            var dataWords = data.words;\r\n            var dataSigBytes = data.sigBytes;\r\n            var blockSize = this.blockSize;\r\n            var blockSizeBytes = blockSize * 4;\r\n\r\n            // Count blocks ready\r\n            var nBlocksReady = dataSigBytes / blockSizeBytes;\r\n            if (doFlush) {\r\n                // Round up to include partial blocks\r\n                nBlocksReady = Math.ceil(nBlocksReady);\r\n            } else {\r\n                // Round down to include only full blocks,\r\n                // less the number of blocks that must remain in the buffer\r\n                nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\r\n            }\r\n\r\n            // Count words ready\r\n            var nWordsReady = nBlocksReady * blockSize;\r\n\r\n            // Count bytes ready\r\n            var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\r\n\r\n            // Process blocks\r\n            if (nWordsReady) {\r\n                for (var offset = 0; offset < nWordsReady; offset += blockSize) {\r\n                    // Perform concrete-algorithm logic\r\n                    this._doProcessBlock(dataWords, offset);\r\n                }\r\n\r\n                // Remove processed words\r\n                var processedWords = dataWords.splice(0, nWordsReady);\r\n                data.sigBytes -= nBytesReady;\r\n            }\r\n\r\n            // Return processed words\r\n            return new WordArray.init(processedWords, nBytesReady);\r\n        },\r\n\r\n        /**\r\n         * Creates a copy of this object.\r\n         *\r\n         * @return {Object} The clone.\r\n         *\r\n         * @example\r\n         *\r\n         *     var clone = bufferedBlockAlgorithm.clone();\r\n         */\r\n        clone: function () {\r\n            var clone = Base.clone.call(this);\r\n            clone._data = this._data.clone();\r\n\r\n            return clone;\r\n        },\r\n\r\n        _minBufferSize: 0\r\n    });\r\n\r\n    /**\r\n     * Abstract hasher template.\r\n     *\r\n     * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\r\n     */\r\n    var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\r\n        /**\r\n         * Configuration options.\r\n         */\r\n        cfg: Base.extend(),\r\n\r\n        /**\r\n         * Initializes a newly created hasher.\r\n         *\r\n         * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\r\n         *\r\n         * @example\r\n         *\r\n         *     var hasher = CryptoJS.algo.SHA256.create();\r\n         */\r\n        init: function (cfg) {\r\n            // Apply config defaults\r\n            this.cfg = this.cfg.extend(cfg);\r\n\r\n            // Set initial values\r\n            this.reset();\r\n        },\r\n\r\n        /**\r\n         * Resets this hasher to its initial state.\r\n         *\r\n         * @example\r\n         *\r\n         *     hasher.reset();\r\n         */\r\n        reset: function () {\r\n            // Reset data buffer\r\n            BufferedBlockAlgorithm.reset.call(this);\r\n\r\n            // Perform concrete-hasher logic\r\n            this._doReset();\r\n        },\r\n\r\n        /**\r\n         * Updates this hasher with a message.\r\n         *\r\n         * @param {WordArray|string} messageUpdate The message to append.\r\n         *\r\n         * @return {Hasher} This hasher.\r\n         *\r\n         * @example\r\n         *\r\n         *     hasher.update('message');\r\n         *     hasher.update(wordArray);\r\n         */\r\n        update: function (messageUpdate) {\r\n            // Append\r\n            this._append(messageUpdate);\r\n\r\n            // Update the hash\r\n            this._process();\r\n\r\n            // Chainable\r\n            return this;\r\n        },\r\n\r\n        /**\r\n         * Finalizes the hash computation.\r\n         * Note that the finalize operation is effectively a destructive, read-once operation.\r\n         *\r\n         * @param {WordArray|string} messageUpdate (Optional) A final message update.\r\n         *\r\n         * @return {WordArray} The hash.\r\n         *\r\n         * @example\r\n         *\r\n         *     var hash = hasher.finalize();\r\n         *     var hash = hasher.finalize('message');\r\n         *     var hash = hasher.finalize(wordArray);\r\n         */\r\n        finalize: function (messageUpdate) {\r\n            // Final message update\r\n            if (messageUpdate) {\r\n                this._append(messageUpdate);\r\n            }\r\n\r\n            // Perform concrete-hasher logic\r\n            var hash = this._doFinalize();\r\n\r\n            return hash;\r\n        },\r\n\r\n        blockSize: 512/32,\r\n\r\n        /**\r\n         * Creates a shortcut function to a hasher's object interface.\r\n         *\r\n         * @param {Hasher} hasher The hasher to create a helper for.\r\n         *\r\n         * @return {Function} The shortcut function.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\r\n         */\r\n        _createHelper: function (hasher) {\r\n            return function (message, cfg) {\r\n                return new hasher.init(cfg).finalize(message);\r\n            };\r\n        },\r\n\r\n        /**\r\n         * Creates a shortcut function to the HMAC's object interface.\r\n         *\r\n         * @param {Hasher} hasher The hasher to use in this HMAC helper.\r\n         *\r\n         * @return {Function} The shortcut function.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\r\n         */\r\n        _createHmacHelper: function (hasher) {\r\n            return function (message, key) {\r\n                return new C_algo.HMAC.init(hasher, key).finalize(message);\r\n            };\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Algorithm namespace.\r\n     */\r\n    var C_algo = C.algo = {};\r\n\r\n    return C;\r\n}(Math));\r\n\r\nexports.CryptoJS = CryptoJS;\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/core.js\n ** module id = 13\n ** module chunks = 0\n **/","// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\nvar keys = objectKeys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n  var method = keys[v];\n  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  processNextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nfunction forEach(xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/lib/_stream_duplex.js\n ** module id = 14\n ** module chunks = 0\n **/","import * as _ from 'underscore';\n\nimport { DataQuery as CommonDataQuery, DataQueryConfig as DataQueryConfigCommon } from '../../common/dataQuery/DataQuery';\nimport { DataQueryOperation } from \"../../common/Constants\";\nimport * as platform from '../../common/platform';\nimport { Query as CommonQuery } from '../../common/query/Query';\n\nimport { Constants } from '../constants';\nimport { Utils } from '../utils';\nimport { Query } from '../query/Query';\n\nconst Headers = Constants.Headers;\n\nexport interface DataQueryConfig extends DataQueryConfigCommon {\n    query?: Query;\n    filter?;\n    headers?: Object;\n    useOffline?: boolean;\n    applyOffline?: boolean;\n    noRetry?;\n    skipAuth?: boolean;\n    isSync?: boolean;\n    preserveState?: boolean;\n    config?: any; // config.config - backward compatibility?\n}\n\nexport class DataQuery extends CommonDataQuery {\n    headers;\n    useOffline: boolean;\n    applyOffline: boolean;\n    noRetry;\n    skipAuth: boolean;\n    _normalizedHeaders;\n    isSync: boolean;\n    collectionName: string;\n    query: Query;\n\n    fields;\n    sort;\n    skip;\n    take;\n    expand;\n    config: DataQueryConfig;\n\n    forceCache: boolean;\n    ignoreCache: boolean;\n\n    preserveState?: boolean;\n\n    /** @deprecated */\n    filter;\n\n    static operations = DataQueryOperation;\n\n    constructor(config: DataQueryConfig) {\n        super(config);\n\n        this.headers = config.headers || {};\n        this.useOffline = config.useOffline;\n        this.applyOffline = config.applyOffline;\n        this.noRetry = config.noRetry; //retry will be done by default, when a request fails because of expired token, once the authentication.completeAuthentication in sdk is called.\n        this.skipAuth = config.skipAuth; //if set to true, the sdk will not require authorization if the data query fails because of expired token. Used internally for various login methods.\n        this._normalizedHeaders = null;\n        this.isSync = config.isSync;\n        this.preserveState = config.preserveState;\n\n        this.query = config.query;\n        //TODO: this MUST extend itself with all properties from the config\n\n        // TODO remove when the offline module is ready\n        const meta = config.meta || config.config.meta || {};\n        if (meta.collectionName) {\n            this.collectionName = meta.collectionName;\n        }\n    }\n\n    get canUseOffline() {\n        let canUseOffline = null;\n        if (Utils.isContentType.files(this.collectionName) && platform.isDesktop) {\n            const op = this.operation;\n            canUseOffline = this.useOffline && (op === DataQueryOperation.Read ||\n                op === DataQueryOperation.ReadById ||\n                op === DataQueryOperation.FilesGetDownloadUrlById ||\n                op === DataQueryOperation.Delete ||\n                op === DataQueryOperation.DeleteById);\n        } else {\n            canUseOffline = this.useOffline;\n        }\n\n        return canUseOffline;\n    }\n\n    _normalizeHeaders() {\n        this._normalizedHeaders = Utils.normalizeKeys(this.headers);\n    }\n\n    getHeader(header) {\n        this._normalizeHeaders();\n        var normalizedHeader = header.toLowerCase();\n        return this._normalizedHeaders[normalizedHeader];\n    }\n\n    getHeaders() {\n        this._normalizeHeaders();\n        var headers = (<any>_).deepExtend(this._normalizedHeaders);\n        return headers;\n    }\n\n    getHeaderAsJSON(header) {\n        this._normalizeHeaders();\n\n        var headerValue;\n        if (header) {\n            headerValue = this._normalizedHeaders[header.toLowerCase()];\n        }\n\n        if (_.isObject(headerValue)) {\n            return headerValue;\n        }\n        if (_.isString(headerValue)) {\n            try {\n                return JSON.parse(headerValue);\n            } catch (e) {\n                return headerValue;\n            }\n        } else {\n            return headerValue;\n        }\n    }\n\n    getQueryParameters() {\n        var queryParams: any = {};\n\n        if (this.operation === DataQuery.operations.ReadById) {\n            queryParams.expand = this.getHeaderAsJSON(Headers.expand);\n            queryParams.select = this.getHeaderAsJSON(Headers.select);\n        } else if (!this.additionalOptions || this.additionalOptions.id === undefined) {\n            var sort = this.getHeaderAsJSON(Headers.sort);\n            var limit = this.getHeaderAsJSON(Headers.take);\n            var skip = this.getHeaderAsJSON(Headers.skip);\n            var select = this.getHeaderAsJSON(Headers.select);\n            var filter = this.getHeaderAsJSON(Headers.filter);\n            var expand = this.getHeaderAsJSON(Headers.expand);\n            var aggregate = this.getHeaderAsJSON(Headers.aggregate);\n\n            if (this.query instanceof CommonQuery) {\n                var filterObj = this.query.build();\n                queryParams.filter = filterObj.$where || filter || {};\n                queryParams.sort = filterObj.$sort || sort;\n                queryParams.limit = filterObj.$take || limit;\n                queryParams.skip = filterObj.$skip || skip;\n                queryParams.select = filterObj.$select || select;\n                queryParams.expand = filterObj.$expand || expand;\n                queryParams.aggregate = filterObj.$aggregate || aggregate;\n            } else {\n                // TODO left for backward compatibility, should be removed later\n                queryParams.filter = (this.filter || filter) || this.config.filter || {};\n                queryParams.sort = sort;\n                queryParams.limit = limit;\n                queryParams.skip = skip;\n                queryParams.select = select;\n                queryParams.expand = expand;\n                queryParams.aggregate = aggregate;\n            }\n        }\n\n        return queryParams;\n    }\n\n    applyEventQuery(eventQuery) {\n        this._applyCustomHeaders(eventQuery);\n        this._applyEventQueryHeaders(eventQuery);\n        this._applyEventQueryParams(eventQuery);\n        this.additionalOptions = this.additionalOptions || {};\n        this.additionalOptions.id = eventQuery.itemId;\n        this.data = eventQuery.data;\n        this._applyEventQuerySettings(eventQuery);\n    }\n\n    _applyCustomHeaders(eventQuery) {\n        this.headers = eventQuery.headers;\n        this._normalizeHeaders();\n    }\n\n    _applyEventQueryHeaders(eventQuery) {\n        this._applyEventHeader(Headers.filter, eventQuery.filter);\n        this._applyEventHeader(Headers.select, eventQuery.fields);\n        this._applyEventHeader(Headers.sort, eventQuery.sort);\n        this._applyEventHeader(Headers.skip, eventQuery.skip);\n        this._applyEventHeader(Headers.take, eventQuery.take);\n        this._applyEventHeader(Headers.expand, eventQuery.expand);\n        this._applyEventHeader(Headers.aggregate, eventQuery.aggregate);\n        this._applyEventHeader(Headers.powerFields, eventQuery.powerfields);\n    }\n\n    _applyEventQueryParams(eventQuery) {\n        if (eventQuery.filter) {\n            this.query = this.query || new Query();\n            this.query.filter = eventQuery.filter;\n        }\n\n        if (eventQuery.aggregate) {\n            this.query = this.query || new Query();\n            this.query.aggregateExpression = eventQuery.aggregate;\n        }\n\n        this.fields = eventQuery.select;\n        this.sort = eventQuery.sort;\n        this.skip = eventQuery.skip;\n        this.take = eventQuery.take;\n        this.expand = eventQuery.expand;\n    }\n\n    _applyEventQuerySettings(eventQuery) {\n        this.useOffline = eventQuery.settings.useOffline;\n        this.forceCache = eventQuery.settings.forceCache;\n        this.ignoreCache = eventQuery.settings.ignoreCache;\n        this.applyOffline = eventQuery.settings.applyOffline;\n    }\n\n    _applyEventHeader(header, value) {\n        if (value && typeof value !== 'string') {\n            var headerToLower = header.toLowerCase();\n            this.headers[headerToLower] = JSON.stringify(value);\n        }\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/dataQuery/DataQuery.ts\n **/","'use strict';\n\nimport * as _ from 'underscore';\n\nimport {Constants} from '../constants';\n\nvar traverseAndApply = function (value, operation, additionalOptions?) {\n    if (_.isArray(value)) {\n        return _.map(value, function (item) {\n            return operation(item, additionalOptions);\n        });\n    } else {\n        return operation(value, additionalOptions);\n    }\n};\n\nvar idTransformation = function (value) {\n    if (typeof value === 'object' && value._id && !value.Id) {\n        value.Id = value._id;\n        delete value._id;\n    }\n\n    return value;\n};\n\nvar removeIdTransform = function (value, opts) {\n    var verifyStateCreated = opts.verifyStateCreated;\n    var shouldModifyObject = verifyStateCreated ? value[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.created : true;\n    if (typeof value === 'object' && (value._id || value.Id) && shouldModifyObject) {\n        delete value._id;\n        delete value.Id;\n    }\n\n    return value;\n};\n\nvar removeMarkerTransform = function (value) {\n    delete value[Constants.offlineItemsStateMarker];\n    return value;\n};\n\nexport const offlineTransformations = {\n    removeIdTransform: function (value, verifyStateCreated?) {\n        return traverseAndApply(value, removeIdTransform, {verifyStateCreated: verifyStateCreated});\n    },\n    idTransform: function (value) {\n        return traverseAndApply(value, idTransformation);\n    },\n    singleFieldTransform: function (singleFieldExpression, value) {\n        if (typeof value === 'undefined' || value === null) {\n            return null;\n        } else {\n            return value[singleFieldExpression];\n        }\n    },\n    traverseAndTransformFilterId: function (filterObj) {\n        if (filterObj && filterObj.Id) {\n            filterObj._id = filterObj.Id;\n            delete filterObj.Id;\n        }\n\n        for (var prop in filterObj) {\n            if (filterObj.hasOwnProperty(prop)) {\n                var objectMember = filterObj[prop];\n                if (typeof objectMember === 'object') {\n                    offlineTransformations.traverseAndTransformFilterId(objectMember);\n                }\n            }\n        }\n    },\n    removeMarkersTransform: function (value) {\n        return traverseAndApply(value, removeMarkerTransform);\n    },\n    removeFieldsTransform: function (value: any, fields: any) {\n        _.each(fields, function (field: any) {\n            delete value[field];\n        });\n\n        return value;\n    }\n};\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/offlineTransformations.ts\n **/","'use strict';\n\nimport * as _ from 'underscore';\n\nimport { EverliveError } from '../../EverliveError';\nimport { Persister } from './Persister';\n\nimport { Utils } from '../../utils';\n\n/**\n * @class BasePersister\n * @classdesc An abstraction layer for all persisters. Every persister can write/read\n * data to/from a specific place. The data is saved as key-value pairs where the keys are\n * content types.\n */\nexport class BasePersister implements Persister {\n    contentTypesStoreKey: string;\n\n    constructor(\n        public key: string,\n        public options: any\n    ) {\n        this.contentTypesStoreKey = this.key + '@ContentTypes';\n    }\n\n    /**\n     * Gets all the saved data.\n     * @method getAllData\n     * @memberof BasePersister\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @returns {Object} The keys are the content types and the values are the corresponding data items.\n     */\n    getAllData(success, error) {\n        var self = this;\n        var promises: any = {};\n        this._getContentTypes(function (contentTypes) {\n            _.each(contentTypes, function (contentType: any) {\n                promises[contentType] = new Promise(function (resolve, reject) {\n                    self.getData(contentType, resolve, reject);\n                });\n            });\n\n            Utils.promiseHash(promises)\n                .then(success)\n                .catch(error);\n        }, error);\n    }\n\n    /**\n     * Returns the saved data for a specific content type.\n     * @method getData\n     * @param {string} contentType The content type for which to retrieve the data.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @memberof BasePersister\n     * @returns {string} The retrieved data.\n     */\n    getData(contentType, success, error) {\n        throw new EverliveError({message: 'The method getData is not implemented'});\n    }\n\n    /**\n     * Saves data for a specific content type.\n     * @method saveData\n     * @param {string} contentType The content for which to save the data.\n     * @param {string} data The data corresponding to the specified content type.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @memberof BasePersister\n     */\n    saveData(contentType, data, success, error) {\n        throw new EverliveError({message: 'The method saveData is not implemented'});\n    }\n\n    /**\n     * Clears the persisted data for a specific content type.\n     * @method purge\n     * @param {string} contentType The content type for which to clear the data.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @memberof BasePersister\n     */\n    purge(contentType, success, error) {\n        throw new EverliveError({message: 'The method purge is not implemented'});\n    }\n\n    /**\n     * Clears all persisted data in the offline store.\n     * @method purgeAll\n     * @memberof BasePersister\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     */\n    purgeAll(success, error) {\n        throw new EverliveError({message: 'The method purgeAll is not implemented'});\n    }\n\n    /**\n     * Clears the persisted data for a specific item.\n     * @method purgeById\n     * @memberof BasePersister\n     * @param {string} contentType The content type for which to clear the data item.\n     * @param {string} itemId The item id that will be cleared.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     */\n    purgeById(contentType, itemId, success, error){\n        throw new EverliveError({message: 'The method purgeById is not implemented'});\n    }\n\n    /**\n     * Get the number of items for the specifeid content type.\n     * @method count\n     * @memberof BasePersister\n     * @param {string} contentType The content type for which to clear the data item.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @param {Object=} filter Count the items by filter.\n     */\n    count(contentType, success, error, filter?) {\n        throw new EverliveError({message: 'The method count is not implemented'});\n    }\n\n    /**\n     * Get the data for the specified content type by using filter/sort/skip/take/fields\n     * @method queryData\n     * @memberof BasePersister\n     * @param {string} contentType The content type for which to clear the data item.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @param {Object=} filter Get items by filter.\n     * @param {Object=} sort Sort the result items.\n     * @param {number=} skip Skip a number of items.\n     * @param {number=} limit Take only a number of items.\n     * @param {Object=} select Select a subset of fields from the result items.\n     */\n    queryData(contentType, success, error, filter?, sort?, skip?, limit?, select?) {\n        throw new EverliveError({message: 'The method queryData is not implemented'});\n    }\n\n    /**\n     * Delete items for the specified content type\n     * @method removeData\n     * @memberof BasePersister\n     * @param {string} contentType The content type for which to clear the data item.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @param {Object=} filter Delete the items matching the specified filter.\n     */\n    removeData(contentType, success, error, filter?) {\n        throw new EverliveError({message: 'The method removeData is not implemented'});\n    }\n\n    /**\n     * Update items for the specified content type\n     * @method updateData\n     * @memberof BasePersister\n     * @param {string} contentType The content type for which to clear the data item.\n     * @param {Object} updateObj The update expression.\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     * @param {Object=} filter Update the items matching the specified filter.\n     */\n    updateData(contentType, updateObj, success, error, filter?) {\n        throw new EverliveError({message: 'The method updateData is not implemented'});\n    }\n\n    _getKey(contentType) {\n        return this.key + '_' + contentType;\n    }\n\n    /**\n     * Returns a list of the mapped content types.\n     * @method _getContentTypes\n     * @memberof BasePersister\n     * @param {Function} success A success callback.\n     * @param {Function} error An error callback.\n     */\n    _getContentTypes(success, error) {\n        throw new EverliveError({message: 'The method _getContentTypes is not implemented'});\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/persisters/BasePersister.ts\n **/","import * as _ from 'underscore';\n\nimport { Utils } from '../utils';\nimport { Constants, DataQueryOperation } from '../constants';\nimport { DataQuery } from '../dataQuery/DataQuery';\nimport { DataQuery as CommonDataQuery } from '../../common/dataQuery/DataQuery';\nimport { EverliveError, EverliveErrors, EverliveErrorHelper } from '../EverliveError';\nimport CommonData from '../../common/Data';\nimport { Everlive } from '../Everlive';\nimport { Sdk } from '../../common/Sdk';\nimport { OfflineStorageModule } from '../offline/OfflineStorageModule';\n\nimport { MultipleResult } from '../interfaces/MultipleResult';\nimport { SuccessCallback } from '../interfaces/SuccessCallback';\nimport { ErrorCallback } from '../interfaces/ErrorCallback';\nimport { Item } from '../interfaces/Item';\nimport { SingleResult } from '../interfaces/SingleResult';\nimport { CreateItemResult } from '../interfaces/CreateItemResult';\nimport { UpdateItemResult } from '../interfaces/UpdateItemResult';\nimport { SaveItemResult } from '../interfaces/SaveItemResult';\nimport { Setup } from '../Setup';\n\n/**\n * @class Data\n * @classdesc A class that provides methods for all CRUD operations to a given {{site.tap}} data type. Covers advanced scenarios with custom headers and special server-side functionality.\n * @param {object} collectionName\n * @param {object} sdk\n * @protected\n */\nexport class Data<T extends Item> extends CommonData {\n    setup: Setup;\n    options: any;\n    sdk: Everlive;\n\n    constructor(sdk: Everlive, public collectionName: string) {\n        super(sdk as Sdk, collectionName);\n\n        this.setup = this.sdk.setup;\n        this.options = null;\n    }\n\n    get offlineStorage(): OfflineStorageModule {\n        return this.sdk.offlineStorage;\n    }\n\n    private _isOnline(): boolean {\n        return this.offlineStorage ? this.offlineStorage.isOnline() : true;\n    }\n\n    private _getOfflineCreateData(query, requestResponse) {\n        var createData;\n        if (_.isArray(query.data)) {\n            createData = [];\n            for (var i = 0; i < query.data.length; i++) {\n                var objectToCreate = _.extend(query.data[i], requestResponse.Result[i]);\n                createData.push(objectToCreate)\n            }\n        } else {\n            createData = _.extend(query.data, requestResponse.Result);\n        }\n\n        return createData;\n    }\n\n    private _destroy(attrs, filterOrQuery, single, success, error): Promise<SingleResult<number>> {\n        const op = single ? DataQueryOperation.DeleteById : DataQueryOperation.Delete;\n        const idField = (attrs && typeof attrs === 'object') ? attrs[Constants.idField] : attrs;\n\n        const dataQuery = this.buildDataQuery({\n            additionalOptions: {\n                id: single ? idField : undefined\n            },\n            query: filterOrQuery\n        }, op);\n        return this.processDataQuery<SingleResult<number>>(dataQuery, success, error);\n    }\n\n    private _setOption(key, value): this {\n        this.options = this.options || {};\n        if (_.isObject(value)) {\n            this.options[key] = _.extend({}, this.options[key], value);\n        } else {\n            this.options[key] = value;\n        }\n\n        return this;\n    }\n\n    // TODO: Check if there is a case in which replace = true is passed to this function\n    private _update(attrs, filterOrQuery, single, replace, success, error): Promise<UpdateItemResult> {\n        const dataQuery = this.buildDataQuery({\n            updateObject: {\n                [replace ? '$replace' : '$set']: attrs\n            },\n            additionalOptions: {\n                id: single ? attrs[Constants.idField] : undefined\n            },\n            query: filterOrQuery\n        }, DataQueryOperation.Update);\n        return this.processDataQuery<UpdateItemResult>(dataQuery, success, error);\n    }\n\n    private _invalidIdErrorResponse(errorHandler): Promise<any> {\n        var err = new EverliveError(EverliveErrors.invalidId);\n        return Utils.callbackAndPromiseErrorResponse(err, errorHandler);\n    }\n\n    applyQueryOffline(query, requestResponse): Promise<any> {\n        var autoSyncEnabled = this.offlineStorage && this.offlineStorage.options.autoSync;\n        if (autoSyncEnabled) {\n            switch (query.operation) {\n                case DataQueryOperation.Read:\n                case DataQueryOperation.ReadById:\n                case DataQueryOperation.FilesGetDownloadUrlById:\n                    var syncReadQuery = new DataQuery(_.defaults({\n                        data: requestResponse.Result,\n                        isSync: true,\n                        operation: DataQueryOperation.Create\n                    }, query));\n                    return this.offlineStorage.processQuery(syncReadQuery);\n                case DataQueryOperation.Create:\n                    var createData = this._getOfflineCreateData(query, requestResponse);\n                    var createQuery = new DataQuery(_.defaults({\n                        data: createData,\n                        isSync: true\n                    }, query));\n                    return this.offlineStorage.processQuery(createQuery);\n                case DataQueryOperation.Update:\n                case DataQueryOperation.RawUpdate:\n                    query.isSync = true;\n                    query.ModifiedAt = requestResponse.ModifiedAt;\n                    return this.offlineStorage.processQuery(query);\n                default:\n                    query.isSync = true;\n                    return this.offlineStorage.processQuery(query);\n            }\n        }\n\n        return new Promise(function (resolve) {\n            resolve();\n        });\n    }\n\n    /**\n     * Modifies whether the query should be invoked on the offline storage.\n     * @memberOf Data.prototype\n     * @method useOffline\n     * @name useOffline\n     * @param {boolean} useOffline\n     * @returns {Data} Returns the same instance of the Data object.\n     */\n    useOffline(useOffline: boolean): this {\n        if (arguments.length !== 1) {\n            const message = EverliveErrorHelper.buildSingleValueExpectedErrorMessage('useOffline()');\n            throw new EverliveError({message, code: EverliveErrors.singleValueExpected.code});\n        }\n\n        const isOfflineEnabled = this.sdk._isOfflineStorageEnabled();\n        if (useOffline === true && !isOfflineEnabled) {\n            throw new EverliveError(EverliveErrors.noOfflineSupport);\n        }\n\n        return this._setOption('useOffline', useOffline);\n    }\n\n    /**\n     * Does not use the cache when retrieving the data.\n     * Only valid when caching is enabled.\n     * @memberOf Data.prototype\n     * @method ignoreCache\n     * @name ignoreCache\n     * @returns {Data}\n     * */\n    ignoreCache(): this {\n        return this._setOption('ignoreCache', true);\n    }\n\n    /**\n     * Forces the request to get the data from the cache even if the data is already expired.\n     * Only valid when caching is enabled.\n     * @memberOf Data.prototype\n     * @method forceCache\n     * @name forceCache\n     * @returns {Data}\n     * */\n    forceCache(): this {\n        return this._setOption('forceCache', true);\n    }\n\n    /**\n     * Sets cache expiration specifically for the current query.\n     * Only valid when caching is enabled.\n     * @memberOf Data.prototype\n     * @method maxAge\n     * @name maxAge\n     * @param maxAgeInMinutes {Number}\n     * @returns {Data}\n     * */\n    maxAge(maxAgeInMinutes: number): this {\n        var maxAge = maxAgeInMinutes * 1000 * 60;\n        return this._setOption('maxAge', maxAge);\n    }\n\n    isSync(isSync: boolean): this {\n        if (arguments.length !== 1) {\n            const message = EverliveErrorHelper.buildSingleValueExpectedErrorMessage('isSync()');\n            throw new EverliveError({message, code: EverliveErrors.singleValueExpected.code});\n        }\n\n        return this._setOption('isSync', isSync);\n    }\n\n    /**\n     * Modifies whether the query should try to authenticate if the security token has expired.\n     * Default is false.\n     * Only valid when the authentication module has an onAuthenticationRequired function.\n     * @memberOf Data.prototype\n     * @method skipAuth\n     * @param skipAuth {Boolean}\n     * @returns {Data}\n     * */\n    skipAuth(skipAuth: boolean): this {\n        if (arguments.length !== 1) {\n            const message = EverliveErrorHelper.buildSingleValueExpectedErrorMessage('skipAuth()');\n            throw new EverliveError({message, code: EverliveErrors.singleValueExpected.code});\n        }\n\n        return this._setOption('skipAuth', skipAuth);\n    }\n\n    /**\n     * Modifies whether the query should be applied offline, if the sdk is currently working online.\n     * Default is true.\n     * Only valid when offlineStorage is enabled.\n     * @memberOf Data.prototype\n     * @method applyOffline\n     * @param applyOffline {Boolean} Whether the operation should be applied offline or not\n     * @returns {Data}\n     * */\n    applyOffline(applyOffline: boolean): this {\n        if (arguments.length !== 1) {\n            const message = EverliveErrorHelper.buildSingleValueExpectedErrorMessage('applyOffline()');\n            throw new EverliveError({message, code: EverliveErrors.singleValueExpected.code});\n        }\n\n        return this._setOption('applyOffline', applyOffline);\n    }\n\n    /**\n     * Sets additional non-standard HTTP headers in the current data request. See [List of Request Parameters](http://docs.telerik.com/platform/backend-services/rest/apireference/RESTfulAPI/custom_headers) for more information.\n     * @memberOf Data.prototype\n     * @method withHeaders\n     * @param {object} headers Additional headers to be sent with the data request.\n     * @returns {Data}\n     */\n    withHeaders(headers): this {\n        return this._setOption('headers', headers);\n    }\n\n    /**\n     * Sets an expand expression to be used in the data request. This allows you to retrieve complex data sets using a single query based on relations between data types.\n     * @memberOf Data.prototype\n     * @method expand\n     * @param {object} expandExpression An [expand expression](http://docs.telerik.com/platform/backend-services/rest/data/relations/relations-defining) definition.\n     * @returns {Data}\n     */\n    expand(expandExpression): this {\n        const expandHeader = {\n            'X-Everlive-Expand': JSON.stringify(expandExpression)\n        };\n\n        return this.withHeaders(expandHeader);\n    }\n\n    buildDataQuery(data: any, op: DataQueryOperation): CommonDataQuery {\n        return super.buildDataQuery(data, op, {\n            collectionName: this.collectionName\n        });\n    }\n\n    // TODO implement options: { requestSettings: { executeServerCode: false } }. power fields queries could be added to that options argument\n    /**\n     * Gets all data items that match the filter. This allows you to retrieve a subset of the items based on various filtering criteria.\n     * @memberOf Data.prototype\n     * @method get\n     * @name get\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Gets all data items that match the filter. This allows you to retrieve a subset of the items based on various filtering criteria.\n     * @memberOf Data.prototype\n     * @method get\n     * @name get\n     * @param {object|null} query A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    get(query?: any, success?: SuccessCallback<MultipleResult<T>>, error?: ErrorCallback): Promise<MultipleResult<T>> {\n        const dataQuery = this.buildDataQuery(query, DataQueryOperation.Read);\n        return this.processDataQuery<MultipleResult<T>>(dataQuery, success, error);\n    }\n\n    // TODO handle options\n    // TODO think to pass the id as a filter\n\n    /**\n     * Gets a data item by ID.\n     * @memberOf Data.prototype\n     * @method getById\n     * @name getById\n     * @param {string} id ID of the item.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Gets an item by ID.\n     * @memberOf Data.prototype\n     * @method getById\n     * @name getById\n     * @param {string} id ID of the item.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     * */\n    getById(id: string, success?: SuccessCallback<MultipleResult<T>>, error?: ErrorCallback): Promise<SingleResult<T>> {\n        if (!Utils.modelHasValidId(id)) {\n            return this._invalidIdErrorResponse(error);\n        }\n\n        const dataQuery = this.buildDataQuery({\n            additionalOptions: {id}\n        }, DataQueryOperation.ReadById);\n        return this.processDataQuery<SingleResult<T>>(dataQuery, success, error);\n    }\n\n    /**\n     *  A fluent API aggregation / grouping data from server. Can accept aggregationExpression or fluent chaining rules.\n     * @memberOf Data.prototype\n     * @method aggregate\n     * @name aggregate\n     * @param {object} aggregateQuery fields / Aggregation functions [aggregationExpression].\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     *  A fluent API aggregation / grouping data from server. Can accept aggregationExpression or fluent chaining rules.\n     * @memberOf Data.prototype\n     * @method aggregate\n     * @name aggregate\n     * @param {object} aggregateQuery fields / Aggregation functions [aggregationExpression].\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     * */\n    aggregate(aggregateQuery, success?: SuccessCallback<any[]>, error?: ErrorCallback) {\n        const dataQuery = this.buildDataQuery(aggregateQuery, DataQueryOperation.Aggregate);\n        return this.processDataQuery(dataQuery, success, error);\n    }\n\n    /**\n     * Gets the count of the data items that match the filter.\n     * @memberOf Data.prototype\n     * @method count\n     * @name count\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Gets the count of the items that match the filter.\n     * @memberOf Data.prototype\n     * @method count\n     * @name count\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    count(filter: any, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>> {\n        const dataQuery = this.buildDataQuery(filter, DataQueryOperation.Count);\n        return this.processDataQuery<SingleResult<number>>(dataQuery, success, error);\n    }\n\n    /**\n     * Creates a data item.\n     * @memberOf Data.prototype\n     * @method create\n     * @name create\n     * @param {object|object[]} data Item or items that will be created.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Creates an item.\n     * @memberOf Data.prototype\n     * @method create\n     * @name create\n     * @param {object|object[]} data The item or items that will be created.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    create(data, success?: SuccessCallback<CreateItemResult>, error?: ErrorCallback): Promise<CreateItemResult> {\n        const dataQuery = this.buildDataQuery(data, DataQueryOperation.Create);\n        return this.processDataQuery<CreateItemResult>(dataQuery, success, error);\n    }\n\n    /**\n     * Updates all objects that match a filter with the specified update expression.\n     * @memberOf Data.prototype\n     * @method rawUpdate\n     * @name rawUpdate\n     * @param {object} updateObject Update object that contains the new values.\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Updates all objects that match a filter with the specified update expression.\n     * @memberOf Data.prototype\n     * @method rawUpdate\n     * @name rawUpdate\n     * @param {object} updateObject Update object that contains the new values.\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    /**\n     * Updates an object by ID with the specified update expression.\n     * @memberOf Data.prototype\n     * @method rawUpdate\n     * @name rawUpdate\n     * @param {object} updateObject Updated object that contains the new values.\n     * @param {string} filterOrId The ID of the item.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Updates an object by ID with the specified update expression.\n     * @memberOf Data.prototype\n     * @method rawUpdate\n     * @name rawUpdate\n     * @param {object} updateObject Updated object that contains the new values.\n     * @param {string} filterOrId The ID of the item.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    rawUpdate(updateObject: any, filterOrId: any|string, success?: SuccessCallback<UpdateItemResult>, error?: ErrorCallback): Promise<UpdateItemResult> {\n        var self = this;\n        var isSingleUpdate = typeof filterOrId === 'string' || typeof filterOrId === 'number';\n\n        if (isSingleUpdate && !Utils.modelHasValidId(filterOrId)) {\n            return self._invalidIdErrorResponse(error);\n        }\n\n        const query = isSingleUpdate ? filterOrId : this.sdk.dataQueryBuilder._buildQuery(filterOrId);\n        const additionalOptions = {\n            id: isSingleUpdate ? filterOrId : undefined\n        };\n\n        const dataQuery = this.buildDataQuery({\n            query,\n            additionalOptions,\n            updateObject\n        }, DataQueryOperation.RawUpdate);\n        return this.processDataQuery<UpdateItemResult>(dataQuery, success, error);\n    }\n\n    /**\n     * Updates a single data item. This operation takes an object that specifies both the data item to be updated and the updated values.\n     * @memberOf Data.prototype\n     * @method updateSingle\n     * @name updateSingle\n     * @param item {object} The item that will be updated. Note: the ID property of the item will be used to determine which item will be updated.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Updates the provided item.\n     * @memberOf Data.prototype\n     * @method updateSingle\n     * @name updateSingle\n     * @param item {object} The item that will be updated. Note: the ID property of the item will be used to determine which item will be updated.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    updateSingle(item: T|{ Id: string|number }, success?: SuccessCallback<UpdateItemResult>, error?: ErrorCallback): Promise<UpdateItemResult> {\n        if (!Utils.modelHasValidId(item)) {\n            return <Promise<UpdateItemResult>>this._invalidIdErrorResponse(error);\n        }\n\n        return this._update(item, null, true, false, success, error);\n    }\n\n    /**\n     * Updates all items that match a filter with the specified update object.\n     * @memberOf Data.prototype\n     * @method update\n     * @name update\n     * @param {object} updateObject The update object.\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Updates all items that match the filter with the specified update object.\n     * @memberOf Data.prototype\n     * @method update\n     * @name update\n     * @param {object} updateObject The update object.\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    update(updateObject: any, filter: any, success?: SuccessCallback<UpdateItemResult>, error?: ErrorCallback): Promise<UpdateItemResult> {\n        return this._update(updateObject, filter, false, false, success, error);\n    }\n\n    /**\n     * Deletes a single data item by ID.\n     * @memberOf Data.prototype\n     * @method destroySingle\n     * @name destroySingle\n     * @param {string} itemId The ID of the item to delete.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Deletes a single data item by ID.\n     * @memberOf Data.prototype\n     * @method destroySingle\n     * @name destroySingle\n     * @param {string} itemId The ID of the item to delete.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    /**\n     * Deletes a single data item by ID.\n     * @memberOf Data.prototype\n     * @method destroySingle\n     * @name destroySingle\n     * @param {object} item Object containing the item ID to be deleted.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Deletes a single data item by ID.\n     * @memberOf Data.prototype\n     * @method destroySingle\n     * @name destroySingle\n     * @param {object} model Object containing the item ID to be deleted.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    destroySingle(model: any, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>> {\n        if (!Utils.modelHasValidId(model)) {\n            return <Promise<SingleResult<number>>>this._invalidIdErrorResponse(error);\n        }\n\n        return this._destroy(model, null, true, success, error);\n    }\n\n    /**\n     * Deletes all data items that match a filter.\n     * @memberOf Data.prototype\n     * @method destroy\n     * @name destroy\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Deletes all items that match the filter.\n     * @memberOf Data.prototype\n     * @method destroy\n     * @name destroy\n     * @param {object|null} filter A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    destroy(filter: any, success?: SuccessCallback<SingleResult<T>>, error?: ErrorCallback): Promise<SingleResult<number>> {\n        return this._destroy(null, filter, false, success, error);\n    }\n\n    /**\n     * Sets the Access Control List (ACL) of a specified data item.\n     * @memberOf Data.prototype\n     * @method setAcl\n     * @name setAcl\n     * @param {object} acl The acl object.\n     * @param {object} item The item whose ACL will be updated. Note: the ID property of the item will be used to determine which item will be updated.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Sets the Access Control List (ACL) of a specified data item.\n     * @memberOf Data.prototype\n     * @method setAcl\n     * @name setAcl\n     * @param {object} acl The acl object.\n     * @param {string} filter The ID of the item.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Sets the Access Control List (ACL) of an item with a specified ID.\n     * @memberOf Data.prototype\n     * @method setAcl\n     * @name setAcl\n     * @param {object} acl The acl object.\n     * @param {string} filter The ID of the item or item.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    setAcl(acl: any, id: string, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>>;\n    setAcl(acl: any, id: number, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>>;\n    setAcl(acl: any, item: T, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>>;\n    setAcl(acl: any, filter: string|number|T, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>> {\n        if (!Utils.modelHasValidId(filter)) {\n            return <Promise<SingleResult<number>>>this._invalidIdErrorResponse(error);\n        }\n\n        const additionalOptions: any = { acl };\n        const data = { additionalOptions };\n        additionalOptions.id = filter[Constants.idField] || filter;\n\n        const dataQuery = this.buildDataQuery(data, DataQueryOperation.SetAcl);\n        return this.processDataQuery<SingleResult<number>>(dataQuery, success, error);\n    }\n\n    /**\n     * Sets the owner of the specified data item.\n     * @memberOf Data.prototype\n     * @method setOwner\n     * @name setOwner\n     * @param {string} acl The new owner ID.\n     * @param {object} item The item whose owner will be updated. Note: the ID property of the item will be used to determine which item will be updated.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Sets the owner of the specified data item.\n     * @memberOf Data.prototype\n     * @method setOwner\n     * @name setOwner\n     * @param {string} ownerId The new owner ID.\n     * @param {string} id The ID of the item.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Sets the owner of the specified data item.\n     * @memberOf Data.prototype\n     * @method setOwner\n     * @name setOwner\n     * @param {string} ownerId The new owner ID.\n     * @param {string} filter The ID of the item or item.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    setOwner(ownerId: string, itemId: string, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>>;\n    setOwner(ownerId: string, itemId: number, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>>;\n    setOwner(ownerId: string, item: T, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>>;\n    setOwner(ownerId: string, filter: string|number|T, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>> {\n        if (!Utils.modelHasValidId(filter)) {\n            return <Promise<SingleResult<number>>>this._invalidIdErrorResponse(error);\n        }\n\n        const data = {\n            updateObject: { Owner: ownerId },\n            additionalOptions: <any>{}\n        };\n\n        data.additionalOptions.id = filter[Constants.idField] || filter;\n\n        const dataQuery = this.buildDataQuery(data, DataQueryOperation.SetOwner);\n        return this.processDataQuery<SingleResult<number>>(dataQuery, success, error);\n    }\n\n    /**\n     * Saves the provided data item. This operation will create or update the item depending on whether it is new or existing.\n     * @memberOf Data.prototype\n     * @method save\n     * @name save\n     * @param {object} item An object containing the item that is being saved.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Saves the provided data item. This operation will create or update the item depending on whether it is new or existing.\n     * @memberOf Data.prototype\n     * @method save\n     * @name save\n     * @param {object} model An object containing the item that is being saved.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    save(model: any, success?: SuccessCallback<SaveItemResult>, error?: ErrorCallback): Promise<SaveItemResult> {\n        return Utils.buildPromise<SaveItemResult>((success, error) => {\n            var isNew = this.isNew(model);\n            let promise;\n            if (isNew) {\n                promise = this.create(model);\n            } else {\n                promise = this.updateSingle(model);\n            }\n\n            const type = isNew ? 'create' : 'update';\n            promise\n                .then(res => {\n                    res.type = type;\n                    success(res);\n                })\n                .catch(err => {\n                    err.type = type;\n                    error(err);\n                });\n        }, success, error);\n    }\n\n    /**\n     * Checks if the specified data item is new or not.\n     * @memberOf Data.prototype\n     * @method isNew\n     * @param model Item to check.\n     * @returns {boolean}\n     */\n    isNew(model): boolean {\n        return typeof model[Constants.idField] === 'undefined';\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/Data.ts\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/events/events.js\n ** module id = 19\n ** module chunks = 0\n **/","export class Expression {\n    constructor(\n        public operator: any,\n        public operands: any[] = []\n    ) {\n\n    }\n\n    addOperand(operand): void {\n        this.operands.push(operand);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/Expression.ts\n **/","import * as _ from 'underscore';\n\nimport { BasePersister } from './persisters/BasePersister';\nimport { LocalStoragePersister } from './persisters/LocalStoragePersister';\nimport { FileSystemPersister } from './persisters/FileSystemPersister';\nimport { SQLitePersister } from './persisters/SQLitePersister';\nimport { Constants } from '../constants';\nimport { EverliveError } from '../EverliveError';\n\nfunction getPersister(storageKey, options):BasePersister {\n    var persister;\n\n    var storageProvider = options.storage.provider;\n    var storageProviderImplementation = options.storage.implementation;\n    if (_.isObject(storageProviderImplementation) && storageProvider === Constants.StorageProvider.Custom) {\n        persister = storageProviderImplementation;\n    } else {\n        switch (storageProvider) {\n            case Constants.StorageProvider.LocalStorage:\n                persister = new LocalStoragePersister(storageKey, options);\n                break;\n            case Constants.StorageProvider.FileSystem:\n                persister = new FileSystemPersister(storageKey, options);\n                break;\n            case Constants.StorageProvider.SQLite:\n                persister = new SQLitePersister(storageKey, options);\n                break;\n            case Constants.StorageProvider.Custom:\n                throw new EverliveError({message: 'Custom storage provider requires an implementation object'});\n            default:\n                throw new EverliveError({message: 'Unsupported storage type ' + storageProvider});\n        }\n    }\n\n    return persister;\n}\n\nexport {\n    BasePersister,\n    LocalStoragePersister,\n    FileSystemPersister,\n    SQLitePersister,\n    getPersister\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/offlinePersisters.ts\n **/","import * as _ from 'underscore';\n\nimport { Query } from '../query/Query';\nimport { EverliveError } from '../EverliveError';\n\nexport interface AggregateExpression {\n    GroupBy: any[],\n    Aggregate: any\n}\n\n/**\n * @class AggregateQuery\n * @classdesc A query class used to describe a aggregation request that will be made to the {{site.bs}} JavaScript SDK. Inherits from Query.\n */\nexport class AggregateQuery extends Query {\n    aggregateExpression: AggregateExpression;\n\n    constructor(filter?, fields?, sort?, skip?, take?, expand?, aggregateExpressionParam?) {\n        super(filter, fields, sort, skip, take, expand);\n        this.aggregateExpression = {'GroupBy': [], 'Aggregate': {}};\n\n        // the aggregate expression will be the last argument when initializing the query\n        var aggregateExpression = aggregateExpressionParam;\n        var groupBy;\n        var aggregate;\n        if (aggregateExpression) {\n            groupBy = aggregateExpression.GroupBy;\n            aggregate = aggregateExpression.Aggregate;\n        }\n\n        this.aggregateExpression = {'GroupBy': groupBy || [], 'Aggregate': aggregate || {}};\n    };\n\n    // wrapper formatter to all aggregate functions, like min/max/sum/average/count\n    _aggregateFunc(funcName, fieldName, destName): AggregateQuery {\n        if (typeof fieldName !== 'string' && funcName !== 'count' ) {\n            throw new EverliveError({message: funcName + '() accepts only string as parameter.'});\n        }\n        var aggregationObj = {};\n        aggregationObj[funcName] = fieldName;\n        this.aggregateExpression.Aggregate[destName || fieldName] = aggregationObj;\n        return this;\n    };\n\n    /** Applies a groupBy to the current query. This allows you to group results by\n     * @memberOf AggregateQuery.prototype\n     * @method groupBy\n     * @name groupBy\n     * @param {String} field to group by\n     * @param {Array} array of strings with fields to group by\n     * @returns {AggregateQuery}\n     */\n    groupBy(data) {\n        if (_.isArray(data)) {\n            Array.prototype.push.apply(this.aggregateExpression.GroupBy, data);\n        } else {\n            if (typeof data === 'string') {\n                this.aggregateExpression.GroupBy.push(data);\n            } else {\n                throw new EverliveError({message: 'groupBy() accepts only array or string as parameter.'});\n            }\n        }\n        return this;\n    };\n    /** Adds aggregation function 'avg' (average) to the current query. Could set [resultFieldName]\n     * @memberOf AggregateQuery.prototype\n     * @method avg\n     * @name avg\n     * @param {String} field to apply aggregate function on\n     * @param {String} [resultFieldName] (Optional) Name of resulting field\n     * @returns {AggregateQuery}\n     */\n    avg(...args) {\n        Array.prototype.unshift.call(args, 'avg');\n        return this._aggregateFunc.apply(this, args);\n    };\n\n    /** Adds aggregation function 'count' to the current query. Could set [resultFieldName]\n     * @memberOf AggregateQuery.prototype\n     * @method count\n     * @name count\n     * @param {String} field to apply aggregate function on\n     * @param {String} [resultFieldName] (Optional) Name of resulting field\n     * @returns {AggregateQuery}\n     */\n    count(resultFieldName) {\n        return this._aggregateFunc('count', null, resultFieldName || 'Count');\n    };\n\n    /** Adds aggregation function 'max' to the current query. Could set [resultFieldName]\n     * @memberOf AggregateQuery.prototype\n     * @method max\n     * @name max\n     * @param {String} field to apply aggregate function on\n     * @param {String} [resultFieldName] (Optional) Name of resulting field\n     * @returns {AggregateQuery}\n     */\n    max(...args) {\n        Array.prototype.unshift.call(args, 'max');\n        return this._aggregateFunc.apply(this, args);\n    };\n\n    /** Adds aggregation function 'min' to the current query. Could set [resultFieldName]\n     * @memberOf AggregateQuery.prototype\n     * @method min\n     * @name min\n     * @param {String} field to apply aggregate function on\n     * @param {String} [resultFieldName] (Optional) Name of resulting field\n     * @returns {AggregateQuery}\n     */\n    min(...args) {\n        Array.prototype.unshift.call(args, 'min');\n        return this._aggregateFunc.apply(this, args);\n    };\n\n    /** Adds aggregation function 'sum' to the current query. Could set [resultFieldName]\n     * @memberOf AggregateQuery.prototype\n     * @method sum\n     * @name sum\n     * @param {String} field to apply aggregate function on\n     * @param {String} [resultFieldName] (Optional) Name of resulting field\n     * @returns {AggregateQuery}\n     */\n    sum(...args) {\n        Array.prototype.unshift.call(args, 'sum');\n        return this._aggregateFunc.apply(this, args);\n    };\n\n    average(...args) {\n        return this.avg.apply(this, args);\n    }\n\n    //TODO: these should be removed?\n    // select = undefined;\n    // skip  = undefined;\n    // take = undefined;\n    // order = undefined;\n    private static throwNotSupportedException(operationName: string): never {\n        throw `Operation \"${operationName}\" is not supported in an aggregation query`;\n    }\n\n    skip(): never {\n        return AggregateQuery.throwNotSupportedException('skip');\n    }\n\n    take(): never {\n        return AggregateQuery.throwNotSupportedException('take');\n    }\n\n    select(): never {\n        return AggregateQuery.throwNotSupportedException('select');\n    }\n\n    order(): never {\n        return AggregateQuery.throwNotSupportedException('order');\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/query/AggregateQuery.ts\n **/","import * as _ from 'underscore';\n\nimport { Constants } from '../constants';\nimport { GeoPoint } from '../GeoPoint';\nimport { EverliveError } from '../EverliveError';\nimport { Expression } from '../Expression';\n\nconst maxDistanceConsts = Constants.maxDistanceConsts;\nconst radiusConsts = Constants.radiusConsts;\nconst OperatorType = Constants.OperatorType;\n\nexport class QueryBuilder {\n    query;\n    expr;\n\n    constructor(query) {\n        this.query = query;\n        this.expr = query.expr;\n    }\n\n    // TODO merge the two objects before returning them\n    build() {\n        var query = this.query;\n        if (query.filter || query.fields || query.sort || query.toskip || query.totake || query.expandExpression) { // || query.aggregateExpression) {\n            return {\n                $where: query.filter || null,\n                $select: query.fields || null,\n                $sort: query.sort || null,\n                $skip: query.toskip || null,\n                $take: query.totake || null,\n                $expand: query.expandExpression || null,\n                $aggregate: query.aggregateExpression || null\n            };\n        }\n        return {\n            $where: this._buildWhere(),\n            $select: this._buildSelect(),\n            $sort: this._buildSort(),\n            $skip: this._getSkip(),\n            $take: this._getTake(),\n            $expand: this._getExpand(),\n            $aggregate: this._getAggregate()\n        };\n    }\n    _getSkip() {\n        var skipExpression: any = _.find(this.expr.operands, function (value: any, index, list) {\n            return value.operator === OperatorType.skip;\n        });\n        return skipExpression ? skipExpression.operands[0] : null;\n    }\n    _getTake() {\n        var takeExpression: any = _.find(this.expr.operands, function (value: any, index, list) {\n            return value.operator === OperatorType.take;\n        });\n        return takeExpression ? takeExpression.operands[0] : null;\n    }\n    _getExpand() {\n        var expandExpression = _.chain(this.expr.operands)\n            .filter(function (value) {\n                return value.operator === OperatorType.expand;\n            })\n            .reduce(function (result, expression) { //expression contains operands and has operator type expand\n                return _.extend(result, expression.operands[0]);\n            }, {})\n            .value();\n        return _.isEmpty(expandExpression) ? null : expandExpression;\n    }\n    _getAggregate() {\n        if (!this.query.aggregateExpression) {\n            return null;\n        }\n\n        // build $aggregate, delete empty aggregates, fail no aggregates at all\n        var aggregates = _.extend({}, this.query.aggregateExpression);\n        if (_.isEmpty(aggregates.GroupBy)) {\n            delete aggregates.GroupBy;\n        }\n        if (_.isEmpty(aggregates.Aggregate)) {\n            delete aggregates.Aggregate;\n        }\n\n        return aggregates;\n    }\n    _buildSelect(): any {\n        var selectExpression: any = _.find(this.expr.operands, function (value: any, index, list) {\n            return value.operator === OperatorType.select;\n        });\n        var result: any = {};\n        if (selectExpression) {\n            _.reduce(selectExpression.operands, function (memo: any, value: any) {\n                memo[value] = 1;\n                return memo;\n            }, result);\n            return result;\n        }\n        else {\n            return null;\n        }\n    }\n    _buildSort() {\n        var sortExpressions: any = _.filter(this.expr.operands, function (value: any, index, list) {\n            return value.operator === OperatorType.order || value.operator === OperatorType.order_desc;\n        });\n        var result: any = {};\n        if (sortExpressions.length > 0) {\n            _.reduce(sortExpressions, function (memo: any, value: any) {\n                memo[value.operands[0]] = value.operator === OperatorType.order ? 1 : -1;\n                return memo;\n            }, result);\n            return result;\n        }\n        else {\n            return null;\n        }\n    }\n    _buildWhere(): any {\n        var whereExpression: any = _.find(this.expr.operands, function (value: any, index, list) {\n            return value.operator === OperatorType.where;\n        });\n        if (whereExpression) {\n            return this._build(new Expression(OperatorType.and, whereExpression.operands));\n        }\n        else {\n            var filterExpression: any = _.find(this.expr.operands, function (value: any, index, list) {\n                return value.operator === OperatorType.filter;\n            });\n            if (filterExpression) {\n                return filterExpression.operands[0];\n            }\n            return null;\n        }\n    }\n    _build(expr) {\n        if (this._isSimple(expr)) {\n            return this._simple(expr);\n        }\n        else if (this._isRegex(expr)) {\n            return this._regex(expr);\n        }\n        else if (this._isGeo(expr)) {\n            return this._geo(expr);\n        }\n        else if (this._isAnd(expr)) {\n            return this._and(expr);\n        }\n        else if (this._isOr(expr)) {\n            return this._or(expr);\n        }\n        else if (this._isNot(expr)) {\n            return this._not(expr);\n        }\n    }\n    _isSimple(expr) {\n        return expr.operator >= OperatorType.equal && expr.operator <= OperatorType.size;\n    }\n    _simple(expr) {\n        var term = {}, fieldTerm = {};\n        var operands = expr.operands;\n        var operator = this._translateoperator(expr.operator);\n        if (operator) {\n            term[operator] = operands[1];\n        }\n        else {\n            term = operands[1];\n        }\n        fieldTerm[operands[0]] = term;\n        return fieldTerm;\n    }\n    _isRegex(expr) {\n        return expr.operator >= OperatorType.regex && expr.operator <= OperatorType.endsWith;\n    }\n    _regex(expr) {\n        var fieldTerm = {};\n        var regex = this._getRegex(expr);\n        var regexValue = this._getRegexValue(regex);\n        var operands = expr.operands;\n        fieldTerm[operands[0]] = regexValue;\n        return fieldTerm;\n    }\n    _getRegex(expr) {\n        var pattern = expr.operands[1];\n        var flags = expr.operands[2] ? expr.operands[2] : '';\n        switch (expr.operator) {\n            case OperatorType.regex:\n                return pattern instanceof RegExp ? pattern : new RegExp(pattern, flags);\n            case OperatorType.startsWith:\n                return new RegExp(\"^\" + pattern, flags);\n            case OperatorType.endsWith:\n                return new RegExp(pattern + \"$\", flags);\n            default:\n                throw new EverliveError({message: 'Unknown operator type.'});\n        }\n    }\n    _getRegexValue(regex) {\n        var options = '';\n        if (regex.global) {\n            options += 'g';\n        }\n        if (regex.multiline) {\n            options += 'm';\n        }\n        if (regex.ignoreCase) {\n            options += 'i';\n        }\n        return {$regex: regex.source, $options: options};\n    }\n    _isGeo(expr) {\n        return expr.operator >= OperatorType.nearShpere && expr.operator <= OperatorType.withinShpere;\n    }\n    _geo(expr) {\n        var fieldTerm = {};\n        var operands = expr.operands;\n        fieldTerm[operands[0]] = this._getGeoTerm(expr);\n        return fieldTerm;\n    }\n    _getGeoTerm(expr): any {\n        switch (expr.operator) {\n            case OperatorType.nearShpere:\n                return this._getNearSphereTerm(expr);\n            case OperatorType.withinBox:\n                return this._getWithinBox(expr);\n            case OperatorType.withinPolygon:\n                return this._getWithinPolygon(expr);\n            case OperatorType.withinShpere:\n                return this._getWithinCenterSphere(expr);\n            default:\n                throw new EverliveError({message: 'Unknown operator type.'});\n        }\n    }\n    _getNearSphereTerm(expr) {\n        var operands = expr.operands;\n        var center = this._getGeoPoint(operands[1]);\n        var maxDistance = operands[2];\n        var metrics = operands[3];\n        var maxDistanceConst;\n        var term = {\n            '$nearSphere': center\n        };\n        if (typeof maxDistance !== 'undefined') {\n            maxDistanceConst = maxDistanceConsts[metrics] || maxDistanceConsts.radians;\n            term[maxDistanceConst] = maxDistance;\n        }\n        return term;\n    }\n    _getWithinBox(expr) {\n        var operands = expr.operands;\n        var bottomLeft = this._getGeoPoint(operands[1]);\n        var upperRight = this._getGeoPoint(operands[2]);\n        return {\n            '$within': {\n                '$box': [bottomLeft, upperRight]\n            }\n        };\n    }\n    _getWithinPolygon(expr) {\n        var operands = expr.operands;\n        var points = this._getGeoPoints(operands[1]);\n        return {\n            '$within': {\n                '$polygon': points\n            }\n        };\n    }\n    _getWithinCenterSphere(expr) {\n        var operands = expr.operands;\n        var center = this._getGeoPoint(operands[1]);\n        var radius = operands[2];\n        var metrics = operands[3];\n        var radiusConst = radiusConsts[metrics] || radiusConsts.radians;\n        var sphereInfo = {\n            'center': center\n        };\n        sphereInfo[radiusConst] = radius;\n        return {\n            '$within': {\n                '$centerSphere': sphereInfo\n            }\n        };\n    }\n    _getGeoPoint(point) {\n        if (_.isArray(point)) {\n            return new GeoPoint(point[0], point[1]);\n        }\n        return point;\n    }\n    _getGeoPoints(points) {\n        var self = this;\n        return _.map(points, function (point) {\n            return self._getGeoPoint(point);\n        });\n    }\n    _isAnd(expr) {\n        return expr.operator === OperatorType.and;\n    }\n    _and(expr) {\n        var i, l, term, result = {};\n        var operands = expr.operands;\n        for (i = 0, l = operands.length; i < l; i++) {\n            term = this._build(operands[i]);\n            result = this._andAppend(result, term);\n        }\n        return result;\n    }\n    _andAppend(andObj, newObj) {\n        var i, l, key, value, newValue;\n        var keys = _.keys(newObj);\n        for (i = 0, l = keys.length; i < l; i++) {\n            key = keys[i];\n            value = andObj[key];\n            if (typeof value === 'undefined') {\n                andObj[key] = newObj[key];\n            }\n            else {\n                newValue = newObj[key];\n                if (typeof value === 'object' && typeof newValue === 'object') {\n                    value = _.extend(value, newValue);\n                } else {\n                    value = newValue;\n                }\n                andObj[key] = value;\n            }\n        }\n        return andObj;\n    }\n    _isOr(expr) {\n        return expr.operator === OperatorType.or;\n    }\n    _or(expr) {\n        var i, l, term, result = [];\n        var operands = expr.operands;\n        for (i = 0, l = operands.length; i < l; i++) {\n            term = this._build(operands[i]);\n            result.push(term);\n        }\n        return {$or: result};\n    }\n    _isNot(expr) {\n        return expr.operator === OperatorType.not;\n    }\n    _not(expr) {\n        return {$not: this._build(expr.operands[0])};\n    }\n    _translateoperator(operator): any {\n            switch (operator) {\n                case OperatorType.equal:\n                    return null;\n                case OperatorType.not_equal:\n                    return '$ne';\n                case OperatorType.gt:\n                    return '$gt';\n                case OperatorType.lt:\n                    return '$lt';\n                case OperatorType.gte:\n                    return '$gte';\n                case OperatorType.lte:\n                    return '$lte';\n                case OperatorType.isin:\n                    return '$in';\n                case OperatorType.notin:\n                    return '$nin';\n                case OperatorType.all:\n                    return '$all';\n                case OperatorType.size:\n                    return '$size';\n            }\n            throw new EverliveError({message: 'Unknown operator type.'});\n        }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/query/QueryBuilder.ts\n **/","import * as platform from '../common/platform';\n\nconst isNativeScript = platform.isNativeScript;\nconst isNodejs = platform.isNodejs;\n\nexport interface ReqwestOptions {\n    url: string,\n    method: string,\n    data: any,\n    headers: any,\n    contentType: string,\n    crossOrigin: boolean\n}\n\nexport let reqwest;\n\nif (!isNodejs && !isNativeScript) {\n    reqwest = require('reqwest');\n} else if (isNativeScript) {\n    reqwest = require('./reqwest.nativescript');\n} else if (isNodejs) {\n    reqwest = require('./reqwest.nodejs');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/reqwest.everlive.ts\n **/","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property\n *     on objects.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\nfunction typedArraySupport () {\n  function Bar () {}\n  try {\n    var arr = new Uint8Array(1)\n    arr.foo = function () { return 42 }\n    arr.constructor = Bar\n    return arr.foo() === 42 && // typed array instances can be augmented\n        arr.constructor === Bar && // constructor can be set\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\n/**\n * Class: Buffer\n * =============\n *\n * The Buffer constructor returns instances of `Uint8Array` that are augmented\n * with function properties for all the node `Buffer` API functions. We use\n * `Uint8Array` so that square bracket notation works as expected -- it returns\n * a single octet.\n *\n * By augmenting the instances, we can avoid modifying the `Uint8Array`\n * prototype.\n */\nfunction Buffer (arg) {\n  if (!(this instanceof Buffer)) {\n    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n    if (arguments.length > 1) return new Buffer(arg, arguments[1])\n    return new Buffer(arg)\n  }\n\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    this.length = 0\n    this.parent = undefined\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    return fromNumber(this, arg)\n  }\n\n  // Slightly less common case.\n  if (typeof arg === 'string') {\n    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n  }\n\n  // Unusual.\n  return fromObject(this, arg)\n}\n\nfunction fromNumber (that, length) {\n  that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < length; i++) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n  // Assumption: byteLength() return value is always < kMaxLength.\n  var length = byteLength(string, encoding) | 0\n  that = allocate(that, length)\n\n  that.write(string, encoding)\n  return that\n}\n\nfunction fromObject (that, object) {\n  if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n  if (isArray(object)) return fromArray(that, object)\n\n  if (object == null) {\n    throw new TypeError('must start with number, buffer, array or string')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined') {\n    if (object.buffer instanceof ArrayBuffer) {\n      return fromTypedArray(that, object)\n    }\n    if (object instanceof ArrayBuffer) {\n      return fromArrayBuffer(that, object)\n    }\n  }\n\n  if (object.length) return fromArrayLike(that, object)\n\n  return fromJsonObject(that, object)\n}\n\nfunction fromBuffer (that, buffer) {\n  var length = checked(buffer.length) | 0\n  that = allocate(that, length)\n  buffer.copy(that, 0, 0, length)\n  return that\n}\n\nfunction fromArray (that, array) {\n  var length = checked(array.length) | 0\n  that = allocate(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\n// Duplicate of fromArray() to keep fromArray() monomorphic.\nfunction fromTypedArray (that, array) {\n  var length = checked(array.length) | 0\n  that = allocate(that, length)\n  // Truncating the elements is probably not what people expect from typed\n  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n  // of the old Buffer constructor.\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array) {\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    array.byteLength\n    that = Buffer._augment(new Uint8Array(array))\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromTypedArray(that, new Uint8Array(array))\n  }\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = checked(array.length) | 0\n  that = allocate(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n// Returns a zero-length buffer for inputs that don't conform to the spec.\nfunction fromJsonObject (that, object) {\n  var array\n  var length = 0\n\n  if (object.type === 'Buffer' && isArray(object.data)) {\n    array = object.data\n    length = checked(array.length) | 0\n  }\n  that = allocate(that, length)\n\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n} else {\n  // pre-set for values that may exist in the future\n  Buffer.prototype.length = undefined\n  Buffer.prototype.parent = undefined\n}\n\nfunction allocate (that, length) {\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = Buffer._augment(new Uint8Array(length))\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that.length = length\n    that._isBuffer = true\n  }\n\n  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n  if (fromPool) that.parent = rootParent\n\n  return that\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (subject, encoding) {\n  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n  var buf = new Buffer(subject, encoding)\n  delete buf.parent\n  return buf\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  var i = 0\n  var len = Math.min(x, y)\n  while (i < len) {\n    if (a[i] !== b[i]) break\n\n    ++i\n  }\n\n  if (i !== len) {\n    x = a[i]\n    y = b[i]\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'raw':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n  if (list.length === 0) {\n    return new Buffer(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; i++) {\n      length += list[i].length\n    }\n  }\n\n  var buf = new Buffer(length)\n  var pos = 0\n  for (i = 0; i < list.length; i++) {\n    var item = list[i]\n    item.copy(buf, pos)\n    pos += item.length\n  }\n  return buf\n}\n\nfunction byteLength (string, encoding) {\n  if (typeof string !== 'string') string = '' + string\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'binary':\n      // Deprecated\n      case 'raw':\n      case 'raws':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  start = start | 0\n  end = end === undefined || end === Infinity ? this.length : end | 0\n\n  if (!encoding) encoding = 'utf8'\n  if (start < 0) start = 0\n  if (end > this.length) end = this.length\n  if (end <= start) return ''\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'binary':\n        return binarySlice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return 0\n  return Buffer.compare(this, b)\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n  if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n  else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n  byteOffset >>= 0\n\n  if (this.length === 0) return -1\n  if (byteOffset >= this.length) return -1\n\n  // Negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n  if (typeof val === 'string') {\n    if (val.length === 0) return -1 // special case: looking for empty string always fails\n    return String.prototype.indexOf.call(this, val, byteOffset)\n  }\n  if (Buffer.isBuffer(val)) {\n    return arrayIndexOf(this, val, byteOffset)\n  }\n  if (typeof val === 'number') {\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n    }\n    return arrayIndexOf(this, [ val ], byteOffset)\n  }\n\n  function arrayIndexOf (arr, val, byteOffset) {\n    var foundIndex = -1\n    for (var i = 0; byteOffset + i < arr.length; i++) {\n      if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n      } else {\n        foundIndex = -1\n      }\n    }\n    return -1\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\n// `get` is deprecated\nBuffer.prototype.get = function get (offset) {\n  console.log('.get() is deprecated. Access using array indexes instead.')\n  return this.readUInt8(offset)\n}\n\n// `set` is deprecated\nBuffer.prototype.set = function set (v, offset) {\n  console.log('.set() is deprecated. Access using array indexes instead.')\n  return this.writeUInt8(v, offset)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; i++) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) throw new Error('Invalid hex string')\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    var swap = encoding\n    encoding = offset\n    offset = length | 0\n    length = swap\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'binary':\n        return binaryWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction binarySlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; i++) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = Buffer._augment(this.subarray(start, end))\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; i++) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  if (newBuf.length) newBuf.parent = this.parent || this\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = value < 0 ? 1 : 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = value < 0 ? 1 : 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\n  if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; i--) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; i++) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    target._set(this.subarray(start, start + len), targetStart)\n  }\n\n  return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function fill (value, start, end) {\n  if (!value) value = 0\n  if (!start) start = 0\n  if (!end) end = this.length\n\n  if (end < start) throw new RangeError('end < start')\n\n  // Fill 0 bytes; we're done\n  if (end === start) return\n  if (this.length === 0) return\n\n  if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n  if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n  var i\n  if (typeof value === 'number') {\n    for (i = start; i < end; i++) {\n      this[i] = value\n    }\n  } else {\n    var bytes = utf8ToBytes(value.toString())\n    var len = bytes.length\n    for (i = start; i < end; i++) {\n      this[i] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n/**\n * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\n * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\n */\nBuffer.prototype.toArrayBuffer = function toArrayBuffer () {\n  if (typeof Uint8Array !== 'undefined') {\n    if (Buffer.TYPED_ARRAY_SUPPORT) {\n      return (new Buffer(this)).buffer\n    } else {\n      var buf = new Uint8Array(this.length)\n      for (var i = 0, len = buf.length; i < len; i += 1) {\n        buf[i] = this[i]\n      }\n      return buf.buffer\n    }\n  } else {\n    throw new TypeError('Buffer.toArrayBuffer not supported in this browser')\n  }\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar BP = Buffer.prototype\n\n/**\n * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\n */\nBuffer._augment = function _augment (arr) {\n  arr.constructor = Buffer\n  arr._isBuffer = true\n\n  // save reference to original Uint8Array set method before overwriting\n  arr._set = arr.set\n\n  // deprecated\n  arr.get = BP.get\n  arr.set = BP.set\n\n  arr.write = BP.write\n  arr.toString = BP.toString\n  arr.toLocaleString = BP.toString\n  arr.toJSON = BP.toJSON\n  arr.equals = BP.equals\n  arr.compare = BP.compare\n  arr.indexOf = BP.indexOf\n  arr.copy = BP.copy\n  arr.slice = BP.slice\n  arr.readUIntLE = BP.readUIntLE\n  arr.readUIntBE = BP.readUIntBE\n  arr.readUInt8 = BP.readUInt8\n  arr.readUInt16LE = BP.readUInt16LE\n  arr.readUInt16BE = BP.readUInt16BE\n  arr.readUInt32LE = BP.readUInt32LE\n  arr.readUInt32BE = BP.readUInt32BE\n  arr.readIntLE = BP.readIntLE\n  arr.readIntBE = BP.readIntBE\n  arr.readInt8 = BP.readInt8\n  arr.readInt16LE = BP.readInt16LE\n  arr.readInt16BE = BP.readInt16BE\n  arr.readInt32LE = BP.readInt32LE\n  arr.readInt32BE = BP.readInt32BE\n  arr.readFloatLE = BP.readFloatLE\n  arr.readFloatBE = BP.readFloatBE\n  arr.readDoubleLE = BP.readDoubleLE\n  arr.readDoubleBE = BP.readDoubleBE\n  arr.writeUInt8 = BP.writeUInt8\n  arr.writeUIntLE = BP.writeUIntLE\n  arr.writeUIntBE = BP.writeUIntBE\n  arr.writeUInt16LE = BP.writeUInt16LE\n  arr.writeUInt16BE = BP.writeUInt16BE\n  arr.writeUInt32LE = BP.writeUInt32LE\n  arr.writeUInt32BE = BP.writeUInt32BE\n  arr.writeIntLE = BP.writeIntLE\n  arr.writeIntBE = BP.writeIntBE\n  arr.writeInt8 = BP.writeInt8\n  arr.writeInt16LE = BP.writeInt16LE\n  arr.writeInt16BE = BP.writeInt16BE\n  arr.writeInt32LE = BP.writeInt32LE\n  arr.writeInt32BE = BP.writeInt32BE\n  arr.writeFloatLE = BP.writeFloatLE\n  arr.writeFloatBE = BP.writeFloatBE\n  arr.writeDoubleLE = BP.writeDoubleLE\n  arr.writeDoubleBE = BP.writeDoubleBE\n  arr.fill = BP.fill\n  arr.inspect = BP.inspect\n  arr.toArrayBuffer = BP.toArrayBuffer\n\n  return arr\n}\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; i++) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; i++) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/buffer/index.js\n ** module id = 25\n ** module chunks = 0\n **/","/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n  switch (toString.call(val)) {\n    case '[object Date]': return 'date';\n    case '[object RegExp]': return 'regexp';\n    case '[object Arguments]': return 'arguments';\n    case '[object Array]': return 'array';\n    case '[object Error]': return 'error';\n  }\n\n  if (val === null) return 'null';\n  if (val === undefined) return 'undefined';\n  if (val !== val) return 'nan';\n  if (val && val.nodeType === 1) return 'element';\n\n  val = val.valueOf\n    ? val.valueOf()\n    : Object.prototype.valueOf.apply(val)\n\n  return typeof val;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/component-type/index.js\n ** module id = 26\n ** module chunks = 0\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/core-util-is/lib/util.js\n ** module id = 27\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\nvar ValuesStore = require('../../utils/valuesStore');\n\nvar templatesInit = require('./templates');\nvar blocksInit = require('./blocks');\nvar operatorsInit = require('./operators');\nvar modifiersInit = require('./modifiers');\n\nvar blockRegExp = /\\{([a-z0-9]+)\\}(.|$)/ig;\n\nvar Dialect = module.exports = function(builder) {\n\tthis.builder = builder;\n\n\tthis.templates = new ValuesStore();\n\tthis.blocks = new ValuesStore();\n\tthis.operators = {\n\t\tcomparison: new ValuesStore(),\n\t\tlogical: new ValuesStore(),\n\t\tfetching: new ValuesStore(),\n\t\tstate: new ValuesStore()\n\t};\n\tthis.modifiers = new ValuesStore();\n\n\t// init templates\n\ttemplatesInit(this);\n\n\t// init blocks\n\tblocksInit(this);\n\n\t// init operators\n\toperatorsInit(this);\n\n\t// init modifiers\n\tmodifiersInit(this);\n\n\tthis.identifierPartsRegexp = new RegExp(\n\t\t'(\\\\' + this.config.identifierPrefix + '[^\\\\' + this.config.identifierSuffix + ']*\\\\' +\n\t\t\tthis.config.identifierSuffix + '|[^\\\\.]+)', 'g'\n\t);\n\tthis.wrappedIdentifierPartRegexp = new RegExp(\n\t\t'^\\\\' + this.config.identifierPrefix + '.*\\\\' + this.config.identifierSuffix + '$'\n\t);\n};\n\nDialect.prototype.config = {\n\tidentifierPrefix: '\"',\n\tidentifierSuffix: '\"'\n};\n\nDialect.prototype._wrapIdentifier = function(name) {\n\tif (this.builder.options.wrappedIdentifiers) {\n\t\tvar self = this;\n\t\tvar nameParts = name.match(this.identifierPartsRegexp);\n\n\t\treturn _(nameParts).map(function(namePart) {\n\t\t\tif (namePart !== '*' && !self.wrappedIdentifierPartRegexp.test(namePart)) {\n\t\t\t\tnamePart = self.config.identifierPrefix + namePart + self.config.identifierSuffix;\n\t\t\t}\n\n\t\t\treturn namePart;\n\t\t}).join('.');\n\t}\n\n\treturn name;\n};\n\nDialect.prototype.buildLogicalOperator = function(params) {\n\tvar self = this;\n\n\tvar operator = params.operator;\n\tvar value = params.value;\n\n\tif (!_.isObject(value)) value = _.object([params.defaultFetchingOperator], [value]);\n\n\tif (_.isEmpty(value)) return '';\n\n\tvar result;\n\n\tif (_.isArray(value)) {\n\t\t// if value is array: [{a: 1}, {b: 2}] process each item as logical operator\n\t\tresult = _(value).map(function(item) {\n\t\t\treturn self.buildOperator({\n\t\t\t\tcontext: 'logical',\n\t\t\t\tcontextOperator: operator,\n\t\t\t\toperator: '$and',\n\t\t\t\tvalue: item,\n\t\t\t\tstates: [],\n\t\t\t\tdefaultFetchingOperator: params.defaultFetchingOperator\n\t\t\t});\n\t\t});\n\t} else {\n\t\tresult = _(value).map(function(item, field) {\n\t\t\t// if field name is not a operator convert it to {$field: {name: 'a', $eq: 'b'}}\n\t\t\tif (field[0] !== '$') {\n\t\t\t\tif (!_.isObject(item) || _.isArray(item)) item = {$eq: item};\n\t\t\t\titem = _.defaults({name: field}, item);\n\t\t\t\tfield = '$field';\n\t\t\t}\n\n\t\t\treturn self.buildOperator({\n\t\t\t\tcontext: 'logical',\n\t\t\t\tcontextOperator: operator,\n\t\t\t\toperator: field,\n\t\t\t\tvalue: item,\n\t\t\t\tstates: [],\n\t\t\t\tdefaultFetchingOperator: params.defaultFetchingOperator\n\t\t\t});\n\t\t});\n\t}\n\n\treturn this.operators.logical.get(operator).fn(_.compact(result));\n};\n\nDialect.prototype.buildComparisonOperator = function(params) {\n\tvar self = this;\n\n\tvar operator = params.operator;\n\n\t_(params.states).each(function(state) {\n\t\toperator = self.operators.state.get(state).getOperator(operator);\n\t});\n\n\tvar operatorParams = this.operators.comparison.get(operator);\n\n\tvar value = this.buildEndFetchingOperator({\n\t\tcontext: 'comparison',\n\t\tcontextOperator: operator,\n\t\tvalue: params.value,\n\t\tstates: params.states,\n\t\tdefaultFetchingOperator: operatorParams.defaultFetchingOperator ||\n\t\t\tparams.defaultFetchingOperator\n\t});\n\n\treturn operatorParams.fn(params.field, value);\n};\n\nDialect.prototype.buildFetchingOperator = function(params) {\n\tvar operator = params.operator;\n\tvar value = params.value;\n\n\tvar field = this.operators.fetching.get(operator).fn(value, params.end);\n\n\tvar result;\n\tif (params.end || !_.isObject(value)) {\n\t\tresult = field;\n\t} else {\n\t\tresult = this.buildOperatorsGroup({\n\t\t\tcontext: 'fetching',\n\t\t\tcontextOperator: operator,\n\t\t\toperator: '$and',\n\t\t\tfield: field,\n\t\t\tvalue: value,\n\t\t\tstates: params.states,\n\t\t\tdefaultFetchingOperator: params.defaultFetchingOperator\n\t\t});\n\t}\n\n\treturn result;\n};\n\nDialect.prototype.buildEndFetchingOperator = function(params) {\n\tvar self = this;\n\n\tvar value = params.value;\n\tvar operator;\n\n\tif (_.isObject(value) && !_.isArray(value)) {\n\t\t// get first query operator\n\t\toperator = _(value).findKey(function(item, operator) {\n\t\t\treturn operator[0] === '$' && self.operators.fetching.has(operator);\n\t\t});\n\n\t\tif (operator) {\n\t\t\tvalue = value[operator];\n\t\t}\n\t}\n\n\treturn this.buildOperator(_.extend({}, params, {\n\t\toperator: operator || params.defaultFetchingOperator,\n\t\tvalue: value,\n\t\tend: true\n\t}));\n};\n\nDialect.prototype.buildStateOperator = function(params) {\n\treturn this.buildOperatorsGroup(_.extend({}, params, {\n\t\tcontext: 'state',\n\t\tcontextOperator: params.operator,\n\t\toperator: '$and',\n\t\tstates: params.states.concat(params.operator)\n\t}));\n};\n\nDialect.prototype.buildOperatorsGroup = function(params) {\n\tvar self = this;\n\n\tvar value = params.value;\n\n\tvar result;\n\tif (_.isObject(value) && !_.isArray(value)) {\n\t\tresult = this.operators.logical.get(params.operator).fn(\n\t\t\t_(value)\n\t\t\t\t.chain()\n\t\t\t\t.map(function(item, operator) {\n\t\t\t\t\tif (operator[0] !== '$') return '';\n\n\t\t\t\t\tif (self.operators.fetching.has(operator)) {\n\t\t\t\t\t\t// convert {a: {$field: 'b'}} to {a: {$eq: {$field: 'b'}}}\n\t\t\t\t\t\titem = _.object([operator], [item]);\n\t\t\t\t\t\toperator = '$eq';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn self.buildOperator(_.extend({}, params, {\n\t\t\t\t\t\toperator: operator,\n\t\t\t\t\t\tvalue: item\n\t\t\t\t\t}));\n\t\t\t\t})\n\t\t\t\t.compact()\n\t\t\t\t.value()\n\t\t);\n\n\t\tif (!result) result = params.field;\n\t} else {\n\t\tresult = this.buildEndFetchingOperator(params);\n\t}\n\n\treturn result;\n};\n\nDialect.prototype.buildOperator = function(params) {\n\tvar isContextValid = function(expectedContexts, context) {\n\t\treturn _.contains(expectedContexts, context);\n\t};\n\n\tvar context = params.context;\n\tvar operator = params.operator;\n\n\tvar result;\n\n\tvar contexts = _(this.operators).mapObject(function(operatorsGroup) {\n\t\treturn operatorsGroup.has(operator);\n\t});\n\n\tif (!_(contexts).some()) {\n\t\tthrow new Error('Unknown operator \"' + operator + '\"');\n\t}\n\n\tif (contexts.logical && isContextValid(['null', 'logical'], context)) {\n\t\tresult = this.buildLogicalOperator(params);\n\t} else if (contexts.fetching && isContextValid(['logical', 'comparison'], context)) {\n\t\tresult = this.buildFetchingOperator(params);\n\t} else if (contexts.comparison && isContextValid(['fetching', 'state'], context)) {\n\t\tresult = this.buildComparisonOperator(params);\n\t} else if (contexts.state && isContextValid(['fetching', 'state'], context)) {\n\t\tresult = this.buildStateOperator(params);\n\t} else {\n\t\tvar errMessage = 'Unexpected operator \"' + operator + '\" at ' +\n\t\t\t(context === 'null' ? 'null ' : '') + 'context';\n\n\t\tif (params.contextOperator) {\n\t\t\terrMessage += ' of operator \"' + params.contextOperator + '\"';\n\t\t}\n\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn result;\n};\n\nDialect.prototype.buildCondition = function(params) {\n\treturn this.buildOperator({\n\t\tcontext: 'null',\n\t\toperator: '$and',\n\t\tvalue: params.value,\n\t\tstates: [],\n\t\tdefaultFetchingOperator: params.defaultFetchingOperator\n\t});\n};\n\nDialect.prototype.buildModifier = function(params) {\n\tvar self = this;\n\n\treturn _(params.modifier)\n\t\t.chain()\n\t\t.map(function(values, field) {\n\t\t\tvar modifier;\n\n\t\t\tif (field[0] === '$') {\n\t\t\t\tmodifier = field;\n\t\t\t} else {\n\t\t\t\tmodifier = '$set';\n\t\t\t\tvalues = _.object([field], [values]);\n\t\t\t}\n\n\t\t\tvar modifierFn = self.modifiers.get(modifier);\n\n\t\t\tif (!modifierFn) {\n\t\t\t\tthrow new Error('Unknown modifier \"' + modifier + '\"');\n\t\t\t}\n\n\t\t\treturn _(values).map(function(value, field) {\n\t\t\t\tfield = self._wrapIdentifier(field);\n\t\t\t\tvalue = self.buildBlock('term', {term: value, type: 'value'});\n\n\t\t\t\treturn modifierFn(field, value);\n\t\t\t});\n\t\t})\n\t\t.flatten()\n\t\t.compact()\n\t\t.value()\n\t\t.join(', ');\n};\n\nDialect.prototype.buildBlock = function(block, params) {\n\tvar blockFn = this.blocks.get(block);\n\n\tif (!blockFn) {\n\t\tthrow new Error('Unknown block \"' + block + '\"');\n\t}\n\n\treturn blockFn(params);\n};\n\nDialect.prototype.buildTemplate = function(type, params) {\n\tvar self = this;\n\n\tvar template = this.templates.get(type);\n\tif (!template) {\n\t\tthrow new Error('Unknown template type \"' + type + '\"');\n\t}\n\n\tparams = _.defaults({}, params, template.defaults);\n\n\tif (template.validate) {\n\t\ttemplate.validate(type, params);\n\t}\n\n\treturn template.pattern.replace(blockRegExp, function(fullMatch, block, space) {\n\t\tif (_.isUndefined(params[block])) {\n\t\t\treturn '';\n\t\t} else {\n\t\t\tif (self.blocks.has(type + ':' + block)) block = type + ':' + block;\n\t\t\treturn self.buildBlock(block, params) + space;\n\t\t}\n\t}).trim();\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/index.js\n ** module id = 28\n ** module chunks = 0\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/util/util.js\n ** module id = 29\n ** module chunks = 0\n **/","import * as _ from 'underscore';\n\nimport { Setup } from './Setup';\nimport { Data } from './types/Data';\nimport { Users } from './types/Users';\nimport { Files } from './types/Files';\nimport { Constants } from './constants';\nimport { Utils } from './utils';\nimport { Push } from './Push';\nimport Authentication from './auth/Authentication';\nimport { initOfflineStorage } from './offline/offline';\nimport { Request } from './Request';\nimport { EverliveError, EverliveErrors } from './EverliveError';\nimport { helpers } from './helpers/helpers';\nimport { BusinessLogic } from './business-logic/BusinessLogic';\nimport DataPreprocessor from './types/preProcessors/DataPreprocessor';\nimport OfflineQueryPreprocessor from './types/preProcessors/OfflineQueryPreprocessor';\nimport BusinessLogicQueryProcessor from './types/processors/BusinessLogicQueryProcessor';\nimport EventQueryProcessor from './types/processors/EventQueryProcessor';\nimport AuthenticationProcessor from './types/processors/AuthenticationProcessor';\nimport OfflineQueryProcessor from './types/processors/OfflineQueryProcessor';\nimport OnlineQueryProcessor from './types/processors/OnlineQueryProcessor';\nimport CacheQueryProcessor from './types/processors/CacheQueryProcessor';\nimport { ResponseParserProcessor } from './response/ResponseParserProcessor';\nimport ResponseTransformProcessor from './response/ResponseTransformProcessor';\nimport { DataQueryBuilder } from './dataQuery/DataQueryBuilder';\nimport { QueryBuilder } from './query/QueryBuilder';\nimport { OfflineStorageModule } from './offline/OfflineStorageModule';\nimport { CacheModule } from './caching/CacheModule';\nimport { initStore as initCachingStore, initCaching } from './caching/caching';\nimport { Query } from './query/Query';\nimport { AggregateQuery } from './query/AggregateQuery';\nimport { GeoPoint } from './GeoPoint';\nimport { reqwest } from './reqwest.everlive';\nimport { LocalStoragePersister, FileSystemPersister } from './offline/offlinePersisters';\nimport { KendoSdk } from './kendo/kendo.everlive';\nimport { AuthInfoResult } from './interfaces/AuthInfoResult';\nimport { RequestOptions } from './interfaces/RequestOptions';\nimport { Item } from \"./interfaces/Item\";\nimport { ErrorCallback } from \"./interfaces/ErrorCallback\";\nimport { SuccessCallback } from \"./interfaces/SuccessCallback\";\n\n// An array keeping initialization functions called by the Everlive constructor.\n// These functions will be used to extend the functionality of an Everlive instance.\nconst initializations = [];\nfunction protectOfflineEnabled() {\n    if (!this._isOfflineStorageEnabled()) {\n        throw new EverliveError(EverliveErrors.noOfflineSupport);\n    }\n}\n\n//Everlive extends KendoSdk so the typings lead to the Everlive constructor instead to the KendoSdk constructor\nexport class Everlive extends KendoSdk {\n\n    /**\n     * Adds an event listener to the SDK.\n     * @method addListener\n     * @param {String} eventName The name of the event to which to subscribe.\n     * @param {Function} eventListener An event listener which will be called once the event is raised.\n     * @memberOf Everlive.prototype\n     */\n\n    /**\n     * Adds an event listener to the SDK.\n     * @method on\n     * @param {String} eventName The name of the event to which to subscribe.\n     * @param {Function} eventListener An event listener which will be called once the event is raised.\n     * @memberOf Everlive.prototype\n     */\n\n    /**\n     * Removes an SDK event listener.\n     * @method removeListener\n     * @param {String} eventName The name of the event for which to stop listening.\n     * @param {Function} eventListener The event listener to remove.\n     * @memberOf Everlive.prototype\n     */\n\n    /**\n     * Removes an SDK event listener.\n     * @method off\n     * @param {String} eventName The name of the event for which to stop listening.\n     * @param {Function} eventListener The event listener to remove.\n     * @memberOf Everlive.prototype\n     */\n\n    /**\n     * Adds an event listener to the SDK which will be called only the first time the event is emitted.\n     * @method once\n     * @param {String} eventName The name of the event to which to subscribe.\n     * @param {Function} eventListener An event listener which will be called once the event is raised.\n     * @memberOf Everlive.prototype\n     */\n\n    /**\n     * Removes all SDK event listeners.\n     * @memberOf Everlive.prototype\n     * @method removeAllListeners\n     * @param {string} eventName Removes all event listeners for the specified event.\n     * @returns {void}\n     */\n\n    /** Reference to the current {{site.TelerikBackendServices}} (Everlive) JavaScript SDK.\n     * @memberOf Everlive\n     * @type {Everlive}\n     * @static\n     */\n\n    static $: Everlive = null;\n\n    //Global event handlers for push notification events. Required by the cordova PushNotifications plugin that we use.\n    static PushCallbacks: any = {};\n    static Offline: any = {};\n\n    static Query = Query;\n    static AggregateQuery = AggregateQuery;\n    static QueryBuilder = QueryBuilder;\n    static GeoPoint = GeoPoint;\n    static Constants = Constants;\n    static Request = Request;\n    static EverliveErrors = EverliveErrors;\n    static Data = Data;\n    static _utils = Utils;\n    static _traverseAndRevive = Utils.parseUtilities.traverseAndRevive;\n    static _common = {\n        _,\n        rsvp: {\n            Promise: Promise,\n            all: Promise.all.bind(Promise),\n            hashSettled: Utils.promiseHashSettled,\n            allSettled: Utils.promisesAllSettled,\n            hash: Utils.promiseHash\n        },\n        Promise: Promise,\n        reqwest\n    };\n    static persister = {\n        LocalStorage: LocalStoragePersister,\n        FileSystem: FileSystemPersister\n    };\n\n    static version = '\"<%= version %>\"';\n    static commit = '\"<%= commit %>\"';\n\n    static createDataSource: (options: any) => any;\n    static createHierarchicalDataSource: (options: any) => any;\n\n    static idField = Constants.idField;\n\n    /** An array of functions that are invoked during instantiation of the {{site.TelerikBackendServices}} (Everlive) JavaScript SDK.\n     * @memberOf Everlive\n     * @type {Function[]}\n     * @static\n     * @private\n     */\n    static initializations = initializations;\n\n    static AuthStatus = Constants.AuthStatus;\n\n    static init(options): Everlive {\n        Everlive.$ = null;\n        return new Everlive(options);\n    }\n\n    static disableRequestCache() {//TODO: is this used?\n        return Utils.disableRequestCache();\n    }\n\n    setup: Setup;\n    files: Files;\n    Files: Files;\n    users: Users;\n    Users: Users;\n    helpers: any;\n    push: Push;\n    businessLogic: BusinessLogic;\n    offlineStorage: OfflineStorageModule; //TODO:\n    cache: CacheModule; //TODO:\n    dataQueryBuilder: DataQueryBuilder;\n    appId: string;\n    apiKey: string;\n\n    authentication: Authentication;\n\n    /**\n     * @class Everlive\n     * @classdesc The constructor of the {{site.bs}} (Everlive) JavaScript SDK. This is the entry point for the SDK.\n     * @param {object|string} options - An object containing configuration options for the Setup object. Alternatively, you can pass a string representing your App ID.\n     * @param {string} options.apiKey - Your API Key. *Deprecated*: use options.appId instead.\n     * @param {string} options.appId - Your Telerik Platform app's App ID.\n     * @param {string} [options.url=//api.everlive.com/v1/] - The {{site.TelerikBackendServices}} URL.\n     * @param {string} [options.token] - An authentication token. The instance will be associated with the provided previously obtained token.\n     * @param {string} [options.tokenType=bearer] - The type of the token that is used for authentication.\n     * @param {string} [options.masterKey] - The master key of the Telerik Platform app. Use this authorization scheme for operations that require it or to override you app's access control. Use only for development purposes. Do not deploy it with your app.\n     * @param {string} [options.scheme=http] - The URI scheme used to make requests. Supported values: http, https\n     * @param {boolean} [options.parseOnlyCompleteDateTimeObjects=false] - If set to true, the SDK will parse only complete date strings (according to the ISO 8601 standard).\n     * @param {boolean} [options.emulatorMode=false] - Set this option to true to set the SDK in emulator mode.\n     * @param {object|boolean} [options.offline] - Set this option to true to enable Offline Support using the default offline settings.\n     * @param {boolean} [options.offline.enabled=false] - When using an object to initialize Offline Support with non-default settings, set this option to enable or disable Offline Support.\n     * @param {boolean} [options.offline.isOnline=true] - Whether the storage is in online mode initially.\n     * @param {ConflictResolutionStrategy|function} [options.offline.conflicts.strategy=ConflictResolutionStrategy.ClientWins] - A constant specifying the conflict resolution strategy or a function used to resolve the conflicts.\n     * @param {boolean} [options.offline.syncUnmodified=false] - Whether to synchronize items updated or deleted on the server but not on the device.\n     * @param {object} [options.offline.storage] - An object specifying settings for the offline storage.\n     * @param {string} [options.offline.storage.provider=_platform dependant_] - Allows you to select an offline storage provider. Possible values: Everlive.Constants.StorageProvider.LocalStorage, Everlive.Constants.StorageProvider.FileSystem, Everlive.Constants.StorageProvider.Custom. Default value: Cordova, Web: Everlive.Constants.StorageProvider.LocalStorage; NativeScript, Node.js: Everlive.Constants.StorageProvider.FileSystem.\n     * @param {string} [options.offline.storage.storagePath=el_store] - A relative path specifying where data will be saved if the FileSystem provider is used.\n     * @param {number} [options.offline.storage.requestedQuota=10485760] - How much memory (in bytes) to be requested when using FileSystem for persistence. This option is only valid for Chrome as the other platforms use all the available space.\n     * @param {object} [options.offline.storage.implementation] - When storage.provider is set to custom, use this object to specify your custom offline storage implementation.\n     * @param {string} [options.offline.encryption.key] - A key that will be used to encrypt the data stored offline.\n     * @param {string} [options.offline.files.storagePath=el_file_store] - A relative path specifying where the files will be saved if file system is used for persistence of files in offline mode.\n     * @param {string} [options.offline.files.metaPath=el_file_mapping] - A relative path specifying where the metadata file will be saved if file system is used for persistence of files in offline mode.\n     * @param {object|boolean} [options.offline.files] - Set this option to true to enable support for files in offline mode.\n     * @param {number} [options.offline.files.maxConcurrentDownloads] - The maximum amount of files that can be downloaded simultaneously.\n     * @param {boolean} [options.authentication.persist=false] - Indicates whether the current user's authentication will be persisted.\n     * @param {Function} [options.authentication.onAuthenticationRequired] - Invoked when the user's credentials have expired. Allowing you to perform custom logic.\n     * @param {object} [options.helpers] - An object holding options for all Everlive helper components.\n     * @param {object} [options.helpers.html] - HTML Helper configuration objects.\n     * @param {boolean} [options.helpers.html.processOnLoad=false] - Whether to process all HTML elements when the window loads.\n     * @param {boolean} [options.helpers.html.processOnResize=false] - Whether to process all HTML elements when the window resizes.\n     * @param {string} [options.helpers.html.loadingImageUrl] - The image to be displayed while the original image is being processed.\n     * @param {string} [options.helpers.html.errorImageUrl] - The image to be displayed when the original image processing fails.\n     * @param {object} [options.helpers.html.attributes] - HTML Helper attributes configuration object.\n     * @param {object} [options.helpers.html.attributes.loadingImage=data-loading-image] - A custom name for the attribute to be used to set a loading image.\n     * @param {object} [options.helpers.html.attributes.errorImage=data-error-image] - A custom name for the attribute to be used to set an error image.\n     * @param {object} [options.helpers.html.attributes.dpi=data-dpi] - A custom name for the attribute to be used to specify DPI settings.\n     * @param {object} [options.helpers.html.attributes.imageSource=data-src] - A custom name for the attribute to be used to set the image source.\n     * @param {object} [options.helpers.html.attributes.fileSource=data-href] - A custom name for the attribute to be used to set the anchor source.\n     * @param {object} [options.helpers.html.attributes.enableOffline=data-offline] - A custom name for the attribute to be used to control offline processing.\n     * @param {object} [options.helpers.html.attributes.enableResponsive=data-responsive] - A custom name for the attribute to be used to control Responsive Images processing.\n     * @param {object|boolean} [options.caching=false] - Set this option to true to enable caching using the default cache settings.\n     * @param {number} [options.caching.maxAge=60] - Global setting for maximum age of cached items in minutes.\n     * @param {boolean} [options.caching.enabled=false] - Global setting for enabling or disabling cache.\n     * @param {object} [options.caching.typeSettings] - Specify per-content-type settings that override the global settings.\n     */\n    constructor(options) {\n        super(options);\n\n        this.push = this._getPush();\n        this.files = this.Files = this._getFiles(); //TODO: remove Files as they are deprecated\n        this.users = this.Users = this._getUsers(); //TODO: remove Users as its obsolete\n        this.businessLogic = this._getBusinessLogic();\n\n        //some fields from the options need to propagate to the initializations, e.g. the appId and apiKey\n        //since they are being set correctly when appId or apiKey is passed to the options\n        var fieldsToPropagate = _.pick(this.setup, ['appId', 'apiKey']);\n        var extendedOptions = _.extend({}, options, fieldsToPropagate);\n        _.each(initializations, init => {\n            init.func(extendedOptions, this);\n        });\n\n        if (Everlive.$ === null) {\n            Everlive.$ = this;\n        }\n\n        this.registerDataQueryPreProcessor(new DataPreprocessor());\n        this.registerDataQueryPreProcessor(new OfflineQueryPreprocessor());\n\n        this.registerDataQueryProcessor(new BusinessLogicQueryProcessor());\n        this.registerDataQueryProcessor(new EventQueryProcessor());\n        this.registerDataQueryProcessor(new AuthenticationProcessor());\n        this.registerDataQueryProcessor(new OfflineQueryProcessor());\n        this.registerDataQueryProcessor(new OnlineQueryProcessor());\n        this.registerDataQueryProcessor(new CacheQueryProcessor());\n\n        this.registerDataQueryPostProcessor(new ResponseParserProcessor());\n        this.registerDataQueryPostProcessor(new ResponseTransformProcessor());\n    }\n\n    /**\n     * Returns the URL to the {{site.bs}} application endpoint that the SDK uses.\n     * @memberOf Everlive.prototype\n     * @method buildUrl\n     * @returns {string} The generated URL.\n     */\n    buildUrl(): string {\n        return Utils.buildUrl(this.setup);\n    }\n\n    /**\n     * Generates the Authorization headers that are used by the {{site.TelerikBackendServices}} (Everlive) JavaScript SDK to make requests to the {{site.bs}} servers.\n     * @memberOf Everlive\n     * @returns {Object} AuthorizationHeaders The generated Authorization headers object.\n     */\n    buildAuthHeader(): {authorization: string} {\n        return Utils.buildAuthHeader(this.setup);\n    }\n\n    /**\n     * Gets the current authentication status of the {{site.bs}} JavaScript SDK instance.\n     * @memberOf Everlive.prototype\n     * @method authInfo\n     * @name authInfo\n     * @deprecated\n     * @see [authentication.getAuthenticationStatus]{@link ../Authentication/authentication.getAuthenticationStatus}\n     * @returns {Promise} A promise to the authentication status.\n     */\n    /**\n     * Gets the current authentication status of the {{site.bs}} JavaScript SDK instance.\n     * @memberOf Everlive.prototype\n     * @method authInfo\n     * @name authInfo\n     * @deprecated\n     * @see [authentication.getAuthenticationStatus]{@link ../Authentication/authentication.getAuthenticationStatus}\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    authInfo(success?: SuccessCallback<AuthInfoResult>, error?: ErrorCallback): Promise<AuthInfoResult> {\n        return Utils.buildPromise<AuthInfoResult>((success, error) => {\n            var setup = this.setup;\n            if (setup.masterKey) {\n                return success({status: Everlive.AuthStatus.masterKey});\n            }\n\n            if (!setup.token) {\n                return success({status: Everlive.AuthStatus.unauthenticated});\n            }\n\n            if (this.authentication && this.authentication.isAuthenticationInProgress()) {\n                return success({status: Everlive.AuthStatus.authenticating});\n            }\n\n            this.users\n                .skipAuth(true)\n                .currentUser()\n                .then(res => {\n                    return success({status: Everlive.AuthStatus.authenticated, user: res.result});\n                }, err => {\n                    if (this.authentication && this.authentication.isAuthenticationInProgress()) {\n                        return success({status: Everlive.AuthStatus.authenticating});\n                    } else if (err.code === EverliveErrors.invalidRequest.code || err.code === EverliveErrors.expiredToken.code) { // invalid request, i.e. the access token is invalid or missing\n                        return success({status: Everlive.AuthStatus.invalidAuthentication});\n                    } else {\n                        return error(err);\n                    }\n                });\n        }, success, error);\n    }\n\n    /**\n     * Make a request to the current {{site.bs}} JavaScript SDK instance.\n     * @method request\n     * @memberOf Everlive.prototype\n     * @param {object} options Object used to configure the request.\n     * @param {object} options.endpoint The endpoint of the {{site.bs}} JavaScript API relative to the App ID section. (For example, options.endpoint = MyType will make a request to the MyType type.)\n     * @param {HttpMethod} [options.method] HTTP request method.\n     * @param {object} [options.data] Data to be sent with the request.\n     * @param {Function} [options.success] Success callback that will be called when the request finishes successfully.\n     * @param {Function} [options.error] Error callback to be called in case of an error.\n     * @param {object} [options.headers] Additional headers to be included in the request.\n     * @param {Query|object} [options.filter] This is either a {@link Query} or a [filter](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) expression.\n     * @param {boolean} [options.authHeaders=true] When set to false, no Authorization headers will be sent with the request.\n     * @returns {function} The request configuration object containing the `send` function that sends the request.\n     */\n    request(options: RequestOptions): Request {\n        return new Request(this.setup, options);\n    }\n\n    /**\n     * Sets the SDK to work in offline mode. Defaults to true.\n     * @method offline\n     * @memberOf Everlive.prototype\n     * @param {boolean} [isOffline = true] Boolean parameter for setting the SDK to online or offline mode.\n     */\n    offline(isOffline = true): void {\n        protectOfflineEnabled.call(this);\n        this.offlineStorage._setOffline(isOffline);\n    }\n\n    /**\n     * Sets the SDK to work in online mode. Defaults to true.\n     * @method online\n     * @memberOf Everlive.prototype\n     * @param {boolean} [isOnline = true] Boolean parameter for setting the SDK to online or offline mode.\n     */\n    online(isOnline = true): void {\n        protectOfflineEnabled.call(this);\n        this.offlineStorage._setOffline(!isOnline);\n    }\n\n    /**\n     * Check if the SDK is in offline mode.\n     * @method isOffline\n     * @memberOf Everlive.prototype\n     * @returns {boolean} Returns true if the SDK is in offline mode.\n     */\n    isOffline(): boolean {\n        protectOfflineEnabled.call(this);\n        return !this.isOnline();\n    }\n\n    /**\n     * Check if the SDK is in online mode.\n     * @method isOnline\n     * @memberOf Everlive.prototype\n     * @returns {boolean} Returns true if the SDK is in online mode.\n     */\n    isOnline(): boolean {\n        return this.offlineStorage.isOnline();\n    }\n\n    /**\n     * Starts the synchronization procedure. Emits the 'syncStart' event when started and the 'syncEnd' event when the procedure finishes. 'syncEnd' contains information about the completed sync operation that you can use to find out how many items were synchronized.\n     * @method sync\n     * @memberOf Everlive.prototype\n     */\n    sync(): void {\n        protectOfflineEnabled.call(this);\n        return this.offlineStorage.sync.apply(this.offlineStorage, arguments);\n    }\n\n    _isOfflineStorageEnabled(): boolean {\n        return Utils.isOfflineStorageEnabled(this.setup);\n    }\n\n    /**\n     * Creates a new {@link Data} class.\n     * @memberOf Everlive.prototype\n     * @instance\n     * @param {String} collectionName The name of the collection to be used.\n     * @returns {Data}\n     */\n    protected _getData<T extends Item>(collectionName): Data<T> {\n        return new Data<T>(this, collectionName);\n    }\n\n    protected _getDataQueryBuilder() {\n        return new DataQueryBuilder();\n    }\n\n    protected _getSetup(options) {\n        return new Setup(options);\n    }\n\n    protected _getUsers() {\n        return new Users(this);\n    }\n\n    protected _getAuthentication() {\n        return new Authentication(this);\n    }\n\n    protected _getPush() {\n        return new Push(this);\n    }\n\n    protected _getFiles() {\n        return new Files(this);\n    }\n\n    protected _getBusinessLogic() {\n        return new BusinessLogic(this);\n    }\n}\n\n// var initDefault = function initDefault() {\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @deprecated\n//      * @see {@link Everlive.users}\n//      * @description An instance of the [Users]{@link Users} class for working with users.\n//      * @member {Users} Users\n//      */\n//     this.Users = users;\n//\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @description An instance of the [Users]{@link Users} class for working with users.\n//      * @member {users} users\n//      */\n//     this.users = users;\n//\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @deprecated Use everlive.files instead.\n//      * @see {@link Everlive.files}\n//      * @description An instance of the [Files]{@link Files} class for working with files.\n//      * @member {Files} Files\n//      */\n//     this.Files = files;\n//\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @description An instance of the [Files]{@link Files} class for working with files.\n//      * @member {Files} files\n//      */\n//     this.files = files;\n//\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @description An instance of the [Push]{@link Push} class for working with push notifications.\n//      * @member {Push} push\n//      */\n//     this.push = new Push(this);\n//\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @description An instance of the [BusinessLogic]{@link BusinessLogic} class for invoking cloud functions and stored procedures through the SDK\n//      * @member {businessLogic} businessLogic\n//      */\n//     this.businessLogic = new BusinessLogic(this.options);\n// };\n//\n// var initAuthentication = function initAuthentication() {\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @description An instance of the [Authentication]{@link Authentication} class for working with the authentication of the SDK.\n//      * @member {Authentication} authentication\n//      */\n//     /**\n//      * @memberOf Everlive\n//      * @instance\n//      * @description An instance of the [Authentication]{@link Authentication} class for working with the authentication of the SDK.\n//      * @member {authentication} authentication\n//      */\n//     const auth = this._createAuthentication(this.options.authentication);\n//     this.authentication = this.Authentication = auth;\n// };\n\nvar initializeHelpers = function initializeHelpers(options, sdk: Everlive) {\n    sdk.helpers = {};\n\n    _.each(helpers, helper => {\n        var helperOptions = options.helpers ? options.helpers[helper.name] : null;\n        sdk.helpers[helper.name] = new helper.ctor(sdk, helperOptions);\n    });\n};\n\ninitializations.push({name: 'caching', func: initCaching});\ninitializations.push({name: 'cacheStore', func: initCachingStore});\ninitializations.push({name: 'offlineStorage', func: initOfflineStorage});\ninitializations.push({name: 'helpers', func: initializeHelpers});\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/Everlive.ts\n **/","/**\n * @classdesc A class representing a value of the Geo Point field type.\n * @class GeoPoint\n * @param longitude Longitude of the GeoPoint in decimal degrees (range: -180 to 180). Example: `123.3239467`\n * @param latitude Latitude of the GeoPoint in decimal degrees (range: -90 to 90). Example: `42.6954322`\n */\nexport class GeoPoint {\n    //TODO add a function for calculating the distances in geospatial queries\n\n    constructor(\n        public longitude: number = 0,\n        public latitude: number = 0\n    ) {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/GeoPoint.ts\n **/","import * as _ from 'underscore';\n\nimport {Constants } from '../constants';\nimport { getPersister } from './offlinePersisters';\nimport { OfflineStorageModule } from './OfflineStorageModule';\nimport { EverliveError } from '../EverliveError';\nimport { isNativeScript } from '../../common/platform';\nimport { CryptographicProvider } from '../encryption/CryptographicProvider';\nimport { Everlive } from '../Everlive';\n\nconst defaultOfflineStorageOptions = {\n    autoSync: true,\n    enabled: true,\n    conflicts: {\n        strategy: Constants.ConflictResolutionStrategy.ClientWins,\n        implementation: null\n    },\n    offline: false,\n    storage: {\n        name: '',\n        provider: isNativeScript ? Constants.StorageProvider.FileSystem : Constants.StorageProvider.LocalStorage,\n        implementation: null,\n        storagePath: Constants.DefaultStoragePath,\n        requestedQuota: Constants.DefaultFilesystemStorageQuota\n    },\n    typeSettings: {},\n    encryption: {\n        provider: Constants.EncryptionProvider.Default,\n        implementation: null,\n        key: ''\n    },\n    files: {\n        storagePath: Constants.DefaultFilesStoragePath,\n        metaPath: Constants.DefaultFilesMetadataPath,\n        maxConcurrentDownloads: Constants.MaxConcurrentDownloadTasks\n    }\n};\n\nvar conflictResolutionStrategies = {};\n\nconflictResolutionStrategies[Constants.ConflictResolutionStrategy.ClientWins] = function (collection, local, server) {\n    return new Promise(function (resolve) {\n        resolve(local);\n    });\n};\n\nconflictResolutionStrategies[Constants.ConflictResolutionStrategy.ServerWins] = function (collection, local, server) {\n    return new Promise(function (resolve) {\n        resolve(server);\n    });\n};\n\nvar initStoragePersister = function initStoragePersister(options, sdk: Everlive) {\n    var storageKey = options.storage.name || ('everliveOfflineStorage_' + sdk.setup.appId);\n    var persister = getPersister(storageKey, options);\n    options.storage.implementation = persister;\n    return persister;\n};\n\nvar initEncryptionProvider = function initEncryptionProvider(options, sdk: Everlive) {\n    var encryptor;\n    var encryptionProvider = options.encryption.provider;\n    var encryptionImplementation = options.encryption.implementation;\n    if (_.isObject(encryptionImplementation) && encryptionProvider === Constants.EncryptionProvider.Custom) {\n        encryptor = encryptionImplementation;\n    } else {\n        switch (encryptionProvider) {\n            case Constants.EncryptionProvider.Default:\n                encryptor = new CryptographicProvider(options);\n                break;\n            case Constants.EncryptionProvider.Custom:\n                throw new EverliveError({message: 'Custom encryption provider requires an implementation object'});\n            default:\n                throw new EverliveError({message: 'Unsupported encryption provider ' + encryptionProvider});\n        }\n    }\n\n    options.encryption.implementation = encryptor;\n    return encryptor;\n};\n\nfunction buildOfflineStorageOptions(sdkOptions) {\n    var storageOptions = sdkOptions.offline || sdkOptions.offlineStorage;\n    var options;\n    if (storageOptions === true) { // explicit check for shorthand initialization\n        options = _.defaults({}, defaultOfflineStorageOptions);\n    } else if (_.isObject(storageOptions)) {\n        options = _.defaults(storageOptions, defaultOfflineStorageOptions);\n        options.storage = _.defaults(storageOptions.storage, defaultOfflineStorageOptions.storage);\n        options.encryption = _.defaults(storageOptions.encryption, defaultOfflineStorageOptions.encryption);\n        options.conflicts = _.defaults(storageOptions.conflicts, defaultOfflineStorageOptions.conflicts);\n        options.files = _.defaults(storageOptions.files, defaultOfflineStorageOptions.files);\n    } else {\n        options = _.defaults({}, defaultOfflineStorageOptions);\n        options.enabled = false;\n        if (!storageOptions) {\n            sdkOptions.offlineStorage = options;\n        }\n    }\n\n    options.appId = sdkOptions.appId;\n    options.cacheEnabled = sdkOptions.caching && sdkOptions.caching.enabled;\n    return options;\n}\n\nvar buildOfflineStorageModule = function buildOfflineStorageModule(sdkOptions, sdk: Everlive) {\n    var options = buildOfflineStorageOptions(sdkOptions);\n    var persister = initStoragePersister(options, sdk);\n    var encryptionProvider = initEncryptionProvider(options, sdk);\n\n    return new OfflineStorageModule(sdk, options, persister, encryptionProvider);\n};\n\nvar initOfflineStorage = function (options, sdk: Everlive) {\n    sdk.offlineStorage = buildOfflineStorageModule(options, sdk);\n};\n\nexport {\n    initOfflineStorage,\n    buildOfflineStorageOptions\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/offline.ts\n **/","import * as _ from 'underscore';\nimport { EverliveError, EverliveErrors } from '../../EverliveError';\nimport { Persister } from '../persisters/Persister';\nimport { CryptographicProvider } from '../../encryption/CryptographicProvider';\nimport { OfflineFilesProcessor } from '../OfflineFilesProcessor';\nimport { Everlive } from '../../Everlive';\nimport { Constants, DataQueryOperation } from '../../constants';\nimport { Utils } from '../../utils';\nimport { offlineTransformations } from '../offlineTransformations';\nimport { expandProcessor } from '../../ExpandProcessor';\n\nconst unsupportedOfflineHeaders = [Constants.Headers.powerFields];\nconst mingo = require('mingo');\n\nconst unsupportedUsersOperations = {\n    [DataQueryOperation.Create]: true,\n    [DataQueryOperation.Update]: true,\n    [DataQueryOperation.Delete]: true,\n    [DataQueryOperation.DeleteById]: true,\n    [DataQueryOperation.RawUpdate]: true,\n    [DataQueryOperation.SetAcl]: true,\n    [DataQueryOperation.SetOwner]: true,\n    [DataQueryOperation.UserLoginWithProvider]: true,\n    [DataQueryOperation.UserLinkWithProvider]: true,\n    [DataQueryOperation.UserUnlinkFromProvider]: true,\n    [DataQueryOperation.UserLogin]: true,\n    [DataQueryOperation.UserLogout]: true,\n    [DataQueryOperation.UserChangePassword]: true,\n    [DataQueryOperation.UserResetPassword]: true\n};\n\nfunction buildUsersErrorMessage(dataQuery):{ message: string, code: number } {\n    var unsupportedUserSocialProviderOperations = [\n        DataQueryOperation.UserLoginWithProvider,\n        DataQueryOperation.UserLinkWithProvider,\n        DataQueryOperation.UserUnlinkFromProvider\n    ];\n\n    var operation = dataQuery.operation;\n    let operationStr = DataQueryOperation[dataQuery.operation];\n    if (unsupportedUserSocialProviderOperations.indexOf(operation) !== -1) {\n        let providerPrefix = operationStr.substring(0, operationStr.indexOf('Provider'));\n        operationStr = providerPrefix + (dataQuery.data.Provider || dataQuery.data.Identity.Provider);\n    }\n\n    return {message: 'The Users operation ' + operationStr + ' is not supported in offline mode', code: 0};\n}\n\nfunction buildFilesErrorMessage(dataOperation:DataQueryOperation):{ message: string, code: number } {//TODO: error type\n    let operationStr = DataQueryOperation[dataOperation];\n    return {message: `The Files operation ${operationStr} is not supported in offline mode`, code: 0};\n}\n\nexport class OfflineQueryProcessor {\n    constructor(public persister:Persister,\n                public _encryptionProvider:CryptographicProvider,\n                public offlineFilesProcessor:OfflineFilesProcessor,\n                public everlive:Everlive,\n                public setup:any) {\n    }\n\n    processQuery(dataQuery):Promise<any> {\n        throw new EverliveError({message: 'The method processQuery is not implemented'});\n    }\n\n    _persistData(contentType, items?) {\n        throw new EverliveError({message: 'The method _persistData is not implemented'});\n    }\n\n    _shouldAutogenerateIdForContentType(contentType) {\n        return !(this.setup && this.setup.typeSettings && this.setup.typeSettings[contentType] && this.setup.typeSettings[contentType].autoGenerateId === false);\n    }\n\n    _getAllCollections():Promise<any> {\n        throw new EverliveError({message: 'The method _getAllCollections is not implemented'});\n    }\n\n    purgeAll(success, error) {\n        return Utils.buildPromise((success, error) => {\n            this.persister.purgeAll(() => {\n                const cachingIsEnabled = this.everlive.setup.caching && this.everlive.setup.caching.enabled === true;\n                if (cachingIsEnabled) {\n                    this.everlive.cache.clearAll(success, error);\n                } else {\n                    success();\n                }\n            }, error);\n        }, success, error);\n    }\n\n    purge(contentType, success, error) {\n        return Utils.buildPromise((success, error) => {\n            this.persister.purge(contentType, () => {\n                const cachingIsEnabled = this.everlive.setup.caching && this.everlive.setup.caching.enabled === true;\n                if (cachingIsEnabled) {\n                    this.everlive.cache.clear(contentType, success, error);\n                } else {\n                    success();\n                }\n            }, error);\n        }, success, error);\n    }\n\n    purgeById(contentType, itemId):Promise<any> {\n        return new Promise((resolve, reject) => {\n            this.persister.purgeById(contentType, itemId, resolve, reject);\n        });\n    }\n\n\n    checkSupportedQuery(dataQuery):{ message: string, code: number } {\n        for (var i = 0; i < unsupportedOfflineHeaders.length; i++) {\n            var header = unsupportedOfflineHeaders[i];\n            if (dataQuery.getHeader(header)) {\n                return {message: 'The header ' + header + ' is not supported in offline mode', code: 0};\n            }\n        }\n\n        if (Utils.isContentType.users(dataQuery.collectionName) && unsupportedUsersOperations[dataQuery.operation]) {\n            return buildUsersErrorMessage(dataQuery);\n        }\n\n        let isSingle = dataQuery.additionalOptions && dataQuery.additionalOptions.id;\n        let isUpdateByFilter = dataQuery.operation === DataQueryOperation.Update && !isSingle;\n        let isRawUpdate = dataQuery.operation === DataQueryOperation.RawUpdate;\n        let creatingMultiple = dataQuery.operation === DataQueryOperation.Create && Array.isArray(dataQuery.data);\n\n        if (Utils.isContentType.files(dataQuery.collectionName)) {\n            if (creatingMultiple) {\n                return EverliveErrors.invalidRequest;\n            } else if (isRawUpdate || isUpdateByFilter) {\n                return buildFilesErrorMessage(dataQuery.operation);\n            }\n        }\n    }\n\n\n    _setItemDates(currentItem, itemToCreate, contentType) {\n        // we need to manually clone the dates in order to dereference them from the original object as\n        // _.extends will pass a reference to the original date instead of creating a new instance\n        if (Utils.isDate(currentItem.CreatedAt)) {\n            itemToCreate.CreatedAt = Utils.cloneDate(currentItem.CreatedAt);\n        } else {\n            itemToCreate.CreatedAt = new Date();\n        }\n\n        if (Utils.isDate(currentItem.ModifiedAt)) {\n            itemToCreate.ModifiedAt = Utils.cloneDate(currentItem.ModifiedAt);\n        } else {\n            itemToCreate.ModifiedAt = Utils.cloneDate(itemToCreate.CreatedAt);\n        }\n\n        itemToCreate.CreatedBy = itemToCreate.CreatedBy || this.everlive.setup.principalId || Constants.guidEmpty;\n        itemToCreate.ModifiedBy = itemToCreate.ModifiedBy || itemToCreate.CreatedBy;\n        if (contentType === 'Users') {\n            itemToCreate.Owner = itemToCreate._id;\n        } else {\n            itemToCreate.Owner = itemToCreate.CreatedBy || Constants.guidEmpty;\n        }\n    }\n\n    _transformPersistedData(contentType, contentTypeData) {\n        var transformFields = [];\n\n        if (contentType === 'Users') {\n            transformFields = transformFields.concat(['Password', 'SecretQuestionId', 'SecretAnswer']);\n        }\n\n        if (transformFields.length) {\n            _.each(contentTypeData, function (contentTypeObject) {\n                offlineTransformations.removeFieldsTransform(contentTypeObject, transformFields);\n            });\n        }\n    }\n\n    _overwriteFile(itemId, itemForUpdate, isSync) {\n        return this.everlive.offlineStorage.files.purge(itemId)\n            .then(() => {\n                return this.offlineFilesProcessor.upsertFileFromObject(itemForUpdate, true, isSync);\n            })\n    }\n\n    _getCreateResult(createdItems, returnFullItem) {\n        if (createdItems.length === 1) {\n            var result;\n            if (returnFullItem) {\n                var item = _.extend({}, createdItems[0]);\n                result = offlineTransformations.idTransform(item);\n            } else {\n                result = {\n                    CreatedAt: Utils.cloneDate(createdItems[0].CreatedAt),\n                    Id: createdItems[0]._id\n                }\n            }\n\n            return {\n                result: result\n            };\n        } else {\n            var multipleCreateResult = [];\n            _.each(createdItems, function (createdItem:any) {\n                var item;\n                if (returnFullItem) {\n                    var itemCopy = _.extend({}, createdItem);\n                    item = offlineTransformations.idTransform(itemCopy);\n                } else {\n                    item = {\n                        CreatedAt: Utils.cloneDate(createdItem.CreatedAt),\n                        Id: createdItem._id\n                    };\n                }\n                multipleCreateResult.push(item);\n            });\n\n            return {\n                result: multipleCreateResult\n            };\n        }\n    }\n\n    protected _prepareExpand(expand, dataQuery, isArray) {\n        return new Promise(function (resolve, reject) {\n            if (expand) {\n                expandProcessor.prepare(expand, dataQuery.collectionName, isArray, dataQuery.fields, null, null, function (err, prepareResult) {\n                    if (err) {\n                        if (err.name === 'ExpandError') {\n                            err.code = EverliveErrors.invalidExpandExpression.code;\n                        }\n                        return reject(err);\n                    }\n                    resolve(prepareResult);\n                });\n            } else {\n                resolve();\n            }\n        });\n    }\n\n    protected _expandResult(prepareExpandResult, result) {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            if (prepareExpandResult) {\n                expandProcessor.expand(prepareExpandResult.relationsTree, result, {\n                    offlineModule: self\n                }, function (err, result) {\n                    if (err) {\n                        if (err.name === 'ExpandError') {\n                            err.code = EverliveErrors.invalidExpandExpression.code;\n                        }\n                        return reject(err);\n                    }\n                    resolve(result);\n                });\n            } else {\n                resolve(result);\n            }\n        });\n    }\n\n    getDownloadUrlById(dataQuery) {\n        var self = this;\n        var id = dataQuery.additionalOptions.id;\n        var offlineFilePath;\n        var fileDirectUri;\n\n        return self.everlive\n            .files\n            .useOffline(true)\n            .isSync(dataQuery.isSync)\n            .getById(id)\n            .then(function (res) {\n                var file = res.result;\n                fileDirectUri = file.Uri;\n                return self.everlive.offlineStorage.files._getFileUrlForId(file.Id, file.Filename);\n            })\n            .then(function (filePath) {\n                offlineFilePath = filePath;\n                return self.everlive.offlineStorage.offlineFilesProcessor.fileStore.getFileByAbsolutePath(filePath);\n            })\n            .then(function (fileEntry) {\n                return {\n                    result: {\n                        Uri: fileEntry ? offlineFilePath : fileDirectUri\n                    }\n                };\n            });\n    }\n\n    _transformOfflineResult(resultSet, count?, dataQuery?, additionalTransformations?) {\n        var transformedResult = {\n            result: resultSet,\n            count: count || (resultSet || []).length\n        };\n\n        if ((count !== undefined && count !== null) || Array.isArray(resultSet)) {\n            transformedResult.count = count || resultSet.length;\n        }\n\n        var transformations = [];\n\n        transformations.push(offlineTransformations.idTransform);\n        transformations.push(offlineTransformations.removeMarkersTransform);\n\n        if (dataQuery) {\n            var includeCount = dataQuery.getHeader(Constants.Headers.includeCount);\n            if (includeCount === false) {\n                delete transformedResult.count;\n            }\n\n            var singleFieldExpression = dataQuery.getHeader(Constants.Headers.singleField);\n            if (typeof singleFieldExpression === 'string') {\n                transformations.push(offlineTransformations.singleFieldTransform.bind(this, singleFieldExpression));\n            }\n        }\n\n        if (additionalTransformations) {\n            transformations = transformations.concat(additionalTransformations);\n        }\n\n        this._applyTransformations(transformedResult, transformations);\n\n        if (transformedResult.count === undefined) {\n            delete transformedResult.count;\n        }\n\n        return transformedResult;\n    }\n\n    _applyTransformations(transformedResult:any, transformations) {\n        if (Array.isArray(transformedResult.result)) {\n            _.each(transformations, function (transformation:(v:string) => string) {\n                transformedResult.result.map(function (value:string, key) {\n                    transformedResult.result[key] = transformation(value);\n                });\n            });\n        } else {\n            _.each(transformations, function (transformation:(v:string) => string) {\n                transformedResult.result = transformation(transformedResult.result);\n            });\n        }\n    }\n\n    _getDirtyItems(collection) {\n        var filter = {};\n        filter[Constants.offlineItemsStateMarker] = {$exists: true, $ne: null};\n        var query = mingo.Query(filter);\n        var cursor = mingo.Cursor(collection, query);\n        return cursor.all();\n    }\n\n    _getWithoutDeletedFilter(filter, checkNull = false) {\n        var withoutDeletedFilter = {\n            $and: []\n        };\n        withoutDeletedFilter.$and.push(filter);\n        var deleteOfflineFilter = {};\n        if(checkNull){\n            deleteOfflineFilter['$or'] = [\n                {[Constants.offlineItemsStateMarker]: {$ne: Constants.offlineItemStates.deleted}},\n                {[Constants.offlineItemsStateMarker]: {$is: null}}\n            ];\n        }else {\n            deleteOfflineFilter[Constants.offlineItemsStateMarker] = {$ne: Constants.offlineItemStates.deleted};\n        }\n        withoutDeletedFilter.$and.push(deleteOfflineFilter);\n        return withoutDeletedFilter;\n    }\n\n    protected _setLocalFileUri(fileToCreate: any, localUri: string) {\n        if (fileToCreate.Uri === undefined) {\n            fileToCreate.Uri = localUri;\n        }\n        return fileToCreate;\n    }\n\n    protected _setItemState(item: any, state: string) {\n        if (state) {\n            item[Constants.offlineItemsStateMarker] = state;\n        } else {\n            delete item[Constants.offlineItemsStateMarker];\n        }\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/processors/OfflineQueryProcessor.ts\n **/","declare const window, device, Everlive, navigator;\n\nimport { jstz } from 'jstimezonedetect';\nimport * as _ from 'underscore';\n\nimport { EverliveError } from '../EverliveError';\nimport { Constants } from '../constants';\nimport { Utils } from '../utils';\nimport { Device } from './CurrentDevice';\n\nlet Platform = Constants.Platform;\nlet buildPromise = Utils.buildPromise;\n\n/**\n * @class CurrentDevice\n * @deprecated\n * @protected\n * @param pushHandler\n * @constructor\n */\nclass CurrentDevice implements Device {\n    _pushHandler;\n    _initSuccessCallback;\n    _initErrorCallback;\n    _globalFunctionSuffix;\n    pushSettings;\n    pushToken;\n    isInitialized;\n    isInitializing;\n    emulatorMode;\n\n    constructor(pushHandler) {\n        if (!window.cordova) {\n            throw new EverliveError({message: 'Error: currentDevice() can only be called from within a hybrid mobile app, after \\'deviceready\\' event has been fired.'});\n        }\n\n        this._pushHandler = pushHandler;\n        this._initSuccessCallback = null;\n        this._initErrorCallback = null;\n\n        //Suffix for the global callback functions\n        this._globalFunctionSuffix = null;\n\n        this.pushSettings = null;\n        this.pushToken = null;\n        this.isInitialized = false;\n        this.isInitializing = false;\n\n        this.emulatorMode = false;\n    }\n\n    static ensurePushIsAvailable() {\n        var isPushNotificationPluginAvailable = (typeof window !== 'undefined' && window.plugins && window.plugins.pushNotification);\n\n        if (!isPushNotificationPluginAvailable && !Utils._inAppBuilderSimulator()) {\n            throw new EverliveError({message: 'The push notification plugin is not available. Ensure that the pushNotification plugin is included ' +\n            'and use after `deviceready` event has been fired.'});\n        }\n    }\n\n    /**\n     * Initializes the current device for push notifications. This method requests a push token from the device vendor and enables the push notification functionality on the device. Once this is done, you can register the device with {{site.tap}} using the `register()` method.\n     * @method enableNotifications\n     * @name enableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @param {PushSettings} pushSettings An object specifying various settings for the initialization.\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Initializes the current device for push notifications. This method requests a push token from the device vendor and enables the push notification functionality on the device. Once this is done, you can register the device with {{site.tap}} using the `register()` method.\n     * @method enableNotifications\n     * @name enableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @param {PushSettings} pushSettings An object specifying various settings for the initialization.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    enableNotifications(pushSettings, success?: Function, error?: Function) {\n        this.pushSettings = this._cleanPlatformsPushSettings(pushSettings);\n\n        return buildPromise(_.bind(this._initialize, this), success, error);\n    }\n\n    /**\n     * Disables push notifications for the current device. This method invalidates any push tokens that were obtained for the device from the current application.\n     * @method disableNotifications\n     * @name disableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Disables push notifications for the current device. This method invalidates any push tokens that were obtained for the device from the current application.\n     * @method disableNotifications\n     * @name disableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    disableNotifications(success?: Function, error?: Function) {\n        var self = this;\n\n        return this.unregister().then(\n            function () {\n                return buildPromise(\n                    function (success, error) {\n                        if (self.emulatorMode) {\n                            success();\n                        } else {\n                            var pushNotification = window.plugins.pushNotification;\n                            var unregisterOptions;\n                            var platformType = self._getPlatformType();\n                            if (platformType === Platform.WindowsPhone) {\n                                unregisterOptions = {'channelName': self.pushSettings.wp8.channelName};\n                            }\n                            pushNotification.unregister(\n                                function () {\n                                    self.isInitialized = false;\n                                    success();\n                                },\n                                error,\n                                unregisterOptions\n                            );\n                        }\n                    },\n                    success,\n                    error\n                );\n            },\n            error\n        );\n    }\n\n    /**\n     * Returns the push registration for the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method getRegistration\n     * @name getRegistration\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Returns the push registration for the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method getRegistration\n     * @name getRegistration\n     * @param {Function} success Callback to invoke on success.\n     * @param {Function} error Callback to invoke on error.\n     */\n    getRegistration(success?: Function, error?: Function) {\n        var deviceId = encodeURIComponent(this._getDeviceId());\n        return this._pushHandler.devices.getById('HardwareId/' + deviceId, success, error);\n    }\n\n    /**\n     * Registers the current device for push notifications with {{site.tap}}. This method can be called only after [enableNotifications()]{@link currentDevice.enableNotifications} has completed successfully.\n     * @memberOf CurrentDevice.prototype\n     * @method register\n     * @name register\n     * @param {Object} customParameters Custom parameters for the registration.\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Registers the current device for push notifications with {{site.tap}}. This method can be called only after [enableNotifications()]{@link currentDevice.enableNotifications} has completed successfully.\n     * @memberOf CurrentDevice.prototype\n     * @method register\n     * @name register\n     * @param {Object} customParameters Custom parameters for the registration.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    register(customParameters, success?: Function, error?: any) {\n        var self = this;\n\n        var deviceRegistration: any = {};\n        if (customParameters !== undefined) {\n            deviceRegistration.Parameters = customParameters;\n        }\n\n        return this._populateRegistrationObject(deviceRegistration).then(\n            function () {\n                return self._pushHandler.devices.create(deviceRegistration, success, error);\n            },\n            error\n        );\n    }\n\n    /**\n     * Unregisters the current device for push notifications from {{site.tap}}. After this call completes successfully, {{site.tap}} will no longer send notifications to this device. Note that this does not prevent the device from receiving notifications and does not invalidate push tokens.\n     * @memberOf CurrentDevice.prototype\n     * @method unregister\n     * @name unregister\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Unregisters the current device for push notifications from {{site.tap}}. After this call completes successfully, {{site.tap}} will no longer send notifications to this device. Note that this does not prevent the device from receiving notifications and does not invalidate push tokens.\n     * @memberOf CurrentDevice.prototype\n     * @method unregister\n     * @name unregister\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    unregister(success?: Function, error?: Function) {\n        var deviceId = encodeURIComponent(device.uuid);\n        return this._pushHandler.devices.destroySingle({Id: 'HardwareId/' + deviceId}, success, error);\n    }\n\n    /**\n     * Updates the registration of the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method updateRegistration\n     * @name updateRegistration\n     * @param {Object} customParameters Custom parameters for the registration. If undefined, customParameters are not updated.\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Updates the registration for the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method updateRegistration\n     * @name updateRegistration\n     * @param {Object} customParameters Custom parameters for the registration. If undefined, customParameters are not updated.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    updateRegistration(customParameters, success?: Function, error?: any) {\n        var self = this;\n\n        var deviceRegistration: any = {};\n        if (customParameters !== undefined) {\n            deviceRegistration.Parameters = customParameters;\n        }\n\n        return this._populateRegistrationObject(deviceRegistration).then(\n            function () {\n                deviceRegistration.Id = 'HardwareId/' + encodeURIComponent(deviceRegistration.HardwareId);\n                return self._pushHandler.devices.updateSingle(deviceRegistration, success, error);\n            },\n            error\n        );\n    }\n\n    /**\n     * This method provides a different operation on each supported platform:\n     *\n     * - On iOS: Checks if Notifications is enabled for this application in the device's Notification Center.\n     * - On Windows Phone: Checks if the application has an active open channel for communication with the Microsoft Push Notification Service. The outcome does not depend on the device's notification settings.\n     * - On Android: Checks if the application has established a connection with Google Cloud Messaging. The outcome does not depend on the device's notification settings.\n     * @method areNotificationsEnabled\n     * @name areNotificationsEnabled\n     * @memberOf Push.prototype\n     * @param {Object} options An object passed to the Push Notification plugin's areNotificationsEnabled method\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * iOS: Checks if the Notifications are enabled for this Application in the Device's Notification Center.\n     * Windows Phone: Checks if the Application has an active opened Channel for communication with the Notification Service. Not relying on the device notification settings.\n     * Android: Checks if the Application has established connection with the Notification Service. Not relying on the device notification settings.\n     * @method areNotificationsEnabled\n     * @name areNotificationsEnabled\n     * @memberOf Push.prototype\n     * @param {Object} options an object passed to the Push Notification plugin's areNotificationsEnabled method.\n     * @param {Function} [onSuccess] Callback to invoke on successful check. Passes a single boolean value: true or false.\n     * @param {Function} [onError] Callback to invoke when an error in the push plugin has occurred.\n     */\n    areNotificationsEnabled(options, onSuccess?: Function, onError?: Function) {\n        options = options || {};\n        var pushNotification = window.plugins.pushNotification;\n\n        return buildPromise(function (successCb, errorCb) {\n            pushNotification.areNotificationsEnabled(successCb, errorCb, options);\n        }, onSuccess, onError);\n    }\n\n    notificationProcessed() {\n        var pushPlugin = window.plugins.pushNotification;\n        pushPlugin.notificationProcessed();\n    }\n\n    _initializeInteractivePush(iOSSettings, success?: Function, error?: Function) {\n        var pushPlugin = window.plugins.pushNotification;\n\n        var interactiveSettings = iOSSettings.interactiveSettings;\n        var notificationTypes = [];\n        if (iOSSettings.alert) {\n            notificationTypes.push(pushPlugin.UserNotificationTypes.Alert);\n        }\n        if (iOSSettings.badge) {\n            notificationTypes.push(pushPlugin.UserNotificationTypes.Badge);\n        }\n        if (iOSSettings.sound) {\n            notificationTypes.push(pushPlugin.UserNotificationTypes.Sound);\n        }\n\n        var getAction = function (actionIdentifier) {\n            var action = _.find(interactiveSettings.actions, function (action: any) {\n                return action.identifier === actionIdentifier;\n            });\n\n            return action;\n        };\n        var categories = _.map(interactiveSettings.categories, function (category: any) {\n            return {\n                identifier: category.identifier,\n                actionsForDefaultContext: _.map(category.actionsForDefaultContext, getAction),\n                actionsForMinimalContext: _.map(category.actionsForMinimalContext, getAction)\n            }\n        });\n\n        pushPlugin.registerUserNotificationSettings(\n            // the success callback which will immediately return (APNs is not contacted for this)\n            success,\n            // called in case the configuration is incorrect\n            error, {\n                // asking permission for these features\n                types: notificationTypes,\n                // register these categories\n                categories: categories\n            }\n        );\n    }\n\n    //Initializes the push functionality on the device.\n    _initialize(success?: Function, error?: Function) {\n        var self = this;\n\n        if (this.isInitializing) {\n            error(new EverliveError({message: 'Push notifications are currently initializing.'}));\n            return;\n        }\n\n        if (!this.emulatorMode && (!window.navigator || !window.navigator.globalization)) {\n            error(new EverliveError({message: 'The globalization plugin is not initialized.'}));\n            return;\n        }\n\n        if (!this.emulatorMode && (!window.plugins || !window.plugins.pushNotification)) {\n            error(new EverliveError({message: 'The push notifications plugin is not initialized.'}));\n            return;\n        }\n\n        this._initSuccessCallback = success;\n        this._initErrorCallback = error;\n\n        if (this.isInitialized) {\n            this._deviceRegistrationSuccess(this.pushToken);\n            return;\n        }\n\n        if (this.emulatorMode) {\n            setTimeout(\n                function () {\n                    self._deviceRegistrationSuccess('fake_push_token');\n                },\n                1000\n            );\n            return;\n        }\n\n        this.isInitializing = true;\n\n        var suffix = this._globalFunctionSuffix;\n        if (!suffix) {\n            suffix = Date.now().toString();\n            this._globalFunctionSuffix = suffix;\n        }\n\n        var pushNotification = window.plugins.pushNotification;\n\n        var platformType = this._getPlatformType();\n        if (platformType === Platform.iOS) {\n            //Initialize global APN callback\n            var apnCallbackName = 'apnCallback_' + suffix;\n            Everlive.PushCallbacks[apnCallbackName] = _.bind(this._onNotificationAPN, this);\n\n            //Construct registration options object and validate iOS settings\n            var apnRegistrationOptions = this.pushSettings.iOS;\n            apnRegistrationOptions.ecb = 'Everlive.PushCallbacks.' + apnCallbackName;\n\n            //Register for APN\n            pushNotification.register(\n                _.bind(this._successfulRegistrationAPN, this),\n                _.bind(this._failedRegistrationAPN, this),\n                apnRegistrationOptions\n            );\n        } else if (platformType === Platform.Android) {\n            //Initialize global GCM callback\n            var gcmCallbackName = 'gcmCallback_' + suffix;\n            Everlive.PushCallbacks[gcmCallbackName] = _.bind(this._onNotificationGCM, this);\n\n            //Construct registration options object and validate the Android settings\n            var gcmRegistrationOptions = this.pushSettings.android;\n            this._validateAndroidSettings(gcmRegistrationOptions);\n            gcmRegistrationOptions.ecb = 'Everlive.PushCallbacks.' + gcmCallbackName;\n\n            //Register for GCM\n            pushNotification.register(\n                _.bind(this._successSentRegistrationGCM, this),\n                _.bind(this._errorSentRegistrationGCM, this),\n                gcmRegistrationOptions\n            );\n        } else if (platformType === Platform.WindowsPhone) {\n            //Initialize global WP8 callbacks.\n            var wp8CallbackName = 'wp8Callback_' + suffix;\n            var wp8RegistrationSuccessCallbackName = 'wp8RegistrationSuccessCallback_' + suffix;\n            var wp8RegistrationErrorCallbackName = 'wp8RegistrationErrorCallback_' + suffix;\n\n            Everlive.PushCallbacks[wp8CallbackName] = _.bind(this._onNotificationWP8, this);\n            Everlive.PushCallbacks[wp8RegistrationSuccessCallbackName] = _.bind(this._deviceRegistrationSuccessWP, this);\n            Everlive.PushCallbacks[wp8RegistrationErrorCallbackName] = _.bind(this._deviceRegistrationFailed, this);\n\n            //Construct registration options object and validate the WP8  settings\n            var wp8RegistrationOptions = this.pushSettings.wp8;\n            this._validateWP8Settings(wp8RegistrationOptions);\n            wp8RegistrationOptions.ecb = 'Everlive.PushCallbacks.' + wp8CallbackName;\n            wp8RegistrationOptions.uccb = 'Everlive.PushCallbacks.' + wp8RegistrationSuccessCallbackName;\n            wp8RegistrationOptions.errcb = 'Everlive.PushCallbacks.' + wp8RegistrationErrorCallbackName;\n\n\n            pushNotification.register(\n                _.bind(this._successSentRegistrationWP8, this),\n                _.bind(this._errorSentRegistrationWP8, this),\n                wp8RegistrationOptions\n            );\n\n        } else {\n            throw new EverliveError({message: 'The current platform is not supported: ' + device.platform});\n        }\n    }\n\n    _deviceRegistrationSuccessWP(result) {\n        this._deviceRegistrationSuccess(result.uri);\n    }\n\n    _validateAndroidSettings(androidSettings) {\n        if (!androidSettings.senderID) {\n            throw new EverliveError({message: 'Sender ID (project number) is not set in the android settings.'});\n        }\n    }\n\n    _validateWP8Settings(settings) {\n        if (!settings.channelName) {\n            throw new EverliveError({message: 'channelName is not set in the WP8 settings.'});\n        }\n    }\n\n    _cleanPlatformsPushSettings(pushSettings) {\n        var cleanSettings: any = {};\n        pushSettings = pushSettings || {};\n\n        var addSettingsForPlatform = function addSettingsForPlatform(newSettingsObject, platform, allowedFields) {\n            if (!pushSettings[platform]) {\n                return;\n            }\n\n            newSettingsObject[platform] = newSettingsObject[platform] || {};\n            var newPlatformSettings = pushSettings[platform];\n            var settings = newSettingsObject[platform];\n            _.each(allowedFields, function (allowedField: any) {\n                if (newPlatformSettings.hasOwnProperty(allowedField)) {\n                    settings[allowedField] = newPlatformSettings[allowedField];\n                }\n            });\n        };\n\n        addSettingsForPlatform(cleanSettings, 'iOS', ['badge', 'sound', 'alert', 'interactiveSettings']);\n        addSettingsForPlatform(cleanSettings, 'android', ['senderID', 'projectNumber']);\n        addSettingsForPlatform(cleanSettings, 'wp8', ['channelName']);\n\n        var callbackFields = ['notificationCallbackAndroid', 'notificationCallbackIOS', 'notificationCallbackWP8'];\n        _.each(callbackFields, function (callbackField) {\n            var callback = pushSettings[callbackField];\n            if (callback) {\n                if (typeof callback !== 'function') {\n                    throw new EverliveError({message: 'The \"' + callbackField + '\" of the push settings should be a function'});\n                }\n\n                cleanSettings[callbackField] = pushSettings[callbackField];\n            }\n        });\n\n        if (pushSettings.customParameters) {\n            cleanSettings.customParameters = pushSettings.customParameters;\n        }\n\n        return cleanSettings;\n    }\n\n    _populateRegistrationObject(deviceRegistration, success?: Function, error?: Function) {\n        var self = this;\n\n        return buildPromise(\n            function (success, error) {\n                if (!self.pushToken) {\n                    throw new EverliveError({message: 'Push token is not available.'});\n                }\n\n                self._getLocaleName(\n                    function (locale) {\n                        var deviceId = self._getDeviceId();\n                        var hardwareModel = device.model;\n                        var platformType = self._getPlatformType();\n                        var timeZone = jstz.determine().name();\n                        var pushToken = self.pushToken;\n                        var language = locale.value;\n                        var platformVersion = device.version;\n\n                        deviceRegistration.HardwareId = deviceId;\n                        deviceRegistration.HardwareModel = hardwareModel;\n                        deviceRegistration.PlatformType = platformType;\n                        deviceRegistration.PlatformVersion = platformVersion;\n                        deviceRegistration.TimeZone = timeZone;\n                        deviceRegistration.PushToken = pushToken;\n                        deviceRegistration.Locale = language;\n\n                        success();\n                    },\n                    error\n                );\n            },\n            success,\n            error\n        );\n    }\n\n    _getLocaleName(success?: Function, error?: Function) {\n        if (this.emulatorMode) {\n            success({value: 'en_US'});\n        } else {\n            navigator.globalization.getLocaleName(\n                function (locale) {\n                    success(locale);\n                },\n                error\n            );\n            navigator.globalization.getLocaleName(\n                function (locale) {\n                },\n                error\n            );\n        }\n    }\n\n    _getDeviceId() {\n        return device.uuid;\n    }\n\n    //Returns the Everlive device platform constant given a value aquired from cordova's device.platform.\n    _getPlatformType() {\n        var psLower = device.platform.toLowerCase();\n        switch (psLower) {\n            case 'ios':\n            case 'iphone':\n            case 'ipad':\n                return Platform.iOS;\n            case 'android':\n                return Platform.Android;\n            case 'wince':\n                return Platform.WindowsPhone;\n            case 'win32nt': // real wp8 devices return this string as platform identifier.\n                return Platform.WindowsPhone;\n            default:\n                return Platform.Unknown;\n        }\n    }\n\n    _deviceRegistrationFailed(error) {\n        this.pushToken = null;\n        this.isInitializing = false;\n        this.isInitialized = false;\n\n        if (this._initErrorCallback) {\n            this._initErrorCallback({error: error});\n        }\n    }\n\n    _deviceRegistrationSuccess(token) {\n        this.pushToken = token;\n        this.isInitializing = false;\n        this.isInitialized = true;\n\n        if (this._initSuccessCallback) {\n            this._initSuccessCallback({token: token});\n        }\n    }\n\n    //Occurs when the device registration in APN succeeds\n    _successfulRegistrationAPN(token) {\n        var self = this;\n        if (this.pushSettings.iOS && this.pushSettings.iOS.interactiveSettings) {\n            this._initializeInteractivePush(\n                this.pushSettings.iOS,\n                function () {\n                    self._deviceRegistrationSuccess(token);\n                },\n                function (err) {\n                    throw new EverliveError({message: 'The interactive push configuration is incorrect: ' + err});\n                }\n            );\n        } else {\n            this._deviceRegistrationSuccess(token);\n        }\n    }\n\n    //Occurs if the device registration in APN fails\n    _failedRegistrationAPN(error) {\n        this._deviceRegistrationFailed(error);\n    }\n\n    //Occurs when device registration has been successfully sent to GCM\n    _successSentRegistrationGCM(id) {\n        //console.log(\"Successfully sent request for registering with GCM.\");\n    }\n\n    //Occurs when device registration has been successfully sent for WP8\n    _successSentRegistrationWP8(id) {\n        //console.log(\"Successfully sent request for registering WP8 .\");\n    }\n\n    //Occurs when an error occured when sending registration request for WP8\n    _errorSentRegistrationWP8(error) {\n        this._deviceRegistrationFailed(error);\n    }\n\n    //Occurs when an error occured when sending registration request to GCM\n    _errorSentRegistrationGCM(error) {\n        this._deviceRegistrationFailed(error);\n    }\n\n    //This function receives all notification events from APN\n    _onNotificationAPN(e) {\n        this._raiseNotificationEventIOS(e);\n    }\n    //This function receives all notification events for WP8\n    _onNotificationWP8(e) {\n        this._raiseNotificationEventWP8(e);\n    }\n\n    //This function receives all notification events from GCM\n    _onNotificationGCM(e) {\n        switch (e.event) {\n            case 'registered':\n                if (e.regid.length > 0) {\n                    this._deviceRegistrationSuccess(e.regid);\n                }\n                break;\n            case 'message':\n                this._raiseNotificationEventAndroid(e);\n                break;\n            case 'error':\n                if (!this.pushToken) {\n                    this._deviceRegistrationFailed(e);\n                } else {\n                    this._raiseNotificationEventAndroid(e);\n                }\n                break;\n            default:\n                this._raiseNotificationEventAndroid(e);\n                break;\n        }\n    }\n\n    _raiseNotificationEventAndroid(e) {\n        if (this.pushSettings.notificationCallbackAndroid) {\n            this.pushSettings.notificationCallbackAndroid(e);\n        }\n    }\n\n    _raiseNotificationEventIOS(e) {\n        if (this.pushSettings.notificationCallbackIOS) {\n            this.pushSettings.notificationCallbackIOS(e);\n        }\n    }\n\n    _raiseNotificationEventWP8(e) {\n        if (this.pushSettings.notificationCallbackWP8) {\n            this.pushSettings.notificationCallbackWP8(e);\n        }\n    }\n}\n\nexport = CurrentDevice;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/push/CordovaCurrentDevice.ts\n **/","import * as _ from 'underscore';\nimport { jstz } from 'jstimezonedetect';\n\nimport { EverliveError } from '../EverliveError';\nimport { Constants } from '../constants';\nimport { Utils } from '../utils';\nimport { Device } from \"./CurrentDevice\";\n\nvar tnsPlatform;\n\ntry {\n    tnsPlatform = require('platform');\n} catch (e) { throw e; } // because of webpack external dependency declaration - this marks it as optional\n\nconst Platform = Constants.Platform;\nconst buildPromise = Utils.buildPromise;\n\n/**\n * @class CurrentDevice\n * @deprecated\n * @protected\n * @param pushHandler\n * @constructor\n */\nclass CurrentDevice implements Device {\n    _pushHandler;\n    _initSuccessCallback;\n    _initErrorCallback;\n    _globalFunctionSuffix;\n    pushSettings;\n    pushToken;\n    isInitialized;\n    isInitializing;\n    emulatorMode;\n\n    constructor(pushHandler) {\n        this._pushHandler = pushHandler;\n        this._initSuccessCallback = null;\n        this._initErrorCallback = null;\n\n        //Suffix for the global callback functions\n        this._globalFunctionSuffix = null;\n\n        this.pushSettings = null;\n        this.pushToken = null;\n        this.isInitialized = false;\n        this.isInitializing = false;\n\n        this.emulatorMode = false;\n    }\n\n    private get pushPlugin() {\n        try {\n            return require('nativescript-push-notifications');\n        } catch (e) { throw e; } // because of webpack external dependency declaration - this marks it as optional\n    };\n\n    static ensurePushIsAvailable = function () {\n        // NativeScript will throw an error when the TNS Push Plugin cannot be required. So this is actually unreachable.\n    };\n\n    /**\n     * Initializes the current device for push notifications. This method requests a push token from the device vendor and enables the push notification functionality on the device. Once this is done, you can register the device with {{site.tap}} using the `register()` method.\n     * @method enableNotifications\n     * @name enableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @param {PushSettings} pushSettings An object specifying various settings for the initialization.\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Initializes the current device for push notifications. This method requests a push token from the device vendor and enables the push notification functionality on the device. Once this is done, you can register the device with {{site.tap}} using the `register()` method.\n     * @method enableNotifications\n     * @name enableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @param {PushSettings} pushSettings An object specifying various settings for the initialization.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    enableNotifications(pushSettings, success?: Function, error?: Function) {\n        this.pushSettings = this._cleanPlatformsPushSettings(pushSettings);\n\n        return buildPromise(_.bind(this._initialize, this), success, error);\n    }\n\n    /**\n     * Disables push notifications for the current device. This method invalidates any push tokens that were obtained for the device from the current application.\n     * @method disableNotifications\n     * @name disableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Disables push notifications for the current device. This method invalidates any push tokens that were obtained for the device from the current application.\n     * @method disableNotifications\n     * @name disableNotifications\n     * @memberOf CurrentDevice.prototype\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    disableNotifications(successCb?: Function, errorCb?: Function) {\n        var self = this;\n\n        return this.unregister().then(\n            function () {\n                return buildPromise(\n                    function (success, error) {\n                        var successCallback = function successCallback() {\n                            self.isInitialized = false;\n                            success();\n                        };\n\n\n                        var platformType = self._getPlatformType();\n                        if (platformType === Platform.Android) {\n                            return this.pushPlugin.unregister(successCallback, error, self.pushSettings.android);\n                        }\n\n                        this.pushPlugin.unregister(successCallback, error);\n                    },\n                    successCb,\n                    errorCb\n                );\n            },\n            errorCb\n        );\n    }\n\n    /**\n     * Returns the push registration for the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method getRegistration\n     * @name getRegistration\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Returns the push registration for the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method getRegistration\n     * @name getRegistration\n     * @param {Function} success Callback to invoke on success.\n     * @param {Function} error Callback to invoke on error.\n     */\n    getRegistration(success?: Function, error?: Function) {\n        var deviceId = encodeURIComponent(this._getDeviceId());\n        return this._pushHandler.devices.getById('HardwareId/' + deviceId, success, error);\n    }\n\n    /**\n     * Registers the current device for push notifications with {{site.tap}}. This method can be called only after [enableNotifications()]{@link currentDevice.enableNotifications} has completed successfully.\n     * @memberOf CurrentDevice.prototype\n     * @method register\n     * @name register\n     * @param {Object} customParameters Custom parameters for the registration.\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Registers the current device for push notifications with {{site.tap}}. This method can be called only after [enableNotifications()]{@link currentDevice.enableNotifications} has completed successfully.\n     * @memberOf CurrentDevice.prototype\n     * @method register\n     * @name register\n     * @param {Object} customParameters Custom parameters for the registration.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    register(customParameters, success?: Function, error?: any) {\n        var self = this;\n\n        var deviceRegistration: any = {};\n        if (customParameters !== undefined) {\n            deviceRegistration.Parameters = customParameters;\n        }\n\n        return this._populateRegistrationObject(deviceRegistration).then(\n            function () {\n                return self._pushHandler.devices.create(deviceRegistration, success, error);\n            },\n            error\n        );\n    }\n\n    /**\n     * Unregisters the current device for push notifications from {{site.tap}}. After this call completes successfully, {{site.tap}} will no longer send notifications to this device. Note that this does not prevent the device from receiving notifications and does not invalidate push tokens.\n     * @memberOf CurrentDevice.prototype\n     * @method unregister\n     * @name unregister\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Unregisters the current device for push notifications from {{site.tap}}. After this call completes successfully, {{site.tap}} will no longer send notifications to this device. Note that this does not prevent the device from receiving notifications and does not invalidate push tokens.\n     * @memberOf CurrentDevice.prototype\n     * @method unregister\n     * @name unregister\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    unregister(success?: Function, error?: Function) {\n        var deviceId = encodeURIComponent(this._getDeviceId());\n        return this._pushHandler.devices.destroySingle({Id: 'HardwareId/' + deviceId}, success, error);\n    }\n\n    /**\n     * Updates the registration of the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method updateRegistration\n     * @name updateRegistration\n     * @param {Object} customParameters Custom parameters for the registration. If undefined, customParameters are not updated.\n     * @returns {Object} The promise for the request.\n     */\n    /**\n     * Updates the registration for the current device.\n     * @memberOf CurrentDevice.prototype\n     * @method updateRegistration\n     * @name updateRegistration\n     * @param {Object} customParameters Custom parameters for the registration. If undefined, customParameters are not updated.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    updateRegistration(customParameters, success?: Function, error?: any) {\n        var self = this;\n\n        var deviceRegistration: any = {};\n        if (customParameters !== undefined) {\n            deviceRegistration.Parameters = customParameters;\n        }\n\n        return this._populateRegistrationObject(deviceRegistration).then(function () {\n                deviceRegistration.Id = 'HardwareId/' + encodeURIComponent(deviceRegistration.HardwareId);\n                return self._pushHandler.devices.updateSingle(deviceRegistration, success, error);\n            },\n            error\n        );\n    }\n\n    /**\n     * This method provides a different operation on each supported platform:\n     *\n     * - On iOS: Checks if Notifications is enabled for this application in the device's Notification Center.\n     * - On Windows Phone: Checks if the application has an active open channel for communication with the Microsoft Push Notification Service. The outcome does not depend on the device's notification settings.\n     * - On Android: Checks if the application has established a connection with Google Cloud Messaging. The outcome does not depend on the device's notification settings.\n     * @method areNotificationsEnabled\n     * @name areNotificationsEnabled\n     * @memberOf Push.prototype\n     * @param {Object} options An object passed to the Push Notification plugin's areNotificationsEnabled method\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * iOS: Checks if the Notifications are enabled for this Application in the Device's Notification Center.\n     * Windows Phone: Checks if the Application has an active opened Channel for communication with the Notification Service. Not relying on the device notification settings.\n     * Android: Checks if the Application has established connection with the Notification Service. Not relying on the device notification settings.\n     * @method areNotificationsEnabled\n     * @name areNotificationsEnabled\n     * @memberOf Push.prototype\n     * @param {Object} options an object passed to the Push Notification plugin's areNotificationsEnabled method.\n     * @param {Function} [onSuccess] Callback to invoke on successful check. Passes a single boolean value: true or false.\n     * @param {Function} [onError] Callback to invoke when an error in the push plugin has occurred.\n     */\n    areNotificationsEnabled(options, onSuccess?: Function, onError?: Function) {\n        options = options || {};\n\n        return buildPromise(function (successCb, errorCb) {\n            this.pushPlugin.areNotificationsEnabled(successCb, errorCb, options);\n        }, onSuccess, onError);\n    }\n\n    _initializeInteractivePush(iOSSettings, success?: Function, error?: Function) {\n        this.pushPlugin.registerUserNotificationSettings(\n            // the success callback which will immediately return (APNs is not contacted for this)\n            success,\n            // called in case the configuration is incorrect\n            error\n        );\n    }\n\n    //Initializes the push functionality on the device.\n    _initialize(success?: Function, error?: Function) {\n        if (this.isInitializing) {\n            error(new EverliveError({message: 'Push notifications are currently initializing.'}));\n            return;\n        }\n\n        this._initSuccessCallback = success;\n        this._initErrorCallback = error;\n\n        if (this.isInitialized) {\n            this._deviceRegistrationSuccess(this.pushToken);\n            return;\n        }\n\n        this.isInitializing = true;\n\n        var suffix = this._globalFunctionSuffix;\n        if (!suffix) {\n            suffix = Date.now().toString();\n            this._globalFunctionSuffix = suffix;\n        }\n\n        var platformType = this._getPlatformType();\n        if (platformType === Platform.iOS) {\n            //Construct registration options object and validate iOS settings\n            var apnRegistrationOptions = this.pushSettings.iOS;\n\n            apnRegistrationOptions.notificationCallbackIOS = this.pushSettings.notificationCallbackIOS;\n            //Register for APN\n            this.pushPlugin.register(\n                apnRegistrationOptions,\n                _.bind(this._successfulRegistrationAPN, this),\n                _.bind(this._failedRegistrationAPN, this)\n            );\n        } else if (platformType === Platform.Android) {\n            // Ensure the required fields are present in the Android Settings\n            var gcmRegistrationOptions = this.pushSettings.android;\n            this._validateAndroidSettings(gcmRegistrationOptions);\n\n            gcmRegistrationOptions.notificationCallbackAndroid = this.pushSettings.notificationCallbackAndroid;\n\n            //Register for GCM\n            this.pushPlugin.register(\n                gcmRegistrationOptions,\n                _.bind(this._successSentRegistrationGCM, this),\n                _.bind(this._errorSentRegistrationGCM, this)\n            );\n        } else {\n            throw new EverliveError({message: 'The current platform is not supported: ' + tnsPlatform.device.os});\n        }\n    }\n\n    _validateAndroidSettings(androidSettings) {\n        if (!androidSettings.senderID) {\n            throw new EverliveError({message: 'Sender ID (project number) is not set in the android settings.'});\n        }\n    }\n\n    _cleanPlatformsPushSettings(pushSettings) {\n        var cleanSettings: any = {};\n        pushSettings = pushSettings || {};\n\n        var addSettingsForPlatform = function addSettingsForPlatform(newSettingsObject, platform, allowedFields) {\n            if (!pushSettings[platform]) {\n                return;\n            }\n\n            newSettingsObject[platform] = newSettingsObject[platform] || {};\n            var newPlatformSettings = pushSettings[platform];\n            var settings = newSettingsObject[platform];\n            _.each(allowedFields, function (allowedField: any) {\n                if (newPlatformSettings.hasOwnProperty(allowedField)) {\n                    settings[allowedField] = newPlatformSettings[allowedField];\n                }\n            });\n        };\n\n        addSettingsForPlatform(cleanSettings, 'iOS', ['badge', 'sound', 'alert', 'interactiveSettings']);\n        addSettingsForPlatform(cleanSettings, 'android', ['senderID', 'projectNumber']);\n\n        var callbackFields = ['notificationCallbackAndroid', 'notificationCallbackIOS'];\n        _.each(callbackFields, function (callbackField) {\n            var callback = pushSettings[callbackField];\n            if (callback) {\n                if (typeof callback !== 'function') {\n                    throw new EverliveError({message: 'The \"' + callbackField + '\" of the push settings should be a function'});\n                }\n\n                cleanSettings[callbackField] = pushSettings[callbackField];\n            }\n        });\n\n        if (pushSettings.customParameters) {\n            cleanSettings.customParameters = pushSettings.customParameters;\n        }\n\n        return cleanSettings;\n    }\n\n    _populateRegistrationObject(deviceRegistration, success?: Function, error?: Function) {\n        var self = this;\n\n        return buildPromise(\n            function (success, error) {\n                if (!self.pushToken) {\n                    throw new EverliveError({message: 'Push token is not available.'});\n                }\n\n                self._getLocaleName(\n                    function (locale) {\n                        var deviceId = self._getDeviceId();\n                        var hardwareModel = tnsPlatform.device.model;\n                        var platformType = self._getPlatformType();\n                        var timeZone = jstz.determine().name();\n                        var pushToken = self.pushToken;\n                        var language = 'en_US'; //TODO\n                        var platformVersion = tnsPlatform.device.osVersion;\n\n                        deviceRegistration.HardwareId = deviceId;\n                        deviceRegistration.HardwareModel = hardwareModel;\n                        deviceRegistration.PlatformType = platformType;\n                        deviceRegistration.PlatformVersion = platformVersion;\n                        deviceRegistration.TimeZone = timeZone;\n                        deviceRegistration.PushToken = pushToken;\n                        deviceRegistration.Locale = language;\n\n                        success();\n                    },\n                    error\n                );\n            },\n            success,\n            error\n        );\n    }\n\n    _getLocaleName(success?: Function, error?: Function) {\n        return success(); // TODO\n        /* TODO: Must translate somehow to NativeScript to get the current locale\n         if (this.emulatorMode) {\n         success({value: 'en_US'});\n         } else {\n         navigator.globalization.getLocaleName(\n         function (locale) {\n         success(locale);\n         },\n         error\n         );\n         navigator.globalization.getLocaleName(\n         function (locale) {\n         },\n         error\n         );\n         }*/\n    }\n\n    _getDeviceId() {\n        return tnsPlatform.device.uuid;\n    }\n\n    //Returns the Everlive device platform constant given a value aquired from cordova's device.platform.\n    _getPlatformType() {\n        var psLower = tnsPlatform.device.os.toLowerCase();\n        switch (psLower) {\n            case 'ios':\n            case 'iphone':\n            case 'ipad':\n                return Platform.iOS;\n            case 'android':\n                return Platform.Android;\n            default:\n                return Platform.Unknown;\n        }\n    }\n\n    _deviceRegistrationFailed(error) {\n        this.pushToken = null;\n        this.isInitializing = false;\n        this.isInitialized = false;\n\n        if (this._initErrorCallback) {\n            this._initErrorCallback({error: error});\n        }\n    }\n\n    _deviceRegistrationSuccess(token) {\n        this.pushToken = token;\n        this.isInitializing = false;\n        this.isInitialized = true;\n\n        if (this._initSuccessCallback) {\n            this._initSuccessCallback({token: token});\n        }\n    }\n\n    //Occurs when the device registration in APN succeeds\n    _successfulRegistrationAPN(token) {\n        var self = this;\n        if (this.pushSettings.iOS && this.pushSettings.iOS.interactiveSettings) {\n            this._initializeInteractivePush(\n                this.pushSettings.iOS,\n                function () {\n                    self._deviceRegistrationSuccess(token);\n                },\n                function (err) {\n                    throw new EverliveError({message: 'The interactive push configuration is incorrect: ' + err});\n                }\n            );\n        } else {\n            this._deviceRegistrationSuccess(token);\n        }\n    }\n\n    //Occurs if the device registration in APN fails\n    _failedRegistrationAPN(error) {\n        this._deviceRegistrationFailed(error);\n    }\n\n    //Occurs when device registration has been successfully sent to GCM\n    _successSentRegistrationGCM(token) {\n        //console.log(\"Successfully sent request for registering with GCM.\");\n\n        // set on message received.\n        this.pushPlugin.onMessageReceived(this.pushSettings.notificationCallbackAndroid);\n\n        this._deviceRegistrationSuccess(token);\n    }\n\n    //Occurs when an error occured when sending registration request to GCM\n    _errorSentRegistrationGCM(error) {\n        this._deviceRegistrationFailed(error);\n    }\n\n    notificationProcessed() {\n        throw new Error('Not implemented');\n    }\n\n    //This function receives all notification events from APN\n    _onNotificationAPN(e) {\n        this._raiseNotificationEventIOS(e);\n    }\n\n    //This function receives all notification events from GCM\n    _onNotificationGCM(e) {\n        switch (e.event) {\n            case 'registered':\n                if (e.regid.length > 0) {\n                    this._deviceRegistrationSuccess(e.regid);\n                }\n                break;\n            case 'message':\n                this._raiseNotificationEventAndroid(e);\n                break;\n            case 'error':\n                if (!this.pushToken) {\n                    this._deviceRegistrationFailed(e);\n                } else {\n                    this._raiseNotificationEventAndroid(e);\n                }\n                break;\n            default:\n                this._raiseNotificationEventAndroid(e);\n                break;\n        }\n    }\n\n    _raiseNotificationEventAndroid(e) {\n        if (this.pushSettings.notificationCallbackAndroid) {\n            this.pushSettings.notificationCallbackAndroid(e);\n        }\n    }\n\n    _raiseNotificationEventIOS(e) {\n        if (this.pushSettings.notificationCallbackIOS) {\n            this.pushSettings.notificationCallbackIOS(e);\n        }\n\n    }\n}\n\nexport = CurrentDevice;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/push/NativeScriptCurrentDevice.ts\n **/","import * as _ from 'underscore';\nimport * as path from 'path';\n\nimport { DataQueryOperation } from '../../common/Constants';\nimport { Request } from '../Request';\n\nexport const RequestOptionsBuilder = {\n    _buildEndpointUrl(dataQuery) {\n        let endpoint = dataQuery.collectionName;\n        const isQueryById = dataQuery.additionalOptions && dataQuery.additionalOptions.id !== undefined;\n        const queryType = typeof dataQuery.query;\n\n        if (isQueryById) {\n            endpoint = path.join(endpoint, dataQuery.additionalOptions.id.toString());\n        } else if (queryType === 'string' || queryType === 'number') {\n            endpoint = path.join(endpoint, dataQuery.query);\n        }\n\n        return endpoint;\n    },\n\n    _buildBaseObject(dataQuery) {\n        const defaultObject: any = {\n            endpoint: RequestOptionsBuilder._buildEndpointUrl(dataQuery),\n            query: dataQuery.query,\n            data: dataQuery.data,\n            headers: dataQuery.headers\n        };\n\n        if (dataQuery.parse) {\n            defaultObject.parse = dataQuery.parse;\n        }\n\n        return defaultObject;\n    },\n\n    _build(dataQuery, additionalOptions) {\n        const options = _.extend(RequestOptionsBuilder._buildBaseObject(dataQuery), additionalOptions);\n\n        if (additionalOptions.endpointSupplement) {\n            options.endpoint = path.join(options.endpoint, additionalOptions.endpointSupplement);\n        }\n\n        return options;\n    },\n\n    [DataQueryOperation.Read](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'GET'\n        });\n    },\n\n    [DataQueryOperation.ReadById](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'GET'\n        });\n    },\n\n    [DataQueryOperation.Count](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'GET',\n            endpoint: dataQuery.collectionName + '/_count'\n        });\n    },\n\n    [DataQueryOperation.Create](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST'\n        });\n    },\n\n    [DataQueryOperation.RawUpdate](dataQuery) {\n        var query = dataQuery.query;\n        var ofilter = typeof query === 'object' ? query : null; // request options filter\n\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'PUT',\n            query: ofilter\n        });\n    },\n\n    [DataQueryOperation.Update](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'PUT'\n        });\n    },\n\n    [DataQueryOperation.Delete](dataQuery) {\n        return deleteOperation(dataQuery);\n    },\n\n    [DataQueryOperation.DeleteById](dataQuery) {\n        return deleteOperation(dataQuery);\n    },\n\n    [DataQueryOperation.SetAcl](dataQuery) {\n        let method, data;\n        if (dataQuery.additionalOptions.acl === null) {\n            method = 'DELETE';\n        } else {\n            method = 'PUT';\n            data = dataQuery.additionalOptions.acl;\n        }\n\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: method,\n            endpointSupplement: '/_acl',\n            data: data\n        });\n    },\n\n    [DataQueryOperation.SetOwner](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'PUT',\n            endpointSupplement: '/_owner'\n        });\n    },\n\n    [DataQueryOperation.UserLogin](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            endpoint: 'oauth/token',\n            authHeaders: false,\n            parse: Request.parsers.single\n        });\n    },\n\n    [DataQueryOperation.UserLogout](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'GET',\n            endpoint: 'oauth/logout'\n        });\n    },\n\n    [DataQueryOperation.UserChangePassword](dataQuery) {\n        const keepTokens = dataQuery.additionalOptions.keepTokens;\n        let endpoint = 'Users/changepassword';\n        if (keepTokens) {\n            endpoint += '?keepTokens=true';\n        }\n\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            endpoint: endpoint,\n            parse: Request.parsers.single\n        });\n    },\n\n    [DataQueryOperation.UserLoginWithProvider](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            authHeaders: false\n        });\n    },\n\n    [DataQueryOperation.UserLinkWithProvider](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            endpoint: RequestOptionsBuilder._buildEndpointUrl(dataQuery) + '/link'\n        });\n    },\n\n    [DataQueryOperation.UserUnlinkFromProvider](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            endpoint: RequestOptionsBuilder._buildEndpointUrl(dataQuery) + '/unlink'\n        });\n    },\n\n    [DataQueryOperation.UserResetPassword](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            endpoint: RequestOptionsBuilder._buildEndpointUrl(dataQuery) + '/resetpassword'\n        });\n    },\n\n    [DataQueryOperation.UserSetPassword](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'POST',\n            endpoint: RequestOptionsBuilder._buildEndpointUrl(dataQuery) + '/setpassword'\n        });\n    },\n\n    [DataQueryOperation.FilesUpdateContent](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'PUT',\n            endpoint: RequestOptionsBuilder._buildEndpointUrl(dataQuery) + '/Content'\n        });\n    },\n\n    [DataQueryOperation.FilesGetDownloadUrlById](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'GET'\n        });\n    },\n\n    [DataQueryOperation.Aggregate](dataQuery) {\n        return RequestOptionsBuilder._build(dataQuery, {\n            method: 'GET',\n            endpoint: dataQuery.collectionName + '/_aggregate'\n        });\n    },\n\n    [DataQueryOperation.InvokeCloudFunction](dataQuery) {\n        return businessLogic(dataQuery);\n    },\n\n    [DataQueryOperation.InvokeStoredProcedure](dataQuery) {\n        return businessLogic(dataQuery);\n    }\n};\n\nfunction deleteOperation(dataQuery) {\n    return _.extend(RequestOptionsBuilder._buildBaseObject(dataQuery), {\n        method: 'DELETE'\n    });\n}\n\nfunction businessLogic(dataQuery) {\n    return RequestOptionsBuilder._build(dataQuery, dataQuery.additionalOptions);\n}\n\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/query/RequestOptionsBuilder.ts\n **/","import * as platform from '../../common/platform';\nimport { WebFileStore } from './WebFileStore';\nimport { NativeScriptFileStore } from './NativeScriptFileStore';\n\nexport interface FileStore {\n    removeFile(fileEntry);\n    removeFilesDirectory();\n    getFilesDirectory();\n    readFileAsText(fileEntry);\n    writeTextToFile(fileEntry, content);\n    writeText(filename: string, text: string, path?: string);\n    getFileByAbsolutePath(path: string);\n    getFileSize(filename: string, folder: string);\n    getErrorHandler(callback: Function);\n    getFile(path);\n}\n\nexport function getFileStore (storagePath: string, options: any): FileStore {\n    if (platform.isNativeScript) {\n        return new NativeScriptFileStore(storagePath, options);\n    } else if (platform.isCordova || platform.isDesktop) {\n        return new WebFileStore(storagePath, options);\n    } else {\n        return <FileStore>{};\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/FileStore.ts\n **/","declare const window;\n\nimport * as platform from '../../common/platform';\n\ninterface KeyValueStorage {\n    setItem(key: string, value: string|number): void;\n    getItem(key: string): string;\n    removeItem(key): void;\n}\n\nfunction initLocalStorage (options): KeyValueStorage {\n    if (platform.isNativeScript) {\n        var localSettings;\n\n        //workound for older nativescript versions\n        try {\n            localSettings = require('application-settings');\n        } catch (e) {\n            try {\n                localSettings = require('local-settings');\n            } catch (ex) { throw ex; } // because of webpack external dependency declaration - this marks it as optional\n        }\n\n        return {\n            getItem: function (key) {\n                return localSettings.getString(key);\n            },\n\n            removeItem: function (key) {\n                return localSettings.remove(key);\n            },\n\n            setItem: function (key, value) {\n                return localSettings.setString(key, value);\n            }\n        };\n    } else {\n        var localStorage;\n        if (platform.isNodejs) {\n            let LocalStorage = null;\n            try {\n                LocalStorage = require('node-localstorage').LocalStorage;\n            } catch (e) { throw e; } // because of webpack external dependency declaration - this marks it as optional\n\n            localStorage = new LocalStorage(options.storage.storagePath);\n        } else {\n            localStorage = window.localStorage;\n        }\n\n        return {\n            getItem: function (key) {\n                return localStorage.getItem(key);\n            },\n\n            removeItem: function (key) {\n                return localStorage.removeItem(key);\n            },\n\n            setItem: function (key, value) {\n                return localStorage.setItem(key, value);\n            }\n        };\n    }\n}\n\nexport class LocalStore {\n    options;\n    private _localStorage: KeyValueStorage;\n\n    constructor(options) {\n        this.options = options;\n        this._localStorage = initLocalStorage(this.options);\n    }\n\n    getItem(key) {\n        return this._localStorage.getItem(key);\n    }\n\n    removeItem(key) {\n        return this._localStorage.removeItem(key);\n    }\n\n    setItem(key, value) {\n        return this._localStorage.setItem(key, value);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/LocalStore.ts\n **/","import * as _ from 'underscore';\nimport { Constants } from \"../constants\";\nimport { EverliveError } from \"../EverliveError\";\nimport { FieldDefinition } from '../offline/persisters/sqlite/FieldDefinition';\nimport { SQLiteStore } from '../interfaces/SQLiteStore';\nimport { SuccessCallback } from '../interfaces/SuccessCallback';\nimport { ErrorCallback } from '../interfaces/ErrorCallback';\n\nexport class BaseSQLiteStore implements SQLiteStore {\n    sqliteDb;\n    private batchSize: number = 5000;\n    private specialFields: any; // those fields are not supported by SQLite and should be stringified/parsed\n\n    constructor(\n        protected storagePath: string,\n        private typeSettings: any\n    ) {\n        this.specialFields = {};\n    }\n\n    queryData(tableName: string, query, success: SuccessCallback<any>, error: ErrorCallback) {\n        throw new EverliveError({message: 'The method queryData is not implemented'});\n    }\n\n    addData(tableName: string, data, success: SuccessCallback<any>, error: ErrorCallback) {\n        throw new EverliveError({message: 'The method addData is not implemented'});\n    }\n\n    removeData(tableName: string, query, success: SuccessCallback<any>, error: ErrorCallback) {\n        throw new EverliveError({message: 'The method removeData is not implemented'});\n    }\n\n    updateData(tableName: string, query, success: SuccessCallback<any>, error: ErrorCallback) {\n        throw new EverliveError({message: 'The method updateData is not implemented'});\n    }\n\n    ensureTableExists(tableName, columns: FieldDefinition[]) {\n        throw new EverliveError({message: 'The method ensureTableExists is not implemented'});\n    }\n\n    buildSqlBatchInsert(tableName: string, data) {\n        if (!_.isArray(data)) {\n            data = [data];\n        }\n        if(data.length === 0){\n            return [];\n        }\n        const columns: FieldDefinition[] = this.typeSettings[tableName];\n        const fields = _.map(columns, c => c.name);\n        const query = this.buildInsertStatement(tableName, fields);\n        let batchCounter = 1;\n        let currentBatchIndex = 0;\n        let insertQueries = [];\n        insertQueries[currentBatchIndex] = [];\n        _.each(data, (item) => {\n            let columnValues = _.map(fields, (key) => {\n                if (item[key] instanceof Date) {\n                    return item[key].toISOString();\n                } else if (this.specialFields[tableName][key] && item[key]) {\n                    return JSON.stringify(item[key]);\n                } else {\n                    return item[key];\n                }\n            });\n            columnValues.push(item[Constants.offlineItemsStateMarker]);\n            insertQueries[currentBatchIndex].push([query, columnValues]);\n            batchCounter++;\n            if (batchCounter % this.batchSize == 0) {\n                currentBatchIndex++;\n                insertQueries[currentBatchIndex] = [];\n            }\n        });\n        // sample item from the insert queries looks like this:\n        // insertQueries[batchNumber] = [\n        //     [ 'INSERT INTO TableName VALUES (?,?)' , [ value1, value2] ];\n        //     [ 'INSERT INTO TableName VALUES (?,?)' , [ value1, value2] ];\n        // ]\n        return insertQueries;\n    }\n\n    buildInsertStatement(tableName, itemKeys) {\n        let columnsDefinition = '';\n        let valuesDefinition = '';\n        _.each(itemKeys, (column: string) => {\n            columnsDefinition += `\"${column}\",`;\n            valuesDefinition += '?,';\n        });\n        columnsDefinition += Constants.offlineItemsStateMarker;\n        valuesDefinition += '?';\n        const insertStatement = `INSERT OR REPLACE INTO \"${tableName}\" ( ${columnsDefinition} ) VALUES ( ${valuesDefinition} ) `;\n        return insertStatement;\n    }\n\n    prepareTables() {\n        _.each(this.typeSettings, (definition: FieldDefinition[], type: string) => {\n            this.ensureTableExists(type, definition);\n            this.findSpecialFields(type, definition);\n        });\n    }\n\n    protected processResultItem(type: string, item: any) {\n        _.each(this.specialFields[type], (isSpecial: boolean, fieldKey: string) => {\n            if (item[fieldKey]) {\n                try {\n                    if (item[fieldKey] === 'true' || item[fieldKey] === 'false') {  // parse boolean fields\n                        item[fieldKey] = item[fieldKey] === 'true';\n                    } else {\n                        item[fieldKey] = JSON.parse(item[fieldKey]);\n                    }\n                } catch (e) {\n                    console.error(e);\n                }\n            }\n        });\n        return item;\n    }\n\n    private findSpecialFields(type: string, scheme: FieldDefinition[]) {\n        this.specialFields[type] = {};\n        _.each(scheme, (field: FieldDefinition) => {\n            if (field.isSpecialType) {\n                this.specialFields[type][field.name] = true;\n            }\n        });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/SQLiteStore.ts\n **/","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-libs-browser/~/buffer/index.js\n ** module id = 40\n ** module chunks = 0\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/stream-browserify/index.js\n ** module id = 41\n ** module chunks = 0\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/timers-browserify/main.js\n ** module id = 42\n ** module chunks = 0\n **/","'use strict';\nvar Constants = {};\nConstants.DefaultTakeItemsCount = 50;\nConstants.ExpandExpressionName = 'Expand';\nConstants.ReturnAsFieldName = 'ReturnAs';\nConstants.FieldsExpressionName = 'Fields';\nConstants.SingleFieldExpressionName = 'SingleField';\nConstants.SortExpressionName = 'Sort';\nConstants.FilterExpressionName = 'Filter';\nConstants.SkipExpressionName = 'Skip';\nConstants.TakeExpressionName = 'Take';\nConstants.ParentRelationFieldName = 'ParentRelationField';\nConstants.IdFieldNameClient = 'Id';\nConstants.TargetTypeNameFieldName = 'TargetTypeName';\nConstants.ReturnItemsCountFieldName = 'ReturnItemsCount';\nConstants.AggregateExpressionFieldName = 'Aggregate';\n\nmodule.exports = Constants;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-expand-processor/Constants.js\n ** module id = 43\n ** module chunks = 0\n **/","import { EventEmitter } from 'events';\nimport { last, without } from 'underscore';\n\nclass EventArgs {\n    canceled = false;\n\n    cancel() {\n        this.canceled = true;\n    }\n}\n\n/*\nAdds extended functionality to the event emitter:\n    * Cancelable event arguments - the event arguments are always passed as last argument,\n      calling cancel will stop other event listeners in the chain from being invoked\n    * prependOnceListener - Prepend a listener to the start of the chain - useful if you want\n      it to be able to cancel the event\n */\nexport class EventEmitterExtended extends EventEmitter {\n    _events: any[];\n\n    emit(eventName: string, ...args: any[]): boolean {\n        args.push(new EventArgs());\n\n        return super.emit(eventName, ...args);\n    }\n\n    addListener(eventName: string, listener: Function): this {\n        const wrappedListener = (...args) => {\n            const ev = last(args);\n            if (ev.canceled) {\n                return;\n            }\n\n            return listener.apply(this, args);\n        };\n\n        super.addListener(eventName, wrappedListener);\n        return this;\n    }\n\n    prependOnceListener(eventName: string, listener: Function): this {\n        this.once(eventName, listener);\n\n        if (!Array.isArray(this._events[eventName])) {\n            return this;\n        }\n\n        const lastListener = last(this._events[eventName]);\n        const allListeners = without(this._events[eventName], lastListener);\n        this._events[eventName] = [lastListener].concat(allListeners);\n        return this;\n    }\n\n    once(eventName: string, listener: Function): this {\n        super.once(eventName, listener);\n        return this;\n    }\n\n    on(eventName: string, listener: Function): this {\n        this.addListener(eventName, listener);\n        return this;\n    }\n\n    off(eventName: string, listener: Function): this {\n        this.removeListener(eventName, listener);\n        return this;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/EventEmitterExtended.ts\n **/","export class Query {\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/query/Query.ts\n **/","import * as _ from 'underscore';\n\nimport * as platform from './platform';\n\nimport {} from '';\n\nexport class Utils {\n    static guardUnset (value, name, message?) {\n        if (!message) {\n            message = 'The ' + name + ' is required';\n        }\n        if (typeof value === 'undefined' || value === null) {\n            throw new Error(message); // TODO: use CommonError\n        }\n    };\n\n    static isGuid(str): boolean {\n        return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(str);\n    }\n\n    static cloneDate(d) {\n        return new Date(d);\n    }\n\n    static parseUtilities = {\n        getReviver: function (parseOnlyCompleteDateTimeString?: boolean) {\n            var dateParser;\n            if (parseOnlyCompleteDateTimeString) {\n                dateParser = Utils.parseUtilities.parseIsoDateString;\n            } else {\n                dateParser = Utils.parseUtilities.parseOnlyCompleteDateTimeString;\n            }\n\n            return function (key, value) {\n                if (typeof value === 'string') {\n                    var date = dateParser(value);\n                    if (date) {\n                        value = date;\n                    }\n                }\n\n                return value;\n            };\n        },\n\n        parseIsoDateString: function (string) {\n            var match;\n            if (match = string.match(/^(\\d{4})(-(\\d{2})(-(\\d{2})(T(\\d{2}):(\\d{2})(:(\\d{2})(\\.(\\d+))?)?(Z|((\\+|-)(\\d{2}):(\\d{2}))))?))$/)) {\n                // DateTime\n                var secondParts = match[12];\n                if (secondParts) {\n                    if (secondParts.length > 3) {\n                        secondParts = Math.round(Number(secondParts.substr(0, 3) + '.' + secondParts.substr(3)));\n                    }\n                    else if (secondParts.length < 3) {\n                        // if the secondParts are one or two characters then two or one zeros should be appended\n                        // in order to have the correct number for milliseconds ('.67' means 670ms not 67ms)\n                        secondParts += secondParts.length === 2 ? '0' : '00';\n                    }\n                }\n                var date = new Date(\n                    Date.UTC(\n                        Number(match[1]), // year\n                        (Number(match[3]) - 1) || 0, // month\n                        Number(match[5]) || 0, // day\n                        Number(match[7]) || 0, // hour\n                        Number(match[8]) || 0, // minute\n                        Number(match[10]) || 0, // second\n                        Number(secondParts) || 0\n                    )\n                );\n\n                if (match[13] && match[13] !== \"Z\") {\n                    var h = Number(match[16]) || 0,\n                        m = Number(match[17]) || 0;\n\n                    h *= 3600000;\n                    m *= 60000;\n\n                    var offset = h + m;\n                    if (match[15] === \"+\")\n                        offset = -offset;\n\n                    date = new Date(date.valueOf() + offset);\n                }\n\n                return date;\n            } else {\n                return null;\n            }\n        },\n\n        parseOnlyCompleteDateTimeString: function (string) {\n            if (/^\\d{4}-\\d{2}-\\d{2}$/.test(string)) {\n                // Date\n                return null;\n            }\n\n            if (/^(\\d{2}):(\\d{2})(:(\\d{2})(\\.(\\d+))?)?(Z|((\\+|-)(\\d{2}):(\\d{2})))?$/.test(string)) {\n                // Time\n                return null;\n            }\n\n            return Utils.parseUtilities.parseIsoDateString(string);\n        },\n\n        traverse: function (obj, func) {\n            var key, value, newValue;\n            for (key in obj) {\n                if (obj.hasOwnProperty(key)) {\n                    value = obj[key];\n                    newValue = func(key, value);\n                    obj[key] = newValue;\n                    if (value === newValue && typeof value === 'object') {\n                        Utils.parseUtilities.traverse(value, func);\n                    }\n                }\n            }\n            return obj;\n        },\n\n        traverseAndRevive: function (data, reviver?) {\n            if (!reviver) {\n                reviver = Utils.parseUtilities.getReviver();\n            }\n\n            return Utils.parseUtilities.traverse(data, reviver);\n        },\n\n        parseError: function (reviver, error) {\n            if (typeof error === 'string' && error.length > 0) {\n                try {\n                    error = JSON.parse(error);\n                    return {message: error.message, code: error.errorCode};\n                } catch (e) {\n                    return error;\n                }\n            } else {\n                return error;\n            }\n        },\n\n        _parseInternal: function (reviver, data) {\n            if (typeof data === 'string' && data.length > 0) {\n                data = JSON.parse(data, reviver);\n            } else if (typeof data === 'object') {\n                Utils.parseUtilities.traverseAndRevive(data, reviver);\n            }\n\n            return data;\n        },\n\n        _transformResult: function (data, additionalProperties?: any) {\n            if (data) {\n                const result = _.extend({}, additionalProperties);\n                result.result = data.Result === undefined ? data.result : data.Result;\n                result.count = data.Count === undefined ? data.count : data.Count;\n                return result;\n            } else {\n                return data;\n            }\n        },\n\n        parseResult: function (reviver, data) {\n            data = Utils.parseUtilities._parseInternal.apply(null, arguments);\n            return Utils.parseUtilities._transformResult(data, {count: data.Count});\n        },\n\n        parseSingleResult: function (reviver, data) {\n            data = Utils.parseUtilities._parseInternal.apply(null, arguments);\n            return Utils.parseUtilities._transformResult(data);\n        },\n\n        parseUpdateResult: function (reviver, data) {\n            data = Utils.parseUtilities._parseInternal.apply(null, arguments);\n            return Utils.parseUtilities._transformResult(data, {ModifiedAt: data.ModifiedAt});\n        },\n\n        parseJSON: function (json) {\n            return JSON.parse(json, Utils.parseUtilities.getReviver());\n        },\n\n        parseXhrResponse: function (xhrRequest) {\n            var type = xhrRequest.getResponseHeader('content-type');\n            var isJson = type && type.toLowerCase().indexOf('json') > -1;\n            var response = xhrRequest.responseText || xhrRequest.statusText;\n\n            return isJson ? Utils.parseUtilities.parseJSON(response) : response;\n        },\n        parseXhrError: function (reviver, xhrRequest) {\n            if (xhrRequest instanceof Error) {\n                return xhrRequest;\n            }\n\n            var message = xhrRequest.responseText || xhrRequest.statusText || xhrRequest;\n            return Utils.parseUtilities.parseError(reviver, message);\n        },\n\n        parseErrorOrResponse: function (error) {\n            if (error instanceof XMLHttpRequest) {\n                const parsedError = Utils.parseUtilities.parseXhrResponse(error);\n                //seems that parseXhrResponse is inconsistent\n                return {\n                    code: parsedError.code || parsedError.errorCode,\n                    message: parsedError.message\n                };\n            }\n\n            return Utils.parseUtilities.parseError(null, error);\n        }\n    };\n\n    static buildPromise<T>(operation, success, error): Promise<T> {\n        var callbacks = Utils.getCallbacks<T>(success, error);\n        operation(callbacks.success, callbacks.error);\n        return <Promise<T>>callbacks.promise;\n    }\n\n    static getCallbacks<T>(success?, error?): {promise: Promise<T>, success: (T), error: (Error)} {\n        var promise;\n        var createPromise = function (): Promise<T> {\n            return new Promise<T>(function (resolve, reject) {\n                success = (data: T) => {\n                    resolve(data);\n                };\n                error = (error: Error) => {\n                    reject(error);\n                };\n            });\n        };\n\n        if (platform.isNodejs) {\n            // node js style continuation\n            if (typeof success === 'function' && typeof error !== 'function') {\n                var callback = success;\n                success = function (data, response) {\n                    callback(null, data, response);\n                };\n                error = function (error) {\n                    callback(error);\n                };\n            } else if (typeof success !== 'function' && typeof error !== 'function') {\n                promise = createPromise();\n            }\n        } else {\n            if (typeof success !== 'function' && typeof error !== 'function') {\n                promise = createPromise();\n            }\n        }\n\n        return {promise: promise, success: success, error: error};\n    }\n\n    static isDate(date) {\n        return date && (\n            date instanceof Date || !_.isNaN(Date.parse(date))\n        );\n    }\n\n    static uuid() {\n        //http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n        var d = new Date().getTime();\n        var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n            var r = (d + Math.random() * 16) % 16 | 0;\n            d = Math.floor(d / 16);\n            return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n        });\n\n        return uuid;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/utils.ts\n **/","import * as _ from 'underscore';\n\nimport { EverliveError } from './EverliveError';\nimport { Constants } from './constants';\n\nexport interface task {\n    task: Function,\n    args: any[],\n    success: Function,\n    error: Function\n}\n\nexport class AutoQueue {\n    public maxConcurrentTasks: number;\n    public runningTasksCount;\n    public tasks: task[];\n\n    constructor(maxConcurrentTasks: number|string) {\n        var tasksNumber = maxConcurrentTasks || Constants.MaxConcurrentDownloadTasks;\n        this.maxConcurrentTasks = parseInt(tasksNumber + '', 10);\n\n        if (_.isNaN(this.maxConcurrentTasks) || maxConcurrentTasks <= 0) {\n            throw new EverliveError({message: 'The maxConcurrentTasks must be a number larger than 0'});\n        }\n\n        this.runningTasksCount = 0;\n        this.tasks = [];\n    }\n\n    /**\n     * @param {Function} task\n     * @param {Function} taskSuccess\n     * @param {Function} taskError\n     */\n    public enqueue(task: Function, taskSuccess: Function, taskError: Function): void {\n        this.tasks.push({\n            task: task,\n            args: [].splice.call(arguments, 3),\n            success: taskSuccess,\n            error: taskError\n        });\n\n        this.runNext();\n    }\n\n    private runNext(): void {\n        var self = this;\n\n        if (self.runningTasksCount === self.maxConcurrentTasks || !self.tasks.length) {\n            return;\n        }\n\n        self.runningTasksCount++;\n\n        var nextTask = this.tasks.shift();\n        var task = nextTask.task;\n        var args = nextTask.args;\n        var taskSuccess = nextTask.success;\n        var taskError = nextTask.error;\n\n        args.unshift(function executedCallback(err) {\n            self.runningTasksCount--;\n\n            if (err) {\n                taskError(err);\n            } else {\n                taskSuccess.apply(null, [].splice.call(arguments, 1));\n            }\n\n            self.runNext();\n        });\n\n        task.apply(null, args);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/AutoQueue.ts\n **/","const Processor = require('../scripts/bs-expand-processor/Processor');\nimport { DataQuery } from './dataQuery/DataQuery';\nimport { Query } from './query/Query';\nimport { AggregateQuery } from './query/AggregateQuery';\nimport { Constants } from './constants';\n\nexport const expandProcessor = new Processor({\n    executionNodeFunction: function (node, expandContext, done) {\n        var targetTypeName = node.targetTypeName.toLowerCase() === Constants.FilesTypeNameLegacy ? Constants.FilesTypeName : node.targetTypeName;\n        var query;\n        if (node.aggregate) {\n            query = new DataQuery({\n                operation: DataQuery.operations.Aggregate,\n                meta: {\n                    collectionName: targetTypeName\n                },\n                query: new AggregateQuery(node.filter, node.select, node.sort, node.skip, node.take, null, node.aggregate)\n            });\n        } else {\n            query = new DataQuery({\n                operation: DataQuery.operations.Read,\n                meta: {\n                    collectionName: targetTypeName\n                },\n                query: new Query(node.filter, node.select, node.sort, node.skip, node.take)\n            });\n        }\n\n        expandContext.offlineModule.processQuery(query).then(function (data) {\n            done(null, data.result);\n        }, done);\n    }\n});\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/ExpandProcessor.ts\n **/","import { Data } from './types/Data';\ndeclare const window;\n\nimport { Utils, DeviceRegistrationResult } from './utils';\nimport { EverliveError, DeviceRegistrationError } from './EverliveError';\nimport { ensurePushIsAvailable, getCurrentDevice, Device } from './push/CurrentDevice';\nimport { Constants } from './constants';\nimport { Everlive } from \"./Everlive\";\nimport { SingleResult } from \"./interfaces/SingleResult\";\nimport { SuccessCallback } from \"./interfaces/SuccessCallback\";\nimport { ErrorCallback } from \"./interfaces/ErrorCallback\";\n\nconst buildPromise = Utils.buildPromise;\nconst Platform = Constants.Platform;\n\n/**\n * @class Push\n * @classdesc A class for managing push notifications in your application. Supported are push notifications for hybrid apps on Android and iOS.\n * @protected\n * @param el {Everlive} Everlive Object\n */\nexport class Push {\n    notifications: Data<any>;\n    devices: Data<any>;\n\n    private _currentDevice: Device;\n\n    constructor(private el: Everlive) {\n        this.notifications = el.data(Constants.Push.NotificationsType);\n        this.devices = el.data(Constants.Push.DevicesType);\n    }\n\n    /**\n     * Ensures that the Telerik Push Notifications plug-in has been loaded and is ready to use. An {EverliveError} is returned if the plug-in is not available.\n     * @method ensurePushIsAvailable\n     * @memberOf Push.prototype\n     */\n    ensurePushIsAvailable(): void {\n        ensurePushIsAvailable();\n    }\n    /**\n      * Returns the current device for sending push notifications\n      * @deprecated since version 1.2.7\n      * @see [Push.register]{@link push.register}\n      * @memberOf Push.prototype\n      * @method currentDevice\n      * @name currentDevice\n      * @param [emulatorMode] {Boolean} If set to true, emulator mode is enabled meaning you cannot send push notifications.\n      * @returns {CurrentDevice} Returns an instance of CurrentDevice.\n      */\n    currentDevice(emulatorMode: boolean = false): Device {\n        this.ensurePushIsAvailable();\n\n        if (arguments.length === 0) {\n            emulatorMode = this.el.setup._emulatorMode;\n        }\n\n        if (!this._currentDevice) {\n            this._currentDevice = getCurrentDevice(this);\n        }\n\n        this._currentDevice.emulatorMode = emulatorMode || Utils._inAppBuilderSimulator();\n\n        return this._currentDevice;\n    }\n\n    /**\n     * Enables push notifications on the device and registers it for the feature with {{site.tap}} if it hasn't already been registered. If it has been registered, the registration details are updated.\n     * @method register\n     * @name register\n     * @memberOf Push.prototype\n     * @param {Object} settings An object containing settings for the registration. It can include custom parameters to be stored by {{site.tap}}.\n     * @param {Object} settings.iOS=null iOS-specific settings.\n     * @param {Boolean} settings.iOS.alert=true If set to true, the push notification will display as a standard iOS alert.\n     * @param {String|Number} settings.iOS.badge='+1' Specifies the badge counter to be displayed on the device.\n     * @param {Boolean} settings.iOS.clearBadge=false Specifies whether to reset the badge count to 0.\n     * @param {Boolean} settings.iOS.sound=true If set to true, the device will play a notification sound.\n     * @param {Object} settings.android=null Android-specific settings.\n     * @param {String} settings.android.senderID=null Your Google API project number. It is required when obtaining a push token for an Android device.\n     * @param {String} settings.android.projectNumber=null Synonym for android.senderID. Available in JavaScript SDK versions 1.2.7 and later.\n     * @param {Object} settings.wp8=null Windows Phone specific settings.\n     * @param {String} settings.wp8.channelName=null The name of the push channel that the device is registering to.\n     * @param {Function} settings.notificationCallbackIOS Specifies a custom callback to be used when a push notification is received on iOS.\n     * @param {Function} settings.notificationCallbackAndroid Specifies a custom callback to be used when a push notification is received on Android.\n     * @param {Function} settings.notificationCallbackWP8 Specifies a custom callback to be used when a push notification is received on Windows Phone 8.\n     * @param {Object} settings.customParameters=null Specifies optional custom registration parameters that will be saved with {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Enables push notifications on the device and registers it for the feature with {{site.tap}} if it hasn't already been registered. If it has been registered, the registration details are updated.\n     * @method register\n     * @name register\n     * @memberOf Push.prototype\n     * @param {Object} settings Settings for the registration. Can include custom parameters to be saved with {{site.tap}}.\n     * @param {Object} settings.iOS=null iOS specific settings\n     * @param {Boolean} settings.iOS.alert=true Specifies whether the device will display an alert message.\n     * @param {String|Number} settings.iOS.badge='+1' Specifies the badge counter to be displayed on the device.\n     * @param {Boolean} settings.iOS.clearBadge=false Specifies whether to reset the badge count to 0.\n     * @param {Boolean} settings.iOS.sound=true Specifies whether the device will play a sound.\n     * @param {Object} settings.android=null Android specific settings\n     * @param {String} settings.android.senderID=null This is your Google API project number. It is required when obtaining a push token for an Android device.\n     * @param {String} settings.android.projectNumber=null Synonym for android.senderID. Available in JavaScript SDK versions 1.2.7 and later.\n     * @param {Object} settings.wp8=null Windows Phone specific settings\n     * @param {String} settings.wp8.channelName=null The name of the push channel that the device is registering to.\n     * @param {Function} settings.notificationCallbackIOS Specifies a custom callback to be used when a push notification is received on iOS.\n     * @param {Function} settings.notificationCallbackAndroid Specifies a custom callback to be used when a push notification is received on Android.\n     * @param {Function} settings.notificationCallbackWP8 Specifies a custom callback to be used when a push notification is received on Windows Phone 8.\n     * @param {Object} settings.customParameters=null Specifies optional custom registration parameters that will be saved with {{site.tap}}.\n     * @param {Function} [success] Callback to invoke on success.\n     * @param {Function} [error] Callback to invoke on error.\n     */\n    register(settings, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        this.ensurePushIsAvailable();\n\n        var currentDevice = this.currentDevice();\n        var self = this;\n        settings = settings || {};\n\n        if (settings.android) {\n            settings.android.senderID = settings.android.projectNumber || settings.android.senderID;\n        }\n\n        var successCallback = function (token, callback) {\n            var result = new DeviceRegistrationResult(token);\n            callback(result);\n        };\n\n        var errorCallback = function (err, callback) {\n            var registrationError = DeviceRegistrationError.fromEverliveError(err);\n            callback(registrationError);\n        };\n\n        var clearBadgeIfNeeded = function (token, successCb, errorCb) {\n            var platformType = currentDevice._getPlatformType();\n            var clearBadge = platformType === Platform.iOS;\n\n            if (clearBadge && settings.iOS) {\n                clearBadge = settings.iOS.clearBadge !== false;\n            }\n\n            if (clearBadge) {\n                self.clearBadgeNumber().then(function () {\n                    successCallback(token, successCb);\n                }, function (err) {\n                    errorCallback(err, errorCb);\n                });\n            } else {\n                successCallback(token, successCb);\n            }\n        };\n\n        return buildPromise(function (successCb, errorCb) {\n            currentDevice.enableNotifications(settings, function (response) {\n                var token = response.token;\n                var customParameters = settings.customParameters;\n                currentDevice.getRegistration()\n                    .then(function () {\n                        currentDevice.updateRegistration(customParameters, function () {\n                            clearBadgeIfNeeded(token, successCb, errorCb);\n                        }, function (err) {\n                            errorCallback(err, errorCb);\n                        });\n                    }, function (err) {\n                        if (err.code === 801) { //Not registered\n                            currentDevice.register(customParameters, function () {\n                                clearBadgeIfNeeded(token, successCb, errorCb);\n                            }, errorCb);\n                        } else {\n                            errorCallback(err, errorCb);\n                        }\n                    });\n            }, function (err) {\n                var deviceRegistrationError = DeviceRegistrationError.fromPluginError(err);\n                errorCb(deviceRegistrationError);\n            });\n        }, success, error);\n    }\n\n    /**\n     * Disables push notifications for the current device. This method invalidates any push tokens that were obtained for the device from the current application. The device will also be unregistered from {{site.tap}}.\n     * @method unregister\n     * @name unregister\n     * @memberOf Push.prototype\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Disables push notifications for the current device. This method invalidates any push tokens that were obtained for the device from the current application. The device will also be unregistered from {{site.tap}}.\n     * This method invalidates any push tokens that were obtained for the device from the current application.\n     * The device will also be unregistered from {{site.tap}}.\n     * @method unregister\n     * @name unregister\n     * @memberOf Push.prototype\n     * @param {Function} [onSuccess] Callback to invoke on success.\n     * @param {Function} [onError] Callback to invoke on error.\n     */\n    unregister(onSuccess?: SuccessCallback<any>, onError?: ErrorCallback): Promise<any> {\n        this.ensurePushIsAvailable();\n\n        var currentDevice = this.currentDevice();\n        return currentDevice.disableNotifications.apply(currentDevice, arguments);\n    }\n\n    /**\n     * Updates the registration of the current device.\n     * @method updateRegistration\n     * @name updateRegistration\n     * @memberOf Push.prototype\n     * @param {Object} customParameters Custom parameters for the registration. If {undefined}, customParameters are not updated.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Updates the registration for the current device.\n     * @method updateRegistration\n     * @name updateRegistration\n     * @memberOf Push.prototype\n     * @param {Object} customParameters Custom parameters for the registration. If {undefined}, customParameters are not updated.\n     * @param {Function} [onSuccess] Callback to invoke on success.\n     * @param {Function} [onError] Callback to invoke on error.\n     */\n    updateRegistration (customParameters, onSuccess?: SuccessCallback<any>, onError?: ErrorCallback): Promise<any> {\n        this.ensurePushIsAvailable();\n\n        var currentDevice = this.currentDevice();\n        return currentDevice.updateRegistration.apply(currentDevice, arguments);\n    }\n\n    /**\n     * Sets the badge number on the device and on the {{site.tap}} server. iOS only.\n     * @method setBadgeNumber\n     * @name setBadgeNumber\n     * @memberOf Push.prototype\n     * @param {Number|String} badge The number to be set as a badge.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Sets the badge number on the server\n     * @method setBadgeNumber\n     * @name setBadgeNumber\n     * @memberOf Push.prototype\n     * @param {Number|String} badge The number to be set as a badge.\n     * @param {Function} [onSuccess] Callback to invoke on success.\n     * @param {Function} [onError] Callback to invoke on error.\n     */\n    setBadgeNumber(badge: string, onSuccess?: SuccessCallback<any>, onError?: ErrorCallback): Promise<any>;\n    setBadgeNumber(badge: number, onSuccess?: SuccessCallback<any>, onError?: ErrorCallback): Promise<any>;\n    setBadgeNumber(badge: number|string, onSuccess?: SuccessCallback<any>, onError?: ErrorCallback): Promise<any> {\n        this.ensurePushIsAvailable();\n\n        badge = parseInt(<string>badge);\n        if (isNaN(<number>badge)) {\n            return buildPromise(function (success, error) {\n                error(new EverliveError({message: 'The badge must have a numeric value'}));\n            }, onSuccess, onError);\n        }\n\n        var deviceRegistration: any = {};\n        var currentDevice = this.currentDevice();\n        var deviceId = currentDevice._getDeviceId();\n        deviceRegistration.Id = 'HardwareId/' + encodeURIComponent(deviceId);\n        deviceRegistration.BadgeCounter = badge;\n        return buildPromise(function (successCb, errorCb) {\n            currentDevice._pushHandler.devices.updateSingle(deviceRegistration).then(\n                function () {\n                    if (typeof window !== 'undefined' && window.plugins && window.plugins.pushNotification && !Utils._inAppBuilderSimulator()) {\n                        return window.plugins.pushNotification.setApplicationIconBadgeNumber(successCb, errorCb, badge);\n                    } else {\n                        return successCb();\n                    }\n                }, errorCb)\n        }, onSuccess, onError);\n    }\n\n    /**\n     * Resets the badge number to 0 on the device and on the {{site.tap}} server. iOS only.\n     * @method clearBadgeNumber\n     * @name clearBadgeNumber\n     * @memberOf Push.prototype\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Clears the badge number on the server by setting it to 0\n     * @method clearBadgeNumber\n     * @name clearBadgeNumber\n     * @memberOf Push.prototype\n     * @param {Function} [onSuccess] Callback to invoke on success.\n     * @param {Function} [onError] Callback to invoke on error.\n     */\n    clearBadgeNumber(onSuccess?: SuccessCallback<any>, onError?: ErrorCallback) {\n        this.ensurePushIsAvailable();\n        return this.setBadgeNumber(0, onSuccess, onError);\n    }\n\n    /**\n     * Returns the push notifications registration for the current device.\n     * @method getRegistration\n     * @name getRegistration\n     * @memberOf Push.prototype\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Returns the push registration for the current device.\n     * @method getRegistration\n     * @name getRegistration\n     * @memberOf Push.prototype\n     * @param {Function} [onSuccess] Callback to invoke on success.\n     * @param {Function} [onError] Callback to invoke on error.\n     */\n    getRegistration(onSuccess?: SuccessCallback<SingleResult<any>>, onError?: ErrorCallback): Promise<SingleResult<any>> { // any here is the device type (not implemented)\n        this.ensurePushIsAvailable();\n\n        var currentDevice = this.currentDevice();\n        return currentDevice.getRegistration.apply(currentDevice, arguments);\n    }\n\n    /**\n     * Sends a push notification.\n     * @method send\n     * @name send\n     * @memberOf Push.prototype\n     * @param {Object} notification The push notification object\n     * @returns {Promise} The promise for request.\n     */\n    /**\n     * Sends a push message\n     * @method send\n     * @name send\n     * @memberOf Push.prototype\n     * @param {Object} notification The push notification object\n     * @param {Function} [onSuccess] Callback to invoke on success.\n     * @param {Function} [onError] Callback to invoke on error.\n     */\n    send(notification, onSuccess?: Function, onError?: Function) {\n        return this.notifications.create.apply(this.notifications, arguments);\n    }\n\n    /**\n     * This method provides a different operation on each supported platform:\n     *\n     * - On iOS: Checks if Notifications is enabled for this application in the device's Notification Center.\n     * - On Windows Phone: Checks if the application has an active open channel for communication with the Microsoft Push Notification Service. The outcome does not depend on the device's notification settings.\n     * - On Android: Checks if the application has established a connection with Google Cloud Messaging. The outcome does not depend on the device's notification settings.\n     * @method areNotificationsEnabled\n     * @name areNotificationsEnabled\n     * @memberOf Push.prototype\n     * @param {Object} options An object passed to the Push Notification plugin's areNotificationsEnabled method\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * iOS: Checks if the Notifications are enabled for this Application in the Device's Notification Center.\n     * Windows Phone: Checks if the Application has an active opened Channel for communication with the Notification Service. Not relying on the device notification settings.\n     * Android: Checks if the Application has established connection with the Notification Service. Not relying on the device notification settings.\n     * @method areNotificationsEnabled\n     * @name areNotificationsEnabled\n     * @memberOf Push.prototype\n     * @param {Object} options an object passed to the Push Notification plugin's areNotificationsEnabled method.\n     * @param {Function} [onSuccess] Callback to invoke on successful check. Passes a single boolean value: true or false.\n     * @param {Function} [onError] Callback to invoke when an error in the push plugin has occurred.\n     */\n    areNotificationsEnabled(options, onSuccess?: Function, onError?: Function) {\n        this.ensurePushIsAvailable();\n\n        var currentDevice = this.currentDevice();\n        return currentDevice.areNotificationsEnabled(options, onSuccess, onError);\n    }\n\n    /**\n     * Currently available only for iOS\n     * Use this method in case you are working with iOS interactive push notifications in background mode, including TextInput, or iOS silent push notifications.\n     * Call it once you are done with processing your push notification in notificationCallbackIOS.\n     * @method notificationProcessed\n     * @name notificationProcessed\n     * @memberOf Push.prototype\n     */\n    notificationProcessed() {\n        this.ensurePushIsAvailable();\n\n        var currentDevice = this.currentDevice();\n        currentDevice.notificationProcessed();\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/Push.ts\n **/","import * as _ from 'underscore';\n\nimport { CommonSetup } from '../common/CommonSetup';\nimport { Constants } from './constants';\nimport { AuthenticationSetup } from './auth/AuthenticationSetup';\n\nexport class Setup extends CommonSetup {\n    _emulatorMode: boolean = false;\n\n    url: string = Constants.everliveUrl;\n    appId: string = null;\n    apiKey: string;\n    masterKey: string = null;\n    token: string = null;\n    tokenType: string = null;\n    principalId: string = null;\n    scheme: string = 'http';\n    parseOnlyCompleteDateTimeObjects: boolean = false;\n    authentication: AuthenticationSetup;\n    caching: any;\n\n    constructor(options: string|any) {\n        super();\n        \n        if (typeof options === 'string') {\n            this.appId = options;\n        } else {\n            this._emulatorMode = options.emulatorMode;\n            _.extend(this, options);\n            if(options.apiKey) {\n                this.appId = options.apiKey; // backward compatibility\n            }\n        }\n\n        this.authentication = new AuthenticationSetup(this, options.authentication);\n    }\n\n    setAuthorizationProperties(token, tokenType, principalId) {\n        this.token = token;\n        this.tokenType = tokenType;\n        this.principalId = principalId;\n    }\n\n    getAuthorizationProperties() {\n        return {\n            token: this.token,\n            tokenType: this.tokenType,\n            principalId: this.principalId\n        };\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/Setup.ts\n **/","import { DataQueryOperation } from \"../../common/Constants\";\n\nimport { Utils } from '../utils';\nimport { Constants } from '../constants';\nimport { LocalStore } from '../storages/LocalStore';\nimport { EverliveErrors } from '../EverliveError';\nimport { Data } from '../types/Data';\nimport { Everlive } from \"../Everlive\";\nimport { UserLoginResult } from \"../interfaces/UserLoginResult\";\nimport { SuccessCallback } from \"../interfaces/SuccessCallback\";\nimport { ErrorCallback } from \"../interfaces/ErrorCallback\";\nimport { SocialLoginResult } from \"../interfaces/SocialLoginResult\";\nimport { AuthInfoResult } from \"../interfaces/AuthInfoResult\";\n\nconst buildPromise = Utils.buildPromise;\nconst getCallbacks = Utils.getCallbacks;\n\nexport default class Authentication extends Data<any> {\n    authSetup;\n    _authenticationCallbacks;\n    _localStore: LocalStore;\n\n    /**\n     * @class Authentication\n     * @classdesc A class for managing authentication of a user in your application.\n     * @protected\n     * @param sdk {Everlive} Everlive Object\n     */\n    constructor(sdk: Everlive) {\n        super(sdk, 'Users');\n\n        this.authSetup = sdk.setup.authentication || {};\n        this._authenticationCallbacks = null;\n        if (this.authSetup.persist) {\n            this._localStore = new LocalStore(sdk);\n            const localStoreKey = this._getLocalStoreKey();\n            const authOptions = this._localStore.getItem(localStoreKey);\n            let authInfo;\n            if (authOptions) {\n                authInfo = JSON.parse(this._localStore.getItem(localStoreKey));\n            }\n            if (authInfo) {\n                this.sdk.setup.setAuthorizationProperties(authInfo.token, authInfo.tokenType, authInfo.principalId);\n            }\n        }\n    }\n\n    _getLocalStoreKey() {\n        return Constants.AuthStoreKey + this.sdk.setup.appId + '$authentication';\n    }\n\n    /** Ensures that authentication is completed before continuing.\n     * @memberOf Authentication.prototype\n     * @private\n     * @returns {Promise} A promise that will be resolved when the authentication is complete. See {{@link Everlive.prototype.completeAuthentication}}.\n     * @throws throws an error if no onAuthenticationRequired handler is provided to the options.\n     */\n    _ensureAuthentication() {\n        if (!this.isAuthenticationInProgress()) {\n            throw new Error('onAuthenticationRequired option of Everlive.CommonSetup.Authentication is required.');\n        }\n        if (this.isAuthenticating()) {\n            return this._authenticationCallbacks.promise;\n        }\n\n        this.clearAuthorization();\n        this.authSetup.onAuthenticationRequired.call(this);\n        this._authenticationCallbacks = getCallbacks();\n        return this._authenticationCallbacks.promise;\n    }\n\n    _loginSuccess(data) {\n        const result = data.result;\n        this.setAuthorization(result.access_token, result.token_type, result.principal_id);\n    }\n\n    _logoutSuccess() {\n        this.clearAuthorization();\n    }\n\n    _loginWithProvider(identity, success, error) {\n        const user = {\n            Identity: identity\n        };\n\n        const dataQuery = this.buildDataQuery(user, DataQueryOperation.UserLoginWithProvider);\n        return buildPromise((success, error) => {\n            return this.processDataQuery(dataQuery)\n                .then((data) => {\n                    this._loginSuccess(data);\n                    return success(data);\n                })\n                .catch(error);\n        }, success, error);\n    }\n\n    /**\n     * Logs in a user using a username and a password to the current {{site.bs}} JavaScript SDK instance. All requests initiated by the current {{site.bs}} JavaScript SDK instance will be authenticated with that user's credentials.\n     * @memberOf Authentication.prototype\n     * @method login\n     * @name login\n     * @param {string} username The user's username.\n     * @param {string} password The user's password.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Logs in a user using a username and a password to the current {{site.bs}} JavaScript SDK instance. All requests initiated by the current {{site.bs}} JavaScript SDK instance will be authenticated with that user's credentials.\n     * @memberOf Authentication.prototype\n     * @method login\n     * @name login\n     * @param {string} username The user's username.\n     * @param {string} password The user's password.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    login(username: string, password: string, success?: SuccessCallback<UserLoginResult>, error?: ErrorCallback): Promise<UserLoginResult> {\n        const grant_type = 'password';\n        const data = {grant_type, username, password};\n        const dataQuery = this.buildDataQuery(data, DataQueryOperation.UserLogin);\n        return buildPromise((success, error) => {\n            return this.processDataQuery(dataQuery)\n                .then((data) => {\n                    this._loginSuccess(data);\n                    return success(data);\n                })\n                .catch(error);\n        }, success, error);\n    }\n\n    /**\n     * Log out the user who is currently logged in.\n     * @memberOf Authentication.prototype\n     * @method logout\n     * @name logout\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log out the user who is currently logged in.\n     * @memberOf Authentication.prototype\n     * @method logout\n     * @name logout\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    logout(success?: SuccessCallback<{}>, error?: ErrorCallback): Promise<{}> {\n        const dataQuery = this.buildDataQuery(null, DataQueryOperation.UserLogout);\n        return buildPromise((success, error) => {\n            return this.processDataQuery(dataQuery)\n                .then((...args) => {\n                    this._logoutSuccess();\n                    return success(...args);\n                })\n                .catch(err => {\n                    if (err.code === 301) { //invalid token\n                        this.clearAuthorization();\n                    }\n\n                    return error(err);\n                });\n        }, success, error);\n    }\n\n    /**\n     * Log in a user using an Facebook access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithFacebook\n     * @name loginWithFacebook\n     * @param {string} accessToken Facebook access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using an Facebook access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithFacebook\n     * @name loginWithFacebook\n     * @param {string} accessToken Facebook access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithFacebook(accessToken: string, success?: SuccessCallback<SocialLoginResult>, error?: ErrorCallback): Promise<SocialLoginResult> {\n        const identity = {\n            Provider: 'Facebook',\n            Token: accessToken\n        };\n        return this._loginWithProvider(identity, success, error);\n    }\n\n    /**\n     * Log in a user using an ADFS access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithADFS\n     * @name loginWithADFS\n     * @param {string} accessToken ADFS access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using an ADFS access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithADFS\n     * @name loginWithADFS\n     * @param {string} accessToken ADFS access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithADFS(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'ADFS',\n            Token: accessToken\n        };\n        return this._loginWithProvider(identity, success, error);\n    }\n\n    /**\n     * Log in a user using an SAML access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithSAML\n     * @name loginWithSAML\n     * @param {string} accessToken SAML access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using an SAML access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithSAML\n     * @name loginWithSAML\n     * @param {string} accessToken SAML access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithSAML(accessToken, success, error) {\n        var identity = {\n            Provider: 'SAML',\n            Token: accessToken\n        };\n        return this._loginWithProvider(identity, success, error);\n    };\n\n    /**\n     * Log in a user using a LiveID access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithLiveID\n     * @name loginWithLiveID\n     * @param {string} accessToken LiveID access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using a LiveID access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithLiveID\n     * @name loginWithLiveID\n     * @param {string} accessToken LiveID access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithLiveID(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'LiveID',\n            Token: accessToken\n        };\n        return this._loginWithProvider(identity, success, error);\n    }\n\n    /**\n     * Log in a user using a Google access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithGoogle\n     * @name loginWithGoogle\n     * @param {string} accessToken Google access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using a Google access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithGoogle\n     * @name loginWithGoogle\n     * @param {string} accessToken Google access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithGoogle(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'Google',\n            Token: accessToken\n        };\n        return this._loginWithProvider(identity, success, error);\n    }\n\n    /**\n     * Log in a user with a Twitter token. A secret token needs to be provided.\n     * @memberOf Authentication.prototype\n     * @method loginWithTwitter\n     * @name loginWithTwitter\n     * @param {string} token Twitter token.\n     * @param {string} tokenSecret Twitter secret token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user with a Twitter token. A secret token needs to be provided.\n     * @memberOf Authentication.prototype\n     * @method loginWithTwitter\n     * @name loginWithTwitter\n     * @param {string} token Twitter token.\n     * @param {string} tokenSecret Twitter secret token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithTwitter(token: string, tokenSecret: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'Twitter',\n            Token: token,\n            TokenSecret: tokenSecret\n        };\n\n        return this._loginWithProvider(identity, success, error);\n    }\n\n    /**\n     * Sets the token and token type that the {{site.bs}} JavaScript SDK will use for authorization.\n     * @memberOf Authentication.prototype\n     * @method setAuthorization\n     * @param {string} token Token that will be used for authorization.\n     * @param {Everlive.TokenType} tokenType Token type. Currently only 'bearer' token is supported.\n     * @param {string} principalId The id of the user that is logged in.\n     */\n    setAuthorization(token: string, tokenType: string, principalId: string): void {\n        this.sdk.setup.setAuthorizationProperties(token, tokenType, principalId);\n\n        if (this.authSetup.persist) {\n            var localStoreKey = this._getLocalStoreKey();\n            var authorizationProperties = this.sdk.setup.getAuthorizationProperties();\n            this._localStore.setItem(localStoreKey, JSON.stringify(authorizationProperties));\n        }\n\n        if (this._authenticationCallbacks) {\n            this._authenticationCallbacks.success();\n            this._authenticationCallbacks = null;\n        }\n    }\n\n    /**\n     * Clears the authentication token that the {{site.bs}} JavaScript SDK currently uses. Note that this is different than logging out, because the authorization token that was used, will not be invalidated.\n     * @method clearAuthorization\n     * @memberOf Authentication.prototype\n     */\n    clearAuthorization(): void {\n        this.setAuthorization(null, null, null);\n        this.clearPersistedAuthentication();\n    }\n\n    /**\n     * Clears the current persisted authentication from the local store for the current {{site.bs}} JavaScript SDK instance. Will not logout or modify the current authentication of the Javascript SDK.\n     * @method clearPersistedAuthentication\n     * @memberOf Authentication.prototype\n     */\n    clearPersistedAuthentication() {\n        if (this._localStore) {\n            var localStoreKey = this._getLocalStoreKey();\n            this._localStore.removeItem(localStoreKey);\n            this.sdk.setup.setAuthorizationProperties(null, null, null);\n        }\n    }\n\n    /**\n     * @memberOf Authentication.prototype\n     * Returns whether authentication requirement is enabled for the current instance of the {{site.bs}} JavaScript SDK.\n     * @returns {boolean} whether an onAuthenticationRequired function is provided\n     */\n    isAuthenticationInProgress() {\n        return typeof this.authSetup.onAuthenticationRequired === 'function';\n    }\n\n    /**\n     * A method that should be called with the authentication result.\n     * @memberOf Authentication.prototype\n     * @param authentication authentication object containing information about the\n     * @param authentication.access_token\n     * @param authentication.token_type\n     * @param authentication.principal_id\n     */\n    completeAuthentication(authentication) {\n        this.sdk.authentication.setAuthorization(authentication.access_token, authentication.token_type, authentication.principal_id);\n    }\n\n    /**\n     * Gets the current authentication status of the {{site.bs}} JavaScript SDK instance.\n     * @memberOf Authentication.prototype\n     * @method getAuthenticationStatus\n     * @name getAuthenticationStatus\n     * @returns {Promise} A promise to the authentication status.\n     */\n    /**\n     * Gets the current authentication status of the {{site.bs}} JavaScript SDK instance.\n     * @memberOf Authentication.prototype\n     * @method getAuthenticationStatus\n     * @name getAuthenticationStatus\n     * @param {Everlive.Callbacks.authenticationStatusSuccess} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n     getAuthenticationStatus(success?: SuccessCallback<AuthInfoResult>, error?: ErrorCallback): Promise<AuthInfoResult> {\n        return buildPromise((success, error) => {\n            var setup = this.sdk.setup;\n            if (setup.masterKey) {\n                return success({status: Constants.AuthStatus.masterKey});\n            }\n\n            if (!setup.token) {\n                return success({status: Constants.AuthStatus.unauthenticated});\n            }\n\n            if (this.isAuthenticationInProgress()) {\n                return success({status: Constants.AuthStatus.authenticating});\n            }\n\n            return this.sdk.users\n                .skipAuth(true)\n                .currentUser()\n                .then(function (res) {\n                    return success({status: Constants.AuthStatus.authenticated, user: res.result});\n                }, err => {\n                    if (this.isAuthenticationInProgress()) {\n                        return success({status: Constants.AuthStatus.authenticating});\n                    } else if (err.code === EverliveErrors.invalidRequest.code || err.code === EverliveErrors.invalidToken.code) { // invalid request, i.e. the access token is invalid or missing\n                        return success({status: Constants.AuthStatus.invalidAuthentication});\n                    } else if (err.code === EverliveErrors.expiredToken.code) {\n                        return success({status: Constants.AuthStatus.expiredAuthentication});\n                    } else {\n                        return error(err);\n                    }\n                });\n        }, success, error);\n     }\n\n    /** Returns whether the {{site.tap}} is currently waiting for authentication to be completed. See {{@link Everlive.prototype.completeAuthentication}}.\n     * @memberOf Everlive.prototype\n     * @returns {boolean}\n     */\n    isAuthenticating() {\n        return !!this._authenticationCallbacks;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/auth/Authentication.ts\n **/","import {Setup} from '../Setup';\nexport class AuthenticationSetup {\n    setup: Setup;\n\n    onAuthenticationRequired: any;\n    persist: boolean;\n\n    constructor(setup: Setup, options: any = {}) {\n        this.onAuthenticationRequired = options.onAuthenticationRequired;\n        this.persist = options.persist;\n        this.setup = setup;\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/auth/AuthenticationSetup.ts\n **/","import * as path from 'path';\nimport * as _ from 'underscore';\n\nimport { Constants } from '../constants';\nimport { EverliveError, EverliveErrors } from '../EverliveError';\nimport { DataQueryOperation } from \"../../common/Constants\";\nimport { Utils } from '../utils';\nimport { ProcessableObject } from \"../../common/ProcessableObject\";\nimport { SuccessCallback } from \"../interfaces/SuccessCallback\";\nimport { ErrorCallback } from \"../interfaces/ErrorCallback\";\nimport { CloudFunctionInvocationParameters } from \"../interfaces/CloudFunctionInvocationParameters\";\n\nexport class BusinessLogic extends ProcessableObject {\n    static _isValidFuncName(name) {\n        return _.isString(name) && name !== '';\n    }\n\n    /**\n     * @class BusinessLogic\n     * @classdesc A class for invoking your app's Business Logic such as Cloud Functions and Stored Procedures.\n     * @protected\n     * @param sdk {Everlive} The sdk instance\n     */\n    constructor(sdk) {\n        super(sdk, 'BusinessLogic');\n    }\n\n    /**\n     * Invokes a Cloud Function from the app's Business Logic layer.\n     * @method invokeCloudFunction\n     * @memberOf BusinessLogic.prototype\n     * @param {String} funcName The name of the function to invoke.\n     * @param {Object} params An object containing all invocation request parameters.\n     * @param {HttpMethod} [params.method=GET] HTTP request method.\n     * @param {Object} [params.queryStringParams] Parameters to be passed in the query string.\n     * @param {Object} [params.data] Data to be sent with the request.\n     * @param {Boolean} [params.authHeaders=true] Whether to send the credentials of the currently logged-in user.\n     * @param {Object} [params.headers] Additional headers to be sent with the request.\n     * @param {Object} [params.customParameters] Custom parameters to be sent with the request. They will be accessible in the Cloud Function code.\n     * @returns {Promise} A promise resolved on successful response and rejected on error response.\n     */\n    /**\n     * Invokes a Cloud Function from the app's Business Logic layer.\n     * @method invokeCloudFunction\n     * @memberOf BusinessLogic.prototype\n     * @param {String} funcName The name of the function to invoke.\n     * @param {Object} params An object containing all invocation request parameters.\n     * @param {HttpMethod} [params.method=GET] HTTP request method.\n     * @param {Object} [params.queryStringParams] Parameters to be passed in the query string.\n     * @param {Object} [params.data] Data to be sent with the request.\n     * @param {Boolean} [params.authHeaders=true] Whether to send the credentials of the currently logged-in user.\n     * @param {Object} [params.headers] Additional headers to be sent with the request.\n     * @param {Object} [params.customParameters] Custom parameters to be sent with the request. They will be accessible in the Cloud Function code.\n     * @param {Function} success Success callback function.\n     * @param {Function} error Error callback function.\n     */\n    invokeCloudFunction(funcName: string, params: CloudFunctionInvocationParameters, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        if (!BusinessLogic._isValidFuncName(funcName)) {\n            const err = new EverliveError(EverliveErrors.invalidOrMissingFunctionName);\n            return Utils.callbackAndPromiseErrorResponse(err, error);\n        }\n\n        let parameters: any = _.extend({\n            method: Constants.HttpMethod.GET,\n            success: success,\n            error: error\n        }, params);\n\n        if (parameters.method.toUpperCase() === Constants.HttpMethod.GET && _.size(parameters.data)) {\n            const err = new EverliveError(EverliveErrors.bodyWithGetRequestNotSupported);\n            return Utils.callbackAndPromiseErrorResponse(err, error);\n        }\n\n        parameters.endpoint = path.join(Constants.cloudFuncsEndpoint, funcName);\n        return this._invokeFunction(parameters, DataQueryOperation.InvokeCloudFunction);\n    }\n\n    /**\n     * Invokes a Stored Procedure from the app's Business Logic layer.\n     * @method invokeStoredProcedure\n     * @memberOf BusinessLogic.prototype\n     * @param {String} funcName The name of the Stored Procedure to invoke.\n     * @param {Object} funcParams Parameters to be passed to the Stored Procedure.\n     * @returns {Promise} A promise resolved on successful response and rejected on error response.\n     */\n    /**\n     * Invokes a Stored Procedure from the app's Business Logic layer.\n     * @method invokeStoredProcedure\n     * @memberOf BusinessLogic.prototype\n     * @param {String} funcName The name of the stored procedure to invoke.\n     * @param {Object} funcParams Parameters to be passed to the Stored Procedure.\n     * @param {Function} success Success callback function.\n     * @param {Function} error Error callback function.\n     */\n    invokeStoredProcedure(funcName: string, funcParams: any, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        if (!BusinessLogic._isValidFuncName(funcName)) {\n            const err = new EverliveError(EverliveErrors.invalidOrMissingProcedureName);\n            return Utils.callbackAndPromiseErrorResponse(err, error);\n        }\n\n        const reqParams = {\n            method: Constants.HttpMethod.POST,\n            endpoint: path.join(Constants.sqlProceduresEndpoint, funcName),\n            data: funcParams || {},\n            success: success,\n            error: error\n        };\n\n        return this._invokeFunction(reqParams, DataQueryOperation.InvokeStoredProcedure);\n    }\n\n    private _invokeFunction(params, operation: DataQueryOperation) {\n        const {\n            customParameters,\n            method,\n            endpoint,\n            success,\n            error\n        } = params;\n\n        const additionalOptions = _.extend({\n            customParameters,\n            method,\n            endpoint,\n            authHeaders: true,\n            isCustomRequest: true\n        }, params);\n        const dataQuery = this.buildDataQuery({ additionalOptions }, operation, {\n            collectionName: this.collectionName\n        });\n        return this.processDataQuery<any>(dataQuery, success, error);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/business-logic/BusinessLogic.ts\n **/","import * as _ from 'underscore';\nimport * as jsonStringify from 'json-stable-stringify';\n\nimport { Constants, DataQueryOperation } from '../constants';\nimport { Utils } from '../utils';\nimport { RequestService } from '../services/RequestService';\nimport { BasePersister, getPersister } from '../offline/offlinePersisters';\nimport { buildOfflineStorageOptions } from '../offline/offline';\nimport { EverliveError, EverliveErrors, EverliveErrorHelper } from '../EverliveError';\nimport { Everlive } from '../Everlive';\nimport { ErrorCallback } from \"../interfaces/ErrorCallback\";\nimport { SuccessCallback } from \"../interfaces/SuccessCallback\";\n\nconst cacheableOperations = [\n    DataQueryOperation.Read,\n    DataQueryOperation.ReadById,\n    DataQueryOperation.Count\n];\n\n/**\n * @class CacheModule\n * @classDesc A class providing access to the various caching features.\n */\n/**\n * Represents the {@link CacheModule} class.\n * @memberOf Everlive.prototype\n * @member {CacheModule} cache\n */\nexport class CacheModule {\n    typeSettings: any;\n    maxAgeInMs: number;\n    persister: BasePersister;\n    cacheData: any;\n\n    constructor(public options: any, private _everlive:Everlive) {\n        this.typeSettings = this.options.typeSettings;\n        this.maxAgeInMs = this.options.maxAge * 60 * 1000;\n    }\n\n    _hash(obj) {\n        return (<any>jsonStringify)(obj);\n    }\n\n    _initStore(sdkOptions) {\n        if (!this.persister) {\n            var offlineStorageOptions = buildOfflineStorageOptions(sdkOptions);\n            var storageKey = this.options.storage.storagePath + '_' + sdkOptions.appId;\n\n            this.persister = getPersister(storageKey, offlineStorageOptions);\n        }\n    }\n\n    _getCacheData() {\n        var self = this;\n\n        if (!this.cacheData) {\n            return this._persisterGetAllDataWrap()\n                .then(function (cacheData) {\n                    self.cacheData = cacheData;\n                    return self.cacheData;\n                });\n        }\n\n        return Promise.resolve(this.cacheData);\n    }\n\n    _persisterGetAllDataWrap() {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            return self.persister.getAllData(resolve, reject);\n        });\n    }\n\n    _persisterSaveDataWrap(contentType, data) {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            return self.persister.saveData(contentType, JSON.stringify(data), resolve, reject);\n        });\n    }\n\n    _getCacheDataForContentType(contentType) {\n        return this._getCacheData()\n            .then(function (cacheData) {\n                if (typeof cacheData[contentType] === 'string') {\n                    cacheData[contentType] = JSON.parse(cacheData[contentType]);\n                } else {\n                    cacheData[contentType] = cacheData[contentType] || {};\n                }\n\n                return _.clone(cacheData[contentType]);\n            });\n    }\n\n    //TODO: this method is copied from the cache query processor. It is used in Data.ts -> _applyQueryOnline.\n    //This one is not expected to be working ATM\n    _cacheDataQuery(query) {\n        const shouldSkipCache = this._everlive.cache._shouldSkipCache(query);\n        if (shouldSkipCache) {\n            if (query.ignoreCache && !this._everlive.cache.isQueryUnsupportedOffline(query)) {\n                const hash = this._everlive.cache._getHashForQuery(query);\n\n                return this._everlive.cache._cacheQuery(query, hash, null);\n            } else {\n                return RequestService.handleRequestProcessing(query, null);\n            }\n        } else {\n            query.useCache = false;\n            return this._everlive.cache._processCacheItem(query, null);\n        }\n    }\n\n    _persistCacheData(contentType, cacheData) {\n        var self = this;\n\n        return this._getCacheDataForContentType(contentType)\n            .then(function () {\n                var dataToCache = _.extend({}, self.cacheData[contentType], cacheData);\n                self.cacheData[contentType] = (<any>_).compactObject(dataToCache);\n                return self._persisterSaveDataWrap(contentType, self.cacheData[contentType]);\n            });\n    }\n\n    isQueryUnsupportedOffline(dataQuery) {\n        var hasPowerfieldsExpression = !!dataQuery.getHeader(Constants.Headers.powerFields);\n        var queryParams = dataQuery.getQueryParameters();\n        var dataQueryFilter = queryParams.filter;\n        var unsupportedDbOperators = Utils.getUnsupportedOperators(dataQueryFilter);\n        var hasUnsupportedOperators = unsupportedDbOperators.length !== 0;\n        return hasPowerfieldsExpression || hasUnsupportedOperators;\n    }\n\n    _shouldSkipCache(dataQuery) {\n        var operationShouldSkipCache = cacheableOperations.indexOf(dataQuery.operation) === -1;\n        var collectionName = dataQuery.collectionName;\n        var typeSettings = this.typeSettings;\n        var cacheDisabledForContentType = typeSettings && typeSettings && typeSettings[collectionName]\n            && typeSettings[collectionName].enabled === false;\n        var ignoreCacheForQuery = dataQuery.ignoreCache;\n\n        var isUnsupportedOffline = this.isQueryUnsupportedOffline(dataQuery);\n        var isForCurrentUser = dataQuery.additionalOptions && dataQuery.additionalOptions.id === 'me';\n\n        return operationShouldSkipCache || cacheDisabledForContentType || isForCurrentUser || ignoreCacheForQuery\n            || isUnsupportedOffline;\n    }\n\n    _processCacheItem(dataQuery, data) {\n        var self = this;\n\n        var contentType = dataQuery.collectionName;\n        var hash = this._getHashForQuery(dataQuery);\n\n        return self._getCacheDataForContentType(contentType)\n            .then(function (cacheData) {\n                if (cacheData[hash]) {\n                    return self._isHashExpired(contentType, hash, dataQuery.maxAge)\n                        .then(function (isExpired) {\n                            if (isExpired && !dataQuery.forceCache) {\n                                return self._purgeForHash(contentType, hash)\n                                    .then(function () {\n                                        return self._cacheQuery(dataQuery, hash, data);\n                                    });\n                            } else {\n                                //If cache is used, change 'me' to the ID of the logged in user (only for currentUser() requests).\n                                if (dataQuery.operation === DataQueryOperation.ReadById && dataQuery.additionalOptions.id === 'me') {\n                                    dataQuery.additionalOptions.id = self._everlive.setup.principalId;\n                                }\n\n                                return self._everlive.offlineStorage.processQuery(dataQuery);\n                            }\n                        });\n                } else {\n                    return self._cacheQuery(dataQuery, hash, data);\n                }\n            });\n    }\n\n    _addObjectToCache(obj, contentType) {\n        var itemHash = obj.Id;\n        return this._cacheResultFromDataQuery(contentType, itemHash);\n    }\n\n    _cacheQuery(dataQuery, hash, data) {\n        const self = this;\n        const contentType = dataQuery.collectionName;\n\n        const promise = new Promise(function (resolve, reject) {\n            let result;\n            return RequestService.handleRequestProcessing(dataQuery, data)\n                .then(function (response: any) {\n                    result = response.result || response;\n                    return self._getCacheData();\n                }).then(function success() {\n                    let cacheForItems = [];\n                    let resultToCache = result.Result || result;\n                    if (dataQuery.operation !== DataQueryOperation.Count) {\n                        if (Array.isArray(resultToCache)) {\n                            _.each(resultToCache, function (singleResult) {\n                                var cacheItemPromise = self._addObjectToCache(singleResult, contentType);\n                                cacheForItems.push(cacheItemPromise);\n                            });\n                        } else if (_.isObject(resultToCache)) {\n                            var cacheItemPromise = self._addObjectToCache(resultToCache, contentType);\n                            cacheForItems.push(cacheItemPromise);\n                        }\n                    }\n\n                    return Promise.all(cacheForItems);\n                }).then(function success() {\n                    if (dataQuery.operation !== DataQueryOperation.Count) {\n                        return self._cacheResultFromDataQuery(contentType, hash);\n                    }\n                }).then(function success() {\n                    resolve(result);\n                }).catch(function (err) {\n                    reject(err);\n                });\n        });\n\n        return promise;\n    }\n\n    _cacheResultFromDataQuery(contentType, hash) {\n        var cacheData = {};\n        cacheData[hash] = {\n            cachedAt: Date.now()\n        };\n\n        return this._persistCacheData(contentType, cacheData);\n    }\n\n    _getExpirationForHash(contentType, hash) {\n        return this._getCacheDataForContentType(contentType)\n            .then(function (cacheData) {\n                return cacheData[hash].cachedAt;\n            });\n    }\n\n    _isHashExpired(contentType, hash, maxAge) {\n        var self = this;\n\n        return this._getExpirationForHash(contentType, hash)\n            .then(function (cachedAt) {\n                var maxAgeForContentType = self.typeSettings && self.typeSettings[contentType] ?\n                self.typeSettings[contentType].maxAge * 60 * 1000 : null;\n\n                var cacheAge;\n                if (maxAge || maxAge === 0) {\n                    cacheAge = maxAge;\n                } else if (maxAgeForContentType || maxAgeForContentType === 0) {\n                    cacheAge = maxAgeForContentType;\n                } else {\n                    cacheAge = self.maxAgeInMs;\n                }\n                return (cachedAt + cacheAge) < Date.now();\n            });\n    }\n\n    _purgeForHash(contentType, hash) {\n        var cacheData = {};\n        cacheData[hash] = null;\n\n        return this._persistCacheData(contentType, cacheData);\n    }\n\n    _getHashForQuery(dataQuery) {\n        if (dataQuery.operation === DataQueryOperation.ReadById) {\n            return dataQuery.additionalOptions.id;\n        }\n\n        var queryParams = dataQuery.getQueryParameters();\n        return this._hash(queryParams);\n    }\n\n    /**\n     * Clears the cached data for a specified content type.\n     * @method clear\n     * @name clear\n     * @param {string} contentType The content type to clear.\n     * @memberOf CacheModule.prototype\n     * @returns {Promise}\n     */\n    /**\n     * Clears the cached data for a specified content type.\n     * @method clear\n     * @name clear\n     * @param {string} contentType The content type to clear.\n     * @memberOf CacheModule.prototype\n     * @param {function} [success] A success callback.\n     * @param {function} [error] An error callback.\n     */\n    clear(contentType: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        var self = this;\n\n        return Utils.buildPromise(function (success, error) {\n            if (!self.options.enabled) {\n                const errorMessage = EverliveErrorHelper.buildCacheDisabledErrorMessage('clear');\n                return error(new EverliveError({message: errorMessage, code: EverliveErrors.cacheDisabled.code}));\n            }\n\n            return self.persister.purge(contentType, function () {\n                if (self.cacheData && self.cacheData[contentType]) {\n                    delete self.cacheData[contentType];\n                }\n\n                if (self._everlive.offlineStorage.options.enabled) {\n                    success();\n                } else {\n                    self._everlive.offlineStorage.queryProcessor.persister.purge(contentType, success, error);\n                }\n            }, error);\n        }, success, error);\n    }\n\n    /**\n     * Clears all data from the cache.\n     * @method clearAll\n     * @name clearAll\n     * @memberOf CacheModule.prototype\n     * @returns {Promise}\n     */\n    /**\n     * Clears all data from the cache.\n     * @method clearAll\n     * @name clearAll\n     * @memberOf CacheModule.prototype\n     * @param {function} [success] A success callback.\n     * @param {function} [error] An error callback.\n     */\n    clearAll(success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        var self = this;\n        self.cacheData = null;\n\n        return Utils.buildPromise(function (success, error) {\n            if (self.options.enabled === false) {\n                const errorMessage = EverliveErrorHelper.buildCacheDisabledErrorMessage('clearAll');\n                return error(new EverliveError({message: errorMessage, code: EverliveErrors.cacheDisabled.code}));\n            }\n\n            return self.persister.purgeAll(function () {\n                if (self._everlive.offlineStorage.options.enabled) {\n                    success();\n                } else {\n                    self._everlive.offlineStorage.queryProcessor.persister.purgeAll(success, error);\n                }\n            }, error)\n        }, success, error);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/caching/CacheModule.ts\n **/","'use strict';\n\nimport * as _ from 'underscore';\n\nimport { CacheModule } from './CacheModule';\nimport { Everlive } from '../Everlive';\n\nconst getDefaultOptions = function () {\n    return {\n        maxAge: 60,\n        enabled: false,\n        storage: {\n            storagePath: 'el_cache'\n        }\n    }\n};\n\nexport function initCaching(options: any, sdk: Everlive) {\n    var cachingOptions;\n    var defaultOptions = getDefaultOptions();\n    if (options.caching === true) {\n        cachingOptions = (<any>_).deepExtend({}, defaultOptions);\n        cachingOptions.enabled = true;\n    } else {\n        cachingOptions = (<any>_).deepExtend(defaultOptions, options.caching);\n    }\n\n    if (options.caching !== false) {\n        sdk.setup.caching = cachingOptions;\n    }\n\n    sdk.cache = new CacheModule(cachingOptions, sdk);\n}\n\nexport function initStore(options, sdk) {\n    sdk.cache._initStore(options);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/caching/caching.ts\n **/","import { contains, chain, has, extend, find } from 'underscore';\n\nimport { DataQueryBuilder as CommonDataQueryBuilder } from '../../common/dataQuery/DataQueryBuilder';\nimport { DataQueryOperation } from '../../common/Constants';\n\nimport { DataQuery as CommonDataQuery } from '../../common/dataQuery/DataQuery';\nimport { DataQuery } from '../dataQuery/DataQuery';\nimport { Query } from '../query/Query';\nimport { Constants } from '../constants';\n\nconst Headers = Constants.Headers;\n\nexport class DataQueryBuilder extends CommonDataQueryBuilder {\n    static _tryBuildQueryAllowedOperations = [\n        DataQueryOperation.Read,\n        DataQueryOperation.ReadById,\n        DataQueryOperation.Count,\n        DataQueryOperation.Aggregate,\n        DataQueryOperation.SetAcl,\n        DataQueryOperation.Update,\n        DataQueryOperation.SetOwner,\n        DataQueryOperation.Delete,\n        DataQueryOperation.DeleteById,\n        DataQueryOperation.RawUpdate\n    ];\n\n    static _tryGetDataAllowedOperations = [\n        DataQueryOperation.Create,\n        DataQueryOperation.RawUpdate,\n        DataQueryOperation.Update,\n        DataQueryOperation.SetOwner,\n        DataQueryOperation.UserLogin,\n        DataQueryOperation.UserLoginWithProvider,\n        DataQueryOperation.FilesUpdateContent,\n        DataQueryOperation.UserResetPassword,\n        DataQueryOperation.UserSetPassword,\n        DataQueryOperation.UserChangePassword,\n        DataQueryOperation.UserLinkWithProvider,\n        DataQueryOperation.UserUnlinkFromProvider\n    ];\n\n    static _tryGetDataFields = [\n        'updateObject',\n        'data'\n    ];\n\n    _getInitialDataQuery(operation, meta) {\n        return new DataQuery({meta, operation});\n    }\n\n    _isOperationAllowed(operations, operation) {\n        return contains(operations, operation);\n    }\n\n    _buildQuery(filterOrQuery) {\n        if (!filterOrQuery) {\n            return null;\n        }\n\n        if (filterOrQuery instanceof Query) {\n            return filterOrQuery;\n        } else {\n            return new Query(filterOrQuery);\n        }\n    }\n\n    _tryBuildQuery(op, data) {\n        const operations = DataQueryBuilder._tryBuildQueryAllowedOperations;\n        if (!this._isOperationAllowed(operations, op)) {\n            return null;\n        }\n\n        const query = has(data, 'query') ? data.query : data;\n        return this._buildQuery(query);\n    }\n\n    _tryGetData(op, data) {\n        const operations = DataQueryBuilder._tryGetDataAllowedOperations;\n        if (!this._isOperationAllowed(operations, op)) {\n            return null;\n        }\n\n        //TODO: this will not quite work if the user wants to create an item with a \"data\" field for example.\n        const fields = DataQueryBuilder._tryGetDataFields;\n        const field = find(fields, field => has(data, field));\n        if (field) {\n            return data[field];\n        }\n\n        return data;\n    }\n\n    _isAuthenticationOperation(op) {\n        return op === DataQueryOperation.UserLogin ||\n            op === DataQueryOperation.UserLogout ||\n            op === DataQueryOperation.UserLoginWithProvider ||\n            op === DataQueryOperation.UserLinkWithProvider ||\n            op === DataQueryOperation.UserUnlinkFromProvider;\n    }\n\n    _isCloudCodeOperation(op) {\n        return op === DataQueryOperation.InvokeCloudFunction ||\n                op === DataQueryOperation.InvokeStoredProcedure;\n    }\n\n    _applyOperationSpecificProperties(op, query) {\n        if (op === DataQueryOperation.UserLoginWithProvider) {\n            query.authHeaders = false;\n        } else if (this._isCloudCodeOperation(op)) {\n            const {customParameters, authHeaders} = query.additionalOptions;\n            query.authHeaders = authHeaders;\n            if (customParameters) {\n                query.headers = extend(query.headers, {\n                    [Headers.customParameters]: JSON.stringify(customParameters)\n                });\n            }\n        }\n\n        if (this._isAuthenticationOperation(op)) {\n            query.skipAuth = true;\n        }\n\n        return query;\n    }\n\n    buildDataQuery(data, op: DataQueryOperation, meta): CommonDataQuery {\n        const dataQuery = super.buildDataQuery(data, op, meta);\n\n        if (dataQuery.query) {\n            return dataQuery;\n        }\n\n        //null causes invalid request body\n        dataQuery.query = this._tryBuildQuery(op, data) || undefined;\n        dataQuery.data = this._tryGetData(op, data) || undefined;\n        this._applyOperationSpecificProperties(op, dataQuery);\n\n        return dataQuery;\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/dataQuery/DataQueryBuilder.ts\n **/","import {CryptoJS} from 'node-cryptojs-aes';\nconst {AES} = CryptoJS;\n\nexport class CryptographicProvider {\n    constructor(public options: any = {}) {\n    }\n\n    _getKey(): string {\n        return <string>this.options.encryption.key;\n    }\n\n    _canEncryptDecrypt(content: string) {\n        return this._getKey() && content !== null && content !== undefined;\n    }\n\n    encrypt(content: string): string {\n        if (!this._canEncryptDecrypt(content)) {\n            return content;\n        }\n\n        return AES.encrypt(content, this._getKey()).toString();\n    }\n\n    decrypt(content: string): string {\n        if (!this._canEncryptDecrypt(content)) {\n            return content;\n        }\n\n        return AES.decrypt(content, this._getKey()).toString(CryptoJS.enc.Utf8);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/encryption/CryptographicProvider.ts\n **/","/**\n * @class Helpers\n * @classdesc Everlive helper classes\n */\n\nimport * as platform from '../../common/platform';\nimport { HtmlHelper } from './html/htmlHelper';\n\nexport interface HelperInfo {\n    name: string;\n    ctor: typeof HtmlHelper\n}\n\nexport const helpers: HelperInfo[] = [];\n\nif (platform.isCordova || platform.isDesktop) {\n    helpers.push({\n        name: 'html',\n        ctor: HtmlHelper\n    });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/helpers/helpers.ts\n **/","import { Everlive } from '../../Everlive';\ndeclare const document;\n\nimport * as _ from 'underscore';\n\nimport { EventEmitterExtended } from '../../../common/EventEmitterExtended';\n\nimport { Utils } from '../../utils';\nimport { HtmlHelperResponsiveModule } from './htmlHelperResponsiveModule';\nimport { HtmlHelperOfflineModule } from './htmlHelperOfflineModule';\nimport { Constants } from '../../constants';\nimport { EverliveError } from '../../EverliveError';\n\nconst defaults = {\n    processOnLoad: false,\n    processOnResize: false,\n    loadingImageUrl: '',\n    errorImageUrl: '',\n    attributes: {\n        loadingImage: 'data-loading-image',\n        errorImage: 'data-error-image',\n        dpi: 'data-dpi',\n        imageSource: 'data-src',\n        fileSource: 'data-href',\n        enableOffline: 'data-offline',\n        enableResponsive: 'data-responsive'\n    },\n    responsiveParams: {\n        //http://docs.telerik.com/platform/backend-services/javascript/responsive-images/responsive-images-parameters\n    }\n};\n\n/**\n * @typedef Helpers.html\n * @description Everlive helper for html related operations, such as processing html elements with specific tags.\n */\nexport class HtmlHelper extends EventEmitterExtended {\n    settings;\n    options;\n    responsive;\n    offline;\n\n    constructor(\n        public sdk: Everlive,\n        config: any\n    ) {\n        super();\n\n        this.settings = {\n            urlTemplate: '[protocol][hostname][appid]/[operations][url]',\n            server: 'bs1.cdn.telerik.com/image/v1/'\n        };\n\n        config = config || {};\n\n        this.options = _.extend({}, defaults, config);\n        this.options.attributes = _.extend({}, defaults.attributes, config.attributes);\n        this.options.responsiveParams = _.extend({}, defaults.responsiveParams, config.responsiveParams);\n\n        this.responsive = new HtmlHelperResponsiveModule(this);\n        this.offline = new HtmlHelperOfflineModule(this);\n\n        this._init();\n    }\n\n    _init() {\n        var self = this;\n        if (self.options.processOnLoad) {\n            window.addEventListener('load', this.processAll.bind(this), false);\n        }\n\n        if (this.options.processOnResize) {\n            window.addEventListener('resize', _.debounce(this.processAll.bind(this), 300), false);\n        }\n    }\n\n    _triggerOnProcessed(args) {\n        this.emit(Constants.Events.Processed, args);\n    }\n\n    _defaultProcessSettings(settings) {\n        return _.defaults({}, settings, {\n            responsive: true,\n            offline: true\n        });\n    }\n\n    _setLoadingUrl(element) {\n        var loadingImageUri = element.getAttribute(this.options.attributes.loadingImage) || this.options.loadingImageUrl;\n        if (!loadingImageUri || Utils.isElement.anchor(element)) {\n            return Promise.resolve();\n        }\n\n        return this._setUrl(element, loadingImageUri, true);\n    }\n\n    _getBackgroundSrc(el) {\n        var elStyle = window.getComputedStyle(el, null);\n        var backgrImage = elStyle.getPropertyValue('background-image');\n\n        var img: any = backgrImage !== 'none' ? backgrImage : false;\n        if (img) {\n            img = img.replace(/url\\(('?\"?)(.*?)\\1\\)/gi, '$2');\n        }\n\n        return img;\n    }\n\n    _setErrorUrl(element) {\n        var errorImageUrl = element.getAttribute(this.options.attributes.errorImage) || this.options.errorImageUrl;\n        if (!errorImageUrl || Utils.isElement.anchor(element)) {\n            return Promise.resolve();\n        }\n\n        return this._setUrl(element, errorImageUrl, true);\n    }\n\n    _setUrl(element, url, apply:boolean = false) {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            var elAttr = self._getAttr(element);\n            if (Utils.isElement.image(element) && elAttr === self.options.attributes.imageSource) {\n                if (apply) {\n                    element.src = url;\n                    element.style.visibility = 'visible';\n                } else {\n                    var img = new Image();\n\n                    img.onerror = function () {\n                        img = null;\n                        reject(new EverliveError({message: `Can\\'t be loaded: ${url}`}));\n                    };\n\n                    img.onload = function () {\n                        img = null;\n                        self._setUrl(element, url, true)\n                            .then(resolve)\n                            .catch(reject);\n                    };\n\n                    img.src = url;\n                }\n            } else {\n                apply = true;\n                if (elAttr) {\n                    var attr;\n                    if (elAttr === self.options.attributes.imageSource) {\n                        attr = 'src';\n                    } else if (elAttr === self.options.attributes.fileSource) {\n                        attr = 'href';\n                    } else {\n                        attr = _.last(elAttr.split('-'));\n                    }\n\n                    element.setAttribute(attr, url);\n                } else {\n                    element.style.backgroundImage = 'url(' + url + ')';\n                }\n            }\n\n            if (apply) {\n                resolve();\n            }\n        });\n    }\n\n    _getAttr(element) {\n        if (element.getAttribute(this.options.attributes.imageSource)) {\n            return this.options.attributes.imageSource;\n        }\n\n        if (element.getAttribute(this.options.attributes.fileSource)) {\n            return this.options.attributes.fileSource;\n        }\n    }\n\n    _getUrl(element) {\n        var url = element.getAttribute(this.options.attributes.imageSource)\n            || element.getAttribute(this.options.attributes.fileSource)\n            || this._getBackgroundSrc(element);\n\n        return url;\n    }\n\n    _wrapElements(elements) {\n        var self = this;\n\n        var results = _.map(elements, function (element: any) {\n            var tag = element.tagName.toLowerCase();\n\n            var evaluateDataAttr = function evaluateDataAttr(attr) {\n                // data-a - true\n                // data-a=\"\" - true\n                // data-a=\"true\" - true\n                // data-a=\"anything\" - true\n                // data-a=\"false\" - false\n                // missing - false\n                var val;\n                var dataVal = (element.attributes[attr] || {value: null}).value;\n                if (dataVal === '') {\n                    val = true;\n                } else if (!dataVal) {\n                    val = false;\n                } else {\n                    try {\n                        val = JSON.parse(dataVal);\n                    } catch (e) {\n                        val = true;\n                    }\n                }\n\n                return val;\n            };\n\n            var canResponsive = evaluateDataAttr(self.options.attributes.enableResponsive);\n            var canOffline = evaluateDataAttr(self.options.attributes.enableOffline);\n\n            return {\n                item: element,\n                tag: tag,\n                operations: {\n                    responsive: canResponsive,\n                    offline: canOffline\n                }\n            };\n        });\n\n        return results;\n    }\n\n    /**\n     * @method process\n     * @memberOf Helpers.html\n     * @param {HtmlElement|HtmlElement[]} elements\n     * @param {Object} settings A settings specifying custom behavior.\n     * @param {boolean} [settings.responsive] Whether to process the data-responsive attributes that help implement Responsive Images.\n     * @param {boolean} [settings.offline] Whether to process the data-offline attributes that help implement offline files.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n\n    /**\n     * @method process\n     * @memberOf Helpers.html\n     * @param {HtmlElement|HtmlElement[]} elements\n     * @param {Object} settings A settings specifying custom behavior.\n     * @param {boolean} [settings.responsive] Whether to process the data-responsive attributes that help implement Responsive Images.\n     * @param {boolean} [settings.offline] Whether to process the data-offline attributes that help implement offline files.\n     * @returns {Promise} A promise to the process state.\n     */\n    process(elements, settings, success?: Function, error?: Function) {\n        var self = this;\n\n        return Utils.buildPromise(function (resolve) {\n            settings = self._defaultProcessSettings(settings);\n            if (_.isArray(elements) || elements instanceof NodeList || elements.length) {\n                elements = _.flatten(elements);\n            } else {\n                elements = [elements];\n            }\n\n            var wrappedElements = self._wrapElements(elements);\n            var promises = [];\n            _.each(wrappedElements, function (element) {\n                var result = {\n                    element: element.item,\n                    responsive: false,\n                    offline: false\n                };\n\n                var dataUrl = self._getUrl(result.element);\n\n                if (!dataUrl) {\n                    return promises.push(Promise.resolve(result));\n                }\n\n                var canResponsive = settings.responsive ? element.operations.responsive : false;\n                var canOffline = settings.offline ? element.operations.offline : false;\n\n                if (!canResponsive && !canOffline) {\n                    return promises.push(self._setUrl(result.element, dataUrl, true)\n                        .then(function () {\n                            return result;\n                        }));\n                }\n\n                var promise = self._setLoadingUrl(result.element);\n                var handleOperation = function handleOperation(operation, url) {\n                    if (url) {\n                        result[operation] = true;\n                        return url;\n                    }\n                };\n\n                if (canResponsive) {\n                    promise = promise.then(function () {\n                        return self.responsive.responsiveImage(element, dataUrl)\n                            .then(handleOperation.bind(this, 'responsive'));\n                    });\n                }\n\n                if (canOffline) {\n                    promise = promise.then(function (responsiveSrc) {\n                        return self.offline.processOffline(responsiveSrc || dataUrl)\n                            .then(handleOperation.bind(this, 'offline'));\n                    });\n                }\n\n                promise = (<Promise<any>>promise).then(function (finalUrl) {\n                    return self._setUrl(result.element, finalUrl)\n                        .then(function () {\n                            return result;\n                        });\n                }).catch(function (err) {\n                    return self._setErrorUrl(result.element)\n                        .then(function () {\n                            throw {\n                                element: result.element,\n                                error: err\n                            }\n                        });\n                });\n\n                promises.push(promise);\n            });\n\n            Utils.promisesAllSettled(promises)\n                .then(function (results) {\n                    var processed = [];\n                    var failed = [];\n\n                    _.each<any>(results, function (result) {\n                        if (result.state === 'fulfilled') {\n                            processed.push(result.value);\n                        } else {\n                            failed.push(result.reason);\n                        }\n                    });\n\n                    var result = {\n                        processed: processed,\n                        failed: failed\n                    };\n\n                    self._triggerOnProcessed(result);\n                    resolve(result);\n                });\n        }, success, error);\n    }\n\n    /**\n     * @method processAll\n     * @memberOf Helpers.html\n     * @param {Object} settings A settings specifying custom behavior.\n     * @param {boolean} [settings.responsive] Whether to process the data-responsive attributes that help implement Responsive Images.\n     * @param {boolean} [settings.offline] Whether to process the data-offline attributes that help implement offline files.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n\n    /**\n     * @method processAll\n     * @memberOf Helpers.html\n     * @param {Object} settings A settings specifying custom behavior.\n     * @param {boolean} [settings.responsive] Whether to process the data-responsive attributes that help implement Responsive Images.\n     * @param {boolean} [settings.offline] Whether to process the data-offline attributes that help implement offline files.\n     * @returns {Promise} A promise to the process state.\n     */\n    processAll(settings, success?: Function, error?: Function) {\n        settings = this._defaultProcessSettings(settings);\n        var responsiveSelector = '[' + this.options.attributes.enableResponsive + ']';\n        var offlineSelector = '[' + this.options.attributes.enableOffline + ']';\n\n        var responsiveElements = [];\n        if (settings.responsive) {\n            responsiveElements = document.querySelectorAll(responsiveSelector);\n        }\n\n        var offlineElements = [];\n        if (settings.offline) {\n            offlineElements = document.querySelectorAll(offlineSelector);\n        }\n\n        var slice = [].slice;\n        var elements = _.unique(slice.call(responsiveElements).concat(slice.call(offlineElements)));\n\n\n        return this.process(elements, settings, success, error);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/helpers/html/htmlHelper.ts\n **/","import * as path from 'path';\nimport * as _ from 'underscore';\n\nimport { Utils } from '../../utils';\nimport { EverliveErrors, EverliveError } from '../../EverliveError';\nimport { HtmlHelper } from \"./htmlHelper\";\n\nexport class HtmlHelperOfflineModule {\n    htmlHelper: HtmlHelper;\n\n    constructor(htmlHelper: HtmlHelper) {\n        this.htmlHelper = htmlHelper;\n    }\n\n    processOffline(url) {\n        var self = this;\n\n        if (!self.htmlHelper.sdk.offlineStorage.files) {\n            return Promise.reject(new EverliveError({message: 'Offline storage must be enabled in order to use the offline features of the images component.'}));\n        }\n\n        return self.htmlHelper.sdk.offlineStorage.files.downloadOffline(url)\n            .then(function (localUrl) {\n                return localUrl;\n            })\n            .catch(function (err) {\n                if (err.code !== EverliveErrors.cannotDownloadOffline.code) {\n                    throw err;\n                }\n\n                return self.htmlHelper.sdk.offlineStorage.offlineFilesProcessor\n                    .getOfflineFilesData()\n                    .then(function (offlineFilesData:any) {\n                        var basename = path.basename(url);\n                        const oldFile:any = _.find(offlineFilesData, function (entry:any) {\n                            if (entry.onlineLocation && entry.offlineLocation) {\n                                var onlineLocation = entry.onlineLocation;\n                                var basenameIndex = onlineLocation.lastIndexOf(basename);\n                                return basenameIndex !== -1;\n                            }\n                        });\n\n                        if (oldFile) {\n                            return oldFile.offlineLocation;\n                        }\n\n                        throw new EverliveError({message: `Cannot find offline image ${url}`, code: EverliveErrors.missingOrInvalidFileContent.code});\n                    });\n            });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/helpers/html/htmlHelperOfflineModule.ts\n **/","declare const unescape;\n\nimport * as _ from 'underscore';\n\nimport { Utils } from '../../utils';\nimport { HtmlHelper } from \"./htmlHelper\";\n\n\nconst DEFAULT_RESPONSIVE_OPERATIONS = {\n    params: {\n        resize: {}\n    },\n    isUserResize: false\n};\n\nexport class HtmlHelperResponsiveModule {\n    htmlHelper: HtmlHelper;\n\n    constructor(htmlHelper: HtmlHelper) {\n        this.htmlHelper = htmlHelper;\n    }\n\n    getBackgroundWidth(el) {\n        return Math.ceil(el.offsetWidth);\n    }\n\n    getBackgroundHeight(el) {\n        return Math.ceil(el.offsetHeight);\n    }\n\n    parseParamsString(str) {\n        if (!str || typeof str === 'undefined' || str.length <= 1) {\n            return DEFAULT_RESPONSIVE_OPERATIONS;\n        }\n\n        var params = str.split('/');\n\n        var result = {};\n        var isUserResize = false;\n\n        //TODO: Perhaps the conversion from query string to object and vice versa could go in utils, since it may be useful in other places?\n        _.chain(params)\n            .filter(function (param) {\n                return !!param;\n            }) //TODO: I think there's a function in lodash called \"compact\", which does this.\n            .each(function (param) {\n                var paramPair = param.split('=');\n                var paramName = paramPair[0];\n                var paramValues = paramPair[1];\n                paramValues = unescape(paramValues.replace(/\\+/g, ' '));\n                result[paramName] = paramValues;\n\n                if (paramName === 'resize') {\n                    isUserResize = true;\n                }\n            });\n\n        return {\n            params: result,\n            isUserResize: isUserResize\n        };\n    }\n\n    getImgParams(src, el) {\n        var self = this;\n\n        var operations;\n        var imgUrl = src.replace(/.*?resize=[^//]*\\//gi, '');\n        var protocolRe = new RegExp('https?://', 'gi');\n        var serverRe = new RegExp(this.htmlHelper.settings.server, 'gi');\n        var apiIdRe = new RegExp(this.htmlHelper.sdk.appId + '/', 'gi');\n\n        var operationsRaw = src.replace(imgUrl, '').replace(protocolRe, '').replace(serverRe, '').replace(apiIdRe, '').toLowerCase();\n        if (operationsRaw !== '') {\n            var operationsToParse = operationsRaw.indexOf('/') ? operationsRaw.substring(0, operationsRaw.length - 1) : operationsRaw;\n            //TODO: I'm hazy on the context, but... If operationsToParse starts with \"/\", we parse it \"as is\",\n            //if not, I guess it's expected to have it in the end and it's truncated? Is it\n            //impossible to not have a \"/\" at all and cut the last symbol when maybe it shouldn't be cut?\n            operations = this.parseParamsString(operationsToParse);\n        } else if (el.dataset.responsiveParams) {\n            operations = DEFAULT_RESPONSIVE_OPERATIONS;\n            _.each(el.dataset.responsiveParams.split(','), function (key: string) {\n                var pair = key.split(':');\n                var param = pair[0];\n                var value = pair[1];\n                operations.params.resize[param] = value;\n            });\n        } else {\n            operations = DEFAULT_RESPONSIVE_OPERATIONS;\n        }\n\n        _.chain(this.htmlHelper.options.responsiveParams).keys().each(function (key) {\n            var value = self.htmlHelper.options.responsiveParams[key];\n            operations.params.resize[key] = value;\n        });\n\n        // If it's a user resize operation, use the passed url in the data-src property\n        if (operations.isUserResize) {\n            imgUrl = src;\n        }\n\n        return {\n            imgUrl: imgUrl,\n            operations: operations.params,\n            isUserResize: operations.isUserResize\n        };\n    }\n\n    hasClass(el, cl) {\n        var regex = new RegExp('(?:\\\\s|^)' + cl + '(?:\\\\s|$)');\n        return !!el.className.match(regex);\n    }\n\n    getImageWidth(el) {\n        var parentEl = el.parentNode;\n        if (parentEl) {\n            var parentWidth = parentEl.offsetWidth;\n            var itemStyle = window.getComputedStyle(parentEl, null);\n            var pl = parseFloat(itemStyle.getPropertyValue('padding-left'));\n            var pr = parseFloat(itemStyle.getPropertyValue('padding-right'));\n            var bl = parseFloat(itemStyle.getPropertyValue('border-left-width'));\n            var br = parseFloat(itemStyle.getPropertyValue('border-right-width'));\n\n            return Math.abs(parentWidth - Math.ceil(pl + pr + bl + br));\n        }\n\n        return 0;\n    }\n\n    getImageHeight(el) {\n        var parentEl = el.parentNode;\n        if (parentEl) {\n            var parentHeight = parentEl.offsetHeight;\n            var itemStyle = window.getComputedStyle(parentEl, null);\n            var pt = parseFloat(itemStyle.getPropertyValue('padding-top'));\n            var pb = parseFloat(itemStyle.getPropertyValue('padding-bottom'));\n            var bt = parseFloat(itemStyle.getPropertyValue('border-top-width'));\n            var bb = parseFloat(itemStyle.getPropertyValue('border-bottom-width'));\n\n            return Math.abs(parentHeight - Math.ceil(pt + pb + bt + bb));\n        }\n\n        return 0;\n    }\n\n    getDevicePixelRatio() {\n        return window.devicePixelRatio ? window.devicePixelRatio : 1;\n    }\n\n    getPixelRatio(el) {\n        var pixelDensity: string = el.getAttribute(this.htmlHelper.options.attributes.dpi) || '';\n        return pixelDensity !== '' ? _.isNumber(pixelDensity) ? parseFloat(pixelDensity) : false : this.getDevicePixelRatio();\n    }\n\n    getImgParamsString(params) {\n        var paramsStr = 'resize=';\n\n        _.chain(params.resize).keys().each(function (paramName, index, arr) {\n            paramsStr += (paramName + ':' + params.resize[paramName]);\n            if (index < arr.length - 1) {\n                paramsStr += ',';\n            } else {\n                paramsStr += '/';\n            }\n        });\n\n        return paramsStr;\n    }\n\n    responsiveImage(item, dataSrc) {\n        var self = this;\n        var image = _.extend({}, item);\n        var element = image.item;\n        var tag = image.tag;\n\n        var isImage = Utils.isElement.image(tag);\n        var imgWidth;\n\n        image = _.extend({}, image, self.getImgParams(dataSrc, item.item));\n\n        if (!image.isUserResize) {\n            imgWidth = isImage ? self.getImageWidth(element) : self.getBackgroundWidth(element);\n        }\n\n        imgWidth = imgWidth ? imgWidth : false;\n        var src = image.isUserResize ? image.imgUrl : self.getImgSrc(image, imgWidth);\n\n        return new Promise(function (resolve) {\n            if (!imgWidth && !image.isUserResize) { // we don't have the width of the user image either.\n                // if this element is not visible, we don't have to process it.\n\n                return resolve();\n            }\n\n            return resolve(src);\n        });\n    }\n\n    getImgSrc(image, imgWidth) {\n            var protocol = this.htmlHelper.sdk.setup.scheme + '://';\n            var appId = this.htmlHelper.sdk.setup.appId;\n            var server = this.htmlHelper.settings.server;\n            var url = this.htmlHelper.settings.urlTemplate;\n            var pixelDensity = this.getPixelRatio(image.item);\n\n            url = url.replace('[protocol]', protocol);\n            url = url.replace('[appid]', appId || '');\n            url = url.replace('[hostname]', server);\n\n            var params = image.operations || false;\n            var paramsString;\n            if (params) {\n                var operations = '';\n                params.resize = params.resize || {};\n                params.resize.w = imgWidth;\n                params.resize.pd = pixelDensity;\n                var fill = params.resize.fill;\n                if (fill === 'cover' || fill === 'contain') {\n                    //for fill:cover, we need both the width and height of the image\n                    params.resize.h = this.getImageHeight(image.item) || this.getBackgroundHeight(image.item);\n                }\n\n                paramsString = this.getImgParamsString(params);\n            } else {\n                var defaultParams = {\n                    resize: {\n                        w: imgWidth,\n                        pd: pixelDensity\n                    }\n                };\n                paramsString = this.getImgParamsString(defaultParams);\n            }\n\n            url = url.replace('[operations]', paramsString);\n            url = url.replace('[url]', image.imgUrl);\n            return url;\n        }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/helpers/html/htmlHelperResponsiveModule.ts\n **/","//kendo.everlive adds some kendo methods to the Everlive prototype, if they are not used they cause no harm\nexport { Everlive } from './Everlive';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/index.ts\n **/","declare const window:any;\n\nimport * as _ from 'underscore';\n\nimport { QueryBuilder } from '../query/QueryBuilder';\nimport { Query } from '../query/Query';\nimport { AggregateQuery } from '../query/AggregateQuery';\nimport { Constants } from '../constants';\nimport { Everlive as EverliveNoKendo } from '../Everlive';\nimport { Sdk } from '../../common/Sdk';\nimport { Utils } from \"../utils\";\n\nconst operations = {\n    read: 'read',\n    update: 'update',\n    destroy: 'destroy',\n    create: 'create'\n};\n\nlet $;\nlet kendo;\nlet extend;\nlet aggrSeparator;\nlet everliveTransport;\n\n(function() {\n    if (typeof window === 'undefined' || typeof window.jQuery === 'undefined' || typeof window.kendo === 'undefined' || _.isEmpty(window.kendo.data)) {\n        return;\n    }\n\n    $ = window.jQuery;\n    kendo = window.kendo;\n\n    extend = $.extend;\n    aggrSeparator = '_';\n\n    everliveTransport = kendo.data.RemoteTransport.extend({\n        init: function (options) {\n            this.everlive$ = options.dataProvider || EverliveNoKendo.$;\n\n            this._subscribeToSdkEvents(options);\n            if (!this.everlive$) {\n                throw new Error('An instance of the Backend services sdk must be provided.');\n            }\n\n            if (!options.typeName) {\n                throw new Error('A type name must be provided.');\n            }\n\n            this.headers = options.headers;\n\n            this.dataCollection = this.everlive$.data(options.typeName);\n            kendo.data.RemoteTransport.fn.init.call(this, options);\n        },\n        read: function (options) {\n            var methodOption = this.options['read'];\n            var self = this;\n            if (methodOption && methodOption.url) {\n                return kendo.data.RemoteTransport.fn.read.call(this, options);\n            }\n            var methodHeaders;\n            if (methodOption && methodOption.headers) {\n                methodHeaders = methodOption.headers;\n            }\n            var query = translateKendoQuery(options.data);\n            var everliveQuery = new Query(query.$where, null, query.$sort, query.$skip, query.$take);\n            var id = options.data.Id;\n\n            if (id) {\n                this.dataCollection.withHeaders(this.headers).withHeaders(methodHeaders).getById(id).then(options.success, options.error);\n            } else {\n                this.dataCollection.withHeaders(this.headers).withHeaders(methodHeaders).get(everliveQuery)\n                    .then(function (getResult) {\n                        return self._readServAggregates(getResult, query, options, methodHeaders);\n                    })\n                    .then(options.success).catch(options.error);\n            }\n        },\n        update: function (options) {\n            var methodOption = this.options['update'];\n            if (methodOption && methodOption.url) {\n                return kendo.data.RemoteTransport.fn.read.call(this, options);\n            }\n            var methodHeaders;\n            if (methodOption && methodOption.headers) {\n                methodHeaders = methodOption.headers;\n            }\n            var isMultiple = _.isArray(options.data.models);\n            if (isMultiple) {\n                throw new Error('Batch update is not supported.');\n            } else {\n                var itemForUpdate = options.data;\n                return this.dataCollection.withHeaders(this.headers).withHeaders(methodHeaders).updateSingle(itemForUpdate)\n                    .then(options.success.bind(this, itemForUpdate), options.error).catch(options.error);\n            }\n        },\n        create: function (options) {\n            var methodOption = this.options['create'];\n            if (methodOption && methodOption.url) {\n                return kendo.data.RemoteTransport.fn.read.call(this, options);\n            }\n            var methodHeaders;\n            if (methodOption && methodOption.headers) {\n                methodHeaders = methodOption.headers;\n            }\n            var isMultiple = _.isArray(options.data.models);\n            var createData = isMultiple ? options.data.models : options.data;\n\n            return this.dataCollection.withHeaders(this.headers).withHeaders(methodHeaders).create(createData)\n                .then(options.success.bind(this, createData), options.error).catch(options.error);\n        },\n        destroy: function (options) {\n            var methodOption = this.options['destroy'];\n            if (methodOption && methodOption.url) {\n                return kendo.data.RemoteTransport.fn.read.call(this, options);\n            }\n            var methodHeaders;\n            if (methodOption && methodOption.headers) {\n                methodHeaders = methodOption.headers;\n            }\n            var isMultiple = _.isArray(options.data.models);\n            if (isMultiple) {\n                throw new Error('Batch destroy is not supported.');\n            }\n\n            var removeFilter = {\n                Id: options.data.Id\n            };\n\n            return this.dataCollection.withHeaders(this.headers).withHeaders(methodHeaders).destroySingle(removeFilter)\n                .then(options.success, options.error).catch(options.error);\n        },\n        _subscribeToSdkEvents: function (options) {\n            var self = this;\n\n            _.map(operations, function (op) {\n                if (options && options[op] && typeof options[op].beforeSend === 'function') {\n                    var listener = options[op].beforeSend;\n                    self.everlive$.on(Constants.Events.BeforeExecute, listener);\n                }\n            });\n        },\n        _readServAggregates: function (result, query, options, methodHeaders) {\n            if (options.data.aggregate) {\n                if (!options.data.hasOwnProperty('filter') && !query.$where) {\n                    throw new Error(\"The serverFiltering option must be enabled, when using serverAggregates.\");\n                }\n                var aggregateQuery = new AggregateQuery(query.$where, null, query.$sort, query.$skip, query.$take);\n                _transformAggregatesKendoToEverlive(options.data.aggregate, aggregateQuery);\n                return this.dataCollection.withHeaders(this.headers).withHeaders(methodHeaders).aggregate(aggregateQuery)\n                    .then(function (data) {  // merge aggregation into the result\n                        var aggrResult = _transformAggregatesEverliveToKendo(options.data.aggregate, data.result[0]); // only 1 result is expected from server for aggregates, as KendoAggregates are actually totals\n                        $.extend(true, result, {aggregates: aggrResult});\n                        return result;\n                    })\n                    .catch(options.error);\n            } else {\n                return result;\n            }\n        }\n    });\n\n    $.extend(true, kendo.data, {\n        transports: {\n            everlive: everliveTransport\n        },\n        schemas: {\n            everlive: {\n                type: 'json',\n                total: function (data) {\n                    return data.hasOwnProperty('count') ? data.count : data.Count;\n                },\n                data: function (data) {\n                    return data.result || Utils.parseUtilities.traverseAndRevive(data.Result) || data;\n                },\n                model: {\n                    id: Constants.idField\n                },\n                aggregates: 'aggregates'\n            }\n        }\n    });\n})();\n\nfunction translateKendoQuery(data):any {\n    var result:any = {};\n    if (data) {\n        if (data.skip) {\n            result.$skip = data.skip;\n            delete data.skip;\n        }\n        if (data.take) {\n            result.$take = data.take;\n            delete data.take;\n        }\n        if (data.sort) {\n            var sortExpressions = data.sort;\n            var sort = {};\n            if (!$.isArray(sortExpressions)) {\n                sortExpressions = [sortExpressions];\n            }\n            $.each(sortExpressions, function (idx, value) {\n                sort[value.field] = value.dir === 'asc' ? 1 : -1;\n            });\n            result.$sort = sort;\n            delete data.sort;\n        }\n        if (data.filter) {\n            result.$where = filterBuilder.build(data.filter);\n            delete data.filter;\n        }\n    }\n    return result;\n}\n\nvar regexOperations = ['startswith', 'startsWith', 'endswith', 'endsWith', 'contains'];\n\nvar filterBuilder = {\n    build: function (filter) {\n        return filterBuilder._build(filter);\n    },\n    _build: function (filter) {\n        if (filterBuilder._isRaw(filter)) {\n            return filterBuilder._raw(filter);\n        }\n        else if (filterBuilder._isSimple(filter)) {\n            return filterBuilder._simple(filter);\n        }\n        else if (filterBuilder._isRegex(filter)) {\n            return filterBuilder._regex(filter);\n        }\n        else if (filterBuilder._isAnd(filter)) {\n            return filterBuilder._and(filter);\n        }\n        else if (filterBuilder._isOr(filter)) {\n            return filterBuilder._or(filter);\n        }\n    },\n    _isRaw: function (filter) {\n        return filter.operator === '_raw';\n    },\n    _raw: function (filter) {\n        var fieldTerm = {};\n        fieldTerm[filter.field] = filter.value;\n        return fieldTerm;\n    },\n    _isSimple: function (filter) {\n        return typeof filter.logic === 'undefined' && !filterBuilder._isRegex(filter);\n    },\n    _simple: function (filter) {\n        var term = {}, fieldTerm = {};\n        var operator = filterBuilder._translateoperator(filter.operator);\n        if (operator) {\n            term[operator] = filter.value;\n        }\n        else {\n            term = filter.value;\n        }\n        fieldTerm[filter.field] = term;\n        return fieldTerm;\n    },\n    _isRegex: function (filter) {\n        return $.inArray(filter.operator, regexOperations) !== -1;\n    },\n    _regex: function (filter) {\n        var fieldTerm = {};\n        var regex = filterBuilder._getRegex(filter);\n        fieldTerm[filter.field] = filterBuilder._getRegexValue(regex);\n        return fieldTerm;\n    },\n    _getRegex: function (filter) {\n        var pattern = filter.value;\n        var filterOperator = filter.operator;\n        switch (filterOperator) {\n            case 'contains':\n                return new RegExp(\".*\" + pattern + \".*\", \"i\");\n            case 'startsWith': // removing the camel case operators will be a breaking change\n            case 'startswith': // the Kendo UI operators are in lower case\n                return new RegExp(\"^\" + pattern, \"i\");\n            case 'endsWith':\n            case 'endswith':\n                return new RegExp(pattern + '$', 'i');\n        }\n        throw new Error('Unknown operator type.');\n    },\n    _getRegexValue: function (regex) {\n        return QueryBuilder.prototype._getRegexValue.call(this, regex);\n    },\n    _isAnd: function (filter) {\n        return filter.logic === 'and';\n    },\n    _and: function (filter) {\n        var i, l, term, result = {$and: []};\n        var operands = filter.filters;\n        for (i = 0, l = operands.length; i < l; i++) {\n            term = filterBuilder._build(operands[i]);\n            result.$and.push(term);\n        }\n        return result;\n    },\n    _isOr: function (filter) {\n        return filter.logic === 'or';\n    },\n    _or: function (filter) {\n        var i, l, term, result = [];\n        var operands = filter.filters;\n        for (i = 0, l = operands.length; i < l; i++) {\n            term = filterBuilder._build(operands[i]);\n            result.push(term);\n        }\n        return {$or: result};\n    },\n    _translateoperator: function (operator) {\n        switch (operator) {\n            case 'eq':\n                return null;\n            case 'neq':\n                return '$ne';\n            case 'gt':\n                return '$gt';\n            case 'lt':\n                return '$lt';\n            case 'gte':\n                return '$gte';\n            case 'lte':\n                return '$lte';\n        }\n        throw new Error('Unknown operator type.');\n    }\n};\n\n/**\n * Creates a new Kendo UI [DataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource) that manages a certain {{site.tap}} content type.\n * Kendo UI [DataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource) is used in conjunction with other Kendo UI widgets (such as [ListView](http://docs.telerik.com/kendo-ui/web/listview/overview) and [Grid](http://docs.telerik.com/kendo-ui/web/grid/overview)) to provide an easy way to render data from {{site.tap}}.\n * *including Kendo UI scripts is required*.\n * @param options data source options. See the Kendo UI documentation for [DataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource) for more information.\n * @param options.transport.typeName The content type name in {{site.tap}} that will be managed.\n * @returns {DataSource} A new instance of Kendo UI DataSource. See the Kendo UI documentation for [DataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource) for more information.\n * @example ```js\n * var booksDataSource = Everlive.createDataSource({\n     *   transport: {\n     *     typeName: 'Books'\n     *   }\n     * });\n * ```\n */\nvar createDataSource = function (options: any = {}) {\n    return (<any>EverliveNoKendo.$).getKendoDataSource(options.typeName, options);\n};\n\n/**\n * Creates a new Kendo UI [HierarchicalDataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/hierarchicaldatasource) that manages a certain {{site.tap}} content type and can expand a chain of relations.\n * Kendo UI [HierarchicalDataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/hierarchicaldatasource) is used in conjunction with other Kendo UI widgets (such as [TreeView](http://docs.telerik.com/kendo-ui/web/treeview/overview)) to render data from {{site.tap}} in a structured way.\n * The chain of relations is defined by specifying the field names that contain the relation on each level. For example a generic hierarchy chain is a content type 'Continents' with relation to 'Countries', which in turn contains a relation to 'Towns'.\n * *including Kendo UI scripts is required*.\n * @param options data source Options for [HierarchicalDataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/hierarchicaldatasource).\n * @param options.typeName Name of the main content type for the data source.\n * @param {ExpandDefinition[]} options.expand An array of expand definitions. It defines the levels of hierarchy by specifying the relation fields. An expand definition can either be the field name as a **string**, or an **object** that allows additional options.\n * @param {string} ExpandDefinition - The field name of the relation that will be expanded. Only supported in online mode.\n * @param {string} ExpandDefinition.relation - *Required*. The field name of the relation that will be expanded.\n * @param {string} ExpandDefinition.typeName - *Required in offline mode*. The type name of the relation that will be expanded.\n * @param {object} ExpandDefinition.filter - An object specifying the filter expression.\n * @param {object} ExpandDefinition.sort - An object specifying the sort expression.\n * @param {object} ExpandDefinition.skip - A number specifying the skip value.\n * @param {object} ExpandDefinition.take - A number specifying the take value.\n * @param {object} ExpandDefinition.fields - An object specifying the fields expression.\n * @returns {HierarchicalDataSource} A new instance of Kendo UI HierarchicalDataSource. See the Kendo UI documentation for [HierarchicalDataSource](http://docs.telerik.com/kendo-ui/api/javascript/data/hierarchicaldatasource).\n * @example ```js\n * var el = new Everlive('your-api-key-here');\n * var continents = Everlive.createHierarchicalDataSource({\n *   'typeName': 'Continents',\n *   'expand': ['Countries', 'Towns']\n * });\n *\n * ...\n * ('#treeview').kendoTreeView({\n *   dataSource: continents,\n *   dataTextField: ['ContinentName', 'CountryName', 'TownName']\n * });\n * ```\n */\nvar createHierarchicalDataSource = function (options: any = {}) {\n    var typeName = options.typeName;\n    var everlive$ = options.dataProvider || EverliveNoKendo.$;\n    if (!everlive$) {\n        throw new Error('You need to instantiate an Everlive instance in order to create a Kendo UI DataSource.');\n    }\n    if (!typeName) {\n        throw new Error(\"You need to specify a 'typeName' in order to create a Kendo UI DataSource.\");\n    }\n    return everlive$.getHierarchicalDataSource(typeName, options);\n\n};\n\nclass KendoSdk extends Sdk {\n    /**\n     * Get a Kendo UI DataSource that is attached to the current instance of the SDK with default options.\n     * @method getKendoDataSource\n     * @memberOf Everlive.prototype\n     * @param {String} typeName The corresponding type name for the DataSource.\n     * @param {Object} [options] Additional DataSource options.\n     * @returns {DataSource}\n     */\n    getKendoDataSource(typeName: string, options: any = {}) {\n        var everlive$ = options.dataProvider || EverliveNoKendo.$;\n        if (!everlive$) {\n            throw new Error('You need to instantiate an Everlive instance in order to create a Kendo UI DataSource.');\n        }\n        if (!typeName) {\n            throw new Error(\"You need to specify a 'typeName' in order to create a Kendo UI DataSource.\");\n        }\n        if (options.serverGrouping) {\n            throw new Error(\"serverGrouping is not supported.\");\n        }\n        if (options.serverAggregates && !options.serverFiltering) {\n            throw new Error(\"The serverFiltering option must be enabled, when using serverAggregates.\");\n        }\n\n        var defaultEverliveOptions = {\n            type: 'everlive',\n            transport: {\n                typeName: typeName,\n                dataProvider: this\n            }\n        };\n\n        var options = _.defaults(defaultEverliveOptions, options);\n        return new kendo.data.DataSource(options);\n    }\n\n    /**\n     * Get a Kendo UI HierarchicalDataSource that is attached to the current instance of the SDK with default options.\n     * @method getHierarchicalDataSource\n     * @memberOf Everlive.prototype\n     * @param {String} typeName The corresponding type name for the DataSource.\n     * @param {Object} [dataSourceOptions] Additional DataSource options that describe the hierarchical structure.\n     * @returns {HierarchicalDataSource}\n     */\n    getHierarchicalDataSource(typeName: string, dataSourceOptions: any = {}) {\n        var expand = dataSourceOptions.expand || dataSourceOptions;\n        delete dataSourceOptions.expand;\n        if (!typeName) {\n            throw new Error(\"You need to specify a 'typeName' in order to create a Kendo UI HierarchicalDataSource.\");\n        }\n        if (!$.isArray(expand)) {\n            throw new Error(\"You need to set 'expand' array option in order to create a Kendo UI HierarchicalDataSource\");\n        }\n        var baseUrl = Utils.buildUrl(this.setup) + typeName;\n\n        var expandSchema;\n        var isOfflineStorageEnabled = Utils.isOfflineStorageEnabled(this.setup);\n        for (var i = expand.length - 1; i >= 0; i--) { //recursively build the hierarchical data source\n            var expandNode = expand[i];\n            if (isOfflineStorageEnabled) {\n                if (!$.isPlainObject(expandNode)) {\n                    throw new Error('When offline is enabled, each member of the expand array option must be an object. (Expand node index: ' + i + ')');\n                }\n                if (!expandNode.relation) {\n                    throw new Error('When offline is enabled, each member of the expand array option must have a `relation` option set.  (Expand node index: ' + i + ')');\n                }\n                if (!expandNode.typeName) {\n                    throw new Error('When offline is enabled, each member of the expand array option must have a `typeName` option set.  (Expand node index: ' + i + ')');\n                }\n\n                var headers;\n                var expandExpression = {};\n                expandExpression[expandNode.relation] = {\n                    TargetTypeName: expandNode.typeName,\n                    Filter: expandNode.filter,\n                    Sort: expandNode.sort,\n                    Take: expandNode.take,\n                    Skip: expandNode.skip,\n                    Fields: expandNode.fields,\n                    SingleField: expandNode.singleField\n                };\n                headers = {\n                    'X-Everlive-Expand': JSON.stringify(expandExpression),\n                    'X-Everlive-Single-Field': expandNode.relation\n                };\n                var parentType;\n                if (i === 0) {\n                    parentType = typeName;\n                } else {\n                    parentType = expand[i - 1].typeName;\n                }\n                expandSchema = {\n                    model: {\n                        hasChildren: expandNode.relation,\n                        children: {\n                            type: 'everlive',\n                            transport: {\n                                typeName: parentType,\n                                read: {\n                                    headers: headers\n                                }\n                            },\n                            schema: expandSchema\n                        }\n                    }\n                };\n            } else {\n                expandSchema = {\n                    model: {\n                        hasChildren: getRelationFieldForExpandNode(expandNode),\n                        children: {\n                            type: 'everlive',\n                            transport: {\n                                read: {\n                                    url: getUrlGeneratorForNode(baseUrl, expand.slice(0, i + 1)),\n                                    headers: getHeadersForExpandNode(expandNode)\n                                }\n                            },\n                            schema: expandSchema\n                        }\n                    }\n                }\n            }\n        }\n        var options: any = {};\n        options.type = 'everlive';\n        options.transport = {\n            typeName: typeName,\n            dataProvider: this\n        };\n        options.schema = expandSchema;\n        if ($.isPlainObject(dataSourceOptions)) {\n            extend(true, options, dataSourceOptions);\n        }\n        return new kendo.data.HierarchicalDataSource(options);\n    }\n\n    createDataSource(options:any = {}) {\n        return createDataSource(options);\n    }\n\n    createHierarchicalDataSource(options: any = {}) {\n        return createHierarchicalDataSource(options);\n    }\n}\n\nfunction getUrlGeneratorForNode(baseUrl, expandArray) {\n    var expandField = getRelationFieldForExpandNode(expandArray[expandArray.length - 1]);\n    var pathArray = expandArray.slice(0, expandArray.length - 1);\n    var pathUrl = '/_expand';\n    for (var i = 0; i < pathArray.length; i++) {\n        pathUrl += '/' + getRelationFieldForExpandNode(pathArray[i]);\n    }\n    return (function (pathUrl, expandField) {\n        return function (options) {\n            var url = baseUrl + '';\n            if (options.Id && expandField) {//if we are expanding\n                url += pathUrl + '/' + options.Id + '/' + expandField;\n            }\n            return url;\n        }\n    }(pathUrl, expandField));\n}\n\nfunction getHeadersForExpandNode(expandNode): any {\n    if (typeof expandNode === 'string') {\n        return {};\n    } else {\n        return {\n            'X-Everlive-Filter': JSON.stringify(expandNode.filter),\n            'X-Everlive-Sort': JSON.stringify(expandNode.sort),\n            'X-Everlive-Single-Field': expandNode.singleField,\n            'X-Everlive-Skip': expandNode.skip,\n            'X-Everlive-Take': expandNode.take,\n            'X-Everlive-Fields': JSON.stringify(expandNode.fields)\n        }\n    }\n}\n\nfunction getRelationFieldForExpandNode(expandNode) {\n    if (typeof expandNode === 'string') {\n        return expandNode;\n    } else {\n        if (expandNode.relation) {\n            return expandNode.relation;\n        } else {\n            throw new Error(\"You need to specify a 'relation' for an expand node when using the object notation\");\n        }\n    }\n}\n\n/** * passes Kendo-format aggregations to JS SDK */\nfunction _transformAggregatesKendoToEverlive(kendoAggregates, aggregateQuery) {\n    _.each(kendoAggregates, function (element: any) {\n        if (element.aggregate === 'count') {\n            aggregateQuery[element.aggregate](element.aggregate + aggrSeparator + element.field);\n        } else {\n            aggregateQuery[element.aggregate](element.field, element.aggregate + aggrSeparator + element.field);\n        }\n    });\n}\n\n/** * reformat server-response aggregations from Everlive API format to Kendo*/\nfunction _transformAggregatesEverliveToKendo(kendoAggregates, data) {\n    var aggrData = {};\n    _.each(kendoAggregates, function (element: any) {\n        if (!aggrData[element.field]) {\n            aggrData[element.field] = {};\n        }\n        aggrData[element.field][element.aggregate] = data[element.aggregate + aggrSeparator + element.field];\n    });\n    return _.isEmpty(aggrData) ? null : aggrData;\n}\n\nexport {\n    KendoSdk,\n    createDataSource,\n    createHierarchicalDataSource\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/kendo/kendo.everlive.ts\n **/","declare const FileTransfer: any;\n\nimport * as _ from 'underscore';\nimport * as path from 'path'; //TODO: not sure that this is correct, the typings just seem off\nimport { CryptoJS } from 'node-cryptojs-aes';\n\nimport { Utils } from '../utils';\nimport { reqwest } from '../reqwest.everlive';\nimport { EverliveErrors, EverliveError } from '../EverliveError';\nimport { AutoQueue } from '../AutoQueue';\nimport { Everlive } from '../Everlive';\n\n/**\n * @class OfflineFilesModule\n * @classdesc A class that provides the means to operate with files in offline mode.\n * @protected\n */\nexport class OfflineFilesModule {\n    private _downloadsQueue: AutoQueue;\n\n    constructor(\n        private _offlineFilesProcessor: any,\n        private _everlive: Everlive,\n        downloadsConcurrency: number|string) {\n\n        this._downloadsQueue = new AutoQueue(downloadsConcurrency);\n    }\n\n    _getFilenameMetadata (location, offlineFileInfo) {\n        return new Promise((resolve, reject) => {\n            reqwest({\n                url: location,\n                method: 'HEAD',\n                async: true,\n                crossDomain: true\n            }).then(xmlResponse => {\n                var contentDispositionHeader = xmlResponse.getResponseHeader('Content-Disposition');\n                if (contentDispositionHeader) {\n                    var matches = /filename=\"?([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"?/i.exec(contentDispositionHeader);\n                    if (_.isArray(matches)) {\n                        offlineFileInfo.filename = matches[1];\n                    }\n                } else {\n                    offlineFileInfo.filename = path.basename(xmlResponse.responseURL);\n                }\n\n                resolve(xmlResponse.responseURL);\n            }).catch(err => {\n                return reject(err);\n            });\n        });\n    }\n\n    /**\n     * Updates a file's content.\n     * @memberof OfflineFilesModule.prototype\n     * @method downloadOffline\n     * @param {string} location A file location or the id of a file stored in {{site.tap}}.\n     * @param {boolean} overwrite Boolean option that indicates whether the file should be overwritten if it already exists offline.\n     * @returns {Promise} The promise for the request\n     */\n    /**\n     * Updates a file's content.\n     * @memberof OfflineFilesModule.prototype\n     * @method downloadOffline\n     * @param {string} location A file location or the id of a file stored in {{site.tap}}.\n     * @param {boolean} overwrite Boolean option that indicates whether the file should be overwritten if it already exists offline.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    downloadOffline (location, overwrite, success, error) {\n        var self = this;\n\n        return Utils.buildPromise(function (success, error) {\n            self._downloadsQueue.enqueue(function (cb) {\n                var offlineFileInfo;\n                return self._getOfflineFileInfo(location)\n                    .then(function (_offlineFileInfo) {\n                        offlineFileInfo = _offlineFileInfo;\n                        if (overwrite) {\n                            return false;\n                        }\n\n                        return self.existsOffline(location);\n                    })\n                    .then(function (exists) {\n                        if (!exists) {\n                            if (self._everlive.isOnline()) {\n                                return Promise.resolve()\n                                    .then(function () {\n                                        if (!offlineFileInfo.filename) {\n                                            return self._getFilenameMetadata(location, offlineFileInfo);\n                                        }\n                                    })\n                                    .then(function (locationAfterRedirect) {\n                                        var location = locationAfterRedirect || offlineFileInfo.location;\n                                        return self._saveFile(location, offlineFileInfo.filename, null, offlineFileInfo.location);\n                                    });\n                            }\n\n                            error(new EverliveError(EverliveErrors.cannotDownloadOffline));\n                        } else {\n                            return self._getOfflineFileInfo(location)\n                                .then(function (fileInfo) {\n                                    return self._getOfflineLocation(fileInfo);\n                                });\n                        }\n                    })\n                    .then(function (result) {\n                        cb(null, result);\n                    })\n                    .catch(cb);\n            }, success, error);\n        }, success, error);\n    }\n\n    _saveFile (location, filename, id, cacheKey) {\n        var self = this;\n        var actualLocation;\n\n        return self._downloadFile(location, filename)\n            .then(function (_actualLocation) {\n                actualLocation = _actualLocation;\n                return self._offlineFilesProcessor.getOfflineFilesData();\n            })\n            .then(function (offlineFilesData) {\n                offlineFilesData.push({\n                    offlineLocation: actualLocation,\n                    onlineLocation: cacheKey || location,\n                    id: id\n                });\n\n                return self._offlineFilesProcessor.saveOfflineFilesData();\n            })\n            .then(function () {\n                return actualLocation;\n            });\n    }\n\n    /**\n     * Physically deletes the offline copies of all files.\n     * @memberof OfflineFilesModule.prototype\n     * @method purgeAll\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Physically deletes the offline copies of all files.\n     * @memberof OfflineFilesModule.prototype\n     * @method purgeAll\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    purgeAll (success, error) {\n        var self = this;\n\n        return Utils.buildPromise(function (success, error) {\n            self._offlineFilesProcessor.fileStore.removeFilesDirectory()\n                .then(function () {\n                    return self._offlineFilesProcessor.filesMetaStore.removeFilesDirectory();\n                })\n                .then(function () {\n                    self._offlineFilesProcessor._offlineFilesData = null;\n                })\n                .then(success)\n                .catch(error);\n        }, success, error);\n    }\n\n    _getOfflineLocation (fileInfo) {\n        var self = this;\n        var url = fileInfo.location;\n        var filename = fileInfo.filename;\n        var id = fileInfo.Id;\n\n        return self._offlineFilesProcessor.getOfflineLocation(url, id)\n            .then(function (offlineUrl) {\n                if (offlineUrl) {\n                    return offlineUrl;\n                }\n\n                // if no url is provided this means that the file exists only offline\n                // the Uri field has not been populated by the server\n                if (id && !url) {\n                    return self._getFileUrlForId(id, filename);\n                }\n\n                return null;\n            });\n    }\n\n    _downloadFile (url, name) {\n        var self = this;\n\n        // TODO: [offline] this will not work in NativeScript at the moment\n        return new Promise(function (resolve, reject) {\n            var fileTransfer = new FileTransfer();\n            var sanitizedUrl = self._sanitizeUrl(url);\n            var fileId = path.basename(sanitizedUrl);\n            var extension = path.extname(name);\n            var filename = fileId;\n            if (path.extname(sanitizedUrl) !== extension) {\n                filename += extension;\n            }\n\n            var fileParentDirectory = '';\n            if (!Utils.isGuid(url)) {\n                var fileIdIndex = url.lastIndexOf(fileId);\n                var baseUrl = url.substr(0, fileIdIndex);\n                fileParentDirectory = CryptoJS.MD5(baseUrl).toString();\n            }\n\n            return self._offlineFilesProcessor.fileStore.getDataDirectory()\n                .then(function (dataDir) {\n                    return Utils.joinPath(dataDir.nativeURL, self._offlineFilesProcessor.fileStore.filesDirectoryPath,\n                        fileParentDirectory, filename);\n                })\n                .then(function (location) {\n                    fileTransfer.download(url, location, function () {\n                        resolve(location);\n                    }, reject, true, {\n                        headers: self._everlive.buildAuthHeader()\n                    });\n                })\n                .catch(reject);\n        });\n    }\n\n    _sanitizeUrl (url) {\n        if (!url) {\n            return url;\n        }\n\n        var sanitizedUrl = encodeURI(url);\n        var questionMarkIndex = sanitizedUrl.lastIndexOf('?');\n        if (questionMarkIndex !== -1) {\n            sanitizedUrl = sanitizedUrl.substr(0, questionMarkIndex); //linux does not allow question marks in its filenames\n        }\n\n        return sanitizedUrl;\n    }\n\n    _getFileUrlForId (fileId, filename) {\n        var self = this;\n\n        return this._offlineFilesProcessor.fileStore.getDataDirectory()\n            .then(function (dataDirectory) {\n                var fileExtension = path.extname(filename);\n                return Utils.joinPath(dataDirectory.nativeURL, self._offlineFilesProcessor.fileStore.filesDirectoryPath, fileId + fileExtension);\n            });\n    }\n\n    /**\n     * Checks if a file exists offline.\n     * @memberof OfflineFilesModule.prototype\n     * @method exists\n     * @param {String} location The location or file id to check.\n     * @returns {Promise} The promise for the request\n     */\n    /**\n     * Checks if a file exists offline.\n     * @memberof OfflineFilesModule.prototype\n     * @method exists\n     * @param {String} location The location or file id to check.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    existsOffline (location, success?, error?) {\n        var self = this;\n\n        return Utils.buildPromise(function (success, error) {\n            self._getOfflineFileInfo(location)\n                .then(function (fileInfo) {\n                    return self._getOfflineLocation(fileInfo);\n                })\n                .then(function (offlineUrl) {\n                    if (offlineUrl) {\n                        return self._offlineFilesProcessor.fileStore.getFileByAbsolutePath(offlineUrl);\n                    }\n                })\n                .then(function (offlineFile) {\n                    return !!offlineFile;\n                })\n                .then(success)\n                .catch(function (err) {\n                    if (err.code === EverliveErrors.itemNotFound.code) {\n                        return success(false);\n                    }\n\n                    return error.apply(this, arguments);\n                });\n        }, success, error);\n    }\n\n\n    /**\n     * Physically deletes the offline copy of a file.\n     * @memberof OfflineFilesModule.prototype\n     * @method purge\n     * @param {String} location The location or file id to remove.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Physically deletes the offline copy of a file.\n     * @memberof OfflineFilesModule.prototype\n     * @method purge\n     * @param {String} location The location or file id to check.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    purge (location, success, error) {\n        var self = this;\n\n        return Utils.buildPromise(function (success, error) {\n            self._getOfflineFileInfo(location)\n                .then(function (fileInfo) {\n                    return self._getOfflineLocation(fileInfo);\n                })\n                .then(function (location) {\n                    if (location) {\n                        return self._offlineFilesProcessor.purge(location);\n                    }\n                })\n                .then(success)\n                .catch(error);\n        }, success, error);\n    }\n\n    /**\n     * Gets the native URL for a file that is stored offline.\n     * @memberof OfflineFilesModule.prototype\n     * @method getOfflineLocation\n     * @param {String} location The location or file id to process.\n     * @returns {Promise} The promise for the request\n     */\n    /**\n     * Gets the native URL for a file that is stored offline.\n     * @memberof OfflineFilesModule.prototype\n     * @method getOfflineLocation\n     * @param {String} location The location or file id to process.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    getOfflineLocation (location, success?, error?) {\n        var self = this;\n\n        return Utils.buildPromise(function (success, error) {\n            self._getOfflineFileInfo(location)\n                .then(self._getOfflineLocation.bind(self))\n                .then(function (offlineLocation) {\n                    if (offlineLocation) {\n                        return self.existsOffline(offlineLocation)\n                            .then(function (exists) {\n                                if (exists) {\n                                    return offlineLocation;\n                                }\n\n                                return null;\n                            });\n                    }\n\n                    return null;\n                })\n                .then(success)\n                .catch(error);\n        }, success, error);\n    }\n\n    _getOfflineFileInfo (location) {\n        var self = this;\n        var sanitizedUrl = this._sanitizeUrl(location);\n\n        return new Promise(function (resolve, reject) {\n            self._everlive.files\n                .isSync(true)\n                .useOffline(true)\n                .getById(sanitizedUrl)\n                .then(function (response) {\n                    var file = response.result;\n                    resolve({\n                        location: file.Uri,\n                        filename: file.Filename,\n                        Id: sanitizedUrl\n                    });\n                })\n                .catch(function (err) {\n                    if (err && err.code === EverliveErrors.itemNotFound.code) {\n                        resolve({\n                            location: location\n                        });\n                    } else {\n                        reject(err);\n                    }\n                });\n        });\n    }\n\n    changeFileExtensionById (id, extension) {\n        var self = this;\n\n        if (typeof extension !== 'string') {\n            return new Promise(function (resolve) {\n                resolve();\n            });\n        }\n\n        return self._changeExtension(id, extension);\n    }\n\n    _changeExtension (id, newExtension) {\n        var self = this;\n\n        var dataDir;\n\n        var fileStore = self._offlineFilesProcessor.fileStore;\n        var fileName = id + newExtension;\n        return fileStore.getFilesDirectory()\n            .then(function (directoryEntry) {\n                dataDir = directoryEntry;\n                return self.getOfflineLocation(id);\n            })\n            .then(function (localPath) {\n\n                var existingFileName = path.basename(localPath);\n                if (existingFileName !== fileName) {\n                    return fileStore.getFileByAbsolutePath(localPath)\n                        .then(function (fileEntry) {\n                            return fileStore.renameFile(dataDir, fileEntry, fileName);\n                        })\n                        .then(function () {\n                            return self._offlineFilesProcessor.getOfflineFilesData();\n                        })\n                        .then(function (offlineFilesData) {\n                            var mappedEntry: any = _.findWhere(offlineFilesData, {offlineLocation: localPath});\n                            if (!mappedEntry) {\n                                throw new EverliveError({message: 'Could not find a cached location for the specified file.'});\n                            }\n\n                            var previousLocation = mappedEntry.offlineLocation;\n                            var previousExtension = path.extname(previousLocation);\n                            var actualLocation = previousLocation.slice(0, previousLocation.length - previousExtension.length) + newExtension;\n                            mappedEntry.offlineLocation = actualLocation;\n\n                            return self._offlineFilesProcessor.saveOfflineFilesData();\n                        });\n                }\n            });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/OfflineFilesModule.ts\n **/","import * as _ from 'underscore';\nimport * as path from 'path'; //TODO: not sure that this is correct, the typings just seem off\n\nimport { EverliveError, EverliveErrors } from '../EverliveError';\nimport { FileStore, getFileStore } from '../storages/FileStore';\nimport * as platform from '../../common/platform';\nimport { Utils } from '../utils';\nimport { Everlive } from '../Everlive';\n\nconst FILES_METADATA_FILE_NAME = 'filesMetadataMap';\n\nexport class OfflineFilesProcessor {\n    fileStore:FileStore;\n    filesMetaStore:FileStore;\n\n    private _offlineFilesData:any;\n\n    constructor(public setup:any,\n                private _everlive:Everlive) {\n\n        this.fileStore = getFileStore(setup.files.storagePath, setup);\n        this.filesMetaStore = getFileStore(setup.files.metaPath, setup);\n    }\n\n    validateFileCreateObject(obj, isSync) {\n        return new Promise(function (resolve, reject) {\n            if (!obj.base64 && !isSync) {\n                return reject(new EverliveError(EverliveErrors.missingOrInvalidFileContent));\n            } else if (!obj.ContentType) {\n                return reject(new EverliveError(EverliveErrors.missingContentType));\n            } else if (!obj.Filename) {\n                //TODO: [offline] add an appropriate error\n                return reject(new EverliveError(EverliveErrors.invalidRequest));\n            }\n\n            resolve();\n        });\n    }\n\n    getOfflineFilesData() {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            if (!self._offlineFilesData) {\n                return self.filesMetaStore.getFile(FILES_METADATA_FILE_NAME)\n                    .then(function (metadataFileHandle) {\n                        return self.filesMetaStore.readFileAsText(metadataFileHandle);\n                    })\n                    .then(function (metadataText) {\n                        if (!metadataText) {\n                            metadataText = '[]';\n                        }\n\n                        self._offlineFilesData = JSON.parse(metadataText);\n                        resolve(self._offlineFilesData);\n                    }).catch(reject);\n            } else {\n                resolve(self._offlineFilesData);\n            }\n        });\n    }\n\n    saveOfflineFilesData() {\n        var self = this;\n\n        return self.getOfflineFilesData()\n            .then(function (offlineFilesData) {\n                return self.filesMetaStore.writeText(FILES_METADATA_FILE_NAME, JSON.stringify(offlineFilesData));\n            });\n    }\n\n    upsertFileFromObject(obj, isCreate, isSync): Promise<any> {\n        //TODO: make separate offline files processors when we start supporting nativescript\n        if (platform.isDesktop || platform.isNativeScript) {\n            //we will not support files in desktop and nativescript, only their metadata\n            return Promise.resolve();\n        }\n\n        var self = this;\n\n        if (!isSync) {\n            if (isCreate) {\n                if (!obj.base64) {\n                    return Promise.reject(new EverliveError(EverliveErrors.missingOrInvalidFileContent));\n                }\n\n                if (!obj.ContentType) {\n                    return Promise.reject(new EverliveError(EverliveErrors.missingContentType));\n                }\n            } else {\n                if (!obj.base64) {\n                    return Promise.resolve();\n                }\n            }\n        }\n\n        if (!obj.base64) {\n            var id = Utils.getId(obj);\n            var uri;\n            var downloadFilePromise = obj.Uri ? Promise.resolve(obj.Uri) :\n                self._everlive.files\n                    .isSync(isSync)\n                    .applyOffline(false)\n                    .getDownloadUrlById(id);\n\n            return downloadFilePromise.then(function (_uri) {\n                uri = _uri;\n                return self._everlive.offlineStorage.files.existsOffline(id);\n            }).then(function (exists) {\n                if (!exists) {\n                    return self._everlive.offlineStorage.files._saveFile(uri, obj.Filename);\n                }\n            });\n        }\n\n        obj.Storage = 'internal';\n        return Promise.resolve().then(function () {\n            if (!isSync) {\n                return self.validateFileCreateObject(obj, isSync);\n            }\n        }).then(function () {\n            var onlineLocation = obj.Uri;\n            var filename = self.getFilenameForObject(obj);\n\n            var offlineFileInfo;\n            var base64Contents = obj.base64;\n            delete obj.base64;\n\n            var contents = Utils.b64toBlob(base64Contents, obj.ContentType);\n\n            return self.writeFile(filename, contents)\n                .then(function (fileInfo) {\n                    offlineFileInfo = fileInfo;\n                    return self.getOfflineFilesData();\n                })\n                .then(function (offlineFilesData) {\n                    offlineFilesData.push({\n                        offlineLocation: offlineFileInfo.offlineLocation,\n                        onlineLocation: onlineLocation,\n                        id: obj._id\n                    });\n\n                    obj.Length = offlineFileInfo.size;\n                    return self.saveOfflineFilesData();\n                })\n                .then(() => offlineFileInfo.offlineLocation);\n        });\n    }\n\n    purge(localLocation) {\n        var self = this;\n\n        return this.getOfflineFilesData()\n            .then(function (offlineFilesData: any) {\n                var offlineFile = _.where(offlineFilesData, {offlineLocation: localLocation});\n\n                // TODO: [offline] check if the length of offlineFile === 0\n                var offlineInfoIndex = offlineFilesData.indexOf(offlineFile[0]);\n                if (offlineInfoIndex !== -1) {\n                    offlineFilesData.splice(offlineInfoIndex, 1);\n                }\n\n                return self.saveOfflineFilesData();\n            })\n            .then(function () {\n                return self.fileStore.getFileByAbsolutePath(localLocation);\n            }).then(function (file) {\n                if (file) {\n                    return self.fileStore.removeFile(file);\n                }\n            });\n    }\n\n    writeFile(filename, contents, folder?) {\n        var self = this;\n        var offlineLocation;\n\n        return self.fileStore.writeText(filename, contents, folder)\n            .then(function (locationOnDisk) {\n                offlineLocation = locationOnDisk;\n                return self.saveOfflineFilesData();\n            })\n            .then(function () {\n                return self.fileStore.getFileSize(filename, folder);\n            })\n            .then(function (size) {\n                return {\n                    size: size,\n                    offlineLocation: offlineLocation\n                };\n            });\n    }\n\n    getFilenameForObject(obj) {\n        var extension = path.extname(obj.Filename);\n        return obj._id + extension;\n    }\n\n    getOfflineLocation(url, id) {\n        return this.getOfflineFilesData()\n            .then(function (offlineFilesData: any[]) {\n                if (!url && !id) {\n                    return;\n                }\n\n                for (var i = 0; i < offlineFilesData.length; i++) {\n                    var fileEntry = offlineFilesData[i];\n                    var urlMatches = (url && (fileEntry.offlineLocation === url || fileEntry.onlineLocation === url));\n                    var idMatches = (id && fileEntry.id === id);\n                    if (urlMatches || idMatches) {\n                        return fileEntry.offlineLocation;\n                    }\n                }\n            });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/OfflineFilesProcessor.ts\n **/","declare const FileTransfer: any;\n\nimport * as _ from 'underscore';\n\nimport { DataQuery } from '../dataQuery/DataQuery';\nimport { EverliveError, EverliveErrors } from '../EverliveError';\nimport { Constants } from '../constants';\nimport { RequestOptionsBuilder } from '../query/RequestOptionsBuilder';\nimport { Utils } from '../utils';\nimport { Request } from '../Request';\nimport { offlineTransformations } from './offlineTransformations';\nimport { OfflineQueryProcessor } from './processors/OfflineQueryProcessor';\nimport { OfflineFilesProcessor } from './OfflineFilesProcessor';\nimport { OfflineFilesModule } from './OfflineFilesModule';\nimport { Query } from '../query/Query';\nimport { RequestService } from '../services/RequestService';\nimport { Everlive } from '../Everlive';\nimport { Persister } from './persisters/Persister';\nimport { CryptographicProvider } from '../encryption/CryptographicProvider';\nimport { OfflineInMemoryQueryProcessor } from './processors/OfflineInMemoryQueryProcessor';\nimport { OfflineSQLiteQueryProcessor } from './processors/OfflineSQLiteQueryProcessor';\n\nconst syncLocation = {\n    server: 'server',\n    client: 'client'\n};\n\nfunction getSyncFilterForItem(item) {\n    var filter: any = getSyncFilterNoModifiedAt(item);\n    filter.ModifiedAt = item.ModifiedAt;\n    return filter;\n}\n\nfunction getSyncFilterNoModifiedAt(item) {\n    return {\n        Id: item.Id\n    }\n}\n\n\nfunction getQueryProcessor(persister: Persister, _encryptionProvider: CryptographicProvider, offlineFilesProcessor: OfflineFilesProcessor, everlive: Everlive, options: any):OfflineQueryProcessor {\n    let queryProcessor;\n    const storageProvider = options.storage.provider;\n    switch (storageProvider) {\n        case Constants.StorageProvider.LocalStorage:\n        case Constants.StorageProvider.FileSystem:\n        case Constants.StorageProvider.Custom:\n            queryProcessor = new OfflineInMemoryQueryProcessor(persister, _encryptionProvider, offlineFilesProcessor, everlive, options);\n            break;\n        case Constants.StorageProvider.SQLite:\n            queryProcessor = new OfflineSQLiteQueryProcessor(persister, _encryptionProvider, offlineFilesProcessor, everlive, options);\n            break;\n        default:\n            throw new EverliveError({message: 'Unsupported storage type ' + storageProvider});\n    }\n\n    return queryProcessor;\n}\n\n/**\n * @class OfflineModule\n * @classDesc A class providing access to the various offline storage features.\n */\n\n/**\n * Represents the {@link OfflineModule} class.\n * @memberOf Everlive.prototype\n * @member {OfflineModule} offlineStorage\n */\nexport class OfflineStorageModule {\n    private _isSynchronizing: boolean = false;\n    private _syncResultInfo: any;\n\n    offlineFilesProcessor: OfflineFilesProcessor;\n    queryProcessor: OfflineQueryProcessor;\n\n    /**\n     * @memberOf OfflineModule.prototype\n     * @instance\n     * @description An instance of the [OfflineFilesModule]{@link OfflineFilesModule} class for working with files in offline mode.\n     * @member {OfflineFilesModule} files\n     */\n    files: any;\n\n    constructor(\n        private _everlive: Everlive,\n        public options: any,\n        persister: Persister,\n        private _encryptionProvider: CryptographicProvider\n    ) {\n\n        this.offlineFilesProcessor = new OfflineFilesProcessor(this.options, this._everlive);\n        this.queryProcessor = getQueryProcessor(persister, _encryptionProvider,\n            this.offlineFilesProcessor, this._everlive, this.options);\n\n        this.files = new OfflineFilesModule(this.offlineFilesProcessor, this._everlive,\n            this.options.files.maxConcurrentDownloads);\n\n    }\n\n    /**\n     * Removes all data from the offline storage. If caching is enabled clears the entire cache as well.\n     * @method purgeAll\n     * @name purgeAll\n     * @memberOf OfflineModule.prototype\n     * @param {function} [success] A success callback.\n     * @param {function} [error] An error callback.\n     */\n    /**\n     * Removes all data from the offline storage. If caching is enabled clears the entire cache as well.\n     * @method purgeAll\n     * @name purgeAll\n     * @memberOf OfflineModule.prototype\n     * @returns {Promise}\n     */\n    purgeAll(success, error) {\n        return this.queryProcessor.purgeAll(success, error);\n    }\n\n    /**\n     * Removes all data for a specific content type from the offline storage. If caching is enabled clears the cache\n     * for the specified content type as well.\n     * @method purge\n     * @name purge\n     * @memberOf OfflineModule.prototype\n     * @param {string} contentType The content type to purge.\n     * @param {function} [success] A success callback.\n     * @param {function} [error] An error callback.\n     */\n    /**\n     * Removes all data for a specific content type from the offline storage. If caching is enabled clears the cache\n     * for the specified content type as well.\n     * @method purge\n     * @name purge\n     * @memberOf OfflineModule.prototype\n     * @param {string} contentType The content type to purge.\n     * @returns {Promise}\n     */\n    purge(contentType, success, error) {\n        return this.queryProcessor.purge(contentType, success, error);\n    }\n\n    processQuery(query): Promise<any> {\n        return this.queryProcessor.processQuery(query);\n    }\n\n    _setOffline(offline) {\n        this.options.offline = offline;\n    }\n\n    isOnline(): boolean {\n        return !this.options.offline;\n    }\n\n    _prepareSyncData(contentTypesForSync) {\n        var self = this;\n\n        var contentTypesSyncData = {};\n        var conflicts = [];\n        _.each(contentTypesForSync, function(contentType: any, typeName: any) {\n            var syncItems = offlineTransformations.idTransform(contentType.offlineItemsToSync);\n            var syncData = self._getSyncItemStates(typeName, syncItems, contentType.serverItems);\n            conflicts.push(syncData.conflicts);\n            contentTypesSyncData[typeName] = syncData.itemsForSync;\n        });\n\n        return {\n            conflicts: conflicts,\n            contentTypesSyncData: contentTypesSyncData\n        };\n    }\n\n    _resolveConflicts(syncData) {\n        var self = this;\n        return this._applyResolutionStrategy(syncData.conflicts)\n            .then(function() {\n                return self._mergeResolvedConflicts(syncData.conflicts, syncData.contentTypesSyncData);\n            })\n            .then(function() {\n                return syncData.contentTypesSyncData;\n            });\n    }\n\n    isSynchronizing() {\n        return this._isSynchronizing;\n    }\n\n    _fireSyncStart() {\n        var self = this;\n\n        return new Promise(function(resolve) {\n            if (!self._isSynchronizing) {\n                self._isSynchronizing = true;\n                self._everlive.emit(Constants.Events.SyncStart);\n                resolve();\n            } else {\n                resolve();\n            }\n        });\n    }\n\n    _fireSyncEnd() {\n        this._isSynchronizing = false;\n        this._everlive.emit(Constants.Events.SyncEnd, this._syncResultInfo);\n        this._syncResultInfo = null;\n    }\n\n    _eachSyncItem(items: any, getFilterFunction: Function, contentTypeName: string, operation: Function) {\n        var self = this;\n\n        _.each(items, function(item: any) {\n            var itemFilter = getFilterFunction(item.remoteItem);\n            // if we already have an error for this item we do not want to try and sync it again\n            var resultItem = item.resultingItem;\n            var isCustom = item.isCustom;\n            var resolutionType = item.resolutionType;\n            if ((<any>_).some(self._syncResultInfo.failedItems[contentTypeName], {\n                    itemId: resultItem.Id\n                })) {\n                return;\n            }\n\n            operation(resultItem, itemFilter, isCustom, resolutionType);\n        });\n    }\n\n    _shouldAutogenerateIdForContentType(collectionName) {\n        return this.queryProcessor._shouldAutogenerateIdForContentType(collectionName);\n    }\n\n    _addCreatedFileToSyncPromises(resultingItemsForCreate: any, syncPromises: any, collectionName: string) {\n        var self = this;\n\n        _.each(resultingItemsForCreate, function(item: any) {\n            var filesCollection = self._everlive.files;\n            syncPromises[item.Id] = new Promise(function(resolve, reject) {\n                self.files.getOfflineLocation(item.Id)\n                    .then(function(location) {\n                        if (location) {\n                            return self._transferFile(false, item, location);\n                        }\n                    }, function(err) {\n                        reject({\n                            type: Constants.offlineItemStates.created,\n                            items: item,\n                            contentType: collectionName,\n                            error: err,\n                            storage: syncLocation.server\n                        });\n                    })\n                    .then(function(res) {\n                        var mergedWithServerResponseItem = _.extend({}, item, res.result);\n                        self._onItemProcessed(mergedWithServerResponseItem, collectionName, syncLocation.server, Constants.offlineItemStates.created);\n                        return filesCollection\n                            .isSync(true)\n                            .useOffline(true)\n                            .updateSingle(mergedWithServerResponseItem);\n                    }, function(err) {\n                        reject({\n                            type: Constants.offlineItemStates.created,\n                            items: item,\n                            contentType: collectionName,\n                            error: err,\n                            storage: syncLocation.server\n                        });\n                    })\n                    .then(resolve, function(err) {\n                        reject({\n                            type: Constants.offlineItemStates.modified,\n                            items: item,\n                            contentType: collectionName,\n                            error: err,\n                            storage: syncLocation.client\n                        });\n                    });\n            });\n        });\n    }\n\n    _transferFile(isUpdate: boolean, item: any, location: string) {\n        var sdk = this._everlive;\n\n        return new Promise(function(resolve, reject) {\n            var self = this;\n            var uploadUrl = sdk.files.getUploadUrl();\n            var fileExistsPromise = Promise.resolve();\n\n            if (isUpdate) {\n                fileExistsPromise = new Promise(function(resolve) {\n                    sdk.files\n                        .isSync(true)\n                        .applyOffline(false)\n                        .getById(item.Id)\n                        .then(function() {\n                            resolve(true);\n                        })\n                        .catch(function() {\n                            resolve(false);\n                        });\n                });\n            }\n\n            fileExistsPromise.then(function(fileExistsOnServer) {\n                var canUpdate = isUpdate && fileExistsOnServer;\n                if (canUpdate) {\n                    uploadUrl += '/' + item.Id + '/Content';\n                }\n\n                var fileTransfer = new FileTransfer();\n                var fileKey = Constants.fileUploadKey;\n                var options = {\n                    fileKey: fileKey,\n                    httpMethod: canUpdate ? 'PUT' : 'POST',\n                    mimeType: item.ContentType,\n                    fileName: item.Filename,\n                    headers: sdk.buildAuthHeader(),\n                    params: {}\n                };\n\n                _.each(item, function(value: string, key: string) {\n                    if (key.toLowerCase() !== 'base64') {\n                        var prefixedKey = Constants.fileUploadKey + Constants.fileUploadDelimiter + key;\n                        options.params[prefixedKey] = value;\n                    }\n                });\n\n                fileTransfer.upload(location, uploadUrl, function(result) {\n                    var parsedResult = Utils.parseUtilities.parseJSON(result.response);\n                    if (parsedResult.Result === false) {\n                        reject.apply(self, arguments);\n                    } else if (_.isArray(parsedResult.Result)) {\n                        resolve({\n                            result: parsedResult.Result[0]\n                        })\n                    } else {\n                        resolve(parsedResult);\n                    }\n                }, reject, options, true);\n            });\n        });\n    }\n\n    _addCreatedObjectToSyncPromises(syncPromises: any, dataCollection: any, resultingItemsForCreate: any, contentTypeData: any, collectionName: string, ids: any) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            dataCollection\n                .isSync(true)\n                .applyOffline(false)\n                .create(resultingItemsForCreate)\n                .then(function(res: any) {\n                    resultingItemsForCreate = _.map(resultingItemsForCreate, function(item: any, index: number) {\n                        item.Id = res.result[index].Id;\n                        item.CreatedAt = item.ModifiedAt = res.result[index].CreatedAt;\n                        var resultingItem: any = _.find(contentTypeData.createdItems, function(createdItem: any) {\n                            return createdItem.resultingItem.Id === item.Id;\n                        });\n\n                        if (resultingItem.isCustom) {\n                            self._onItemProcessed(item, collectionName, syncLocation.client, Constants.offlineItemStates.modified);\n                        }\n\n                        return item;\n                    });\n                }, function(err: any) {\n                    const error = err.error || err;\n                    throw {\n                        type: Constants.offlineItemStates.created,\n                        items: resultingItemsForCreate,\n                        contentType: collectionName,\n                        error: error,\n                        storage: syncLocation.server\n                    };\n                })\n                .then(function() {\n                    return dataCollection\n                        .isSync(true)\n                        .useOffline(true)\n                        .create(resultingItemsForCreate)\n                        .then(function() {\n                            _.each(resultingItemsForCreate, function(createdItem) {\n                                self._onItemProcessed(createdItem, collectionName, syncLocation.server,\n                                    Constants.offlineItemStates.created);\n                            });\n                        }, function(err) {\n                            throw {\n                                type: Constants.offlineItemStates.created,\n                                items: resultingItemsForCreate,\n                                contentType: collectionName,\n                                error: err,\n                                storage: syncLocation.client\n                            };\n                        });\n                })\n                .then(function() {\n                    if (ids && ids.length) {\n                        var filter = {\n                            Id: {\n                                $in: ids\n                            }\n                        };\n                        return dataCollection\n                            .isSync(true)\n                            .useOffline(true)\n                            .destroy(filter)\n                            .catch(function(err) {\n                                throw {\n                                    type: Constants.offlineItemStates.created,\n                                    items: resultingItemsForCreate,\n                                    contentType: collectionName,\n                                    error: err,\n                                    storage: syncLocation.client\n                                };\n                            });\n                    }\n                })\n                .then(resolve)\n                .catch(function(err) {\n                    reject(err);\n                });\n        });\n\n        _.each(resultingItemsForCreate, function(item: any) {\n            syncPromises[item.Id] = promise;\n        });\n\n        return resultingItemsForCreate;\n    }\n\n    _addCreatedItemsForSync(contentTypeData, syncPromises, dataCollection) {\n        var collectionName = dataCollection.collectionName;\n\n        var resultingItemsForCreate = _.pluck(contentTypeData.createdItems, 'resultingItem');\n        var ids;\n        if (!this._shouldAutogenerateIdForContentType(collectionName)) {\n            ids = _.pluck(resultingItemsForCreate, 'Id');\n            resultingItemsForCreate = offlineTransformations.removeIdTransform(resultingItemsForCreate);\n        }\n\n        if (Utils.isContentType.files(collectionName)) {\n            return this._addCreatedFileToSyncPromises(resultingItemsForCreate, syncPromises, collectionName);\n        } else {\n            return this._addCreatedObjectToSyncPromises(syncPromises, dataCollection, resultingItemsForCreate, contentTypeData, collectionName, ids);\n        }\n    }\n\n    _addUpdatedItemsForSync(contentTypeData, getFilterOperation, syncPromises, dataCollection, itemUpdateOperation) {\n        var self = this;\n        var collectionName = dataCollection.collectionName;\n        self._eachSyncItem(contentTypeData.modifiedItems, getFilterOperation, collectionName, itemUpdateOperation);\n    }\n\n    _addDeletedItemsForSync(contentTypeData, getFilterOperation, syncPromises, dataCollection, itemDeleteOperation) {\n        var self = this;\n\n        var collectionName = dataCollection.collectionName;\n        self._eachSyncItem(contentTypeData.deletedItems, getFilterOperation, collectionName, itemDeleteOperation);\n    }\n\n    _onSyncResponse(res: any, item: any, collectionName: string, operation: any, isCustomItem: boolean): any {\n        var self = this;\n\n        if (res.result !== 1) {\n            return new Promise(function(resolve, reject) {\n                reject(_.extend({}, EverliveErrors.syncConflict, {\n                    contentType: collectionName\n                }));\n            });\n        } else {\n            if (operation === DataQuery.operations.Update) {\n                self._onItemProcessed(item, collectionName, syncLocation.server, Constants.offlineItemStates.modified);\n                var updatedItem = _.extend({}, item, {\n                    ModifiedAt: res.ModifiedAt\n                });\n\n                //TODO: use the new way of building DataQueries\n\n                var updateQuery = new DataQuery({\n                    operation: operation,\n                    data: updatedItem,\n                    additionalOptions: {\n                        id: item.Id\n                    },\n                    meta: {\n                        collectionName: collectionName,\n                    },\n                    isSync: true\n                });\n\n                return this.processQuery(updateQuery)\n                    .then(function() {\n                        if (isCustomItem) {\n                            var existingItem = _.find(self._syncResultInfo.syncedItems[collectionName], function(syncedItem: any) {\n                                return syncedItem.itemId === item.Id;\n                            });\n\n                            if (!existingItem) {\n                                self._onItemProcessed(item, collectionName, syncLocation.client, Constants.offlineItemStates.modified);\n                            }\n                        }\n                    });\n            } else if (operation === DataQuery.operations.Delete) {\n                self._onItemProcessed(item, collectionName, syncLocation.server, Constants.offlineItemStates.deleted);\n                return this._purgeById(collectionName, item.Id)\n                    .then(function() {\n                        if (isCustomItem) {\n                            self._onItemProcessed(item, collectionName, syncLocation.client, Constants.offlineItemStates.deleted);\n                        }\n                    });\n            }\n        }\n    }\n\n    _purgeById(contentType, itemId):Promise<any> {\n        return this.queryProcessor.purgeById(contentType, itemId);\n    }\n\n    sync() {\n        var self = this;\n        self._syncResultInfo = self._syncResultInfo || {\n                syncedItems: {},\n                syncedToServer: 0,\n                syncedToClient: 0,\n                failedItems: {},\n                error: undefined // added for visibility\n            };\n\n        if (!this.isOnline()) {\n            throw new EverliveError({message: 'Cannot synchronize while offline'});\n        }\n\n        self._fireSyncStart()\n            .then(function() {\n                return self._applySync();\n            })\n            .then(function(syncResults) {\n                var conflictsWhileSync = [];\n                _.each(syncResults, function(syncResult: any, itemId: any) {\n                    if (syncResult && syncResult.state === 'rejected') {\n                        if (syncResult.reason && syncResult.reason.code === EverliveErrors.syncConflict.code) {\n                            conflictsWhileSync.push(syncResult);\n                        } else {\n                            // to save time and traffic we are using a single create request for all items\n                            // this is why if there is an error we need to split the items we tried to create\n                            // and set the same error for all items.\n                            self._onItemFailed(syncResult, itemId);\n                        }\n                    }\n                });\n\n                if (conflictsWhileSync.length) {\n                    return self.sync();\n                } else {\n                    self._fireSyncEnd();\n                }\n            })\n            .catch(function(err) {\n                if (!err) {\n                    err = new EverliveError(EverliveErrors.syncErrorUnknown);\n                }\n                self._syncResultInfo.error = err;\n                self._fireSyncEnd();\n            });\n    }\n\n    _handleKeepServer(typeName, conflictingItem, offlineSyncOperations, contentTypeSyncData) {\n        var self = this;\n\n        var serverItem = conflictingItem.serverItem;\n        var clientItem = conflictingItem.clientItem;\n        var syncQuery;\n        if (serverItem && clientItem) {\n            // update the item offline\n            syncQuery = new DataQuery({\n                meta: {\n                    collectionName: typeName,\n                },\n                operation: DataQuery.operations.Update,\n                additionalOptions: {\n                    id: serverItem.Id\n                },\n                data: serverItem\n            });\n        } else if (serverItem && !clientItem) {\n            // create item offline\n            syncQuery = new DataQuery({\n                meta: {\n                    collectionName: typeName,\n                },\n                operation: DataQuery.operations.Create,\n                data: serverItem\n            });\n        } else if (!serverItem && clientItem) {\n            // delete item offline\n            syncQuery = new DataQuery({\n                meta: {\n                    collectionName: typeName,\n                },\n                operation: DataQuery.operations.DeleteById,\n                additionalOptions: {\n                    id: clientItem.Id\n                }\n            });\n        } else {\n            throw new EverliveError({message: 'Both serverItem and clientItem are not set when syncing data with \"KeepServer\" resolution strategy.'});\n        }\n\n        syncQuery.isSync = true;\n        offlineSyncOperations.push(new Promise(function(resolve, reject) {\n            self.processQuery(syncQuery)\n                .then(function() {\n                    switch (syncQuery.operation) {\n                        case DataQuery.operations.Update:\n                            self._onItemProcessed(serverItem, typeName, syncLocation.client, Constants.offlineItemStates.modified);\n                            // the files content type is special and needs to enable the file contents offline, so we cannot only\n                            // update the data\n                            if (Utils.isContentType.files(typeName)) {\n                                contentTypeSyncData.modifiedItems.push({\n                                    remoteItem: conflictingItem.serverItem,\n                                    resultingItem: serverItem,\n                                    resolutionType: Constants.ConflictResolution.KeepServer\n                                });\n                            }\n                            break;\n                        case DataQuery.operations.Create:\n                            self._onItemProcessed(serverItem, typeName, syncLocation.client, Constants.offlineItemStates.created);\n                            break;\n                        case DataQuery.operations.DeleteById:\n                            self._onItemProcessed(clientItem, typeName, syncLocation.client, Constants.offlineItemStates.deleted);\n                            break;\n                    }\n                    resolve();\n                }, function(err) {\n                    var itemId;\n                    var operation;\n                    switch (syncQuery.operation) {\n                        case DataQuery.operations.Update:\n                            itemId = serverItem.Id;\n                            operation = Constants.offlineItemStates.modified;\n                            break;\n                        case DataQuery.operations.Create:\n                            itemId = serverItem.Id;\n                            operation = Constants.offlineItemStates.created;\n                            break;\n                        case DataQuery.operations.DeleteById:\n                            itemId = clientItem.Id;\n                            operation = Constants.offlineItemStates.deleted;\n                            break;\n                    }\n\n                    reject({\n                        itemId: itemId,\n                        type: operation,\n                        contentType: syncQuery.collectionName,\n                        error: err,\n                        storage: syncLocation.client\n                    })\n                })\n        }));\n    }\n\n    _handleKeepClient(conflictingItem, contentTypeSyncData) {\n        var serverItem = conflictingItem.serverItem;\n        var clientItem = conflictingItem.clientItem;\n        var resultingItem;\n        var collection;\n\n        if (serverItem && clientItem) {\n            resultingItem = _.extend(clientItem, {\n                ModifiedAt: new Date(serverItem.ModifiedAt)\n            });\n            collection = contentTypeSyncData.modifiedItems;\n        } else if (serverItem && !clientItem) {\n            resultingItem = serverItem;\n            collection = contentTypeSyncData.deletedItems;\n        } else if (!serverItem && clientItem) {\n            resultingItem = clientItem;\n            collection = contentTypeSyncData.createdItems;\n        } else {\n            throw new EverliveError({message: 'Both serverItem and clientItem are not set when syncing data with \"KeepClient\" resolution strategy.'});\n        }\n\n        collection.push({\n            remoteItem: conflictingItem.serverItem,\n            resultingItem: resultingItem,\n            resolutionType: Constants.ConflictResolution.KeepClient\n        });\n    }\n\n    _handleCustom(conflictingItem, typeName, offlineSyncOperations, contentTypeSyncData) {\n        var serverItem = conflictingItem.serverItem;\n        var clientItem = conflictingItem.clientItem;\n        var customItem = _.omit(conflictingItem.result.item, 'CreatedAt', 'ModifiedAt');\n        if (serverItem && customItem) {\n            var createItemOfflineQuery = new DataQuery({\n                meta: {\n                    collectionName: typeName\n                },\n                operation: DataQuery.operations.Create,\n                data: serverItem, // create the server item offline and it will be updated when sync finishes\n                preserveState: true,\n                isSync: true\n            });\n\n            offlineSyncOperations.push(this.processQuery(createItemOfflineQuery));\n\n            this._onItemProcessed(serverItem, typeName, syncLocation.client, Constants.offlineItemStates.created);\n        }\n\n        if (serverItem && customItem && !clientItem) {\n            customItem.Id = serverItem.Id;\n            contentTypeSyncData.modifiedItems.push({\n                remoteItem: serverItem,\n                resultingItem: customItem,\n                isCustom: true\n            });\n        } else if (serverItem && !customItem) {\n            contentTypeSyncData.deletedItems.push({\n                remoteItem: conflictingItem.serverItem,\n                resultingItem: serverItem,\n                isCustom: true\n            });\n        } else if (!serverItem && customItem && clientItem) {\n            var updateItemOfflineQuery = new DataQuery({\n                meta: {\n                    collectionName: typeName\n                },\n                operation: DataQuery.operations.Update,\n                data: customItem,\n                additionalOptions: {\n                    id: clientItem.Id\n                }\n            });\n\n            offlineSyncOperations.push(this.processQuery(updateItemOfflineQuery));\n            customItem.Id = clientItem.Id;\n\n            contentTypeSyncData.createdItems.push({\n                remoteItem: serverItem,\n                resultingItem: customItem,\n                isCustom: true\n            });\n        } else {\n            customItem.Id = serverItem.Id;\n            contentTypeSyncData.modifiedItems.push({\n                remoteItem: serverItem,\n                resultingItem: customItem,\n                isCustom: true\n            });\n        }\n    }\n\n    _mergeResolvedConflicts(conflicts: any, syncData: any) {\n        var self = this;\n\n        var offlineSyncOperations = [];\n        _.each(conflicts, function(conflict: any) {\n            var typeName = conflict.contentTypeName;\n            _.each(conflict.conflictingItems, function(conflictingItem: any) {\n                var contentTypeSyncData = syncData[typeName];\n                switch (conflictingItem.result.resolutionType) {\n                    case Constants.ConflictResolution.KeepServer:\n                        self._handleKeepServer(typeName, conflictingItem, offlineSyncOperations, contentTypeSyncData);\n                        break;\n                    case Constants.ConflictResolution.KeepClient:\n                        self._handleKeepClient(conflictingItem, contentTypeSyncData);\n                        break;\n                    case Constants.ConflictResolution.Custom:\n                        if (Utils.isContentType.files(typeName)) {\n                            throw new EverliveError(EverliveErrors.customFileSyncNotSupported);\n                        }\n\n                        self._handleCustom(conflictingItem, typeName, offlineSyncOperations, contentTypeSyncData);\n                        break;\n                    case Constants.ConflictResolution.Skip:\n                        break;\n                }\n            });\n        });\n\n        return Promise.all(offlineSyncOperations);\n    }\n\n    _getSyncItemStates(contentType, offlineItems, serverItems) {\n        var self = this;\n\n        var contentTypeSyncData = {\n            itemsForSync: {\n                createdItems: [],\n                modifiedItems: [],\n                modifiedItemsOnServer: [],\n                deletedItems: [],\n                deletedItemsOnServer: []\n            },\n            conflicts: {\n                contentTypeName: contentType,\n                conflictingItems: []\n            }\n        };\n\n        _.each(offlineItems, function(offlineItem: any) {\n            var serverItem: any = _.findWhere(serverItems, {\n                Id: offlineItem.Id\n            });\n            if (serverItem) {\n                if (serverItem.Id === offlineItem.Id && offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.created) {\n                    if (self.options.conflicts.strategy === Constants.ConflictResolutionStrategy.Custom) {\n                        self._onItemFailed({\n                            type: Constants.offlineItemStates.modified,\n                            storage: syncLocation.client,\n                            error: new EverliveError(EverliveErrors.syncError),\n                            contentType: contentType\n                        }, offlineItem.Id);\n\n                        return self._onItemFailed({\n                            type: Constants.offlineItemStates.modified,\n                            storage: syncLocation.server,\n                            error: new EverliveError(EverliveErrors.syncError),\n                            contentType: contentType\n                        }, serverItem.Id);\n                    } else {\n                        return self._onItemFailed({\n                            type: Constants.offlineItemStates.created,\n                            storage: syncLocation.client,\n                            error: new EverliveError(EverliveErrors.syncError),\n                            contentType: contentType\n                        }, serverItem.Id);\n                    }\n                }\n\n                var clientItemChanged = !!offlineItem[Constants.offlineItemsStateMarker];\n                var hasUpdateConflict = false;\n\n                if (clientItemChanged) {\n                    hasUpdateConflict = serverItem.ModifiedAt.getTime() !== offlineItem.ModifiedAt.getTime() || offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.deleted;\n                    //TODO: when an item is removed offline its ModifiedAt field is not set, check if it needs to be set or we can use this\n                }\n\n                if (hasUpdateConflict) {\n                    contentTypeSyncData.conflicts.conflictingItems.push({\n                        // if the item was modified on the server and deleted locally we have a conflict and set the client item to null\n                        // otherwise it is a simple modification conflict\n                        clientItem: offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.deleted ? null : offlineItem,\n                        serverItem: serverItem,\n                        result: {}\n                    });\n                } else {\n                    if (offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.deleted) {\n                        contentTypeSyncData.itemsForSync.deletedItems.push({\n                            remoteItem: serverItem,\n                            resultingItem: offlineItem\n                        });\n                    } else if (offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.modified) {\n                        contentTypeSyncData.itemsForSync.modifiedItems.push({\n                            remoteItem: serverItem,\n                            resultingItem: offlineItem\n                        });\n                    } else if (offlineItem[Constants.offlineItemsStateMarker] === undefined || offlineItem[Constants.offlineItemsStateMarker] === null) {\n                        contentTypeSyncData.itemsForSync.modifiedItemsOnServer.push(serverItem);\n                    } else {\n                        contentTypeSyncData.itemsForSync.modifiedItems.push({\n                            remoteItem: serverItem,\n                            resultingItem: serverItem\n                        });\n                    }\n                }\n            } else {\n                // if the item in memory has been modified, but the item on the server has been deleted\n                if (offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.modified) {\n                    contentTypeSyncData.conflicts.conflictingItems.push({\n                        clientItem: offlineItem,\n                        serverItem: null,\n                        result: {}\n                    });\n                } else if (offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.created) {\n                    contentTypeSyncData.itemsForSync.createdItems.push({\n                        remoteItem: serverItem,\n                        resultingItem: offlineItem\n                    });\n                } else {\n                    contentTypeSyncData.itemsForSync.deletedItemsOnServer.push(offlineItem);\n                }\n            }\n\n            delete offlineItem[Constants.offlineItemsStateMarker];\n        });\n\n        return contentTypeSyncData;\n    }\n\n    _setResolutionTypeForItem(resolutionType, conflictingItem) {\n        conflictingItem.result = {\n            resolutionType: resolutionType\n        };\n    }\n\n    _applyResolutionStrategy(conflicts) {\n        var self = this;\n        var conflictResolutionStrategy = self.options.conflicts.strategy;\n        return new Promise(function(resolve, reject) {\n            var conflictResolutionPromises = [];\n\n            for (var i = 0; i < conflicts.length; i++) {\n                var conflict = conflicts[i];\n                if (conflict.conflictingItems.length) {\n                    switch (conflictResolutionStrategy) {\n                        case Constants.ConflictResolutionStrategy.ServerWins:\n                            _.each(conflict.conflictingItems,\n                                self._setResolutionTypeForItem.bind(self, Constants.ConflictResolution.KeepServer));\n                            break;\n                        case Constants.ConflictResolutionStrategy.Custom:\n                            var customStrategy = self.options.conflicts.implementation;\n                            if (!customStrategy) {\n                                return reject(new EverliveError({message: 'Implementation of the conflict resolution strategy ' +\n                                'must be provided when set to Custom'}));\n                            }\n\n                            conflictResolutionPromises.push(new Promise(function(resolve) {\n                                customStrategy(conflicts, resolve);\n                            }));\n                            break;\n                        default:\n                            return reject(new EverliveError({message: 'Invalid resolution strategy provided'}));\n                    }\n                }\n            }\n\n            Promise.all(conflictResolutionPromises)\n                .then(function() {\n                    resolve();\n                });\n        });\n    }\n\n    _getSyncPromiseBatch(contentType, batchIds) {\n        var self = this;\n\n        var dataQuery = new DataQuery({\n            meta: {\n                collectionName: contentType\n            },\n            query: new Query({\n                'Id': {\n                    '$in': batchIds\n                }\n            }),\n            operation: DataQuery.operations.Read,\n            applyOffline: false\n        });\n\n        var getRequestOptionsFromQuery = RequestOptionsBuilder[dataQuery.operation];\n        var requestOptions = getRequestOptionsFromQuery(dataQuery);\n        var request = new Request(self._everlive.setup, requestOptions);\n\n        return RequestService.sendRequest(request);\n    }\n\n    _getPlainItemsForSync(collection, forceDirty?): any {\n        if (this.options.syncUnmodified && !forceDirty) {\n            return _.values(collection);\n        } else {\n            return this.queryProcessor._getDirtyItems(collection);\n        }\n    }\n\n    _getIdsForSync(contentType, offlineItemsToSync) {\n        if (this._shouldAutogenerateIdForContentType(contentType)) {\n            return _.pluck(offlineItemsToSync, '_id');\n        } else {\n            return _.pluck(_.reject(offlineItemsToSync, function(offlineItem) {\n                return offlineItem[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.created;\n            }), '_id');\n        }\n    }\n\n    _getSyncPromiseForCollection(collection, contentType) {\n        var batches = [];\n        var batchSize = Constants.syncBatchSize;\n\n        var offlineItemsToSync = this._getPlainItemsForSync(collection);\n        var allIdsForSync = this._getIdsForSync(contentType, offlineItemsToSync);\n\n        var batchCount = Math.ceil(allIdsForSync.length / batchSize);\n\n        for (var i = 0; i < batchCount; i++) {\n            var batchSkipSize = i * batchSize;\n            var batchIds = allIdsForSync.slice(batchSkipSize, batchSkipSize + batchSize);\n            var syncGetServerItemsPromise = this._getSyncPromiseBatch(contentType, batchIds);\n            batches.push(syncGetServerItemsPromise);\n        }\n\n        return Promise.all(batches)\n            .then(function(serverItemsSyncResponses) {\n                const result = {\n                    serverItems: [],\n                    offlineItemsToSync: offlineItemsToSync\n                };\n\n                _.each(serverItemsSyncResponses, function(serverItems: any) {\n                    result.serverItems = <any[]>_.union(result.serverItems, serverItems);\n                });\n\n                return result;\n            });\n    }\n\n    _onItemFailed(syncResult, itemId) {\n        var self = this;\n\n        var results = syncResult.reason ? syncResult.reason : syncResult;\n        var targetType = results.contentType;\n\n        var getFailedItem = function(id) {\n            var pickedObject = _.pick(results, 'storage', 'type', 'error');\n            if (!pickedObject.error) {\n                pickedObject.error = new EverliveError(EverliveErrors.syncErrorUnknown);\n            }\n            return _.extend({\n                itemId: id,\n                contentType: targetType\n            }, pickedObject);\n        };\n\n        var failedItems = [];\n        if (results.type === Constants.offlineItemStates.created && results.items) {\n            failedItems = _.map(results.items, function(item: any) {\n                return getFailedItem(item.Id);\n            });\n        } else {\n            failedItems.push(getFailedItem(itemId));\n        }\n\n        self._syncResultInfo.failedItems[targetType] = self._syncResultInfo.failedItems[targetType] || [];\n        _.each(failedItems, function(failedItem) {\n            self._syncResultInfo.failedItems[targetType].push(failedItem);\n            self._fireItemProcessed(failedItem);\n        });\n    }\n\n    _onItemProcessed(item, contentType, syncStorage, syncType) {\n        var syncInfo = {\n            itemId: item.Id,\n            type: syncType,\n            storage: syncStorage,\n            contentType: contentType\n        };\n\n        this._syncResultInfo.syncedItems[contentType] = this._syncResultInfo.syncedItems[contentType] || [];\n        this._syncResultInfo.syncedItems[contentType].push(syncInfo);\n\n        if (syncInfo.storage == syncLocation.server) {\n            this._syncResultInfo.syncedToServer++;\n        } else {\n            this._syncResultInfo.syncedToClient++;\n        }\n\n        this._fireItemProcessed(syncInfo);\n    }\n\n    _fireItemProcessed(syncInfo) {\n        this._everlive.emit(Constants.Events.ItemProcessed, syncInfo);\n    }\n\n    _getClientWinsSyncData(collections, forceDirty) {\n        var self = this;\n        var syncData = {};\n        _.each(collections, function(collection, typeName) {\n            if (!syncData[typeName]) {\n                syncData[typeName] = {\n                    createdItems: [],\n                    modifiedItems: [],\n                    deletedItems: [],\n                    deletedItemsOnServer: [],\n                    modifiedItemsOnServer: []\n                };\n            }\n\n            var plainItems = self._getPlainItemsForSync(collection, forceDirty);\n            var itemsForSync = offlineTransformations.idTransform(plainItems);\n\n            _.each(itemsForSync, function(itemForSync) {\n                switch (itemForSync[Constants.offlineItemsStateMarker]) {\n                    case Constants.offlineItemStates.created:\n                        syncData[typeName].createdItems.push({\n                            remoteItem: itemForSync,\n                            resultingItem: itemForSync\n                        });\n                        break;\n                    case Constants.offlineItemStates.modified:\n                        syncData[typeName].modifiedItems.push({\n                            remoteItem: itemForSync,\n                            resultingItem: itemForSync\n                        });\n                        break;\n                    case Constants.offlineItemStates.deleted:\n                        syncData[typeName].deletedItems.push({\n                            remoteItem: itemForSync,\n                            resultingItem: itemForSync\n                        });\n                        break;\n                }\n\n                delete itemForSync[Constants.offlineItemsStateMarker];\n            });\n        });\n\n        return syncData;\n    }\n\n    _getModifiedFilesForSyncClientWins(itemId, item, collectionName) {\n        var self = this;\n        var sdk = self._everlive;\n\n        return new Promise(function(resolve, reject) {\n            var offlineFiles = self.files;\n            offlineFiles.getOfflineLocation(itemId)\n                .then(function(location) {\n                    if (location) {\n                        return self._transferFile(true, item, location)\n                            .then(function(result: any) {\n                                if (result.Result === false) {\n                                    reject({\n                                        type: Constants.offlineItemStates.modified,\n                                        itemId: item.Id,\n                                        contentType: collectionName,\n                                        error: result,\n                                        storage: syncLocation.server\n                                    });\n                                } else {\n                                    return {\n                                        result: result\n                                    };\n                                }\n                            }, function(err) {\n                                reject({\n                                    type: Constants.offlineItemStates.modified,\n                                    itemId: item.Id,\n                                    contentType: collectionName,\n                                    error: err,\n                                    storage: syncLocation.server\n                                });\n                            });\n                    } else {\n                        return sdk.files\n                            .isSync(true)\n                            .applyOffline(false)\n                            .updateSingle(item)\n                            .then(function(response) {\n                                return response;\n                            }, function(err) {\n                                reject({\n                                    type: Constants.offlineItemStates.modified,\n                                    itemId: item.Id,\n                                    contentType: collectionName,\n                                    error: err,\n                                    storage: syncLocation.server\n                                });\n                            });\n                    }\n                })\n                .then(function(onlineResponse) {\n                    var onlineResult = onlineResponse.result;\n                    item.ModifiedAt = onlineResult.ModifiedAt;\n                    self._onItemProcessed(item, collectionName, syncLocation.server, Constants.offlineItemStates.modified);\n                    return sdk.files\n                        .isSync(true)\n                        .useOffline(true)\n                        .updateSingle(item);\n                })\n                .then(resolve)\n                .catch(function(err) {\n                    reject({\n                        type: Constants.offlineItemStates.modified,\n                        itemId: item.Id,\n                        contentType: collectionName,\n                        error: err,\n                        storage: syncLocation.server\n                    });\n                });\n        });\n    }\n\n    _getModifiedItemForSyncClientWins(dataCollection, item, collectionName) {\n        var self = this;\n\n        return new Promise(function(resolve, reject) {\n            return dataCollection\n                .isSync(true)\n                .applyOffline(false)\n                .updateSingle(item)\n                .then(function(res) {\n                    self._onItemProcessed(item, collectionName, syncLocation.server, Constants.offlineItemStates.modified);\n                    var updatedItem = _.extend({}, item, {\n                        ModifiedAt: res.ModifiedAt\n                    });\n\n                    var updateQuery = new DataQuery({\n                        operation: DataQuery.operations.Update,\n                        data: updatedItem,\n                        additionalOptions: {\n                            id: item.Id\n                        },\n                        meta: {\n                            collectionName: collectionName\n                        },\n                        isSync: true\n                    });\n\n                    return self.processQuery(updateQuery);\n                }, function(res) {\n                    reject({\n                        storage: syncLocation.server,\n                        type: Constants.offlineItemStates.modified,\n                        itemId: item.Id,\n                        contentType: collectionName,\n                        error: res\n                    });\n                })\n                .then(resolve, function(err) {\n                    reject({\n                        storage: syncLocation.client,\n                        type: Constants.offlineItemStates.modified,\n                        itemId: item.Id,\n                        contentType: collectionName,\n                        error: err\n                    });\n                });\n        });\n    }\n\n    _addModifiedItemsForSyncClientWins(contentTypeData, syncPromises, dataCollection) {\n        var self = this;\n\n        this._addUpdatedItemsForSync(contentTypeData, getSyncFilterNoModifiedAt, syncPromises, dataCollection, function(item) {\n            var itemId = item.Id;\n            if (!itemId) {\n                throw new EverliveError({message: 'When updating an item it must have an Id field.'});\n            }\n            var collectionName = dataCollection.collectionName;\n\n            if (Utils.isContentType.files(collectionName)) {\n                syncPromises[itemId] = self._getModifiedFilesForSyncClientWins(itemId, item, collectionName);\n            } else {\n                syncPromises[itemId] = self._getModifiedItemForSyncClientWins(dataCollection, item, collectionName);\n            }\n        });\n    }\n\n    _addDeletedItemsForSyncClientWins(contentTypeData, syncPromises, dataCollection) {\n        var self = this;\n\n        this._addDeletedItemsForSync(contentTypeData, getSyncFilterNoModifiedAt, syncPromises, dataCollection,\n            function(item, itemFilter) {\n                var collectionName = dataCollection.collectionName;\n                syncPromises[item.Id] = new Promise(function(resolve, reject) {\n                    var itemId = item.Id;\n                    if (!itemId) {\n                        throw new EverliveError({message: 'When deleting an item it must have an Id field.'});\n                    }\n\n                    return dataCollection\n                        .isSync(true)\n                        .applyOffline(false)\n                        .destroySingle(itemFilter)\n                        .then(function() {\n                            self._onItemProcessed(item, collectionName, syncLocation.server, Constants.offlineItemStates.deleted);\n                            return self._purgeById(collectionName, item.Id).then(function() {\n                                resolve();\n                            }, function(err) {\n                                reject(_.extend({}, {\n                                    storage: syncLocation.client,\n                                    type: Constants.offlineItemStates.deleted,\n                                    contentType: collectionName,\n                                    itemId: itemId,\n                                    error: err\n                                }));\n                            });\n                        }, function(err) {\n                            reject(_.extend({}, {\n                                storage: syncLocation.server,\n                                type: Constants.offlineItemStates.deleted,\n                                contentType: collectionName,\n                                error: err,\n                                itemId: itemId\n                            }));\n                        });\n                });\n            });\n    }\n\n    _applyClientWins(collections) {\n        var self = this;\n        var syncData = this._getClientWinsSyncData(collections, true);\n        var syncPromises = {};\n\n        _.each(syncData, function(contentTypeData: any, typeName: string) {\n            var dataCollection = self._everlive.data(typeName);\n            if (contentTypeData.createdItems.length) {\n                self._addCreatedItemsForSync(contentTypeData, syncPromises, dataCollection);\n            }\n\n            if (contentTypeData.modifiedItems.length) {\n                self._addModifiedItemsForSyncClientWins(contentTypeData, syncPromises, dataCollection);\n            }\n\n            if (contentTypeData.deletedItems.length) {\n                self._addDeletedItemsForSyncClientWins(contentTypeData, syncPromises, dataCollection);\n            }\n        });\n\n        var syncResult;\n\n        return Utils.promiseHashSettled(syncPromises)\n            .then(function(result) {\n                syncResult = result;\n                if (self.options.syncUnmodified) {\n                    var promises = [];\n                    _.each(collections, function(collection: any, collectionName: string) {\n                        var allOfflineItems = self._getPlainItemsForSync(collection);\n                        var itemsToDownload = _.where(allOfflineItems, function(offlineItem) {\n                            return offlineItem[Constants.offlineItemsStateMarker] !== undefined;\n                        });\n\n                        var DataCollection = self._everlive.data(collectionName);\n\n                        var itemIdsForSync = _.pluck(itemsToDownload, '_id');\n                        var downloadPromise = DataCollection\n                            .isSync(true)\n                            .useOffline(false)\n                            .get({\n                                Id: {\n                                    $in: itemIdsForSync\n                                }\n                            })\n                            .then(function(res) {\n                                var serverItems = res.result;\n                                var serverItemIds = _.pluck(serverItems, 'Id');\n                                return self._unmodifiedClientWinsItemsDeletedOnServer(collectionName, serverItemIds, itemsToDownload)\n                                    .then(function() {\n                                        return self._unmodifiedClientWinsItemsUpdatedOnServer(collectionName, serverItems, itemsToDownload);\n                                    });\n                            });\n\n                        promises.push(downloadPromise);\n                    });\n\n                    return Promise.all(promises);\n                }\n            })\n            .then(function() {\n                return syncResult;\n            });\n    }\n\n    _unmodifiedClientWinsItemsDeletedOnServer(collectionName, serverItemIds, clientItems) {\n        var self = this;\n        var itemsForDeleteIds = [];\n        var itemIdsForSync = _.pluck(clientItems, '_id');\n        _.each(itemIdsForSync, function(itemId) {\n            if (serverItemIds.indexOf(itemId) === -1) {\n                itemsForDeleteIds.push(itemId);\n            }\n        });\n\n        return Promise.resolve()\n            .then(function() {\n                if (itemsForDeleteIds.length !== 0) {\n                    var deleteQuery = new DataQuery({\n                        operation: DataQuery.operations.Delete,\n                        filter: {\n                            Id: {\n                                $in: itemsForDeleteIds\n                            }\n                        },\n                        meta: {\n                            collectionName: collectionName\n                        },\n                        isSync: true\n                    });\n\n                    return self.processQuery(deleteQuery).then(function() {\n                        _.each(itemsForDeleteIds, function(itemsForDeleteId) {\n                            self._onItemProcessed({Id: itemsForDeleteId}, collectionName, syncLocation.client, Constants.offlineItemStates.deleted);\n                        });\n                    });\n                }\n            });\n    }\n\n    _unmodifiedClientWinsItemsUpdatedOnServer(collectionName, serverItems, clientItems) {\n        var self = this;\n        var updatePromises = [];\n\n        _.each(serverItems, function(serverItem: any) {\n            var item: any = _.find(clientItems, function(clientItem: any) {\n                return clientItem._id === serverItem.Id;\n            });\n\n            if (item) {\n                var updateQuery = new DataQuery({\n                    operation: DataQuery.operations.Update,\n                    data: serverItem,\n                    additionalOptions: {\n                        id: item._id\n                    },\n                    meta: {\n                        collectionName: collectionName\n                    },\n                    isSync: true\n                });\n\n                var itemUpdatedPromise = self.processQuery(updateQuery)\n                    .then(function(res) {\n                        self._onItemProcessed(serverItem, collectionName, syncLocation.client, Constants.offlineItemStates.modified);\n                    });\n\n                updatePromises.push(itemUpdatedPromise);\n            }\n        });\n\n        return Promise.all(updatePromises);\n    }\n\n    _modifyFileStandardSync(syncPromises, itemId, item, collectionName, resolutionType) {\n        var self = this;\n\n        var filesCollection = self._everlive.files;\n        syncPromises[itemId] = new Promise(function(resolve, reject) {\n            var offlineLocation;\n            self.files.getOfflineLocation(itemId)\n                .then(function(locationOnDisk) {\n                    offlineLocation = locationOnDisk;\n                })\n                .then(function() {\n                    return filesCollection\n                        .isSync(true)\n                        .applyOffline(false)\n                        .getById(itemId);\n                })\n                .then(function(response) {\n                    var file = response.result;\n                    if (file.ModifiedAt.getTime() !== item.ModifiedAt.getTime()) {\n                        reject(_.extend({}, new EverliveError(EverliveErrors.syncConflict), {\n                            contentType: collectionName\n                        }));\n                    } else {\n                        if (offlineLocation) {\n                            if (resolutionType === Constants.ConflictResolution.KeepServer) {\n                                return self.files._saveFile(item.Uri, item.Filename, item.Id)\n                                    .then(function() {\n                                        return self.offlineFilesProcessor.purge(offlineLocation);\n                                    })\n                                    .then(function() {\n                                        return response;\n                                    });\n                            } else if (resolutionType === Constants.ConflictResolution.KeepClient) {\n                                return self._transferFile(true, item, offlineLocation);\n                            }\n                        }\n                    }\n                })\n                .then(function() {\n                    return self._everlive.files\n                        .isSync(true)\n                        .useOffline(true)\n                        .updateSingle(item);\n                })\n                .then(resolve)\n                .catch(reject);\n        });\n    }\n\n    _modifyContentTypeStandardSync(syncPromises, itemId, dataCollection, item, itemFilter, collectionName, isCustom) {\n        var self = this;\n\n        syncPromises[itemId] = dataCollection\n            .isSync(true)\n            .applyOffline(false)\n            .update(item, itemFilter)\n            .then(function(res) {\n                return self._onSyncResponse(res, item, collectionName, DataQuery.operations.Update, isCustom);\n            }, function(err) {\n                return new Promise(function(resolve, reject) {\n                    reject({\n                        type: Constants.offlineItemStates.modified,\n                        itemId: item.Id,\n                        contentType: collectionName,\n                        error: err,\n                        storage: syncLocation.server\n                    });\n                });\n            });\n    }\n\n    _applyStandardSync(collections) {\n        var self = this;\n\n        var promises = {};\n        _.each(collections, function(collection, contentType) {\n            promises[contentType] = self._getSyncPromiseForCollection(collection, contentType);\n        });\n\n        return Utils.promiseHash(promises)\n            .then(function(contentTypes) {\n                return self._prepareSyncData(contentTypes);\n            })\n            .then(function(syncData) {\n                return self._resolveConflicts(syncData);\n            })\n            .then(function(contentTypeSyncData) {\n                var syncPromises: any = {};\n                _.each(contentTypeSyncData, function(contentTypeData: any, collectionName: string) {\n                    var dataCollection: any = self._everlive.data(collectionName);\n                    if (contentTypeData.createdItems.length) {\n                        self._addCreatedItemsForSync(contentTypeData, syncPromises, dataCollection);\n                    }\n\n                    if (contentTypeData.modifiedItems.length) {\n                        self._addUpdatedItemsForSync(contentTypeData, getSyncFilterForItem, syncPromises, dataCollection, function(item, itemFilter, isCustom, resolutionType) {\n                            var itemId = item.Id;\n\n                            if (Utils.isContentType.files(collectionName)) {\n                                self._modifyFileStandardSync(syncPromises, itemId, item, collectionName, resolutionType);\n                            } else {\n                                self._modifyContentTypeStandardSync(syncPromises, itemId, dataCollection, item, itemFilter, collectionName, isCustom);\n                            }\n                        });\n                    }\n\n                    if (contentTypeData.deletedItems.length) {\n                        self._addDeletedItemsForSync(contentTypeData, getSyncFilterForItem, syncPromises, dataCollection, function(item, itemFilter, isCustom) {\n                            syncPromises[item.Id] = dataCollection\n                                .isSync(true)\n                                .applyOffline(false)\n                                .destroy(itemFilter)\n                                .then(function(res) {\n                                    return self._onSyncResponse(res, item, collectionName, DataQuery.operations.Delete, isCustom);\n                                }, function(err) {\n                                    return new Promise(function(resolve, reject) {\n                                        reject({\n                                            type: Constants.offlineItemStates.deleted,\n                                            itemId: item.Id,\n                                            contentType: collectionName,\n                                            error: err,\n                                            storage: syncLocation.server\n                                        });\n                                    });\n                                });\n                        });\n                    }\n\n                    _.each<any>(contentTypeData.deletedItemsOnServer, function(item: any) {\n                        syncPromises[item.Id] = dataCollection\n                            .isSync(true)\n                            .useOffline(true)\n                            .destroySingle({\n                                Id: item.Id\n                            })\n                            .then(function(res) {\n                                return self._onItemProcessed(item, collectionName, syncLocation.client, Constants.offlineItemStates.deleted);\n                            }, function(err) {\n                                return new Promise(function(resolve, reject) {\n                                    reject({\n                                        type: Constants.offlineItemStates.deleted,\n                                        itemId: item.Id,\n                                        contentType: collectionName,\n                                        error: err,\n                                        storage: syncLocation.client\n                                    });\n                                });\n                            });\n                    });\n\n                    _.each<any>(contentTypeData.modifiedItemsOnServer, function(item: any) {\n                        syncPromises[item.Id] = dataCollection\n                            .isSync(true)\n                            .useOffline(true)\n                            .update(item, {\n                                Id: item.Id\n                            })\n                            .then(function(res) {\n                                return self._onItemProcessed(item, collectionName, syncLocation.client, Constants.offlineItemStates.modified);\n                            }, function(err) {\n                                return Promise.reject({\n                                    type: Constants.offlineItemStates.modified,\n                                    itemId: item.Id,\n                                    contentType: collectionName,\n                                    error: err,\n                                    storage: syncLocation.client\n                                })\n                            })\n                    })\n                });\n\n                return Utils.promiseHashSettled(syncPromises);\n            });\n    }\n\n    _applySync() {\n        var self = this;\n        return this.queryProcessor._getAllCollections()\n            .then(function(collections) {\n                if (self.options.conflicts.strategy === Constants.ConflictResolutionStrategy.ClientWins) {\n                    return self._applyClientWins(collections);\n                } else {\n                    return self._applyStandardSync(collections);\n                }\n            });\n    }\n\n    /**\n     * Get all the offline items that have not been synced online.\n     * @method getItemsForSync\n     * @name getItemsForSync\n     * @memberOf OfflineModule.prototype\n     * @param {function} [success] A success callback.\n     * @param {function} [error] An error callback.\n     */\n    /**\n     * Get all the offline items that have not been synced online.\n     * @method getItemsForSync\n     * @name getItemsForSync\n     * @memberOf OfflineModule.prototype\n     * @returns {Promise}\n     */\n    getItemsForSync(success, error) {\n        var self = this;\n        var plainItemsForSync: any = {};\n        return Utils.buildPromise(function(successCb, errorCb) {\n            self.queryProcessor._getAllCollections()\n                .then(function(collections) {\n                    _.each(collections, function(collection: any, collectionName: any) {\n                        var plainItems = self._getPlainItemsForSync(collection);\n                        plainItemsForSync[collectionName] = _.map(plainItems, function(item) {\n                            var itemForSync = {\n                                item: _.extend({}, item),\n                                action: item[Constants.offlineItemsStateMarker]\n                            };\n\n                            delete itemForSync.item[Constants.offlineItemsStateMarker];\n                            return itemForSync;\n                        });\n                    });\n\n                    successCb(plainItemsForSync);\n                }).catch(errorCb);\n        }, success, error);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/OfflineStorageModule.ts\n **/","import * as _ from 'underscore';\n\nimport {FileStore, getFileStore} from '../../storages/FileStore';\nimport {BasePersister} from './BasePersister';\n\nexport class FileSystemPersister extends BasePersister {\n    fileStore: FileStore;\n\n    /**\n     * @class FileSystemPersister\n     * @protected\n     * @extends BasePersister\n     */\n    constructor(key: string, options: any) {\n        super(key, options);\n        this.fileStore = getFileStore(options.storage.storagePath, options);\n    }\n\n    getAllData(success, error) {\n        var errorHandler = this._fileSystemErrorHandler(error);\n        super.getAllData(success, errorHandler);\n    }\n\n    getData(contentType, success, error) {\n        var errorHandler = this._fileSystemErrorHandler(error);\n        this.getFileHandle(contentType, (fileEntry) => {\n            this._readFileContent(fileEntry, success, errorHandler);\n        }, error);\n    }\n\n    saveData(contentType, data, success, error) {\n        var errorHandler = this._fileSystemErrorHandler(error);\n        this.getFileHandle(contentType, (fileEntry) => {\n            this._writeFileContent(fileEntry, data, () => {\n                this._saveContentTypes(contentType, success, errorHandler);\n            }, errorHandler);\n        }, errorHandler);\n    }\n\n    purge(contentType, success, error) {\n        var errorHandler = this._fileSystemErrorHandler(error);\n        this.getFileHandle(contentType, (fileEntry) => {\n            this.fileStore.removeFile(fileEntry).then(() => {\n                success();\n            }).catch(error);\n        }, errorHandler);\n    }\n\n    purgeAll(success, error) {\n        var errorHandler = this._fileSystemErrorHandler(error);\n        this.fileStore.removeFilesDirectory()\n            .then(() => {\n                success();\n            })\n            .catch(errorHandler);\n    }\n\n    getFileHandle(contentType, success, error) {\n        var path = this._getFilePath(contentType);\n        this.fileStore.getFilesDirectory()\n            .then(() => {\n                return this.fileStore.getFile(path);\n            })\n            .then((fileHandle) => {\n                success(fileHandle);\n            })\n            .catch(error);\n    }\n\n    _getContentTypes(success, error) {\n        this.getData(this.contentTypesStoreKey, (savedContentTypesRaw) => {\n            const savedContentTypes = JSON.parse(savedContentTypesRaw || '[]');\n            success(savedContentTypes);\n        }, error);\n    }\n\n    _saveContentTypes(contentType, success, error) {\n        this._getContentTypes((savedContentTypes) => {\n            if (!_.contains(savedContentTypes, contentType)) {\n                savedContentTypes.push(contentType);\n            }\n\n            this.getFileHandle(this.contentTypesStoreKey, (contentTypesFile) => {\n                this._writeFileContent(contentTypesFile, JSON.stringify(savedContentTypes), success, error);\n            }, error);\n        }, error);\n    }\n\n    _readFileContent(fileEntry, success, error) {\n        this.fileStore.readFileAsText(fileEntry).then((content) => {\n            success(content);\n        }).catch(error);\n    }\n\n    _writeFileContent(fileEntry, content, success, error) {\n        this.fileStore.writeTextToFile(fileEntry, content)\n            .then(success)\n            .catch(error);\n    }\n\n    _getFilePath(contentType) {\n        return this._getKey(contentType);\n        //return utils.joinPath(this.fileStore.filesDirectoryPath, this._getKey(contentType));\n    }\n\n    _fileSystemErrorHandler(callback) {\n        return this.fileStore.getErrorHandler(callback);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/persisters/FileSystemPersister.ts\n **/","'use strict';\n\nimport * as _ from 'underscore';\n\nimport {LocalStore} from '../../storages/LocalStore';\nimport {BasePersister} from './BasePersister';\n\nexport class LocalStoragePersister extends BasePersister {\n    _localStore: LocalStore;\n\n    /**\n     * @class LocalStoragePersister\n     * @extends BasePersister\n     */\n    constructor(key: string, options: any) {\n        super(key, options);\n        this._localStore = new LocalStore(options);\n    }\n\n    getData(contentType, success, error) {\n        try {\n            var key = this._getKey(contentType);\n            var storedItem = this._getItem(key);\n            success(storedItem);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    saveData(contentType, data, success, error) {\n        try {\n            var contentTypeKey = this._getKey(contentType);\n            this._setItem(contentTypeKey, data);\n            success();\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    purge(contentType, success, error) {\n        try {\n            var key = this._getKey(contentType);\n            this._removeItem(key);\n            this._getContentTypes((contentTypes) => {\n                contentTypes = _.without(contentTypes, contentType);\n                this._setContentTypesCollection(contentTypes);\n                success();\n            }, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    purgeAll(success, error) {\n        try {\n            this._getContentTypes((contentTypes) => {\n                _.each(contentTypes, (contentType) => {\n                    var contentTypeKey = this._getKey(contentType);\n                    this._removeItem(contentTypeKey);\n                });\n\n                this._removeItem(this.contentTypesStoreKey);\n                success();\n            }, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    _getItem(key) {\n        return this._localStore.getItem(key);\n    }\n\n    _setItem(key, value) {\n        return this._localStore.setItem(key, value);\n    }\n\n    _removeItem(key) {\n        return this._localStore.removeItem(key);\n    }\n\n    _getKey(contentType) {\n        this._addTypeToCollectionsCache(contentType);\n        return super._getKey(contentType);\n    }\n\n    _getContentTypes(success, error) {\n        try {\n            var localStorageString = this._getItem(this.contentTypesStoreKey);\n\n            var data = [];\n            if (localStorageString) {\n                data = JSON.parse(localStorageString);\n            }\n\n            success(data);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    _setContentTypesCollection(collection) {\n        this._setItem(this.contentTypesStoreKey, JSON.stringify(collection));\n    }\n\n    _addTypeToCollectionsCache(typeName) {\n        let err;\n        this._getContentTypes((contentTypes) => {\n            if (!_.contains(contentTypes, typeName)) {\n                contentTypes.push(typeName);\n                this._setContentTypesCollection(contentTypes);\n            }\n        }, e => err = e);\n\n        if (err) { //lets not swallow errors, shall we?\n            throw err\n        }\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/persisters/LocalStoragePersister.ts\n **/","import * as _ from 'underscore';\nimport * as platform from '../../../common/platform';\n\nimport { CordovaSQLiteStore } from '../../storages/CordovaSQLiteStore';\nimport { NativeScriptSQLiteStore } from '../../storages/NativeScriptSQLiteStore';\nimport { SQLiteStore } from '../../interfaces/SQLiteStore';\nimport { BasePersister } from './BasePersister';\nimport { getDefinition } from './sqlite/SystemDefinitions';\nimport { EverliveError } from '../../EverliveError';\nimport { Utils } from \"../../utils\";\n\n\nfunction getSQLiteStore(storagePath: string, typeSettings: any): SQLiteStore {\n    if (platform.isNativeScript) {\n        return new NativeScriptSQLiteStore(storagePath, typeSettings);\n    } else if (platform.isCordova) {\n        return new CordovaSQLiteStore(storagePath, typeSettings);\n    } else {\n        throw new EverliveError({message: 'Unsupported platform for SQLite'});\n    }\n}\n\nexport class SQLitePersister extends BasePersister {\n    private sqliteStore: SQLiteStore;\n    private contentTypes: string[];\n    private jsonSql: any;\n\n    /**\n     * @class SQLitePersister\n     * @extends BasePersister\n     */\n    constructor(key: string, options: any) {\n        super(key, options);\n        const jsonSqlOptions = {\n            dialect: 'sqlite',\n            separatedValues: false\n        };\n        this.jsonSql = require('json-sql')(jsonSqlOptions);\n\n        this.contentTypes = _.keys(options.typeSettings);\n        const extendedSettings = this.extendTypeSchemes(options.typeSettings);\n        const storagePath = `${options.storage.storagePath}_${options.appId}`;\n        this.sqliteStore = getSQLiteStore(options.storage.storagePath, extendedSettings);\n    }\n\n    getData(contentType, success, error) {\n        return this.queryData(contentType, success, error);\n    }\n\n    count(contentType, success, error, filter?) {\n        try {\n            const sqlQuery = this.prepareCount(contentType, filter);\n            this.sqliteStore.queryData(contentType, sqlQuery.query, function (resultSet) {\n                const resultCount = resultSet && resultSet[0] && resultSet[0].Count ? resultSet[0].Count : 0;\n                success({Count: resultCount })\n            }, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    queryData(contentType, success, error, filter?, sort?, skip?, limit?, select?) {\n        try {\n            const sqlQuery = this.prepareQuery(contentType, 'select', filter, sort, skip, limit, select);\n            this.sqliteStore.queryData(contentType, sqlQuery.query, success, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    removeData(contentType, success, error, filter?) {\n        try {\n            const sqlQuery = this.prepareQuery(contentType, 'remove', filter);\n            this.sqliteStore.removeData(contentType, sqlQuery.query, success, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    updateData(contentType, updateObj, success, error, filter?) {\n        try {\n            const sqlQuery = this.prepareUpdate(contentType, updateObj, filter);\n            this.sqliteStore.updateData(contentType, sqlQuery.query, success, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    saveData(contentType, data, success, error) {\n        try {\n            this.sqliteStore.addData(contentType, data, success, error);\n        } catch (e) {\n            error(e);\n        }\n    }\n\n    purgeById(contentType, itemId, success, error) {\n        const sqlQuery = this.prepareQuery(contentType, 'remove', {_id: itemId});\n        this.sqliteStore.removeData(contentType, sqlQuery.query, function () {\n            // omit the number of deleted items\n            success();\n        }, error);\n    }\n\n    purge(contentType, success, error) {\n        const sqlQuery = this.prepareQuery(contentType, 'remove');\n        this.sqliteStore.removeData(contentType, sqlQuery.query, function () {\n            // omit the number of deleted items\n            success();\n        }, error);\n    }\n\n    purgeAll(success, error) {\n        const purgeAllPromises = _.map(this.options.typeSettings, (definition, type:string) => {\n            const sqlQuery = this.prepareQuery(type, 'remove');\n            const purgePromise = new Promise((resolve, reject) => {\n                this.sqliteStore.removeData(type, sqlQuery.query, resolve, reject);\n            });\n            return purgePromise;\n        });\n\n        return Promise.all(purgeAllPromises).then(() => {\n            // omit the number of deleted items\n            success();\n        }, error);\n    }\n\n    private extendTypeSchemes(types) {\n        let resultScheme = {};\n        _.each(types, (definition, type:string) => {\n            resultScheme[type] = getDefinition(type, definition['Scheme']);\n        });\n        if (!resultScheme['Files']) {\n            resultScheme['Files'] = getDefinition('Files', []);\n        }\n        if (!resultScheme['Users']) {\n            resultScheme['Users'] = getDefinition('Users', []);\n        }\n        return resultScheme;\n    }\n\n    private prepareCount(tableName, filter?) {\n        const jsonQuery = {\n            type: 'select',\n            table: tableName\n        };\n\n        jsonQuery['count'] = {Count: 'COUNT(*)'};\n\n        if (filter) {\n            jsonQuery['condition'] = filter;\n        }\n\n        const sqlQuery = this.jsonSql.build(jsonQuery);\n        return sqlQuery;\n    }\n\n    private prepareUpdate(tableName, updateObj, filter?) {\n        const jsonQuery = {\n            type: 'update',\n            table: tableName\n        };\n\n        if (updateObj.$set) {\n            // cannot update unsupported data types in sqlite.\n            // Meta is always part of the updateObject, when passing the whole item for update\n            delete updateObj.$set.Meta;\n        }\n\n        _.each(updateObj.$set, (value, key) => {\n            if (value instanceof Date) {\n                updateObj.$set[key] = value.toISOString();\n            }\n        });\n\n        jsonQuery['modifier'] = updateObj;\n\n        if (filter) {\n            jsonQuery['condition'] = filter;\n        }\n\n        const sqlQuery = this.jsonSql.build(jsonQuery);\n        return sqlQuery;\n    }\n\n    private prepareFilter(filter: any) {\n        this.traverseAndRemoveUndefined(filter);\n        this.traverseAndTransformRegexFilter(filter);\n    }\n\n    private traverseAndTransformRegexFilter(filterObj: any){\n        if (filterObj && filterObj['$regex']) {\n            const start = Utils.startsWith(filterObj['$regex'], '^') ? '' : '%';\n            const end = Utils.endsWith(filterObj['$regex'], '$') ? '' : '%';\n            const textValue = filterObj['$regex'].substring(1, filterObj['$regex'].length - 1);\n            filterObj['$like'] = `${start}${textValue}${end}`;\n            delete filterObj['$regex'];\n            delete filterObj['$options']; // invariant search is part of the configuration of the SQLite database.\n        }\n\n        for (let prop in filterObj) {\n            if (filterObj.hasOwnProperty(prop)) {\n                let objectMember = filterObj[prop];\n                if (typeof objectMember === 'object') {\n                    this.traverseAndTransformRegexFilter(objectMember);\n                }\n            }\n        }\n    }\n\n    // passing object as filter with undefined fields will make the query invalid\n    // this usually happens when you are passing the item itself for filter\n    private traverseAndRemoveUndefined(filterObj: any){\n        for (let prop in filterObj) {\n            if (filterObj.hasOwnProperty(prop)) {\n                let member = filterObj[prop];\n                if (typeof member === 'object') {\n                    this.traverseAndRemoveUndefined(member );\n                } else if(member === undefined){\n                    delete filterObj[prop];\n                }\n            }\n        }\n    }\n\n    private prepareQuery(tableName:string, type:string, filter?, sort?, skip?:number, limit?:number, select?) {\n        const jsonQuery:any = {\n            type: type,\n            table: tableName\n        };\n\n        if (filter) {\n            this.prepareFilter(filter);\n            jsonQuery['condition'] = filter;\n        }\n\n        if (sort) {\n            jsonQuery['sort'] = sort;\n        }\n\n        if (skip) {\n            jsonQuery['offset'] = skip;\n        }\n\n        if (limit) {\n            jsonQuery['limit'] = limit;\n        }\n\n        if (select) {\n            jsonQuery['fields'] = _.keys(select);\n        }\n\n        const sqlQuery = this.jsonSql.build(jsonQuery);\n        return sqlQuery;\n    }\n\n    _getContentTypes(success, error) {\n        success(this.contentTypes);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/persisters/SQLitePersister.ts\n **/","import { Constants } from '../../../constants'\nexport class FieldDefinition {\n    isSpecialType: boolean;\n\n    constructor(\n        public name: string,\n        public type: string,\n        public key?: string\n    ) {\n        this.isSpecialType = Constants.SqliteUnsupportedTypes[this.type] !== undefined;\n    }\n\n    getDefinition(): string {\n        const type = this.isSpecialType ? Constants.SqliteTypes.Text : this.type;\n        let definition = `\"${this.name}\" \"${type}\"`;\n        if (this.key) {\n            definition += ` ${this.key}`;\n        }\n        return definition;\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/persisters/sqlite/FieldDefinition.ts\n **/","import * as _ from 'underscore';\nimport { FieldDefinition } from './FieldDefinition';\nimport { Constants } from '../../../constants';\nimport { Utils } from '../../../utils';\n\nclass BaseDefinition {\n    protected _scheme:FieldDefinition[];\n\n    constructor() {\n        this._scheme = [];\n        this._scheme.push(new FieldDefinition('_id', Constants.SqliteTypes.Text, 'PRIMARY KEY'));\n        this._scheme.push(new FieldDefinition('CreatedAt', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('ModifiedAt', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('CreatedBy', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('ModifiedBy', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('Owner', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('Meta', Constants.SqliteUnsupportedTypes.OBJECT));\n        this._scheme.push(new FieldDefinition(Constants.offlineItemsStateMarker, Constants.SqliteTypes.Text));\n    }\n\n    extendScheme(externalScheme):FieldDefinition[] {\n        let externalDefinition = _.map(externalScheme, function (field: any) {\n            return new FieldDefinition(field.Name, field.Type || Constants.SqliteTypes.Text);\n        });\n        const extended = _.union(externalDefinition, this._scheme);\n        return extended;\n    }\n}\n\nclass UsersDefinition extends BaseDefinition {\n    constructor() {\n        super();\n        this._scheme.push(new FieldDefinition('Username', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('Email', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('DisplayName', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('Role', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('IdentityProvider', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('IsVerified', Constants.SqliteUnsupportedTypes.BOOLEAN));\n    }\n}\n\nclass FilesDefinition extends BaseDefinition {\n    constructor() {\n        super();\n        this._scheme.push(new FieldDefinition('Filename', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('ContentType', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('Length', Constants.SqliteTypes.Number));\n        this._scheme.push(new FieldDefinition('totalSize', Constants.SqliteTypes.Number));\n        this._scheme.push(new FieldDefinition('Storage', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('Uri', Constants.SqliteTypes.Text));\n        this._scheme.push(new FieldDefinition('base64', Constants.SqliteTypes.Text));\n    }\n}\n\nexport function getDefinition(type: string, externalScheme):FieldDefinition[] {\n    let typeDefinition:BaseDefinition = null;\n    if (Utils.isContentType.files(type)) {\n        typeDefinition = new FilesDefinition();\n    } else if (Utils.isContentType.users(type)) {\n        typeDefinition = new UsersDefinition();\n    } else {\n        typeDefinition = new BaseDefinition();\n    }\n    return typeDefinition.extendScheme(externalScheme);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/persisters/sqlite/SystemDefinitions.ts\n **/","import * as _ from 'underscore';\nimport * as path from 'path';\n\nimport { Utils } from '../../utils';\nimport { offlineTransformations } from '../offlineTransformations';\nimport * as platform from '../../../common/platform';\nimport { EverliveError, EverliveErrors } from '../../EverliveError';\nimport { Constants, DataQueryOperation } from '../../constants';\nimport { Persister } from '../persisters/Persister';\nimport { CryptographicProvider } from '../../encryption/CryptographicProvider';\nimport { OfflineFilesProcessor } from '../OfflineFilesProcessor';\nimport { Everlive } from '../../Everlive';\nimport { OfflineQueryProcessor } from './OfflineQueryProcessor'\n\nconst mingo = require('mingo');\nconst mongoQuery = require('mongo-query');\nconst aggregationTranslator = require('../../../scripts/bs-aggregation-translator');\n\nexport class OfflineInMemoryQueryProcessor extends OfflineQueryProcessor {\n    private _collectionCache:any = {};\n\n    constructor(public persister:Persister,\n                public _encryptionProvider:CryptographicProvider,\n                public offlineFilesProcessor:OfflineFilesProcessor,\n                public everlive:Everlive,\n                public setup:any) {\n        super(persister, _encryptionProvider, offlineFilesProcessor, everlive, setup);\n    }\n\n    processQuery(dataQuery) {\n        var collectionName = dataQuery.collectionName;\n        if (Utils.isContentType.pushDevices(collectionName) || Utils.isContentType.pushNotifications(collectionName)) {\n            if (this.everlive.isOnline()) {\n                return Promise.resolve();\n            } else {\n                return Promise.reject(new EverliveError(EverliveErrors.pushNotSupportedOffline));\n            }\n        }\n\n        var queryNotSupportedError = this.checkSupportedQuery(dataQuery);\n        if (queryNotSupportedError && !dataQuery.isSync) {\n            return new Promise(function (resolve, reject) {\n                reject(new EverliveError(queryNotSupportedError));\n            });\n        }\n\n        var queryParams = dataQuery.getQueryParameters();\n        var unsupportedOperators = Utils.getUnsupportedOperators(queryParams.filter);\n        var unsupportedOperatorCount = unsupportedOperators.length;\n        if (unsupportedOperatorCount) {\n            return new Promise(function (resolve, reject) {\n                var errorMessage;\n                if (unsupportedOperatorCount === 1) {\n                    errorMessage = 'The operator ' + unsupportedOperators[0] + ' is not supported in offline mode.';\n                } else {\n                    errorMessage = 'The operators ' + unsupportedOperators.join(',') + 'are not supported in offline mode.';\n                }\n\n                reject(new EverliveError({\n                    message: errorMessage,\n                    code: EverliveErrors.operationNotSupportedOffline.code\n                }));\n            });\n        }\n\n        offlineTransformations.traverseAndTransformFilterId(queryParams.filter);\n\n        switch (dataQuery.operation) {\n            case DataQueryOperation.Read:\n                return this.read(dataQuery, queryParams.filter, queryParams.sort, queryParams.skip, queryParams.limit, queryParams.select, queryParams.expand);\n            case DataQueryOperation.ReadById:\n                return this.readById(dataQuery, queryParams.expand);\n            case DataQueryOperation.FilesGetDownloadUrlById:\n                return this.getDownloadUrlById(dataQuery);\n            case DataQueryOperation.Count:\n                return this.count(dataQuery, queryParams.filter);\n            case DataQueryOperation.Create:\n                return this.create(dataQuery);\n            case DataQueryOperation.RawUpdate:\n            case DataQueryOperation.Update:\n                return this.update(dataQuery, queryParams.filter);\n            case DataQueryOperation.FilesUpdateContent:\n                return this.updateFileContent(dataQuery);\n            case DataQueryOperation.Delete:\n                return this.remove(dataQuery, queryParams.filter);\n            case DataQueryOperation.DeleteById:\n                return this.remove(dataQuery, {\n                    _id: dataQuery.additionalOptions.id\n                });\n            case DataQueryOperation.Aggregate:\n                return this.aggregate(dataQuery, queryParams);\n            default:\n                return new Promise(function (resolve, reject) {\n                    if (dataQuery.isSync) {\n                        resolve();\n                    } else {\n                        let operationStr = DataQueryOperation[dataQuery.operation];\n                        reject(new EverliveError({message: operationStr + ' is not supported in offline mode.'}));\n                    }\n                });\n        }\n    }\n\n    create(dataQuery) {\n        var self = this;\n\n        return self._createItems(dataQuery.collectionName, dataQuery.data, dataQuery.isSync, dataQuery.preserveState)\n            .then(function (createdItems) {\n                var isFilesQuery = Utils.isContentType.files(dataQuery.collectionName);\n                return self._getCreateResult(createdItems, isFilesQuery);\n            });\n    }\n\n    read(dataQuery, filter, sort, skip, limit, select, expand) {\n        var self = this;\n        var expandResult;\n\n        return new Promise(function (resolve, reject) {\n            var collectionLength;\n\n            self._prepareExpand(expand, dataQuery, true)\n                .then(function (prepareExpandResult:any) {\n                    expandResult = prepareExpandResult;\n                    if (prepareExpandResult) {\n                        select = prepareExpandResult.mainQueryFieldsExpression;\n                    }\n\n                    return self._getCollection(dataQuery.collectionName);\n                })\n                .then(function (collection) {\n                    var result = self._readInternal(collection, filter, sort, skip, limit, select);\n\n                    if (skip || limit) {\n                        var all = self._readInternal(collection);\n                        collectionLength = all.length;\n                    }\n\n                    if (!self._shouldAutogenerateIdForContentType(dataQuery.collectionName)) {\n                        result = offlineTransformations.removeIdTransform(result, true);\n                    } else {\n                        result = offlineTransformations.idTransform(result);\n                    }\n\n                    return self._expandResult(expandResult, result);\n                })\n                .then(function (result) {\n                    var response = self._transformOfflineResult(result, collectionLength, dataQuery);\n                    resolve(response);\n                })\n                .catch(reject);\n        });\n    }\n\n    _readInternal(collection, filter?, sort?, skip?, limit?, select?) {\n        var filterCopy = _.extend({}, filter);\n        var actualFilter = this._getWithoutDeletedFilter(filterCopy);\n        offlineTransformations.traverseAndTransformFilterId(actualFilter);\n        var query = mingo.Query(actualFilter);\n        var cursor = mingo.Cursor(collection, query, select);\n        if (sort) {\n            cursor = cursor.sort(sort);\n        }\n\n        if (skip) {\n            cursor.skip(skip);\n        }\n\n        if (limit) {\n            cursor.limit(limit);\n        }\n\n        return _.map(cursor.all(), function (item) {\n            return _.extend({}, item);\n        });\n    }\n\n    readById(dataQuery, expand) {\n        var self = this;\n        var expandResult;\n        return self._prepareExpand(expand, dataQuery, false)\n            .then(function (prepareExpandResult) {\n                expandResult = prepareExpandResult;\n                return self._getCollection(dataQuery.collectionName);\n            })\n            .then(function (collection) {\n                return new Promise(function (resolve, reject) {\n                    var item = self._getById(collection, dataQuery.additionalOptions.id);\n\n                    if (!item) {\n                        return reject(new EverliveError(EverliveErrors.itemNotFound));\n                    }\n\n                    item = offlineTransformations.idTransform(item);\n                    return self._expandResult(expandResult, item).then(resolve).catch(reject);\n                });\n            })\n            .then(function (result) {\n                return self._transformOfflineResult(result, null, dataQuery);\n            });\n    }\n\n    _getById(collection, id) {\n        if (!id) {\n            throw new EverliveError({message: 'Id field is mandatory when using offline storage'});\n        }\n\n        if (collection[id]) {\n            var item = _.extend({}, collection[id]);\n            var isDeleted = item && item[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.deleted;\n\n            return isDeleted ? undefined : item;\n        }\n    }\n\n    _getUpdateItemsResult(updateItems) {\n        var updatedItemCount = updateItems.length;\n        var modifiedAtResult = updatedItemCount ? updateItems[0].ModifiedAt : new Date();\n\n        return {\n            ModifiedAt: modifiedAtResult,\n            result: updatedItemCount\n        };\n    }\n\n    update(dataQuery, filter) {\n        var self = this;\n\n        return this._updateItems(dataQuery, dataQuery.data, filter, dataQuery.isSync).then(function (updateItems) {\n            return self._getUpdateItemsResult(updateItems);\n        });\n    }\n\n    remove(dataQuery, filter) {\n        return this._removeItems(dataQuery, filter, dataQuery.isSync);\n    }\n\n    count(dataQuery, filter) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            self._getCollection(dataQuery.collectionName)\n                .then(function (collection) {\n                    var filterResult = self._readInternal(collection, filter);\n                    resolve({result: filterResult.length});\n                }).catch(reject);\n        });\n    }\n\n    _mapCreateItem(currentItem, collection, isSync, preserveState, contentType) {\n        var self = this;\n\n        var itemToCreate = _.extend({}, currentItem);\n        itemToCreate._id = itemToCreate.Id || Utils.uuid();\n        delete itemToCreate.Id;\n\n        var existingItem = self._getById(collection, itemToCreate._id);\n        var itemExists = !!existingItem;\n        var state;\n        if (itemExists && (!isSync && !preserveState)) {\n            // TODO: [offline] return the same error as the server does\n            throw new EverliveError({message: 'An item with the specified id already exists'});\n        } else {\n            if (isSync && preserveState && itemExists) {\n                state = existingItem[Constants.offlineItemsStateMarker];\n            } else {\n                state = isSync ? undefined : Constants.offlineItemStates.created; // set the state to created only if not syncing\n            }\n        }\n\n        let itemIsFile = Utils.isContentType.files(contentType);\n\n        function processItemResult(localItemUri?: string) { // only present if item is File\n            if (itemIsFile) {\n                self._setLocalFileUri(itemToCreate, localItemUri);\n            }\n            self._setItemDates(currentItem, itemToCreate, contentType);\n            self._setItem(collection, _.extend({}, itemToCreate), state);\n            return itemToCreate;\n        }\n\n        if (itemIsFile) {\n            return self.offlineFilesProcessor.upsertFileFromObject(itemToCreate, true, isSync).then(processItemResult);\n        } else {\n            return processItemResult();\n        }\n    }\n\n    _createItems(contentType, items, isSync, preserveState) {\n        var self = this;\n        return this._getCollection(contentType)\n            .then(function (collection) {\n                var itemsForCreate = _.isArray(items) ? items : [items];\n                var createdItems = _.map(itemsForCreate, function (currentItem) {\n                    return self._mapCreateItem(currentItem, collection, isSync, preserveState, contentType);\n                });\n\n                return Promise.all(createdItems)\n                    .then(function (items) {\n                        return self._persistData(contentType)\n                            .then(function () {\n                                // Ids are generated regardless of the autoGenerateId option. However the Id's are omitted when returning\n                                // the items to the client if autoGenerateId is false\n                                if (!self._shouldAutogenerateIdForContentType(contentType) && !isSync) {\n                                    createdItems = offlineTransformations.removeIdTransform(items);\n                                }\n\n                                return items;\n                            });\n                    });\n            });\n    }\n\n    _applyUpdateOperation(originalUpdateExpression, itemToUpdate, collection, isSync?, modifiedAt?) {\n        var dbOperators = Utils.getDbOperators(originalUpdateExpression, true);\n        var hasDbOperator = dbOperators.length !== 0;\n\n        var updateExpression;\n        if (hasDbOperator) {\n            updateExpression = originalUpdateExpression;\n        } else {\n            updateExpression = {\n                $set: originalUpdateExpression\n            };\n        }\n        var updateExpressionForUser = {\n            ModifiedBy: this.everlive.setup.principalId || Constants.guidEmpty\n        };\n        updateExpression.$set = _.extend(updateExpressionForUser, updateExpression.$set);\n\n        if (isSync) {\n            updateExpression.$set.ModifiedAt = Utils.cloneDate(originalUpdateExpression.ModifiedAt || modifiedAt);\n        }\n\n        mongoQuery(itemToUpdate, {}, updateExpression, {strict: true}); // Setting strict to true so only exact matches would be updated\n\n        itemToUpdate._id = itemToUpdate._id || updateExpression._id || updateExpression.Id;\n        delete itemToUpdate.Id;\n\n        var newState;\n        if (isSync) {\n            newState = undefined;\n        } else if (itemToUpdate[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.created) {\n            newState = Constants.offlineItemStates.created;\n        } else {\n            newState = Constants.offlineItemStates.modified;\n        }\n\n        this._setItem(collection, itemToUpdate, newState);\n    }\n\n    updateFileContent(dataQuery) {\n        if (platform.isDesktop) {\n            return Promise.resolve();\n        }\n\n        var isSync = dataQuery.isSync;\n        var updateExpression = dataQuery.data;\n        var self = this;\n        var itemId = dataQuery.additionalOptions.id;\n        var updateItems;\n        var typeName = dataQuery.collectionName;\n        return this._getCollection(typeName)\n            .then(function (collection) {\n                var singleItemForUpdate = self._getById(collection, itemId);\n                updateItems = [singleItemForUpdate];\n                singleItemForUpdate.base64 = updateExpression.base64;\n                singleItemForUpdate.Filename = updateExpression.Filename;\n                singleItemForUpdate.ContentType = updateExpression.ContentType;\n                delete singleItemForUpdate.Uri;\n\n                return self._overwriteFile(itemId, singleItemForUpdate, isSync)\n                    .then(function () {\n                        self._applyUpdateOperation(updateExpression, singleItemForUpdate, collection);\n                        self._setItem(collection, singleItemForUpdate, Constants.offlineItemStates.modified);\n                        return self._persistData(typeName);\n                    })\n                    .then(function () {\n                        return self._getUpdateItemsResult(updateItems);\n                    })\n            });\n    }\n\n    _updateItems(dataQuery, updateExpression, filter, isSync) {\n        var self = this;\n        var collectionName = dataQuery.collectionName;\n\n        return self._getCollection(collectionName)\n            .then(function (collection) {\n                var updateItems;\n\n                if (dataQuery.additionalOptions && dataQuery.additionalOptions.id) {\n                    var itemId = dataQuery.additionalOptions.id;\n                    var singleItemForUpdate = self._getById(collection, itemId);\n                    if (!singleItemForUpdate) {\n                        throw new EverliveError({\n                            message: 'Item with id :' + itemId + ' does not exist offline in the collection :' + collectionName,\n                            code: EverliveErrors.itemNotFound.code\n                        });\n                    }\n\n                    updateItems = [singleItemForUpdate];\n\n                    if (Utils.isContentType.files(collectionName) && updateExpression.$set && updateExpression.$set.Filename || updateExpression.Filename) {\n                        var filename = updateExpression.Filename || updateExpression.$set.Filename;\n                        var extension = path.extname(filename);\n                        return self.everlive.offlineStorage.files.changeFileExtensionById(itemId, extension)\n                            .then(() => {\n                                self._applyUpdateOperation(updateExpression, singleItemForUpdate, collection, isSync, dataQuery.ModifiedAt);\n                                return self._persistData(collectionName);\n                            })\n                            .then(() => updateItems);\n                    } else {\n                        self._applyUpdateOperation(updateExpression, singleItemForUpdate, collection, isSync, dataQuery.ModifiedAt);\n                    }\n                } else {\n                    updateItems = self._readInternal(collection, filter);\n                    for (var i = 0; i < updateItems.length; i++) {\n                        var itemToUpdate = updateItems[i];\n                        var itemExists = !!self._getById(collection, itemToUpdate._id.toString());\n\n                        if (!itemExists && !isSync) {\n                            // TODO: [offline] return the correct error\n                            throw new EverliveError(EverliveErrors.itemNotFound);\n                        }\n\n                        self._applyUpdateOperation(updateExpression, itemToUpdate, collection, isSync, dataQuery.ModifiedAt);\n                    }\n                }\n\n                return self._persistData(collectionName)\n                    .then(() => updateItems);\n            });\n    }\n\n    _getAllCollections() {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            self.persister.getAllData(function (allData) {\n                _.each(allData, function (value:string, key:string) {\n                    var decryptedData = self._encryptionProvider.decrypt(value);\n                    allData[key] = JSON.parse(decryptedData || '{}', Utils.parseUtilities.getReviver());\n                });\n\n                resolve(allData);\n            }, reject);\n        });\n    }\n\n    _getCollection(contentType) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            // check the persister if there is no data in the collection cache for this content type\n            if (!self._collectionCache[contentType]) {\n                self.persister.getData(contentType, function (data) {\n                    var decryptedDataRaw = self._encryptionProvider.decrypt(data);\n                    var decryptedData = JSON.parse(decryptedDataRaw || '{}', Utils.parseUtilities.getReviver());\n                    self._collectionCache[contentType] = decryptedData;\n\n                    resolve(self._collectionCache[contentType]);\n                }, reject);\n            } else {\n                resolve(self._collectionCache[contentType]);\n            }\n        });\n    }\n\n    _setItem(collection, item, state) {\n        this._setItemState(item, state);\n        collection[item._id] = item;\n    }\n\n    _persistData(contentType, items?) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            var contentTypeData = self._collectionCache[contentType] || {};\n            self._transformPersistedData(contentType, contentTypeData);\n            var contentTypeDataRaw = JSON.stringify(contentTypeData);\n            var contentTypeDataRawEncrypted = self._encryptionProvider.encrypt(contentTypeDataRaw);\n            self.persister.saveData(contentType, contentTypeDataRawEncrypted, resolve, reject);\n        });\n    }\n\n    _shouldAutogenerateIdForContentType(contentType) {\n        return !(this.setup && this.setup.typeSettings && this.setup.typeSettings[contentType] && this.setup.typeSettings[contentType].autoGenerateId === false);\n    }\n\n    _clearItem(collection, item) {\n        delete collection[item._id];\n    }\n\n    _mapRemoveItem(itemToRemove, collection, isSync, collectionName) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            //we cannot remove files while in desktop mode\n            if (Utils.isContentType.files(collectionName) && !platform.isDesktop) {\n                return self.everlive.offlineStorage.files.purge(itemToRemove._id).then(resolve, reject);\n            } else {\n                return resolve();\n            }\n        }).then(function () {\n            itemToRemove._id = itemToRemove._id || itemToRemove.Id;\n\n            var itemExists = !!self._getById(collection, itemToRemove._id.toString());\n            if (!itemExists && !isSync) {\n                throw new EverliveError({message: 'Cannot delete item - item with id ' + itemToRemove._id + ' does not exist.'});\n            }\n\n            // if the item has existed only offline or the data is syncing\n            // and the item was deleted by the conflict resolution strategy\n            var removeFromMemory = itemToRemove[Constants.offlineItemsStateMarker] === Constants.offlineItemStates.created || isSync;\n            if (removeFromMemory) {\n                self._clearItem(collection, itemToRemove);\n            } else {\n                self._setItem(collection, itemToRemove, Constants.offlineItemStates.deleted);\n            }\n        });\n    }\n\n    _removeItems(dataQuery, filter, isSync) {\n        var self = this;\n        var collectionName = dataQuery.collectionName;\n\n        return self._getCollection(collectionName)\n            .then(function (collection) {\n                var itemsToRemove = self._readInternal(collection, filter);\n\n                var removedItemsPromises = _.map(itemsToRemove, function (itemToRemove) {\n                    return self._mapRemoveItem(itemToRemove, collection, isSync, collectionName);\n                });\n\n                return Promise.all(removedItemsPromises);\n            })\n            .then(function (itemsToRemove) {\n                return self._persistData(collectionName)\n                    .then(function () {\n                        return itemsToRemove;\n                    });\n            })\n            .then(function (itemsToRemove) {\n                return self._transformOfflineResult(itemsToRemove.length);\n            });\n    }\n\n    aggregate(dataQuery, queryParams) {\n        var self = this;\n\n        return this._getCollection(dataQuery.collectionName).then(function (collection) {\n            if (!queryParams || !queryParams.aggregate || _.isEmpty(queryParams.aggregate)) {\n                throw new EverliveError({message: 'You must specify a valid aggregation definition. Either GroupBy or Aggregate is required.'});\n            }\n\n            var aggregationQuery = _.extend({}, queryParams.aggregate);\n            aggregationQuery.Filter = queryParams.filter;\n\n            var translatedPipeline = aggregationTranslator.translate(aggregationQuery, {\n                maxDocumentsCount: Constants.Aggregation.MaxDocumentsCount\n            });\n\n            var collectionWithoutDeleted = _.filter(collection, function (item:any) {\n                return item[Constants.offlineItemsStateMarker] !== Constants.offlineItemStates.deleted;\n            });\n\n            var result = mingo.aggregate(collectionWithoutDeleted, translatedPipeline);\n            return self._transformOfflineResult(result, null, dataQuery);\n        });\n    }\n\n    purgeAll(success, error) {\n        this._collectionCache = {};\n        return super.purgeAll(success, error);\n    }\n\n    purge(contentType, success, error) {\n        delete this._collectionCache[contentType];\n        return super.purge(contentType, success, error);\n    }\n\n    purgeById(contentType, itemId) {\n        var self = this;\n\n        return this._getCollection(contentType)\n            .then(function (collection) {\n                delete collection[itemId];\n                return self._persistData(contentType);\n            });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/processors/OfflineInMemoryQueryProcessor.ts\n **/","import * as _ from 'underscore';\nimport * as path from 'path';\nimport * as platform from '../../../common/platform';\n\nimport { EverliveError, EverliveErrors } from '../../EverliveError';\nimport { OfflineQueryProcessor } from './OfflineQueryProcessor'\nimport { Utils } from '../../utils';\nimport { offlineTransformations } from '../offlineTransformations';\nimport { Constants, DataQueryOperation } from '../../constants';\n\nexport class OfflineSQLiteQueryProcessor extends OfflineQueryProcessor {\n\n    processQuery(dataQuery) {\n        const collectionName = dataQuery.collectionName;\n        if (Utils.isContentType.pushDevices(collectionName) || Utils.isContentType.pushNotifications(collectionName)) {\n            if (this.everlive.isOnline()) {\n                return Promise.resolve();\n            } else {\n                return Promise.reject(new EverliveError(EverliveErrors.pushNotSupportedOffline));\n            }\n        }\n\n        let queryNotSupportedError = this.checkSupportedQuery(dataQuery);\n        if (queryNotSupportedError && !dataQuery.isSync) {\n            return new Promise((resolve, reject) => {\n                reject(new EverliveError(queryNotSupportedError));\n            });\n        }\n\n        const queryParams = dataQuery.getQueryParameters();\n        const unsupportedOperators = Utils.getUnsupportedOperators(queryParams.filter);\n        const unsupportedOperatorCount = unsupportedOperators.length;\n        if (unsupportedOperatorCount) {\n            return new Promise((resolve, reject) => {\n                let errorMessage;\n                if (unsupportedOperatorCount === 1) {\n                    errorMessage = 'The operator ' + unsupportedOperators[0] + ' is not supported in offline mode.';\n                } else {\n                    errorMessage = 'The operators ' + unsupportedOperators.join(',') + 'are not supported in offline mode.';\n                }\n\n                reject(new EverliveError({\n                    message: errorMessage,\n                    code: EverliveErrors.operationNotSupportedOffline.code\n                }));\n            });\n        }\n\n        offlineTransformations.traverseAndTransformFilterId(queryParams.filter);\n        offlineTransformations.traverseAndTransformFilterId(queryParams.select);\n        offlineTransformations.traverseAndTransformFilterId(queryParams.sort);\n\n        switch (dataQuery.operation) {\n            case DataQueryOperation.Read:\n                return this.read(dataQuery, queryParams.filter, queryParams.sort, queryParams.skip, queryParams.limit, queryParams.select, queryParams.expand);\n            case DataQueryOperation.ReadById:\n                return this.readById(dataQuery, queryParams.expand);\n            case DataQueryOperation.FilesGetDownloadUrlById:\n                return this.getDownloadUrlById(dataQuery);\n            case DataQueryOperation.Count:\n                return this.count(dataQuery, queryParams.filter);\n            case DataQueryOperation.Create:\n                return this.create(dataQuery);\n            case DataQueryOperation.RawUpdate:\n            case DataQueryOperation.Update:\n                return this.update(dataQuery, queryParams.filter);\n            case DataQueryOperation.FilesUpdateContent:\n                return this.updateFileContent(dataQuery);\n            case DataQueryOperation.Delete:\n                return this.remove(dataQuery, queryParams.filter);\n            case DataQueryOperation.DeleteById:\n                return this.remove(dataQuery, {\n                    _id: dataQuery.additionalOptions.id\n                });\n            case DataQueryOperation.Aggregate:\n                return new Promise((resolve, reject) => {\n                    let operationStr = DataQueryOperation[dataQuery.operation];\n                    reject(new EverliveError({message: operationStr + ' is not supported in offline mode.'}));\n                });\n            default:\n                return new Promise((resolve, reject) => {\n                    if (dataQuery.isSync) {\n                        resolve();\n                    } else {\n                        let operationStr = DataQueryOperation[dataQuery.operation];\n                        reject(new EverliveError({message: operationStr + ' is not supported in offline mode.'}));\n                    }\n                });\n        }\n    }\n\n    update(dataQuery, filter) {\n        return this._updateItems(dataQuery, dataQuery.data, filter, dataQuery.isSync).then((updateItems) => {\n            return {\n                ModifiedAt: new Date(),\n                result: updateItems\n            };\n        });\n    }\n\n    updateFileContent(dataQuery) {\n        if (platform.isDesktop) {\n            return Promise.resolve();\n        }\n\n        const isSync = dataQuery.isSync;\n        const updateExpression = dataQuery.data;\n        const itemId = dataQuery.additionalOptions.id;\n        let updateItems;\n        const typeName = dataQuery.collectionName;\n\n        return this._getById(typeName, itemId)\n            .then((item) => {\n                let singleItemForUpdate = item[0];\n                updateItems = [singleItemForUpdate];\n                singleItemForUpdate.base64 = updateExpression.base64;\n                singleItemForUpdate.Filename = updateExpression.Filename;\n                singleItemForUpdate.ContentType = updateExpression.ContentType;\n                delete singleItemForUpdate.Uri;\n\n                return this._overwriteFile(itemId, singleItemForUpdate, isSync)\n                    .then(() => {\n                        return this._getUpdatePromise(typeName, updateExpression, {_id: itemId});\n                    })\n                    .then((updateItems) => {\n                        return {\n                            ModifiedAt: new Date(),\n                            result: updateItems\n                        };\n                    });\n            });\n    }\n\n    _getById(typeName, itemId) {\n        return new Promise((resolve, reject) => {\n            this.persister.queryData(typeName, resolve, reject, {_id: itemId});\n        });\n    }\n\n    _updateItems(dataQuery, updateExpression, filter, isSync) {\n        const collectionName = dataQuery.collectionName;\n\n        if (dataQuery.additionalOptions && dataQuery.additionalOptions.id) {\n            const itemId = dataQuery.additionalOptions.id;\n            filter = {_id: itemId}\n        }\n\n        if (Utils.isContentType.files(collectionName) && updateExpression.$set && updateExpression.$set.Filename || updateExpression.Filename) {\n            const filename = updateExpression.Filename || updateExpression.$set.Filename;\n            const extension = path.extname(filename);\n            return this.everlive.offlineStorage.files.changeFileExtensionById(dataQuery.additionalOptions.id, extension)\n                .then(() => {\n                    return this._getUpdatePromise(collectionName, updateExpression, filter, isSync, dataQuery.ModifiedAt);\n                });\n        } else {\n            return this._getUpdatePromise(collectionName, updateExpression, filter, isSync, dataQuery.ModifiedAt);\n        }\n    }\n\n    _getUpdatePromise(collectionName, updateExpression, filter, isSync?, modifiedAt?) {\n        const updateOfflineCreated = this._applyUpdateOperation(collectionName, updateExpression, filter, Constants.offlineItemStates.created, isSync, modifiedAt);\n        const updateModified = this._applyUpdateOperation(collectionName, updateExpression, filter, Constants.offlineItemStates.modified, isSync, modifiedAt);\n\n        return Promise.all([updateOfflineCreated, updateModified]).then((result) => {\n            let modifiedItems = 0;\n            _.each(result, (item: number) => {\n                modifiedItems += item;\n            });\n            return modifiedItems;\n        }, function (err) {\n            return 0;\n        });\n    }\n\n    _applyUpdateOperation(contentType, originalUpdateExpression, filter, state, isSync?, modifiedAt?) {\n        const dbOperators = Utils.getDbOperators(originalUpdateExpression, true);\n        const hasDbOperator = dbOperators.length !== 0;\n\n        let updateExpression;\n        if (hasDbOperator) {\n            updateExpression = originalUpdateExpression;\n        } else {\n            updateExpression = {\n                $set: originalUpdateExpression\n            };\n        }\n        let updateExpressionForUser = {\n            ModifiedBy: this.everlive.setup.principalId || Constants.guidEmpty\n        };\n        updateExpression.$set = _.extend(updateExpressionForUser, updateExpression.$set);\n        delete updateExpression.$set.Id;\n        if (isSync) {\n            if (originalUpdateExpression.$set && originalUpdateExpression.$set.ModifiedAt) {\n                updateExpression.$set.ModifiedAt = Utils.cloneDate(originalUpdateExpression.$set.ModifiedAt);\n            } else {\n                updateExpression.$set.ModifiedAt = Utils.cloneDate(originalUpdateExpression.ModifiedAt || modifiedAt);\n            }\n        }\n\n        delete filter[Constants.offlineItemsStateMarker];\n        if (!isSync) {\n            if (state === Constants.offlineItemStates.created) {\n                filter[Constants.offlineItemsStateMarker] = Constants.offlineItemStates.created;\n                updateExpression.$set[Constants.offlineItemsStateMarker] = state;\n            } else {\n                filter['$or'] = [\n                    {[Constants.offlineItemsStateMarker]: Constants.offlineItemStates.modified},\n                    {[Constants.offlineItemsStateMarker]: {$is: null}}\n                ];\n                updateExpression.$set[Constants.offlineItemsStateMarker] = Constants.offlineItemStates.modified;\n            }\n        } else {\n            updateExpression.$set[Constants.offlineItemsStateMarker] = '';\n        }\n\n        return new Promise((resolve, reject) => {\n            this.persister.updateData(contentType, updateExpression, resolve, reject, filter);\n        });\n\n    }\n\n    readById(dataQuery, expand) {\n        let expandResult;\n        return this._prepareExpand(expand, dataQuery, false)\n            .then((prepareExpandResult) => {\n                expandResult = prepareExpandResult;\n                if (!dataQuery.additionalOptions.id) {\n                    return Promise.reject(new EverliveError({message: 'Id field is mandatory when using offline storage'}));\n                }\n                return new Promise((resolve, reject) => {\n                    const itemId = dataQuery.additionalOptions.id;\n                    this.persister.queryData(dataQuery.collectionName, resolve, reject, {_id: itemId});\n                });\n            })\n            .then((queryResults) => {\n                let item = queryResults[0];\n                if (!item) {\n                    return Promise.reject(new EverliveError(EverliveErrors.itemNotFound));\n                }\n                item = offlineTransformations.idTransform(item);\n                return this._expandResult(expandResult, item);\n            })\n            .then((expandedResult) => {\n                let transformedItem = this._transformOfflineResult(expandedResult, null, dataQuery);\n                return transformedItem;\n            });\n    }\n\n    remove(dataQuery, filter) {\n        return this._removeItems(dataQuery, filter, dataQuery.isSync);\n    }\n\n    _purgeFiles(filter, success, error) {\n        this.persister.queryData('Files', (result) => {\n            let purgePromises = _.map(result, (f: any) => this.everlive.offlineStorage.files.purge(f._id));\n            return Promise.all(purgePromises).then(success);\n        }, function (err) {\n            error(err);\n        }, filter);\n    }\n\n    _removeItems(dataQuery, filter, isSync) {\n        return new Promise((resolve, reject) => {\n            //we cannot remove files while in desktop mode\n            if (Utils.isContentType.files(dataQuery.collectionName) && !platform.isDesktop) {\n                if (!filter) {\n                    return resolve();\n                } else {\n                    this._purgeFiles(filter, resolve, reject);\n                }\n            } else {\n                return resolve();\n            }\n        }).then(() => {\n            const collectionName = dataQuery.collectionName;\n            const deleteOfflineCreated = new Promise((resolve, reject) => {\n                const createdOfflineFilter = filter ? _.clone(filter) : {};\n                createdOfflineFilter[Constants.offlineItemsStateMarker] = Constants.offlineItemStates.created;\n                this.persister.removeData(collectionName, resolve, reject, createdOfflineFilter);\n            });\n\n            let setDeletedStatus = new Promise((resolve, reject) => {\n                if (isSync) {\n                    const itemIdFilter = filter['Id'] || filter['_id'];\n                    if (itemIdFilter) {\n                        this.persister.purgeById(collectionName, itemIdFilter, resolve, reject);\n                    } else if (filter) {\n                        this.persister.removeData(collectionName, resolve, reject, filter);\n                    }\n                    else {\n                        this.persister.purge(collectionName, resolve, reject);\n                    }\n                } else {\n                    const modifiedOfflineFilter = filter ? _.clone(filter) : {};\n                    modifiedOfflineFilter['$or'] = [\n                        {[Constants.offlineItemsStateMarker]: Constants.offlineItemStates.modified},\n                        {[Constants.offlineItemsStateMarker]: {$is: null}}\n                    ];\n                    this.persister.updateData(collectionName, {[Constants.offlineItemsStateMarker]: Constants.offlineItemStates.deleted}, resolve, reject, modifiedOfflineFilter);\n                }\n            });\n\n            return Promise.all([deleteOfflineCreated, setDeletedStatus])\n                .then((removedItems) => {\n                    let count = 0;\n                    _.each(removedItems, (item: number) => {\n                        if (item) {\n                            count += item;\n                        }\n                    });\n                    return this._transformOfflineResult(count);\n                });\n\n        });\n    }\n\n    count(dataQuery, filter) {\n        return new Promise((resolve, reject) => {\n            this.persister.count(dataQuery.collectionName, (result) => {\n                resolve({result: result.Count});\n            }, reject, filter);\n        });\n    }\n\n    _persistData(contentType, items?) {\n        return new Promise((resolve, reject) => {\n            this._transformPersistedData(contentType, items);\n            this.persister.saveData(contentType, items, resolve, reject);\n        });\n    }\n\n    read(dataQuery, filter, sort, skip, limit, select, expand) {\n        OfflineSQLiteQueryProcessor._handleIdInSelect(select);\n        const selectIsValid = OfflineSQLiteQueryProcessor._validateSelectMode(select);\n\n        if (!selectIsValid) {\n            const err = new EverliveError(EverliveErrors.generalDatabaseError);\n            err.message = 'You cannot mix including and excluding fields.';\n            return Promise.reject(err);\n        }\n\n        let expandResult;\n\n        return new Promise((resolve, reject) => {\n            this._prepareExpand(expand, dataQuery, true)\n                .then((prepareExpandResult:any) => {\n                    expandResult = prepareExpandResult;\n                    if (prepareExpandResult) {\n                        select = prepareExpandResult.mainQueryFieldsExpression;\n                    }\n                    const filterCopy = _.extend({}, filter);\n                    const actualFilter = this._getWithoutDeletedFilter(filterCopy, true);\n                    return this._readInternal(dataQuery.collectionName, actualFilter, sort, skip, limit, select, expand);\n                })\n                .then((result) => {\n                    const transformResult = (collectionLength?) => {\n                        if (collectionLength) {\n                            collectionLength = collectionLength['Count'];\n                        }\n                        if (this._shouldAutogenerateIdForContentType(dataQuery.collectionName)) {\n                            result = offlineTransformations.idTransform(result);\n                        } else {\n                            result = offlineTransformations.removeIdTransform(result, true);\n                        }\n\n                        this._expandResult(expandResult, result)\n                            .then((expandedResult) => {\n                                let response = this._transformOfflineResult(expandedResult, collectionLength, dataQuery);\n                                resolve(response);\n                            }, reject);\n                    };\n\n                    if (skip || limit) {\n                        this.persister.count(dataQuery.collectionName, transformResult, reject);\n                    } else {\n                        transformResult();\n                    }\n                })\n                .catch(reject);\n        });\n    }\n\n    private static _validateSelectMode(select) {\n        if (!Utils.existsAndIsNotEmpty(select)) {\n            return true;\n        }\n\n        let inclusionOrExclusion = null;\n        const keys = _.keys(select);\n\n        for (let i = 0; i < keys.length; i += 1) {\n            let key = keys[i];\n            let value = select[key];\n\n            if (key === '_id' || key === 'Id' || !select.hasOwnProperty(key)) {\n                continue;\n            }\n\n            if (inclusionOrExclusion == null) {\n                inclusionOrExclusion = value;\n            } else if (value != inclusionOrExclusion) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    private static _handleIdInSelect(select) {\n        if (!Utils.existsAndIsNotEmpty(select)) {\n            return;\n        }\n        // Id is included, unless explicitly excluded by user\n        const selectId = select['_id'] || select['Id'];\n        if (selectId !== 0) {\n            select['_id'] = 1;\n        }\n    }\n\n    _readInternal(tableName, filter?, sort?, skip?, limit?, select?, expand?) {\n        return new Promise((resolve, reject) => {\n            this.persister.queryData(tableName, resolve, reject, filter, sort, skip, limit, select);\n        });\n    }\n\n    create(dataQuery) {\n        return this._createItems(dataQuery.collectionName, dataQuery.data, dataQuery.isSync, dataQuery.preserveState)\n            .then((createdItems) => {\n                const isFilesQuery = Utils.isContentType.files(dataQuery.collectionName);\n                return this._getCreateResult(createdItems, isFilesQuery);\n            });\n    }\n\n    _createItems(contentType, items, isSync, preserveState) {\n        let itemsForCreate = _.isArray(items) ? items : [items];\n        let createdItems = _.map(itemsForCreate, (currentItem) => {\n            let itemToCreate = _.extend({}, currentItem);\n            itemToCreate._id = itemToCreate.Id || Utils.uuid();\n            delete itemToCreate.Id;\n\n\n            return this._getById(contentType, itemToCreate._id)\n                .then((item) => {\n                    const itemExists = item[0] && item[0][Constants.offlineItemsStateMarker] !== Constants.offlineItemStates.deleted;\n                    let state;\n                    if (isSync && preserveState && itemExists) {\n                        state = item[0][Constants.offlineItemsStateMarker];\n                    } else {\n                        state = isSync ? undefined : Constants.offlineItemStates.created; // set the state to created only if not syncing\n                    }\n\n                    const isFileItem = Utils.isContentType.files(contentType);\n\n                    const processItemResult = (localItemUri?: string) => { // only present if item is File\n                        if (isFileItem) {\n                            this._setLocalFileUri(itemToCreate, localItemUri);\n                        }\n                        this._setItemDates(currentItem, itemToCreate, contentType);\n                        this._setItemState(itemToCreate, state);\n                        return itemToCreate;\n                    };\n\n                    if (isFileItem) {\n                        return this.offlineFilesProcessor.upsertFileFromObject(itemToCreate, true, isSync).then(processItemResult);\n                    } else {\n                        return processItemResult();\n                    }\n                });\n        });\n\n        return Promise.all(createdItems)\n            .then((items) => {\n                return this._persistData(contentType, items)\n                    .then(() => {\n                        // Ids are generated regardless of the autoGenerateId option. However the Id's are omitted when returning\n                        // the items to the client if autoGenerateId is false\n                        if (!this._shouldAutogenerateIdForContentType(contentType) && !isSync) {\n                            createdItems = offlineTransformations.removeIdTransform(items);\n                        }\n                        return items;\n                    });\n            });\n    }\n\n    _getAllCollections() {\n        return new Promise((resolve, reject) => {\n            this.persister.getAllData((allData) => {\n\n                _.each(allData, (items: any[], key: string) => {\n                    let currentType = {};\n                    _.each(items, (item) => {\n                        const itemId = item['_id'];\n                        const itemAsString = JSON.stringify(item);\n                        const actualItem = JSON.parse(itemAsString, Utils.parseUtilities.getReviver());\n                        currentType[itemId] = actualItem;\n                    });\n                    allData[key] = currentType;\n                });\n                resolve(allData);\n            }, reject);\n        });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/offline/processors/OfflineSQLiteQueryProcessor.ts\n **/","import * as platform from '../../common/platform';\n\nexport interface Device {\n    emulatorMode: boolean;\n    _pushHandler;\n\n    enableNotifications(pushSettings, success?: Function, error?: Function);\n    disableNotifications(success?: Function, error?: Function);\n    register(customParameters, success?: Function, error?: Function);\n    unregister(success?: Function, error?: Function);\n    updateRegistration(customParameters, success?: Function, error?: Function);\n    areNotificationsEnabled(options, onSuccess?: Function, onError?: Function);\n    notificationProcessed();\n    getRegistration();\n    _getPlatformType();\n    _getDeviceId();\n}\n\nexport function getCurrentDevice(pushHandler): Device {\n    if (platform.isNativeScript) {\n    \tvar NativeScriptCurrentDevice = require('./NativeScriptCurrentDevice');\n        return new NativeScriptCurrentDevice(pushHandler);\n    } else if (platform.isCordova || platform.isDesktop) {\n    \tvar CordovaCurrentDevice = require('./CordovaCurrentDevice');\n        return new CordovaCurrentDevice(pushHandler);\n    } else {\n        return <Device>{};\n    }\n}\n\nexport function ensurePushIsAvailable(): void {\n    if (platform.isNativeScript) {\n        var NativeScriptCurrentDevice = require('./NativeScriptCurrentDevice');\n        NativeScriptCurrentDevice.ensurePushIsAvailable();\n    } else if (platform.isCordova || platform.isDesktop) {\n        var CordovaCurrentDevice = require('./CordovaCurrentDevice');\n        CordovaCurrentDevice.ensurePushIsAvailable();\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/push/CurrentDevice.ts\n **/","import { DataQueryOperation } from \"../../common/Constants\";\n\nimport { Constants } from '../constants';\nimport { DataQuery } from \"../dataQuery/DataQuery\";\n\n/**\n * @class EventQuery\n * @classdesc A query which is passed in the 'beforeExecute' event of [Everlive]{@link Everlive}. Allows changing the parameters of\n * a query before executing it.\n */\nexport class EventQuery {\n    contentTypeName;\n    operation;\n    itemId;\n    data;\n    headers;\n    powerfields;\n    isSync: boolean;\n    settings;\n\n    filter;\n    fields;\n    sort;\n    skip;\n    take;\n    expand;\n    aggregate;\n\n    private _cancelled: boolean;\n\n    static fromDataQuery(dataQuery: DataQuery): EventQuery {\n        var eventQuery = new EventQuery();\n        eventQuery.contentTypeName = dataQuery.collectionName;\n        if (dataQuery.additionalOptions && dataQuery.additionalOptions.id) {\n            switch (dataQuery.operation) {\n                case DataQueryOperation.Update:\n                    eventQuery.operation = DataQueryOperation.UpdateById;\n                    break;\n                case DataQueryOperation.Delete:\n                    eventQuery.operation = DataQueryOperation.DeleteById;\n                    break;\n                default:\n                    eventQuery.operation = dataQuery.operation;\n            }\n        } else {\n            eventQuery.operation = dataQuery.operation;\n        }\n\n        eventQuery.itemId = dataQuery.additionalOptions ? dataQuery.additionalOptions.id : undefined;\n        eventQuery.data = dataQuery.data;\n\n        applyDataQuerySettings(eventQuery, dataQuery);\n        applyDataQueryParameters(eventQuery, dataQuery);\n        eventQuery.headers = dataQuery.getHeaders();\n        var powerFieldsHeader = eventQuery.headers[Constants.Headers.powerFields];\n        if (typeof powerFieldsHeader === 'string') {\n            eventQuery.powerfields = JSON.parse(powerFieldsHeader);\n        }\n        eventQuery.isSync = dataQuery.isSync; // readonly\n\n        return eventQuery;\n    }\n\n    /**\n     * Cancels the query.\n     * @memberOf EventQuery.prototype\n     * @method cancel\n     */\n    cancel() {\n        this._cancelled = true;\n    }\n\n    /**\n     * Indicates whether the query has been canceled.\n     * @memberOf EventQuery.prototype\n     * @method isCanceled\n     * @returns {boolean}\n     */\n    isCancelled() {\n        return this._cancelled;\n    }\n}\n\n/** The name of the content type, e.g. EmailSubcrbers.\n * @memberOf EventQuery.prototype\n * @member {string} contentTypeName\n */\n\n/** The query data which will be send to the server.\n * @memberOf EventQuery.prototype\n * @member {Object} data\n */\n\n/** The query headers which will be send with the HTTP request.\n * @memberOf EventQuery.prototype\n * @member {Object} headers\n */\n\n/** The Id of the item.\n * @memberOf EventQuery.prototype\n * @member {string} itemId\n */\n\n/** The type of the operation--read, write, update, delete.\n * @memberOf EventQuery.prototype\n * @member {string} operation\n */\n\n/** A power fields expression.\n * @memberOf EventQuery.prototype\n * @member {string} powerfields\n * @deprecated\n */\n\n/** A custom settings object.\n * @memberOf EventQuery.prototype\n * @member {string} settings\n */\n\n/** A [filter expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-filtering) definition.\n * @memberOf EventQuery.prototype\n * @member {Object} filter\n */\n\n/** A [fields expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-subset-fields) definition.\n * @memberOf EventQuery.prototype\n * @member {Object} fields\n */\n\n/** A [sort expression](http://docs.telerik.com/platform/backend-services/rest/queries/queries-sorting) definition.\n * @memberOf EventQuery.prototype\n * @member {Object} sort\n */\n\n/** The number of result items to skip. Used for paging.\n * @memberOf EventQuery.prototype\n * @member {Number} skip\n */\n\n/** The number of result items to take. Used for paging.\n * @memberOf EventQuery.prototype\n * @member {Number} take\n */\n\n/** An [expand expression](http://docs.telerik.com/platform/backend-services/javascript/data/relations/relations-defining) definition.\n * @memberOf EventQuery.prototype\n * @member {Object} expand\n */\n\n/** Indicates whether the query is a synchronization query. Used with Offline Support.\n * @memberOf EventQuery.prototype\n * @member {boolean} isSync\n * @readonly\n */\n\nfunction applyDataQueryParameters(eventQuery: EventQuery, dataQuery: DataQuery) {\n    var queryParameters = dataQuery.getQueryParameters();\n    eventQuery.filter = queryParameters.filter;\n    eventQuery.fields = queryParameters.select;\n    eventQuery.sort = queryParameters.sort;\n    eventQuery.skip = queryParameters.skip;\n    eventQuery.take = queryParameters.limit || queryParameters.take;\n    eventQuery.expand = queryParameters.expand;\n    eventQuery.aggregate = queryParameters.aggregate;\n    return queryParameters;\n}\n\n/** An object allowing to modify the settings of the EventQuery.\n * @memberOf EventQuery.prototype\n * @member {Object} settings\n * @property {boolean} useOffline - Modifies whether the query should be invoked on the offline storage.\n * @property {boolean} applyOffline - Modifies whether the query should be applied offline if the SDK is currently working online. Default is true. Only valid when offlineStorage is enabled.\n * @property {boolean} ignoreCache - Does not use the cache when retrieving the data. Only valid when caching is enabled.\n * @property {boolean} forceCache - Forces the request to get the data from the cache even if the data is already expired. Only valid when caching is enabled.\n */\n\nfunction applyDataQuerySettings(eventQuery: EventQuery, dataQuery: DataQuery): void {\n    eventQuery.settings = {\n        useOffline: dataQuery.useOffline,\n        applyOffline: dataQuery.applyOffline,\n        ignoreCache: dataQuery.ignoreCache,\n        forceCache: dataQuery.forceCache\n    };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/query/EventQuery.ts\n **/","import { Expression } from '../Expression';\nimport { Constants } from '../constants';\n\nconst OperatorType = Constants.OperatorType;\n\n/**\n * @classdesc A fluent API operation for creating a filter for a query by chaining different rules.\n * @class WhereQuery\n * @protected\n * @borrows WhereQuery#eq as WhereQuery#equal\n * @borrows WhereQuery#ne as WhereQuery#notEqual\n * @borrows WhereQuery#gt as WhereQuery#greaterThan\n * @borrows WhereQuery#gte as WhereQuery#greaterThanEqual\n * @borrows WhereQuery#lt as WhereQuery#lessThan\n * @borrows WhereQuery#lte as WhereQuery#lessThanEqual\n */\nexport class WhereQuery {\n    parent;\n    single;\n    expr;\n\n    constructor(parentQuery, exprOp?, singleOperand?) {\n        this.parent = parentQuery;\n        this.single = singleOperand;\n        this.expr = new Expression(exprOp || OperatorType.where);\n        this.parent.expr.addOperand(this.expr);\n    }\n\n    /**\n     * Adds an `and` clause to the current condition and returns it for further chaining.\n     * @method and\n     * @memberOf WhereQuery.prototype\n     * @returns {WhereQuery}\n     */\n    and() {\n        return new WhereQuery(this, OperatorType.and);\n    }\n    /**\n     * Adds an `or` clause to the current condition and returns it for further chaining.\n     * @method or\n     * @memberOf WhereQuery.prototype\n     * @returns {WhereQuery}\n     */\n    or() {\n        return new WhereQuery(this, OperatorType.or);\n    }\n    /**\n     * Adds a `not` clause to the current condition and returns it for further chaining.\n     * @method not\n     * @memberOf WhereQuery.prototype\n     * @returns {WhereQuery}\n     */\n    not() {\n        return new WhereQuery(this, OperatorType.not, true);\n    }\n    _simple(operator, ...args) {\n        this.expr.addOperand(new Expression(operator, args));\n        return this._done();\n    }\n    /**\n     * Adds a condition that a field must be equal to a specific value.\n     * @method eq\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {*} value Comparison value (to which the fields must be equal).\n     * @returns {WhereQuery}\n     */\n    eq(field, value) {\n        return this._simple(OperatorType.equal, field, value);\n    }\n    /**\n     * Adds a condition that a field must *not* be equal to a specific value.\n     * @method ne\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {*} value Comparison value (to which the field must not be equal).\n     * @returns {WhereQuery}\n     */\n    ne(field, value) {\n        return this._simple(OperatorType.not_equal, field, value);\n    }\n    /**\n     * Adds a condition that a field must be `greater than` a certain value. Applicable to Number, String, and Date fields.\n     * @method gt\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {*} value Comparison value (that the field should be greater than).\n     * @returns {WhereQuery}\n     */\n    gt(field, value) {\n        return this._simple(OperatorType.gt, field, value);\n    }\n    /**\n     * Adds a condition that a field must be `greater than or equal` to a certain value. Applicable to Number, String, and Date fields.\n     * @method gte\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {*} value Comparison value (that the field should be greater than or equal to).\n     * @returns {WhereQuery}\n     */\n    gte(field, value) {\n        return this._simple(OperatorType.gte, field, value);\n    }\n    /**\n     * Adds a condition that a field must be `less than` a certain value. Applicable to Number, String, and Date fields.\n     * @method lt\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {*} value Comparison value (that the field should be less than).\n     * @returns {WhereQuery}\n     */\n    lt(field, value) {\n        return this._simple(OperatorType.lt, field, value);\n    }\n    /**\n     * Adds a condition that a field must be `less than or equal` to a certain value. Applicable to Number, String, and Date fields.\n     * @method lte\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {*} value Comparison value (that the field should be less than or equal to).\n     * @returns {WhereQuery}\n     */\n    lte(field, value) {\n        return this._simple(OperatorType.lte, field, value);\n    }\n    /**\n     * Adds a condition that a field must be in a set of values.\n     * @method isin\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {Array} value An array of the values that the field should be in.\n     * @returns {WhereQuery}\n     */\n    isin(field, value) {\n        return this._simple(OperatorType.isin, field, value);\n    }\n    /**\n     * Adds a condition that a field must *not* be in a set of values.\n     * @method notin\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {Array} value An array of values that the field should not be in.\n     * @returns {WhereQuery}\n     */\n    notin(field, value) {\n        return this._simple(OperatorType.notin, field, value);\n    }\n    /**\n     * Adds a condition that a field must include *all* of the specified values. Applicable to Array fields.\n     * @method all\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {Array} value An array of values that the field must include.\n     * @returns {WhereQuery}\n     */\n    all(field, value) {\n        return this._simple(OperatorType.all, field, value);\n    }\n    /**\n     * Adds a condition that a field must contain an array whose length is larger than a specified value. Applicable to Array fields.\n     * @method size\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {number} value The size that the array must be bigger than.\n     * @returns {WhereQuery}\n     */\n    size(field, value) {\n        return this._simple(OperatorType.size, field, value);\n    }\n    /**\n     * Adds a condition that a field must satisfy a specified regex.\n     * @method regex\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {string} regularExpression Regular expression in PCRE format.\n     * @param {string} [options] A string of regex options to use. See [specs](http://docs.mongodb.org/manual/reference/operator/query/regex/#op._S_options) for a description of available options.\n     * @returns {WhereQuery}\n     */\n    regex(field, value, flags) {\n        return this._simple(OperatorType.regex, field, value, flags);\n    }\n    /**\n     * Adds a condition that a field value must *start* with a specified string.\n     * @method startsWith\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {string} value The string that the field should start with.\n     * @param {string} [options] A string of regex options to use. See [specs](http://docs.mongodb.org/manual/reference/operator/query/regex/#op._S_options) for a description of available options.\n     * @returns {WhereQuery}\n     */\n    startsWith(field, value, flags) {\n        return this._simple(OperatorType.startsWith, field, value, flags);\n    }\n    /**\n     * Adds a condition that a field value must *end* with a specified string.\n     * @method endsWith\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name.\n     * @param {string} value The string that the field should end with.\n     * @param {string} [options] A string of  regex options to use. See [specs](http://docs.mongodb.org/manual/reference/operator/query/regex/#op._S_options) for a description of available options.\n     * @returns {WhereQuery}\n     */\n    endsWith(field, value, flags) {\n        return this._simple(OperatorType.endsWith, field, value, flags);\n    }\n    /**\n     * Adds a Geospatial condition that a specified geopoint must be within a certain distance from another geopoint. Applicable to GeoPoint fields only.\n     * @method nearSphere\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name containing a {GeoPoint} in the following format: `(decimal_degrees_latitude,decimal_degrees_longitude)`, where *decimal_degrees_latitude* ranges from -90 to 90 and *decimal_degrees_longitude* ranges from -180 to 180. Example: `(42.6954322,123.3239467)`\n     * @param {Everlive.GeoPoint} point Comparison geopoint value.\n     * @param {number} distance Distance value.\n     * @param {string} [metrics=radians] A string representing what unit of measurement is used for distance. Possible values: radians, km, miles.\n     * @returns {WhereQuery}\n     */\n    nearSphere(field, point, distance, metrics) {\n        return this._simple(OperatorType.nearShpere, field, point, distance, metrics);\n    }\n    /**\n     * Adds a Geospatial condition that a specified geopoint must be within a specified coordinate rectangle. Applicable to GeoPoint fields only.\n     * @method withinBox\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name containing a {GeoPoint} in the following format: `(decimal_degrees_latitude,decimal_degrees_longitude)`, where *decimal_degrees_latitude* ranges from -90 to 90 and *decimal_degrees_longitude* ranges from -180 to 180. Example: `(42.6954322,123.3239467)`\n     * @param {Everlive.GeoPoint} pointBottomLeft Value representing the bottom left corner of the box.\n     * @param {Everlive.GeoPoint} pointUpperRight Value representing the upper right corner of the box.\n     * @example ```js\n     var query = new Everlive.Query();\n     query.where().withinBox('Location',\n     new Everlive.GeoPoint(23.317871, 42.687709),\n     new Everlive.GeoPoint(23.331346, 42.707075));\n     ```\n     * @returns {WhereQuery}\n     */\n    withinBox(field, pointBottomLeft, pointUpperRight) {\n        return this._simple(OperatorType.withinBox, field, pointBottomLeft, pointUpperRight);\n    }\n    /**\n     * Adds a Geospatial condition that a specified geopoint must be within a specified coordinate polygon. The polygon is specified as an array of geopoints. The last point in the array is implicitly connected to the first point thus closing the shape. Applicable to GeoPoint fields only.\n     * @method withinPolygon\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name containing a {GeoPoint} in the following format: `(decimal_degrees_latitude,decimal_degrees_longitude)`, where *decimal_degrees_latitude* ranges from -90 to 90 and *decimal_degrees_longitude* ranges from -180 to 180. Example: `(42.6954322,123.3239467)`\n     * @param {Everlive.GeoPoint[]} points Comparison value in the form of an array of geopoints defining the polygon.\n     * @example ```js\n     var point1 = new Everlive.GeoPoint(23.317871, 42.687709);\n     var point2 = new Everlive.GeoPoint(42.698749, 42.698749);\n     var point3 = new Everlive.GeoPoint(23.331346, 42.702282);\n\n     var query = new Everlive.Query();\n     query.where().withinPolygon(\"location\", [point1, point2, point3]);\n     * ```\n     * @returns {WhereQuery}\n     */\n    withinPolygon(field, points) {\n        return this._simple(OperatorType.withinPolygon, field, points);\n    }\n    /**\n     * Adds a Geospatial condition that a specified geopoint must be within a coordinate circle. Applicable to GeoPoint fields only.\n     * @method withinCenterSphere\n     * @memberOf WhereQuery.prototype\n     * @param {string} field Field name containing a {GeoPoint} in the following format: `(decimal_degrees_latitude,decimal_degrees_longitude)`, where *decimal_degrees_latitude* ranges from -90 to 90 and *decimal_degrees_longitude* ranges from -180 to 180. Example: `(42.6954322,123.3239467)`\n     * @param {Everlive.GeoPoint} center Comparison value specifying the center of the coordinate circle.\n     * @param {number} radius Value specifying the radius length.\n     * @param {string} [metrics=radians] A string representing what unit of measurement is used for radius length. Possible values: radians, km, miles.\n     * @returns {WhereQuery}\n     */\n    withinCenterSphere(field, center, radius, metrics) {\n        return this._simple(OperatorType.withinShpere, field, center, radius, metrics);\n    }\n    /**\n     * Ends the definition of the current WhereQuery. You need to call this method in order to continue with the definition of the parent `Query`. All other `WhereQuery` methods return the current instance of `WhereQuery` to allow chaining.\n     * @method done\n     * @memberOf WhereQuery.prototype\n     * @returns {Query}\n     */\n    done() {\n        if (this.parent instanceof WhereQuery) {\n            return this.parent._done();\n        } else {\n            return this.parent;\n        }\n    }\n    _done() {\n        if (this.single) {\n            return this.parent;\n        } else {\n            return this;\n        }\n    }\n\n    equal(...args) {\n         return this.eq.apply(this, args);\n    }\n    notEqual(...args) {\n         return this.ne.apply(this, args);\n    }\n    greaterThan(...args) {\n         return this.gt.apply(this, args);\n    }\n    greaterThanEqual(...args) {\n         return this.gt.apply(this, args);\n    }\n    lessThan(...args) {\n         return this.lt.apply(this, args);\n    }\n    lessThanEqual(...args) {\n         return this.lt.apply(this, args);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/query/WhereQuery.ts\n **/","const http = require('http');\n\nimport { ReqwestOptions } from \"./reqwest.everlive\";\nimport { Constants } from './constants';\n\n// NodeJS nulls header name casing by lowering all casing,\n// we simulate this in NS with this function to avoid header name issues\nfunction getCaseInsensitiveHeaders (headers) {\n    var result = {};\n\n    for (var headerName in headers) {\n        if (headers.hasOwnProperty(headerName)) {\n            result[headerName.toLowerCase()] = headers[headerName];\n        }\n    }\n\n    return result;\n}\n\nfunction reqwest (options: ReqwestOptions) {\n    var httpRequestOptions: any = {\n        url: options.url,\n        method: options.method,\n        headers: options.headers || {}\n    };\n\n    if (options.data) {\n        httpRequestOptions.content = options.data; // NOTE: If we pass null/undefined, it will raise an exception in the http module.\n    }\n\n    httpRequestOptions.headers[Constants.Headers.ContentType] = httpRequestOptions.contentType || 'application/json';\n\n    return new Promise(function (resolve, reject) {\n        return http.request(httpRequestOptions)\n            .then(function (response) {\n                const contentString = response.content.toString();\n                const content = JSON.parse(contentString);\n                if (response.statusCode < 400) {\n                    resolve(content);\n                } else {\n                    reject(contentString);\n                }\n            }, function (error) {\n                // possible reasons: no internet connectivity\n                // error is an object with message (contains the reason) and stack (null)\n                reject(error);\n            });\n    });\n}\n\nexport = reqwest;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/reqwest.nativescript.ts\n **/","let url = null;\nlet zlib = null;\nlet https = null;\n\ntry {\n    url = require('url');\n    zlib = require('zlib');\n    https = require('https');\n} catch (e) { throw e; } // because of webpack external dependency declaration - this marks it as optional\n\nconst http = require('http');\n\nimport { Constants } from './constants';\nimport { ReqwestOptions } from \"./reqwest.everlive\";\nimport { EverliveError } from './EverliveError';\n\nfunction reqwest(options: ReqwestOptions) {\n    const urlParts = url.parse(options.url);\n    let request;\n    if (urlParts.protocol === 'https:') {\n        request = https.request;\n    }\n    else {\n        request = http.request;\n    }\n    const headers = options.headers || {};\n\n    headers[Constants.Headers.ContentType] = options.contentType;\n\n    return new Promise(function (resolve, reject) {\n        const req = request({\n            method: options.method,\n            hostname: urlParts.hostname,\n            port: urlParts.port,\n            path: urlParts.path,\n            headers: headers\n        }, function (res) {\n            let json = '';\n            const contentEncoding = res.headers['content-encoding'];\n            let responseProxy;\n            switch (contentEncoding){\n                case 'gzip':\n                    responseProxy = zlib.createGunzip();\n                    res.pipe(responseProxy);\n                    break;\n                default:\n                    responseProxy = res;\n                    responseProxy.setEncoding('utf8');\n                    break;\n            }\n\n            responseProxy.on('data', function (data) {\n                json += data.toString();\n            });\n\n            responseProxy.on('end', function () {\n                // 1xx Informational, 2xx Success, 3xx Redirection, 4xx Client Error, 5xx Server Error\n                if (200 <= res.statusCode && res.statusCode < 400) {\n                    const result = JSON.parse(json);\n                    resolve(result);\n                } else {\n                    if (json) {\n                        reject(json);\n                    }\n                    else { // empty response\n                        var error: any = new EverliveError({message: 'Response error.'});\n                        error.statusCode = res.statusCode;\n                        reject(error);\n                    }\n                }\n            });\n        });\n\n        req.on('error', function (e) {\n            reject({ responseText: e });\n        });\n\n        if (options.data) {\n            var contentEncoding = headers['content-encoding'];\n            switch (contentEncoding){\n                case 'gzip':\n                    var buf = new Buffer(options.data, 'utf-8');\n                    zlib.gzip(buf, function (err, result) {\n                        req.end(result);\n                    });\n                    break;\n                default:\n                    req.end(options.data);\n                    break;\n            }\n        }\n        else {\n            req.end();\n        }\n    });\n}\n\nexport = reqwest;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/reqwest.nodejs.ts\n **/","import {DataQueryOperation} from '../constants';\nimport {Request} from '../Request';\n\nexport class ResponseParserProcessor {\n    processDataQuery(query, iterator, data, value) {\n        if (query.operation === DataQueryOperation.InvokeCloudFunction ||\n            query.operation === DataQueryOperation.InvokeStoredProcedure) {\n            return iterator.next(value);\n        }\n\n        let parser = null;\n        switch (query.operation) {\n            case DataQueryOperation.ReadById:\n            case DataQueryOperation.Aggregate:\n            case DataQueryOperation.Count:\n            case DataQueryOperation.Create:\n            case DataQueryOperation.SetAcl:\n            case DataQueryOperation.FilesGetDownloadUrlById:\n            case DataQueryOperation.UserLinkWithProvider:\n            case DataQueryOperation.UserUnlinkFromProvider:\n                parser = Request.parsers.single;\n                break;\n            case DataQueryOperation.RawUpdate:\n            case DataQueryOperation.Update:\n                parser = Request.parsers.update;\n                break;\n            default:\n                if (query.isCustomRequest) {\n                    parser = Request.parsers.customRequest;\n                } else {\n                    parser = Request.parsers.simple;\n                }\n        }\n\n        const parsedResponse = parser.result(value);\n\n        return iterator.next(parsedResponse);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/response/ResponseParserProcessor.ts\n **/","import { isArray, extend, each } from 'underscore';\nimport { DataQueryOperation } from \"../../common/Constants\";\n\n//TODO: is this really needed or is obsolete, or at least parts of it\nexport default class ResponseDataMergeProcessor {\n    mergeResultData(data, res) {\n        var attrs = res.result;\n        // support for kendo observable array\n        if (isArray(data) || typeof data.length === 'number') {\n            each(data, function (item, index) {\n                extend(item, attrs[index]);\n            });\n        } else {\n            extend(data, attrs);\n        }\n\n        return res;\n    }\n\n    mergeUpdateResultData(data, res) {\n        var modifiedAt = res.ModifiedAt;\n        data.ModifiedAt = modifiedAt;\n        return res;\n    }\n\n    processDataQuery(query, iterator, data, value) {\n        let result = null;\n        switch (query.operation) {\n            case DataQueryOperation.Update:\n                result = this.mergeUpdateResultData(query.data, value);\n                break;\n            case DataQueryOperation.Create:\n                result = this.mergeResultData(query.data, value);\n                break;\n            case DataQueryOperation.FilesGetDownloadUrlById:\n                result = value.result.Uri;\n                break;\n            default:\n                result = value;\n                break;\n        }\n\n        return iterator.next(result);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/response/ResponseTransformProcessor.ts\n **/","declare const window, document;\nimport * as _ from 'underscore';\nimport { FieldDefinition } from '../offline/persisters/sqlite/FieldDefinition';\nimport { BaseSQLiteStore } from './SQLiteStore';\n\nconst deviceReadyPromise = function () {\n    return new Promise(function (resolve) {\n        document.addEventListener('deviceready', resolve);\n    });\n};\n\nexport class CordovaSQLiteStore extends BaseSQLiteStore {\n\n    constructor(storagePath: string, typeSettings: any) {\n        super(storagePath, typeSettings);\n        deviceReadyPromise().then(() => {\n            this.sqliteDb = window.sqlitePlugin.openDatabase({\n                name: `${this.storagePath}.db`,\n                location: 'default'\n            });\n            this.prepareTables();\n        });\n    }\n\n    queryData(tableName: string, query, success, error) {\n        this.sqliteDb.transaction((tx) => {\n            tx.executeSql(query, [], (tx, res) => {\n                    let resultSet = [];\n                    for (let x = 0; x < res.rows.length; x++) {\n                        resultSet.push(this.processResultItem(tableName, res.rows.item(x)));\n                    }\n                    success(resultSet);\n                },\n                function (tx, e) {\n                    error(e);\n                });\n        });\n    }\n\n    addData(tableName: string, data, success, error) {\n        const batchInsertQueries = this.buildSqlBatchInsert(tableName, data);\n        const insertPromises = _.map(batchInsertQueries, (currentBatchList) => {\n            return new Promise((resolve, reject) => {\n                this.sqliteDb.sqlBatch(currentBatchList, () => {\n                    resolve();\n                }, function (e) {\n                    reject(e);\n                });\n            })\n        });\n        return Promise.all(insertPromises).then(success, error);\n    }\n\n    removeData(tableName: string, query, success, error) {\n        this.sqliteDb.transaction((tx) => {\n            tx.executeSql(query, [], (tx, res) => {\n                    success(res['rowsAffected']);\n                },\n                function (tx, e) {\n                    error(e);\n                });\n        });\n    }\n\n    updateData(tableName: string, query, success, error) {\n        this.sqliteDb.transaction((tx) => {\n            tx.executeSql(query, [], (tx, res) => {\n                    success(res['rowsAffected']);\n                },\n                function (tx, e) {\n                    error(e);\n                });\n        });\n    }\n\n    ensureTableExists(tableName: string, columns: FieldDefinition[]) {\n        const createTableStatement = `CREATE TABLE IF NOT EXISTS \"${tableName}\" (_id TEXT PRIMARY KEY)`; // creating empty tables are not supported\n        this.sqliteDb.transaction((tx) => {\n            tx.executeSql(createTableStatement, [], (tx, res) => {\n                _.each(columns, (column:FieldDefinition) => {\n                    const addColumn = `ALTER TABLE \"${tableName}\" ADD COLUMN ${column.getDefinition()}`;\n                    this.sqliteDb.executeSql(addColumn); // errors for duplicated columns are omited here in order to ensure the scheme is always latest\n                })\n            }, function (tx, e) {\n                console.log(e);\n                throw e;\n            });\n        });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/CordovaSQLiteStore.ts\n **/","import { FileStore } from './FileStore';\n\nexport class NativeScriptFileStore implements FileStore {\n    readonly filesDirectoryPath: string;\n    private readonly fs: any;\n\n    constructor(\n        public storagePath: string,\n        public options: any\n    ) {\n        this.options = options;\n        try {\n            this.fs = require('file-system');\n        } catch (err) { throw err; } // because of webpack external dependency declaration - this marks it as optional\n        this.filesDirectoryPath = this.fs.path.join(this.fs.knownFolders.documents().path, storagePath);\n    }\n\n    getErrorHandler(callback: Function) {\n        return function (e) {\n            callback && callback(e);\n        }\n    }\n\n    removeFilesDirectory() {\n        return this.getFilesDirectory()\n            .then(dir => dir.remove());\n    }\n\n    removeFile(fileEntry) {\n        return fileEntry.remove();\n    }\n\n    readFileAsText(fileEntry) {\n        return fileEntry.readText();\n    }\n\n    writeTextToFile(fileEntry, content) {\n        return fileEntry.writeText(content);\n    }\n\n    getFile(path) {\n        return this.getFilesDirectory()\n            .then((directoryEntry: any) => {\n                const fullFilePath = this.fs.path.join(directoryEntry.path, path);\n                return this.fs.File.fromPath(fullFilePath);\n            });\n    }\n\n    getFilesDirectory() {\n        const filesDirectory = this.fs.Folder.fromPath(this.filesDirectoryPath);\n        return Promise.resolve(filesDirectory);\n    }\n\n    getFilesDirectoryPath(): string {\n        return this.filesDirectoryPath;\n    }\n\n    // TODO: [offline] Implement\n    writeText(fileName: string, text: string, path?: string) {\n        throw new Error('Not implemented');\n    }\n\n    // TODO: [offline] Implement\n    createDirectory() {\n        throw new Error('Not implemented');\n    }\n\n    // TODO: [offline] Implement\n    getFileSize(file: string, getFileSize: string) {\n        throw new Error('Not implemented');\n    }\n\n    // TODO: [offline] Implement\n    getFileByAbsolutePath(path: string) {\n        throw new Error('Not implemented');\n    }\n\n    readFileAsBase64(file) {\n        throw new Error('Not implemented');\n    }\n\n    renameFile() {\n        throw new Error('Not implemented');\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/NativeScriptFileStore.ts\n **/","import { FieldDefinition } from '../offline/persisters/sqlite/FieldDefinition';\nimport { BaseSQLiteStore } from './SQLiteStore';\nimport * as _ from 'underscore';\n\nexport class NativeScriptSQLiteStore extends BaseSQLiteStore {\n\n    constructor(storagePath:string, typeSettings:any) {\n        super(storagePath, typeSettings);\n        let Sqlite;\n        try {\n            Sqlite = require('nativescript-sqlite');\n        } catch (err) {\n            throw err;\n        } // because of webpack external dependency declaration - this marks it as optional\n        const db_promise = new Sqlite(`${this.storagePath}.db`, (err, db) => {\n            if (err) {\n                console.error(\"Failed to open database\", err);\n                throw err;\n            } else {\n                this.sqliteDb = db;\n                this.sqliteDb.resultType(Sqlite.RESULTSASOBJECT);\n                this.prepareTables();\n            }\n        });\n    }\n\n    queryData(tableName, query, success, error) {\n        this.sqliteDb.all(query, [], (err, dbResult) => {\n            if (err) {\n                error(err);\n            } else {\n                var resultSet = [];\n                for (var x = 0; x < dbResult.length; x++) {\n                    resultSet.push(this.processResultItem(tableName, dbResult[x]));\n                }\n                success(resultSet);\n            }\n        });\n    }\n\n    addData(tableName, data, success, error) {\n        const batchInsertQueries = this.buildSqlBatchInsert(tableName, data);\n        if (batchInsertQueries.length === 0) {\n            return success();\n        }\n        const insertPromises: Promise<undefined>[] = [];\n        _.each<any>(batchInsertQueries, (query) => {\n            _.each<any>(query, (insertQuery) => {\n                insertPromises.push(new Promise((resolve, reject) => {\n                    // nativescript sqlite driver need the INSERT statement and the values array as two separate parameters\n                    // check sample reuslt from buildSqlBatchInsert\n                    this.sqliteDb.execSQL(insertQuery[0], insertQuery[1], (err, dbResult) => {\n                        if (err) {\n                            reject(err);\n                        } else {\n                            resolve();\n                        }\n                    });\n                }));\n            });\n        });\n        return Promise.all(insertPromises).then(success, error);\n    }\n\n    removeData(tableName, query, success, error) {\n        this.sqliteDb.execSQL(query, (err, dbResult) => {\n            if (err) {\n                error(err);\n            } else {\n                success(dbResult);\n            }\n        });\n    }\n\n    updateData(tableName, query, success, error) {\n        this.sqliteDb.execSQL(query, (err, dbResult) => {\n            if (err) {\n                error(err);\n            } else {\n                success(dbResult);\n            }\n        });\n    }\n\n    ensureTableExists(tableName, columns:FieldDefinition[]) {\n        const createTableStatement = `CREATE TABLE IF NOT EXISTS ${tableName} (_id TEXT PRIMARY KEY)`; // creating empty tables are not supported\n        this.sqliteDb.execSQL(createTableStatement, [], () => {\n            _.each(columns, (column:FieldDefinition) => {\n                const addColumn = `ALTER TABLE ${tableName} ADD COLUMN ${column.getDefinition()}`;\n                this.sqliteDb.execSQL(addColumn, (err, dbResult) => {\n                    // errors for duplicated columns are omited here in order to ensure the scheme is always latest\n                });\n            })\n        }, function (e) {\n            console.log(e);\n            throw e;\n        });\n    }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/NativeScriptSQLiteStore.ts\n **/","declare const window, document, FileError, navigator;\n\nimport * as _ from 'underscore';\n\nimport * as platform from '../../common/platform';\nimport { EverliveError } from '../EverliveError';\nimport { Utils } from '../utils';\nimport { FileStore } from './FileStore';\n\nvar deviceReadyPromise = function () {\n    return new Promise(function (resolve) {\n        document.addEventListener('deviceready', resolve);\n    });\n};\n\nexport class WebFileStore implements FileStore {\n    filesDirectoryPath;\n    _requestFileSystem;\n    _resolveLocalFileSystemURL;\n    _PERSISTENT_FILE_SYSTEM;\n    options;\n\n    private fileSystemRoot;\n\n    constructor(storagePath: string, options: any) {\n        this.options = options;\n\n        var filesDirectoryPath;\n\n        if (platform.isWindowsPhone || platform.isInAppBuilderSimulator()) {\n            //windows phone does not handle leading or trailing slashes very well :(\n            filesDirectoryPath = storagePath.replace(new RegExp('/', 'g'), '');\n        } else {\n            if (storagePath.lastIndexOf('/') === -1) {\n                filesDirectoryPath = storagePath + '/';\n            }\n        }\n\n        filesDirectoryPath = filesDirectoryPath || storagePath;\n\n        deviceReadyPromise().then(() => {\n            this.filesDirectoryPath = filesDirectoryPath;\n            this._requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;\n            this._resolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL;\n            this._PERSISTENT_FILE_SYSTEM = window.LocalFileSystem ? window.LocalFileSystem.PERSISTENT : window.PERSISTENT;\n        });\n    }\n\n    getErrorHandler(callback) {\n        var errorsMap = {\n            '1000': 'NOT_FOUND'\n        };\n\n        _.each(Object.keys(FileError), function (error) {\n            errorsMap[FileError[error]] = error;\n        });\n\n        return function (e) {\n            if (!e.message) {\n                e.message = errorsMap[e.code];\n            }\n\n            callback && callback(e);\n        }\n    }\n\n    getDataDirectory() {\n        return deviceReadyPromise()\n            .then(() => {\n                var requestFileSystem = (bytes, success, error) => {\n                    this._requestFileSystem.call(window, this._PERSISTENT_FILE_SYSTEM, bytes, (fileSystem) => {\n                        this.fileSystemRoot = fileSystem.root;\n                        this.fileSystemRoot.nativeURL = this.fileSystemRoot.nativeURL || this.fileSystemRoot.toURL();\n                        success(this.fileSystemRoot);\n                    }, error);\n                };\n\n                return new Promise((resolve, reject) => {\n                    if (this.fileSystemRoot) {\n                        return resolve(this.fileSystemRoot);\n                    }\n\n                    if (platform.isDesktop) {\n                        if (navigator && !navigator.webkitPersistentStorage) {\n                            return reject(new EverliveError({message: 'FileSystemStorage can be used only with browsers supporting it. Consider using localStorage.'}))\n                        }\n\n                        navigator.webkitPersistentStorage.requestQuota(this.options.storage.requestedQuota, (grantedBytes) => {\n                            requestFileSystem(grantedBytes, resolve, reject);\n                        }, reject);\n                    } else {\n                        requestFileSystem(0, resolve, reject);\n                    }\n                });\n            });\n    };\n\n    getFilesDirectory() {\n        var self = this;\n        return new Promise(function (resolve, reject) {\n            self.getDataDirectory()\n                .then(function (dataDirectory: any) {\n                    dataDirectory.getDirectory(self.filesDirectoryPath, {\n                        create: true,\n                        exclusive: false\n                    }, resolve, reject);\n                })\n                .catch(reject);\n        });\n    }\n\n    removeFilesDirectory() {\n        var self = this;\n\n        return this.getFilesDirectory()\n            .then(function (filesDirectory) {\n                return self._removeFolderWrap(filesDirectory);\n            });\n    }\n\n    removeFile(fileEntry) {\n        return new Promise(function (resolve, reject) {\n            fileEntry.remove(function () {\n                resolve();\n            }, reject);\n        });\n    }\n\n    readFileAsText(fileEntry) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            self.getFilesDirectory().then(function () {\n                fileEntry.file(function (file) {\n                    var reader = new FileReader();\n                    reader.onloadend = function () {\n                        var result = this.result;\n\n                        //windows phone returns an object....\n                        if (typeof this.result === 'object') {\n                            result = JSON.stringify(this.result);\n                        }\n\n                        resolve(result);\n                    };\n                    reader.onerror = reject;\n                    reader.readAsText(file);\n                }, reject);\n            }).catch(reject);\n        });\n    }\n\n    writeTextToFile(fileEntry, content) {\n        var self = this;\n\n        return self.getFilesDirectory()\n            .then(function () {\n                return self._getWriterWrap(fileEntry, content);\n            });\n    }\n\n    getFileSize(filename: string, folder: string) {\n        var self = this;\n\n        return new Promise(function (resolve, reject) {\n            var fileLocation = Utils.joinPath(folder, filename);\n\n            return self.getFile(fileLocation)\n                .then(function (fileEntry: any) {\n                    fileEntry.file(function (file: any) {\n                        resolve(file.size);\n                    }, reject);\n                });\n        });\n    }\n\n    getFile(fileName, dirEntry?) {\n        return this.getFilesDirectory()\n            .then(function (directoryEntry) {\n                var fileDirectory;\n                if (dirEntry) {\n                    fileDirectory = dirEntry;\n                } else {\n                    fileDirectory = directoryEntry;\n                }\n\n                return new Promise(function (resolve, reject) {\n                    fileDirectory.getFile(fileName, {\n                        create: true,\n                        exclusive: false\n                    }, resolve, reject);\n                });\n            });\n    }\n\n    getFileByAbsolutePath(path: string) {\n        var self = this;\n        path = Utils.transformPlatformPath(path);\n\n        return new Promise(function (resolve, reject) {\n            self._resolveLocalFileSystemURL.call(window, path, resolve, function (err) {\n                if (err && err.code === FileError.NOT_FOUND_ERR) {\n                    return resolve();\n                }\n\n                return reject(err);\n            });\n        });\n    }\n\n    createDirectory(directory) {\n        var self = this;\n\n        return this.getFilesDirectory()\n            .then(function (directoryEntry) {\n                return self._getDirectoryWrap(directory, directoryEntry, {\n                    create: true,\n                    exclusive: false\n                });\n            });\n    }\n\n    renameFile(directoryEntry, fileEntry, filename) {\n        return new Promise(function (resolve, reject) {\n            fileEntry.moveTo(directoryEntry, filename, resolve, reject);\n        });\n    }\n\n    _getDirectoryWrap(directory, directoryEntry, options) {\n        return new Promise(function (resolve, reject) {\n            directoryEntry.getDirectory(directory, options, resolve, reject);\n        });\n    }\n\n    _removeFolderWrap(filesDirEntry) {\n        return new Promise(function (resolve, reject) {\n            filesDirEntry.removeRecursively(function () {\n                resolve();\n            }, reject);\n        });\n    }\n\n    _getWriterWrap(fileEntry, content) {\n        return new Promise(function (resolve, reject) {\n            fileEntry.createWriter(function (fileWriter) {\n                fileWriter.onwriteend = function () {\n                    resolve();\n                };\n\n                fileWriter.onerror = reject;\n\n                var bb = new Blob([content]);\n                fileWriter.write(bb);\n            }, reject);\n        });\n    }\n\n    writeText(fileName: string, text: string, path?: string) {\n        var self = this;\n        var fileHandle;\n\n        return this.getFilesDirectory()\n            .then(function (directoryEntry) {\n                if (path) {\n                    return self.createDirectory(path);\n                } else {\n                    return directoryEntry;\n                }\n            })\n            .then(function (directoryEntry) {\n                return self.getFile(fileName, directoryEntry);\n            })\n            .then(function (fileEntry) {\n                fileHandle = fileEntry;\n                return self.writeTextToFile(fileEntry, text);\n            })\n            .then(function () {\n                // there  is a difference between the cordova implementation and the standard FileTransfer fileEntry\n                return fileHandle.nativeURL || fileHandle.toURL();\n            });\n    }\n\n    // http://stackoverflow.com/questions/9583363/get-base64-from-imageuri-with-phonegap\n    readFileAsBase64(fileEntry) {\n        return new Promise(function (resolve, reject) {\n            fileEntry.file(function (file) {\n                var reader = new FileReader();\n                reader.onloadend = function (evt: any) {\n                    resolve(Utils.arrayBufferToBase64(evt.target.result));\n                };\n\n                reader.readAsArrayBuffer(file);\n            }, reject);\n        });\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/storages/WebFileStore.ts\n **/","import { SingleResult } from \"../interfaces/SingleResult\";\ndeclare const FileTransfer: any;\n\nimport { File } from '../interfaces/File';\nimport { Utils } from '../utils';\nimport * as platform from '../../common/platform';\nimport { Data } from '../types/Data';\nimport { DataQueryOperation } from '../constants';\nimport { FileContent } from \"../interfaces/FileContent\";\nimport { SuccessCallback } from \"../interfaces/SuccessCallback\";\nimport { ErrorCallback } from \"../interfaces/ErrorCallback\";\nimport { CordovaFileUploadOptions } from \"../interfaces/CordovaFileUploadOptions\";\nimport { CordovaFileEntry } from \"../interfaces/CordovaFileEntry\";\n\nexport class Files extends Data<File> {\n    /**\n     * @class Files\n     * @protected\n     * @extends Data\n     */\n    constructor(sdk) {\n        super(sdk, 'Files');\n    }\n\n    /**\n     * Get a URL that can be used as an endpoint for uploading a file. It is specific to each {{site.tap}} app.\n     * @memberof Files.prototype\n     * @method getUploadUrl\n     * @returns {string}\n     */\n    getUploadUrl(): string {\n        return Utils.buildUrl(this.setup) + this.collectionName;\n    }\n\n    /**\n     * Get the download URL for a file.\n     * @memberof Files.prototype\n     * @method getDownloadUrl\n     * @deprecated\n     * @see [files.getDownloadUrlById]{@link ../Files/files.getDownloadUrlById}\n     * @param {string} fileId The ID of the file.\n     * @returns {string} url The download URL.\n     */\n    getDownloadUrl(fileId: string): string {\n        return Utils.buildUrl(this.setup) + this.collectionName + '/' + fileId + '/Download';\n    }\n\n    /**\n     * Get a URL that can be used as an endpoint for updating the file content. It is specific to each {{site.TelerikBackendServices}} app.\n     * @memberof Files.prototype\n     * @method getUpdateUrl\n     * @param {string} fileId The ID of the file.\n     * @returns {string} url The update URL.\n     */\n    getUpdateUrl(fileId: string): string {\n        return Utils.buildUrl(this.setup) + this._getUpdateUrl(fileId);\n    }\n\n    /**\n     * Updates a file's content\n     * @memberof Files.prototype\n     * @method updateContent\n     * @param {string} fileId File ID.\n     * @param {Object} file The file metadata and the base64 encoded file content.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     * @returns {Promise} The promise for the request\n     */\n    updateContent(fileId: string, file: FileContent, success?: SuccessCallback<SingleResult<number>>, error?: ErrorCallback): Promise<SingleResult<number>> {\n        const data = file;\n        const additionalOptions = { id: fileId };\n        const dataQuery = this.buildDataQuery({\n            data,\n            additionalOptions\n        }, DataQueryOperation.FilesUpdateContent);\n        return this.processDataQuery<SingleResult<number>>(dataQuery, success, error);\n    }\n\n    /**\n     * Gets the download URL for a file by ID.\n     * @memberof Files.prototype\n     * @method getDownloadUrlById\n     * @param {string} fileId File ID.\n     * @returns {Promise} The promise for the request\n     */\n    /**\n     * Gets the download URL for a file by ID.\n     * @memberof Files.prototype\n     * @method getDownloadUrlById\n     * @see [files.getDownloadUrlById]{@link ../Files/files.getDownloadUrlById}\n     * @param {string} fileId File ID.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    getDownloadUrlById(fileId: string, success?: SuccessCallback<string>, error?: ErrorCallback): Promise<string> {\n        if (platform.isDesktop && !this.sdk.isOnline()) {\n            //while in offline we cannot get the url of the file, but we can generate one\n            var url = this.getDownloadUrl(fileId);\n            return Utils.buildPromise<string>(resolve => resolve(url), success, error);\n        }\n\n        const additionalOptions = {id: fileId};\n        const dataQuery = this.buildDataQuery({ additionalOptions }, DataQueryOperation.FilesGetDownloadUrlById);\n        return this.processDataQuery<string>(dataQuery, success, error);\n    }\n\n    /**\n     * Downloads a file to the device's file system. Wraps the Apache Cordova \"download()\" [FileTransfer](http://cordova.apache.org/docs/en/2.7.0/cordova_file_file.md.html#FileTransfer) method. Note that the signatures of these methods differ.\n     * @memberof Files.prototype\n     * @method download\n     * @param {string} fileId A {{site.tap}} File ID.\n     * @param {string} localPath An Apache Cordova FileSystem URL representing the local path on the device where the downloaded file will be saved. Maps to the \"target\" FileTransfer plugin parameter.\n     * @param {object} [options] Additional request options. Maps to the \"options\" FileTransfer plugin parameter.\n     * @param {object} [options.headers] A JSON object containing headers to send along with the request.\n     * @param {boolean} [trustAllHosts=false] Whether to accept all security certificates including self-signed certificates. Maps to the \"trustAllHosts\" FileTransfer plugin parameter.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Downloads a file to the device's file system. Wraps the Apache Cordova \"download()\" [FileTransfer](http://cordova.apache.org/docs/en/2.7.0/cordova_file_file.md.html#FileTransfer) method. Note that the signatures of these methods differ.\n     * @memberof Files.prototype\n     * @method download\n     * @param {string} fileId A {{site.tap}} File ID.\n     * @param {string} localPath An Apache Cordova FileSystem URL representing the local path on the device where the downloaded file will be saved. Maps to the \"target\" FileTransfer plugin parameter.\n     * @param {object} [options] Additional request options. Maps to the \"options\" FileTransfer plugin parameter.\n     * @param {object} [options.headers] A JSON object containing headers to send along with the request.\n     * @param {boolean} [trustAllHosts=false] Whether to accept all security certificates including self-signed certificates. Maps to the \"trustAllHosts\" FileTransfer plugin parameter.\n     * @param {Function} [success] A success callback that is passed an Apache Cordova [FileEntry](https://cordova.apache.org/docs/en/3.3.0/cordova_file_file.md.html#FileEntry) object. Maps to the \"successCallback\" FileTransfer plugin parameter.\n     * @param {Function} [error] An error callback that is passed an Apache Cordova [FileTransferError](https://github.com/apache/cordova-plugin-file-transfer#filetransfererror) object. Maps to the \"errorCallback\" FileTransfer plugin parameter.\n     */\n    download(fileId: string, localPath: string, options?: { headers?: any }, trustAllHosts = false, success?: SuccessCallback<CordovaFileEntry>, error?: ErrorCallback): Promise<CordovaFileEntry> {\n        return Utils.buildPromise<CordovaFileEntry>((success, error) => {\n            var headers = options && options.headers ? options.headers : {};\n\n            var fileTransfer = new FileTransfer();\n            this.withHeaders(headers)\n                .getById(fileId)\n                .then(res => {\n                    var file = res.result;\n                    fileId = file.Uri;\n                    fileTransfer.download(fileId, localPath, success, error, trustAllHosts, options);\n                }, error);\n        }, success, error);\n    }\n\n    /**\n     * Uploads a file from the device's file system to {{site.tap}}. Wraps the Apache Cordova \"upload()\" [FileTransfer](http://cordova.apache.org/docs/en/2.7.0/cordova_file_file.md.html#FileTransfer) method. Note that the signatures of these methods differ.\n     * @memberof Files.prototype\n     * @method upload\n     * @param {string} localPath An Apache Cordova FileSystem URL representing the full path to the file on the device.\n     * @param {object} [options] Additional request options. Maps to the \"options\" FileTransfer plugin parameter.\n     * @param {string} [options.fileKey] The name of the form element. Defaults to 'file' in the FileTransfer plugin parameter.\n     * @param {string} [options.fileName] The file name to use when uploading the file. Defaults to 'image.jpg' in the FileTransfer plugin.\n     * @param {string} [options.httpMethod] The HTTP method to use, either POST or PUT. Defaults to 'POST' in the FileTransfer plugin parameter.\n     * @param {string} [options.mimeType] The mime type of the uploaded data. Defaults to 'image/jpeg' in the FileTransfer plugin parameter.\n     * @param {object} [options.params] A set of optional key/value pairs to pass in the HTTP request.\n     * @param {boolean} [options.chunkedMode] Whether to upload the data in chunked streaming mode. Defaults to 'true' in the FileTransfer plugin parameter.\n     * @param {object} [options.headers] A JSON object for the headers to send along with the request.\n     * @param {boolean} [trustAllHosts=false] Whether to accept all security certificates including self-signed certificates. Maps to the \"trustAllHosts\" FileTransfer plugin parameter.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Uploads a file from the device's file system to {{site.tap}}. Wraps the Apache Cordova \"upload()\" [FileTransfer](http://cordova.apache.org/docs/en/2.7.0/cordova_file_file.md.html#FileTransfer) method. Note that the signatures of these methods differ.\n     * @memberof Files.prototype\n     * @method upload\n     * @param {string} localPath An Apache Cordova FileSystem URL representing the full path to the file on the device.\n     * @param {object} [options] Additional request options. Maps to the \"options\" FileTransfer plugin parameter.\n     * @param {string} [options.fileKey] The name of the form element. Defaults to 'file' in the FileTransfer plugin parameter.\n     * @param {string} [options.fileName] The file name to use when uploading the file. Defaults to 'image.jpg' in the FileTransfer plugin parameter.\n     * @param {string} [options.httpMethod] The HTTP method to use, either POST or PUT. Defaults to 'POST' in the FileTransfer plugin parameter.\n     * @param {string} [options.mimeType] The mime type of the uploaded data. Defaults to 'image/jpeg' in the FileTransfer plugin parameter.\n     * @param {object} [options.params] A set of optional key/value pairs to pass in the HTTP request.\n     * @param {boolean} [options.chunkedMode] Whether to upload the data in chunked streaming mode. Defaults to 'true' in the FileTransfer plugin parameter.\n     * @param {object} [options.headers] A JSON object for the headers to send along with the request.\n     * @param {boolean} [trustAllHosts=false] Whether to accept all security certificates including self-signed certificates. Maps to the \"trustAllHosts\" FileTransfer plugin parameter.\n     * @param {Function} [success] A success callback that is passed an Apache Cordova [FileUploadResult](https://github.com/apache/cordova-plugin-file-transfer#fileuploadresult) object. Maps to the \"successCallback\" FileTransfer plugin parameter.\n     * @param {Function} [error] An error callback that is passed an Apache Cordova [FileTransferError](https://github.com/apache/cordova-plugin-file-transfer#filetransfererror) object. Maps to the \"errorCallback\" FileTransfer plugin parameter.\n     */\n    upload(localPath: string, options: CordovaFileUploadOptions, trustAllHosts = false, success?: SuccessCallback<CordovaFileEntry>, error?: ErrorCallback): Promise<CordovaFileEntry> {\n        var url = this.getUploadUrl();\n        return Utils.buildPromise<CordovaFileEntry>((success, error) => {\n            var fileTransfer = new FileTransfer();\n            var uri = encodeURI(url);\n            fileTransfer.upload(localPath, uri, success, error, options, trustAllHosts);\n        }, success, error);\n    }\n\n    private _getUpdateUrl(fileId): string {\n        return this.collectionName + '/' + fileId + '/Content';\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/Files.ts\n **/","import * as _ from 'underscore';\n\nimport { Utils } from '../utils';\nimport { EverliveError, EverliveErrors } from '../EverliveError';\nimport { Data } from '../types/Data';\nimport { DataQueryOperation } from '../constants';\n\nimport { User } from '../interfaces/User';\nimport { UserInfo } from '../interfaces/UserInfo';\nimport { SingleResult } from \"../interfaces/SingleResult\";\nimport { SuccessCallback } from \"../interfaces/SuccessCallback\";\nimport { CreateItemResult } from \"../interfaces/CreateItemResult\";\nimport { ErrorCallback } from \"../interfaces/ErrorCallback\";\nimport { UserLoginResult } from \"../interfaces/UserLoginResult\";\nimport { SocialLoginResult } from \"../interfaces/SocialLoginResult\";\nimport { UserSocialIdentity } from \"../interfaces/UserSocialIdentity\";\nimport { SetUserPasswordBySecretAnswerPayload } from \"../interfaces/SetUserPasswordBySecretAnswerPayload\";\nimport { SetUserPasswordByResetCodePayload } from \"../interfaces/SetUserPasswordByResetCodePayload\";\n\nexport class Users extends Data<User> {\n    /**\n     * @class Users\n     * @extends Data\n     * @protected\n     */\n    constructor(sdk) {\n        super(sdk, 'Users');\n    }\n\n    /**\n     * Registers a new user with username and password.\n     * @memberOf Users.prototype\n     * @method register\n     * @name register\n     * @param {string} username The new user's username.\n     * @param {string} password The new user's password.\n     * @param {object} userInfo Additional information for the user (ex. DisplayName, Email, etc.)\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Registers a new user using a username and a password.\n     * @memberOf Users.prototype\n     * @method register\n     * @name register\n     * @param {string} username The new user's username.\n     * @param {string} password The new user's password.\n     * @param attrs\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    register(username: string, password: string, attrs?: UserInfo, success?: SuccessCallback<CreateItemResult>, error?: ErrorCallback): Promise<CreateItemResult> {\n        Utils.guardUnset(username, 'username');\n        Utils.guardUnset(password, 'password');\n        const user = _.extend({\n            Username: username,\n            Password: password,\n        }, attrs);\n\n        return this.create(user, success, error);\n    }\n\n    /**\n     * Gets information about the user that is currently authenticated to the {{site.bs}} JavaScript SDK. The success function is called with [Users.ResultTypes.currentUserResult]{@link Users.ResultTypes.currentUserResult}.\n     * @memberOf Users.prototype\n     * @method currentUser\n     * @name currentUser\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Gets information about the user that is currently authenticated to the {{site.bs}} JavaScript SDK. The success function is called with [Users.ResultTypes.currentUserResult]{@link Users.ResultTypes.currentUserResult}.\n     * @memberOf Users.prototype\n     * @method currentUser\n     * @name currentUser\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    currentUser(success?, error?): Promise<SingleResult<User>> {\n        var id = (this.sdk._isOfflineStorageEnabled() && this.sdk.isOffline()) ? this.sdk.setup.principalId : 'me';\n        return Utils.buildPromise<SingleResult<User>>((success, error) => {\n            if (id === 'me' && !this.sdk.setup.token && !this.sdk.setup.masterKey || !id) {\n                return success({result: null});\n            }\n\n            this.getById(id).then(\n                (res) => {\n                    if (typeof res.result !== 'undefined') {\n                        success({result: res.result});\n                    } else {\n                        success({result: null});\n                    }\n                },\n                (err) => {\n                    if (this.sdk.authentication && this.sdk.authentication.isAuthenticationInProgress()) {\n                        success({result: null});\n                    } else if (err.code === 601) { // invalid request, i.e. the access token is missing\n                        success({result: null});\n                    } else if (err.code === 801) {\n                        error(new EverliveError(EverliveErrors.invalidToken));\n                    } else {\n                        error(err);\n                    }\n                }\n            );\n        }, success, error);\n    }\n\n    /**\n     * Changes the password of a user.\n     * @memberOf Users.prototype\n     * @method changePassword\n     * @name changePassword\n     * @param {string} username The user's username.\n     * @param {string} password The user's password.\n     * @param {string} newPassword The user's new password.\n     * @param {boolean=false} [keepTokens] If set to true, the user tokens will be preserved even after the password change.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Changes the password of a user.\n     * @memberOf Users.prototype\n     * @method changePassword\n     * @name changePassword\n     * @param {string} username The user's username.\n     * @param {string} password The user's password.\n     * @param {string} newPassword The user's new password.\n     * @param {boolean=false} [keepTokens] If set to true, the user tokens will be preserved even after the password change.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    changePassword(username: string, password: string, newPassword: string, keepTokens = false, success?: SuccessCallback<SingleResult<boolean>>, error?: ErrorCallback): Promise<SingleResult<boolean>> {\n        const data = {\n            Username: username,\n            Password: password,\n            NewPassword: newPassword\n        };\n        const additionalOptions = { keepTokens };\n        const dataQuery = this.buildDataQuery({ data, additionalOptions }, DataQueryOperation.UserChangePassword);\n        return Utils.buildPromise<SingleResult<boolean>>((success, error) => {\n            this.processDataQuery<SingleResult<boolean>>(dataQuery)\n                .then(data => {\n                    if (data && data.result) {\n                        if (!keepTokens) {\n                            this.clearAuthorization();\n                        }\n                    }\n\n                    return success(data);\n                })\n                .catch(error);\n        }, success, error);\n    }\n\n    /**\n     *\n     * Logs in a user using a username and a password to the current {{site.bs}} JavaScript SDK instance. All requests initiated by the current {{site.bs}} JavaScript SDK instance will be authenticated with that user's credentials.\n     * @memberOf Users.prototype\n     * @method login\n     * @name login\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.login}\n     * @param {string} username The user's username.\n     * @param {string} password The user's password.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Logs in a user using a username and a password to the current {{site.bs}} JavaScript SDK instance. All requests initiated by the current {{site.bs}} JavaScript SDK instance will be authenticated with that user's credentials.\n     * @memberOf Users.prototype\n     * @method login\n     * @name login\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.login}\n     * @param {string} username The user's username.\n     * @param {string} password The user's password.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    login(username: string, password: string, success?: SuccessCallback<UserLoginResult>, error?: ErrorCallback): Promise<UserLoginResult> {\n        return this.sdk.authentication.login(username, password, success, error);\n    }\n\n    /**\n     * Log out the user who is currently logged in.\n     * @memberOf Users.prototype\n     * @method logout\n     * @name logout\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.logout}\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log out the user who is currently logged in.\n     * @memberOf Users.prototype\n     * @method logout\n     * @name logout\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.logout}\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    logout(success?: SuccessCallback<{}>, error?: ErrorCallback): Promise<{}> {\n        return this.sdk.authentication.logout(success, error);\n    }\n\n    /**\n     * Log in a user using an Facebook access token.\n     * @memberOf Users.prototype\n     * @method loginWithFacebook\n     * @name loginWithFacebook\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithFacebook}\n     * @param {string} accessToken Facebook access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using an Facebook access token.\n     * @memberOf Users.prototype\n     * @method loginWithFacebook\n     * @name loginWithFacebook\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithFacebook}\n     * @param {string} accessToken Facebook access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithFacebook(accessToken: string, success?: SuccessCallback<SocialLoginResult>, error?: ErrorCallback): Promise<SocialLoginResult> {\n        return this.sdk.authentication.loginWithFacebook(accessToken, success, error);\n    }\n\n    /**\n     * Links a {{site.tap}} user account to a Facebook access token.\n     * @memberOf Users.prototype\n     * @method linkWithFacebook\n     * @name linkWithFacebook\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The Facebook access token that will be linked to the {{site.bs}} user account.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Links a {{site.tap}} user account to a Facebook access token.\n     * @memberOf Users.prototype\n     * @method linkWithFacebook\n     * @name linkWithFacebook\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The Facebook access token that will be linked to the {{site.bs}} user account.         * @param {Function} [success] a success callback.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    linkWithFacebook(userId: string, accessToken: string, success?: SuccessCallback<{}>, error?: ErrorCallback): Promise<{}> {\n        const identity = {\n            Provider: 'Facebook',\n            Token: accessToken\n        };\n        return this._linkWithProvider(identity, userId, success, error);\n    }\n\n    /**\n     * Unlinks a {{site.tap}} user account from the Facebook token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromFacebook\n     * @name unlinkFromFacebook\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Unlinks a {{site.tap}} user account from the Facebook token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromFacebook\n     * @name unlinkFromFacebook\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    unlinkFromFacebook(userId: string, success?: SuccessCallback<{}>, error?: ErrorCallback): Promise<{}> {\n        return this._unlinkFromProvider('Facebook', userId, success, error);\n    }\n\n    /**\n     * Log in a user using an ADFS access token.\n     * @memberOf Users.prototype\n     * @method loginWithADFS\n     * @name loginWithADFS\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithADFS}\n     * @param {string} accessToken ADFS access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using an ADFS access token.\n     * @memberOf Users.prototype\n     * @method loginWithADFS\n     * @name loginWithADFS\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithADFS}\n     * @param {string} accessToken ADFS access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithADFS(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this.sdk.authentication.loginWithADFS(accessToken, success, error);\n    }\n\n    /**\n     * Links a {{site.tap}} user account to an ADFS access token.\n     * @memberOf Users.prototype\n     * @method linkWithADFS\n     * @name linkWithADFS\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The ADFS access token that will be linked to the {{site.tap}} user account.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Links a {{site.tap}} user account to an ADFS access token.\n     * @memberOf Users.prototype\n     * @method linkWithADFS\n     * @name linkWithADFS\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The ADFS access token that will be linked to the {{site.tap}} user account.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    linkWithADFS(userId: string, accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'ADFS',\n            Token: accessToken\n        };\n        return this._linkWithProvider(identity, userId, success, error);\n    }\n\n    /**\n     * Unlinks a {{site.tap}} user account from the ADFS token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromADFS\n     * @name unlinkFromADFS\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Unlinks a {{site.tap}} user account from the ADFS token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromADFS\n     * @name unlinkFromADFS\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    unlinkFromADFS(userId: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this._unlinkFromProvider('ADFS', userId, success, error);\n    }\n\n    /**\n     * Links a {{site.TelerikBackendServices}} user account to an SAML access token.\n     * @memberOf Users.prototype\n     * @method linkWithSAML\n     * @name linkWithSAML\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The SAML access token that will be linked to the {{site.bs}} user account.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Links a {{site.TelerikBackendServices}} user account to an SAML access token.\n     * @memberOf Users.prototype\n     * @method linkWithSAML\n     * @name linkWithSAML\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The SAML access token that will be linked to the {{site.bs}} user account.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    linkWithSAML(userId: string, accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        var identity = {\n            Provider: 'SAML',\n            Token: accessToken\n        };\n        return this._linkWithProvider(identity, userId, success, error);\n    }\n\n    /**\n     * Unlinks a {{site.TelerikBackendServices}} user account from the SAML token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromSAML\n     * @name unlinkFromSAML\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Unlinks a {{site.TelerikBackendServices}} user account from the SAML token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromSAML\n     * @name unlinkFromSAML\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    unlinkFromSAML(userId: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this._unlinkFromProvider('SAML', userId, success, error);\n    }\n\n    /**\n     * Log in a user using a Microsoft Account access token.\n     * @memberOf Users.prototype\n     * @method loginWithLiveID\n     * @name loginWithLiveID\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithLiveID}\n     * @param {string} accessToken Microsoft Account access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using a Microsoft Account access token.\n     * @memberOf Users.prototype\n     * @method loginWithLiveID\n     * @name loginWithLiveID\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithLiveID}\n     * @param {string} accessToken Microsoft Account access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithLiveID(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this.sdk.authentication.loginWithLiveID(accessToken, success, error);\n    }\n\n    /**\n     * Links a {{site.tap}} user account to a Microsoft Account access token.\n     * @memberOf Users.prototype\n     * @method linkWithLiveID\n     * @name linkWithLiveID\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The Microsoft Account access token that will be linked to the {{site.tap}} user account.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Links a {{site.tap}} user account to a Microsoft Account access token.\n     * @memberOf Users.prototype\n     * @method linkWithLiveID\n     * @name linkWithLiveID\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The Microsoft Account access token that will be linked to the {{site.tap}} user account.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    linkWithLiveID(userId: string, accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'LiveID',\n            Token: accessToken\n        };\n        return this._linkWithProvider(identity, userId, success, error);\n    }\n\n    /**\n     * Unlinks a {{site.tap}} user account from the Microsoft Account access token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromLiveID\n     * @name unlinkFromLiveID\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Unlinks a {{site.tap}} user account from the Microsoft Account access token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromLiveID\n     * @name unlinkFromLiveID\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    unlinkFromLiveID(userId: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this._unlinkFromProvider('LiveID', userId, success, error);\n    }\n\n    /**\n     * Log in a user using a Google access token.\n     * @memberOf Users.prototype\n     * @method loginWithGoogle\n     * @name loginWithGoogle\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithGoogle}\n     * @param {string} accessToken Google access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using a Google access token.\n     * @memberOf Users.prototype\n     * @method loginWithGoogle\n     * @name loginWithGoogle\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.loginWithGoogle}\n     * @param {string} accessToken Google access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithGoogle(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this.sdk.authentication.loginWithGoogle(accessToken, success, error);\n    }\n\n    /**\n     * Links a {{site.tap}} user account to a Google access token.\n     * @memberOf Users.prototype\n     * @method linkWithGoogle\n     * @name linkWithGoogle\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The Google access token that will be linked to the {{site.tap}} user account.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Links a {{site.tap}} user account to a Google access token.\n     * @memberOf Users.prototype\n     * @method linkWithGoogle\n     * @name linkWithGoogle\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} accessToken The Google access token that will be linked to the {{site.tap}} user account.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    linkWithGoogle(userId: string, accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'Google',\n            Token: accessToken\n        };\n        return this._linkWithProvider(identity, userId, success, error);\n    }\n\n    /**\n     * Unlinks a {{site.tap}} user account from the Google access token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromGoogle\n     * @name unlinkFromGoogle\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Unlinks a {{site.tap}} user account from the Google access token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromGoogle\n     * @name unlinkFromGoogle\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    unlinkFromGoogle(userId: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this._unlinkFromProvider('Google', userId, success, error);\n    }\n\n    /**\n     * Log in a user with a Twitter token. A secret token needs to be provided.\n     * @memberOf Users.prototype\n     * @method loginWithTwitter\n     * @name loginWithTwitter\n     * @param {string} token Twitter token.\n     * @param {string} tokenSecret Twitter secret token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user with a Twitter token. A secret token needs to be provided.\n     * @memberOf Users.prototype\n     * @method loginWithTwitter\n     * @name loginWithTwitter\n     * @param {string} token Twitter token.\n     * @param {string} tokenSecret Twitter secret token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithTwitter(token: string, tokenSecret: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this.sdk.authentication.loginWithTwitter(token, tokenSecret, success, error);\n    }\n\n    /**\n     * Links a {{site.tap}} user account to a Twitter token. A secret token needs to be provided.\n     * @memberOf Users.prototype\n     * @method linkWithTwitter\n     * @name linkWithTwitter\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} token The Twitter access token that will be linked to the {{site.tap}} user account.\n     * @param {string} tokenSecret The Twitter secret token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Links a {{site.tap}} user account to a Twitter token. A secret token needs to be provided.\n     * @memberOf Users.prototype\n     * @method linkWithTwitter\n     * @name linkWithTwitter\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {string} token The Twitter access token that will be linked to the {{site.tap}} user account.\n     * @param {string} tokenSecret The Twitter secret token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    linkWithTwitter(userId: string, token: string, tokenSecret: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        const identity = {\n            Provider: 'Twitter',\n            Token: token,\n            TokenSecret: tokenSecret\n        };\n        return this._linkWithProvider(identity, userId, success, error);\n    }\n\n    /**\n     * Log in a user using an SAML access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithSAML\n     * @name loginWithSAML\n     * @param {string} accessToken SAML access token.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Log in a user using an SAML access token.\n     * @memberOf Authentication.prototype\n     * @method loginWithSAML\n     * @name loginWithSAML\n     * @param {string} accessToken SAML access token.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    loginWithSAML(accessToken: string, success?: SuccessCallback<any>, error?: ErrorCallback) {\n        return this.sdk.authentication.loginWithGoogle(accessToken, success, error);\n    };\n\n    /**\n     * Unlinks a {{site.tap}} user account from the Twitter access token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromTwitter\n     * @name unlinkFromTwitter\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Unlinks a {{site.tap}} user account from the Twitter access token that it is linked to.\n     * @memberOf Users.prototype\n     * @method unlinkFromTwitter\n     * @name unlinkFromTwitter\n     * @param {string} userId The user's ID in {{site.tap}}.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    unlinkFromTwitter(userId: string, success?: SuccessCallback<any>, error?: ErrorCallback): Promise<any> {\n        return this._unlinkFromProvider('Twitter', userId, success, error);\n    }\n\n    /**\n     * Sets the token and token type that the {{site.bs}} JavaScript SDK will use for authorization.\n     * @memberOf Users.prototype\n     * @method setAuthorization\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.setAuthorization}\n     * @param {string} token Token that will be used for authorization.\n     * @param {Everlive.TokenType} tokenType Token type. Currently only 'bearer' token is supported.\n     * @param {string} principalId The id of the user that is logged in.\n     */\n    setAuthorization(token: string, tokenType: string, principalId: string): void {\n        this.sdk.authentication.setAuthorization(token, tokenType, principalId);\n    }\n\n    /**\n     * Clears the authentication token that the {{site.bs}} JavaScript SDK currently uses. Note that this is different than logging out, because the current authorization token is not invalidated.\n     * @method clearAuthorization\n     * @deprecated\n     * @see [authentication.login]{@link ../Authentication/authentication.clearAuthorization}\n     * @memberOf Users.prototype\n     */\n    clearAuthorization(): void {\n        this.sdk.authentication.setAuthorization(null, null, null);\n    }\n\n    /**\n     * Sends a password reset email to a specified user.\n     * @memberOf Users.prototype\n     * @method resetPassword\n     * @name resetPassword\n     * @param {Object} user The user object, which must contain either username or email address.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Sends a password reset email to a specified user.\n     * @memberOf Users.prototype\n     * @method resetPassword\n     * @name resetPassword\n     * @param {Object} user The user object, which must contain either username or email address.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    resetPassword(user: { Email?: string; Username: string }, success?: SuccessCallback<SingleResult<boolean>>, error?: ErrorCallback): Promise<SingleResult<boolean>> {\n        const dataQuery = this.buildDataQuery(user, DataQueryOperation.UserResetPassword);\n        return this.processDataQuery<SingleResult<boolean>>(dataQuery, success, error);\n    }\n\n    /**\n     * Set a new password for a user using a password reset code.\n     * @memberOf Users.prototype\n     * @method setPassword\n     * @name setPassword\n     * @param {object} setPasswordObject The object, which contains information necessary for changing the user password.\n     * @param {string} setPasswordObject.Username The username that the password will be changed.\n     * @param {number} setPasswordObject.SecretQuestionId The id of the secret question.\n     * @param {string} setPasswordObject.SecretAnswer The answer to the secret question.\n     * @param {string} setPasswordObject.NewPassword The new password for the user.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Set a new password for a user using a password reset code.\n     * @memberOf Users.prototype\n     * @method setPassword\n     * @name setPassword\n     * @param {object} setPasswordObject The object, which contains information necessary for changing the user password.\n     * @param {string} setPasswordObject.Username The username that the password will be changed.\n     * @param {number} setPasswordObject.SecretQuestionId The id of the secret question.\n     * @param {string} setPasswordObject.SecretAnswer The answer to the secret question.\n     * @param {string} setPasswordObject.NewPassword The new password for the user.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n    /**\n     * Set a new password for a user using a password reset code.\n     * @memberOf Users.prototype\n     * @method setPassword\n     * @name setPassword\n     * @param {object} setPasswordObject The object, which contains information necessary for changing the user password.\n     * @param {string} setPasswordObject.ResetCode The reset code obtained using a password reset email.\n     * @param {string} setPasswordObject.NewPassword The new password for the user.\n     * @returns {Promise} The promise for the request.\n     */\n    /**\n     * Set a new password for a user using a password reset code.\n     * @memberOf Users.prototype\n     * @method setPassword\n     * @name setPassword\n     * @param {object} setPasswordObject The object, which contains information necessary for changing the user password.\n     * @param {string} setPasswordObject.ResetCode The reset code obtained using a password reset email.\n     * @param {string} setPasswordObject.NewPassword The new password for the user.\n     * @param {Function} [success] A success callback.\n     * @param {Function} [error] An error callback.\n     */\n\n    setPassword(setPasswordObject: SetUserPasswordBySecretAnswerPayload, success?: SuccessCallback<SingleResult<boolean>>, error?: ErrorCallback): Promise<SingleResult<boolean>>;\n    setPassword(setPasswordObject: SetUserPasswordByResetCodePayload, success?: SuccessCallback<SingleResult<boolean>>, error?: ErrorCallback): Promise<SingleResult<boolean>>;\n    setPassword(setPasswordObject: SetUserPasswordBySecretAnswerPayload|SetUserPasswordByResetCodePayload, success?: SuccessCallback<SingleResult<boolean>>, error?: ErrorCallback): Promise<SingleResult<boolean>> {\n        const dataQuery = this.buildDataQuery(setPasswordObject, DataQueryOperation.UserSetPassword);\n        return this.processDataQuery<SingleResult<boolean>>(dataQuery, success, error);\n    }\n\n    skipAuth(options: boolean): this {\n        return super.skipAuth(options);\n    }\n\n    private _linkWithProvider(identity: UserSocialIdentity, userId: string, success?: SuccessCallback<{}>, error?: ErrorCallback): Promise<{}> {\n        const dataQuery = this.buildDataQuery({\n            additionalOptions: {\n                id: userId\n            },\n            data: identity\n        }, DataQueryOperation.UserLinkWithProvider);\n        return this.processDataQuery<{}>(dataQuery, success, error);\n    }\n\n    private _unlinkFromProvider(providerName: string, userId: string, success?: SuccessCallback<{}>, error?: ErrorCallback): Promise<{}> {\n        const dataQuery = this.buildDataQuery({\n            additionalOptions: {id: userId},\n            data: {\n                Provider: providerName\n            }\n        }, DataQueryOperation.UserUnlinkFromProvider);\n        return this.processDataQuery<{}>(dataQuery, success, error);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/Users.ts\n **/","import * as _ from 'underscore';\n\nimport {Utils} from '../../utils';\nimport { EverliveError, EverliveErrors, EverliveErrorHelper } from '../../EverliveError';\n\nexport default class DataPreprocessor {\n    processDataQuery(query, iterator, data, value) {\n        var offlineStorageEnabled = data.sdk._isOfflineStorageEnabled();\n        query.useOffline = offlineStorageEnabled ? !data.sdk.isOnline() : false;\n\n        var isCachingEnabled = (data.sdk.setup.caching === true || (data.sdk.setup.caching && data.sdk.setup.caching.enabled));\n        var isSupportedInOffline = Utils.isQuerySupportedOffline(query);\n\n        if (data.options) {\n            query = _.extend(query, data.options);\n            data.options = null;\n        }\n\n        query.useCache = isCachingEnabled && !query.isSync && isSupportedInOffline;\n        query.applyOffline = query.applyOffline !== undefined ? query.applyOffline : offlineStorageEnabled || query.useCache;\n\n        if (!query.useCache && (query.forceCache || query.maxAge || query.ignoreCache)) {\n            let wantedCacheOperation;\n            if (query.forceCache) {\n               wantedCacheOperation = 'forceCache';\n            } else if (query.maxAge) {\n                wantedCacheOperation = 'maxAge';\n            } else {\n                wantedCacheOperation = 'ignoreCache';\n            }\n\n            const cacheDisabledErrorMessage = EverliveErrorHelper.buildCacheDisabledErrorMessage(wantedCacheOperation);\n            return iterator.error(new EverliveError({message: cacheDisabledErrorMessage, code: EverliveErrors.cacheDisabled.code}));\n        }\n\n        return iterator.next(value);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/preProcessors/DataPreprocessor.ts\n **/","import {\n    EverliveError,\n    EverliveErrors\n} from '../../EverliveError';\nimport {\n    DataQueryOperation\n} from '../../constants';\nimport {Utils} from '../../utils';\nimport * as platform from '../../../common/platform';\n\nexport default class OfflineQueryPreprocessor {\n    processDataQuery(query, iterator, data, value) {\n        if ((!query.isSync && data.offlineStorage && data.offlineStorage.isSynchronizing())) {\n            const error = new EverliveError(EverliveErrors.syncInProgress);\n            return iterator.error(error);\n        }\n\n        if (Utils.isContentType.files(data.collectionName) && platform.isDesktop) {\n            const op = query.operation;\n\n            if (query.useOffline && query.applyOffline && (op === DataQueryOperation.Create || op === DataQueryOperation.Update)) {\n                const error = new EverliveError(EverliveErrors.filesNotSupportedInBrowser);\n                return iterator.error(error);\n            }\n        }\n\n        return iterator.next(value);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/preProcessors/OfflineQueryPreprocessor.ts\n **/","import * as _ from 'underscore';\n\nimport { Utils } from '../../utils';\nimport { EverliveErrors } from '../../EverliveError';\n\nexport default class AuthenticationProcessor {\n    processDataQuery(query, iterator, data, value) {\n        if (!query.skipAuth && data.sdk.authentication && data.sdk.authentication.isAuthenticationInProgress()) {\n            iterator.prependOnceListener('error', (error, ev) => {\n\n                const err = Utils.parseUtilities.parseErrorOrResponse(error);\n                if (err && (err.code === EverliveErrors.invalidToken.code || err.code === EverliveErrors.expiredToken.code)) {\n                    ev.cancel();\n                    const whenAuthenticatedPromise = data.sdk.authentication._ensureAuthentication();\n                    if (!query.noRetry) {\n                        whenAuthenticatedPromise.then(function () {\n                            if (query.headers && query.headers.authorization) {\n                                //at this stage if a token is used for authentication it is already invalidated\n                                //we need to set the new one to the query\n                                const authHeader = Utils.buildAuthHeader(data.sdk.setup);\n                                _.extend(query.headers, authHeader);\n                            }\n\n                            return iterator.restart();\n                        });\n                    } else {\n                        return iterator.next(value);\n                    }\n                }\n            });\n\n            //if we are currently authenticating, queue the data query after we have logged in\n            if (data.sdk.authentication.isAuthenticating()) {\n                var whenAuthenticatedPromise = data.sdk.authentication._ensureAuthentication();\n                if (!query.noRetry) {\n                    whenAuthenticatedPromise.then(function () {\n                        return iterator.restart();\n                    });\n                }\n\n                return whenAuthenticatedPromise;\n            } else {\n                return iterator.next(value);\n            }\n        } else {\n            return iterator.next(value);\n        }\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/processors/AuthenticationProcessor.ts\n **/","import {DataQueryOperation} from '../../constants';\nimport {RequestService} from '../../services/RequestService'\n\nexport default class BusinessLogicQueryProcessor {\n    processDataQuery(query, iterator, data, value) {\n        const op = query.operation;\n        if (op !== DataQueryOperation.InvokeCloudFunction &&\n            op !== DataQueryOperation.InvokeStoredProcedure) {\n            return iterator.next(value);\n        }\n\n        const request = RequestService.buildRequest(query, data);\n        return request.send()\n            .then(res => {\n                return iterator.end(res);\n            })\n            .catch(err => {\n                return iterator.error(err);\n            });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/processors/BusinessLogicQueryProcessor.ts\n **/","import {RequestService} from '../../services/RequestService';\n\nexport default class CacheQueryProcessor {\n    processDataQuery(query, iterator, data, value) {\n        if (!query.useCache || (query.useCache && query.canUseOffline)) {\n            return iterator.next(value);\n        }\n\n        return this._cacheDataQuery(query, data)\n            .then(function (result) {\n                return iterator.next(result || value);\n            }, function (error) {\n                return iterator.error(error);\n            });\n    }\n\n    _cacheDataQuery(query, data) {\n        const shouldSkipCache = data.sdk.cache._shouldSkipCache(query);\n        if (shouldSkipCache) {\n            if (query.ignoreCache && !data.sdk.cache.isQueryUnsupportedOffline(query)) {\n                const hash = data.sdk.cache._getHashForQuery(query);\n\n                return data.sdk.cache._cacheQuery(query, hash, data);\n            } else {\n                return RequestService.handleRequestProcessing(query, data);\n            }\n        } else {\n            query.useCache = false;\n            return data.sdk.cache._processCacheItem(query, data);\n        }\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/processors/CacheQueryProcessor.ts\n **/","import * as _ from 'underscore';\n\nimport { DataQueryOperation, Constants } from '../../constants';\nimport { EventQuery } from '../../query/EventQuery';\n\nconst beforeExecuteAllowedOperations = [\n    DataQueryOperation.Count,\n    DataQueryOperation.Read,\n    DataQueryOperation.Create,\n    DataQueryOperation.Update,\n    DataQueryOperation.UpdateById,\n    DataQueryOperation.Delete,\n    DataQueryOperation.DeleteById,\n    DataQueryOperation.ReadById,\n    DataQueryOperation.Aggregate,\n    DataQueryOperation.RawUpdate\n];\n\nexport default class EventQueryProcessor {\n    processDataQuery(query, iterator, data, value) {\n        if (_.contains(beforeExecuteAllowedOperations, query.operation)) {\n            var eventQuery = EventQuery.fromDataQuery(query);\n            data.sdk.emit(Constants.Events.BeforeExecute, eventQuery);\n            if (eventQuery.isCancelled()) {\n                return iterator.cancel();\n            }\n\n            query.applyEventQuery(eventQuery);\n        }\n\n        return iterator.next(value);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/processors/EventQueryProcessor.ts\n **/","import { EverliveError, EverliveErrors } from '../../EverliveError';\n\nexport default class OfflineQueryProcessor {\n    processDataQuery(query, iterator, data, value) {\n        if (!query.canUseOffline) {\n            return iterator.next(value);\n        }\n\n        if (!query.applyOffline) {\n            const error = new EverliveError({message: 'The applyOffline must be true when working offline.'});\n            return iterator.error(error);\n        } else {\n            return data.offlineStorage.processQuery(query)\n                .then((...args) => {\n                    return iterator.next(...args);\n                }, err => {\n                    if (!err.code) {\n                        err = new EverliveError({message: err.message, code: EverliveErrors.generalDatabaseError.code});\n                    }\n\n                    return iterator.error(err);\n                });\n        }\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/processors/OfflineQueryProcessor.ts\n **/","import { RequestService } from '../../services/RequestService';\n\nexport default class OnlineQueryProcessor {\n    processDataQuery(query, iterator, data, value) {\n        if (query.canUseOffline || query.useCache) {\n            return iterator.next(value);\n        }\n\n        return RequestService.handleRequestProcessing(query, data)\n            .then(function (result) {\n               return iterator.next(result || value);\n            }, function (err) {\n                return iterator.error(err);\n            });\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/types/processors/OnlineQueryProcessor.ts\n **/","'use strict';\n\nvar buffer = require('buffer');\nvar Buffer = buffer.Buffer;\nvar SlowBuffer = buffer.SlowBuffer;\nvar MAX_LEN = buffer.kMaxLength || 2147483647;\nexports.alloc = function alloc(size, fill, encoding) {\n  if (typeof Buffer.alloc === 'function') {\n    return Buffer.alloc(size, fill, encoding);\n  }\n  if (typeof encoding === 'number') {\n    throw new TypeError('encoding must not be number');\n  }\n  if (typeof size !== 'number') {\n    throw new TypeError('size must be a number');\n  }\n  if (size > MAX_LEN) {\n    throw new RangeError('size is too large');\n  }\n  var enc = encoding;\n  var _fill = fill;\n  if (_fill === undefined) {\n    enc = undefined;\n    _fill = 0;\n  }\n  var buf = new Buffer(size);\n  if (typeof _fill === 'string') {\n    var fillBuf = new Buffer(_fill, enc);\n    var flen = fillBuf.length;\n    var i = -1;\n    while (++i < size) {\n      buf[i] = fillBuf[i % flen];\n    }\n  } else {\n    buf.fill(_fill);\n  }\n  return buf;\n}\nexports.allocUnsafe = function allocUnsafe(size) {\n  if (typeof Buffer.allocUnsafe === 'function') {\n    return Buffer.allocUnsafe(size);\n  }\n  if (typeof size !== 'number') {\n    throw new TypeError('size must be a number');\n  }\n  if (size > MAX_LEN) {\n    throw new RangeError('size is too large');\n  }\n  return new Buffer(size);\n}\nexports.from = function from(value, encodingOrOffset, length) {\n  if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {\n    return Buffer.from(value, encodingOrOffset, length);\n  }\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number');\n  }\n  if (typeof value === 'string') {\n    return new Buffer(value, encodingOrOffset);\n  }\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    var offset = encodingOrOffset;\n    if (arguments.length === 1) {\n      return new Buffer(value);\n    }\n    if (typeof offset === 'undefined') {\n      offset = 0;\n    }\n    var len = length;\n    if (typeof len === 'undefined') {\n      len = value.byteLength - offset;\n    }\n    if (offset >= value.byteLength) {\n      throw new RangeError('\\'offset\\' is out of bounds');\n    }\n    if (len > value.byteLength - offset) {\n      throw new RangeError('\\'length\\' is out of bounds');\n    }\n    return new Buffer(value.slice(offset, offset + len));\n  }\n  if (Buffer.isBuffer(value)) {\n    var out = new Buffer(value.length);\n    value.copy(out, 0, 0, value.length);\n    return out;\n  }\n  if (value) {\n    if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {\n      return new Buffer(value);\n    }\n    if (value.type === 'Buffer' && Array.isArray(value.data)) {\n      return new Buffer(value.data);\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');\n}\nexports.allocUnsafeSlow = function allocUnsafeSlow(size) {\n  if (typeof Buffer.allocUnsafeSlow === 'function') {\n    return Buffer.allocUnsafeSlow(size);\n  }\n  if (typeof size !== 'number') {\n    throw new TypeError('size must be a number');\n  }\n  if (size >= MAX_LEN) {\n    throw new RangeError('size is too large');\n  }\n  return new SlowBuffer(size);\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/buffer-shims/index.js\n ** module id = 95\n ** module chunks = 0\n **/","\n/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && 'WebkitAppearance' in document.documentElement.style) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (window.console && (console.firebug || (console.exception && console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31);\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs() {\n  var args = arguments;\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return args;\n\n  var c = 'color: ' + this.color;\n  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n  return args;\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    return exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (typeof process !== 'undefined' && 'env' in process) {\n    return process.env.DEBUG;\n  }\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage(){\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/debug/browser.js\n ** module id = 96\n ** module chunks = 0\n **/","\n/**\n * Module dependencies.\n */\n\nvar type = require('type-component');\n\n/**\n * Gets a certain `path` from the `obj`.\n *\n * @param {Object} target\n * @param {String} key\n * @return {Object} found object, or `undefined\n * @api public\n */\n\nexports.get = function(obj, path){\n  if (~path.indexOf('.')) {\n    var par = parent(obj, path);\n    var mainKey = path.split('.').pop();\n    var t = type(par);\n    if ('object' == t || 'array' == t) return par[mainKey];\n  } else {\n    return obj[path];\n  }\n};\n\n/**\n * Sets the given `path` to `val` in `obj`.\n *\n * @param {Object} target\n * @Param {String} key\n * @param {Object} value\n * @api public\n */\n\nexports.set = function(obj, path, val){\n  if (~path.indexOf('.')) {\n    var par = parent(obj, path, true);\n    var mainKey = path.split('.').pop();\n    if (par && 'object' == type(par)) par[mainKey] = val;\n  } else {\n    obj[path] = val;\n  }\n};\n\n/**\n * Gets the parent object for a given key (dot notation aware).\n *\n * - If a parent object doesn't exist, it's initialized.\n * - Array index lookup is supported\n *\n * @param {Object} target object\n * @param {String} key\n * @param {Boolean} true if it should initialize the path\n * @api public\n */\n\nexports.parent = parent;\n\nfunction parent(obj, key, init){\n  if (~key.indexOf('.')) {\n    var pieces = key.split('.');\n    var ret = obj;\n\n    for (var i = 0; i < pieces.length - 1; i++) {\n      // if the key is a number string and parent is an array\n      if (Number(pieces[i]) == pieces[i] && 'array' == type(ret)) {\n        ret = ret[pieces[i]];\n      } else if ('object' == type(ret)) {\n        if (init && !ret.hasOwnProperty(pieces[i])) {\n          ret[pieces[i]] = {};\n        }\n        if (ret) ret = ret[pieces[i]];\n      }\n    }\n\n    return ret;\n  } else {\n    return obj;\n  }\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/dot-component/index.js\n ** module id = 97\n ** module chunks = 0\n **/","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/isarray/index.js\n ** module id = 98\n ** module chunks = 0\n **/","\n/**\n * Module dependencies.\n */\n\nvar type = require('component-type');\n\n/**\n * Module exports.\n */\n\nmodule.exports = eql;\n\n/**\n * MongoDB style value comparisons.\n *\n * @param {Object} matcher\n * @param {Object} value\n * @return {Boolean} true if they match\n */\n\nfunction eql(matcher, val){\n  switch (type(matcher)) {\n    case 'null':\n    case 'undefined':\n      // we treat null as undefined\n      return null == val;\n\n    case 'regexp':\n      return matcher.test(val);\n\n    case 'array':\n      if ('array' == type(val) && matcher.length == val.length) {\n        for (var i = 0; i < matcher.length; i++) {\n          if (!eql(val[i], matcher[i])) return false;\n        }\n        return true;\n      } else {\n        return false;\n      }\n      break;\n\n    case 'object':\n      // object can match keys in any order\n      var keys = {};\n\n      // we match all values of `matcher` in `val`\n      for (var i in matcher) {\n        if (matcher.hasOwnProperty(i)) {\n          if (!val.hasOwnProperty(i) || !eql(matcher[i], val[i])) {\n            return false;\n          }\n        }\n        keys[i] = true;\n      }\n\n      // we make sure `val` doesn't have extra keys\n      for (var i in val) {\n        if (val.hasOwnProperty(i) && !keys.hasOwnProperty(i)) {\n          return false;\n        }\n      }\n\n      return true;\n\n    default:\n      return matcher === val;\n  }\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mongo-eql/index.js\n ** module id = 99\n ** module chunks = 0\n **/","\n/**\n * HOP ref.\n */\n\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * Return own keys in `obj`.\n *\n * @param {Object} obj\n * @return {Array}\n * @api public\n */\n\nexports.keys = Object.keys || function(obj){\n  var keys = [];\n  for (var key in obj) {\n    if (has.call(obj, key)) {\n      keys.push(key);\n    }\n  }\n  return keys;\n};\n\n/**\n * Return own values in `obj`.\n *\n * @param {Object} obj\n * @return {Array}\n * @api public\n */\n\nexports.values = function(obj){\n  var vals = [];\n  for (var key in obj) {\n    if (has.call(obj, key)) {\n      vals.push(obj[key]);\n    }\n  }\n  return vals;\n};\n\n/**\n * Merge `b` into `a`.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api public\n */\n\nexports.merge = function(a, b){\n  for (var key in b) {\n    if (has.call(b, key)) {\n      a[key] = b[key];\n    }\n  }\n  return a;\n};\n\n/**\n * Return length of `obj`.\n *\n * @param {Object} obj\n * @return {Number}\n * @api public\n */\n\nexports.length = function(obj){\n  return exports.keys(obj).length;\n};\n\n/**\n * Check if `obj` is empty.\n *\n * @param {Object} obj\n * @return {Boolean}\n * @api public\n */\n\nexports.isEmpty = function(obj){\n  return 0 == exports.length(obj);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/object-component/index.js\n ** module id = 100\n ** module chunks = 0\n **/","'use strict';\n\nif (!process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = nextTick;\n} else {\n  module.exports = process.nextTick;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process-nextick-args/index.js\n ** module id = 101\n ** module chunks = 0\n **/","// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction TransformState(stream) {\n  this.afterTransform = function (er, data) {\n    return afterTransform(stream, er, data);\n  };\n\n  this.needTransform = false;\n  this.transforming = false;\n  this.writecb = null;\n  this.writechunk = null;\n  this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n  var ts = stream._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data !== null && data !== undefined) stream.push(data);\n\n  cb(er);\n\n  var rs = stream._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    stream._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = new TransformState(this);\n\n  var stream = this;\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.once('prefinish', function () {\n    if (typeof this._flush === 'function') this._flush(function (er, data) {\n      done(stream, er, data);\n    });else done(stream);\n  });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data !== null && data !== undefined) stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  var ws = stream._writableState;\n  var ts = stream._transformState;\n\n  if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/lib/_stream_transform.js\n ** module id = 102\n ** module chunks = 0\n **/","// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/*<replacement>*/\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream;\n(function () {\n  try {\n    Stream = require('st' + 'ream');\n  } catch (_) {} finally {\n    if (!Stream) Stream = require('events').EventEmitter;\n  }\n})();\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\n/*<replacement>*/\nvar bufferShim = require('buffer-shims');\n/*</replacement>*/\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = ~~this.highWaterMark;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  processNextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    processNextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = Buffer.isBuffer(chunk);\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = bufferShim.from(chunk, encoding);\n  }\n  return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    chunk = decodeChunk(state, chunk, encoding);\n    if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) processNextTick(cb, er);else cb(er);\n\n  stream._writableState.errorEmitted = true;\n  stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    while (entry) {\n      buffer[count] = entry;\n      entry = entry.next;\n      count += 1;\n    }\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequestCount = 0;\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished) {\n    state.prefinished = true;\n    stream.emit('prefinish');\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    if (state.pendingcb === 0) {\n      prefinish(stream, state);\n      state.finished = true;\n      stream.emit('finish');\n    } else {\n      prefinish(stream, state);\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) processNextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function (err) {\n    var entry = _this.entry;\n    _this.entry = null;\n    while (entry) {\n      var cb = entry.callback;\n      state.pendingcb--;\n      cb(err);\n      entry = entry.next;\n    }\n    if (state.corkedRequestsFree) {\n      state.corkedRequestsFree.next = _this;\n    } else {\n      state.corkedRequestsFree = _this;\n    }\n  };\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/lib/_stream_writable.js\n ** module id = 103\n ** module chunks = 0\n **/","'use strict';\nfunction ExpandError(message) {\n    this.name = 'ExpandError';\n    this.message = message;\n    this.stack = (new Error()).stack;\n}\nExpandError.prototype = new Error;\nmodule.exports = ExpandError;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-expand-processor/ExpandError.js\n ** module id = 104\n ** module chunks = 0\n **/","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (factory((global.async = global.async || {})));\n}(this, (function (exports) { 'use strict';\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest$1(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n// Lodash rest function without function.toString()\n// remappings\nfunction rest(func, start) {\n    return overRest$1(func, start, identity);\n}\n\nvar initialParams = function (fn) {\n    return rest(function (args /*..., callback*/) {\n        var callback = args.pop();\n        fn.call(this, args, callback);\n    });\n};\n\nfunction applyEach$1(eachfn) {\n    return rest(function (fns, args) {\n        var go = initialParams(function (args, callback) {\n            var that = this;\n            return eachfn(fns, function (fn, cb) {\n                fn.apply(that, args.concat(cb));\n            }, callback);\n        });\n        if (args.length) {\n            return go.apply(this, args);\n        } else {\n            return go;\n        }\n    });\n}\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Built-in value references. */\nvar Symbol$1 = root.Symbol;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag$1),\n      tag = value[symToStringTag$1];\n\n  try {\n    value[symToStringTag$1] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag$1] = tag;\n    } else {\n      delete value[symToStringTag$1];\n    }\n  }\n  return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString$1 = objectProto$1.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString$1.call(value);\n}\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]';\nvar undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  value = Object(value);\n  return (symToStringTag && symToStringTag in value)\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]';\nvar funcTag = '[object Function]';\nvar genTag = '[object GeneratorFunction]';\nvar proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nvar breakLoop = {};\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nfunction once(fn) {\n    return function () {\n        if (fn === null) return;\n        var callFn = fn;\n        fn = null;\n        callFn.apply(this, arguments);\n    };\n}\n\nvar iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator;\n\nvar getIterator = function (coll) {\n    return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol]();\n};\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/** Used for built-in method references. */\nvar objectProto$3 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$2 = objectProto$3.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto$3.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER$1 = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER$1 : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/** `Object#toString` result references. */\nvar argsTag$1 = '[object Arguments]';\nvar arrayTag = '[object Array]';\nvar boolTag = '[object Boolean]';\nvar dateTag = '[object Date]';\nvar errorTag = '[object Error]';\nvar funcTag$1 = '[object Function]';\nvar mapTag = '[object Map]';\nvar numberTag = '[object Number]';\nvar objectTag = '[object Object]';\nvar regexpTag = '[object RegExp]';\nvar setTag = '[object Set]';\nvar stringTag = '[object String]';\nvar weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]';\nvar dataViewTag = '[object DataView]';\nvar float32Tag = '[object Float32Array]';\nvar float64Tag = '[object Float64Array]';\nvar int8Tag = '[object Int8Array]';\nvar int16Tag = '[object Int16Array]';\nvar int32Tag = '[object Int32Array]';\nvar uint8Tag = '[object Uint8Array]';\nvar uint8ClampedTag = '[object Uint8ClampedArray]';\nvar uint16Tag = '[object Uint16Array]';\nvar uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag$1] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag$1] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/** Detect free variable `exports`. */\nvar freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports$1 && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/** Used for built-in method references. */\nvar objectProto$2 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$1 = objectProto$2.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty$1.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto$5 = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5;\n\n  return value === proto;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/** Used for built-in method references. */\nvar objectProto$4 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$3 = objectProto$4.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty$3.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nfunction createArrayIterator(coll) {\n    var i = -1;\n    var len = coll.length;\n    return function next() {\n        return ++i < len ? { value: coll[i], key: i } : null;\n    };\n}\n\nfunction createES2015Iterator(iterator) {\n    var i = -1;\n    return function next() {\n        var item = iterator.next();\n        if (item.done) return null;\n        i++;\n        return { value: item.value, key: i };\n    };\n}\n\nfunction createObjectIterator(obj) {\n    var okeys = keys(obj);\n    var i = -1;\n    var len = okeys.length;\n    return function next() {\n        var key = okeys[++i];\n        return i < len ? { value: obj[key], key: key } : null;\n    };\n}\n\nfunction iterator(coll) {\n    if (isArrayLike(coll)) {\n        return createArrayIterator(coll);\n    }\n\n    var iterator = getIterator(coll);\n    return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\n\nfunction onlyOnce(fn) {\n    return function () {\n        if (fn === null) throw new Error(\"Callback was already called.\");\n        var callFn = fn;\n        fn = null;\n        callFn.apply(this, arguments);\n    };\n}\n\nfunction _eachOfLimit(limit) {\n    return function (obj, iteratee, callback) {\n        callback = once(callback || noop);\n        if (limit <= 0 || !obj) {\n            return callback(null);\n        }\n        var nextElem = iterator(obj);\n        var done = false;\n        var running = 0;\n\n        function iterateeCallback(err, value) {\n            running -= 1;\n            if (err) {\n                done = true;\n                callback(err);\n            } else if (value === breakLoop || done && running <= 0) {\n                done = true;\n                return callback(null);\n            } else {\n                replenish();\n            }\n        }\n\n        function replenish() {\n            while (running < limit && !done) {\n                var elem = nextElem();\n                if (elem === null) {\n                    done = true;\n                    if (running <= 0) {\n                        callback(null);\n                    }\n                    return;\n                }\n                running += 1;\n                iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n            }\n        }\n\n        replenish();\n    };\n}\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array. The iteratee is passed a `callback(err)` which must be called once it\n * has completed. If no error has occurred, the callback should be run without\n * arguments or with an explicit `null` argument. Invoked with\n * (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nfunction eachOfLimit(coll, limit, iteratee, callback) {\n  _eachOfLimit(limit)(coll, iteratee, callback);\n}\n\nfunction doLimit(fn, limit) {\n    return function (iterable, iteratee, callback) {\n        return fn(iterable, limit, iteratee, callback);\n    };\n}\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n    callback = once(callback || noop);\n    var index = 0,\n        completed = 0,\n        length = coll.length;\n    if (length === 0) {\n        callback(null);\n    }\n\n    function iteratorCallback(err, value) {\n        if (err) {\n            callback(err);\n        } else if (++completed === length || value === breakLoop) {\n            callback(null);\n        }\n    }\n\n    for (; index < length; index++) {\n        iteratee(coll[index], index, onlyOnce(iteratorCallback));\n    }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nvar eachOfGeneric = doLimit(eachOfLimit, Infinity);\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array. The iteratee is passed a `callback(err)` which must be called once it\n * has completed. If no error has occurred, the callback should be run without\n * arguments or with an explicit `null` argument. Invoked with\n * (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @example\n *\n * var obj = {dev: \"/dev.json\", test: \"/test.json\", prod: \"/prod.json\"};\n * var configs = {};\n *\n * async.forEachOf(obj, function (value, key, callback) {\n *     fs.readFile(__dirname + value, \"utf8\", function (err, data) {\n *         if (err) return callback(err);\n *         try {\n *             configs[key] = JSON.parse(data);\n *         } catch (e) {\n *             return callback(e);\n *         }\n *         callback();\n *     });\n * }, function (err) {\n *     if (err) console.error(err.message);\n *     // configs is now a map of JSON data\n *     doSomethingWith(configs);\n * });\n */\nvar eachOf = function (coll, iteratee, callback) {\n    var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n    eachOfImplementation(coll, iteratee, callback);\n};\n\nfunction doParallel(fn) {\n    return function (obj, iteratee, callback) {\n        return fn(eachOf, obj, iteratee, callback);\n    };\n}\n\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n    callback = callback || noop;\n    arr = arr || [];\n    var results = [];\n    var counter = 0;\n\n    eachfn(arr, function (value, _, callback) {\n        var index = counter++;\n        iteratee(value, function (err, v) {\n            results[index] = v;\n            callback(err);\n        });\n    }, function (err) {\n        callback(err, results);\n    });\n}\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callback\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array.  The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, transformed)` which must be called\n * once it has completed with an error (which can be `null`) and a\n * transformed item. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @example\n *\n * async.map(['file1','file2','file3'], fs.stat, function(err, results) {\n *     // results is now an array of stats for each file\n * });\n */\nvar map = doParallel(_asyncMap);\n\n/**\n * Applies the provided arguments to each function in the array, calling\n * `callback` after all functions have completed. If you only provide the first\n * argument, `fns`, then it will return a function which lets you pass in the\n * arguments as if it were a single function call. If more arguments are\n * provided, `callback` is required while `args` is still optional.\n *\n * @name applyEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} fns - A collection of asynchronous functions\n * to all call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {Function} - If only the first argument, `fns`, is provided, it will\n * return a function which lets you pass in the arguments as if it were a single\n * function call. The signature is `(..args, callback)`. If invoked with any\n * arguments, `callback` is required.\n * @example\n *\n * async.applyEach([enableSearch, updateSchema], 'bucket', callback);\n *\n * // partial application example:\n * async.each(\n *     buckets,\n *     async.applyEach([enableSearch, updateSchema]),\n *     callback\n * );\n */\nvar applyEach = applyEach$1(map);\n\nfunction doParallelLimit(fn) {\n    return function (obj, limit, iteratee, callback) {\n        return fn(_eachOfLimit(limit), obj, iteratee, callback);\n    };\n}\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, transformed)` which must be called\n * once it has completed with an error (which can be `null`) and a transformed\n * item. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n */\nvar mapLimit = doParallelLimit(_asyncMap);\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, transformed)` which must be called\n * once it has completed with an error (which can be `null`) and a\n * transformed item. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n */\nvar mapSeries = doLimit(mapLimit, 1);\n\n/**\n * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n *\n * @name applyEachSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n * @category Control Flow\n * @param {Array|Iterable|Object} fns - A collection of asynchronous functions to all\n * call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {Function} - If only the first argument is provided, it will return\n * a function which lets you pass in the arguments as if it were a single\n * function call.\n */\nvar applyEachSeries = applyEach$1(mapSeries);\n\n/**\n * Creates a continuation function with some arguments already applied.\n *\n * Useful as a shorthand when combined with other control flow functions. Any\n * arguments passed to the returned function are added to the arguments\n * originally passed to apply.\n *\n * @name apply\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} function - The function you want to eventually apply all\n * arguments to. Invokes with (arguments...).\n * @param {...*} arguments... - Any number of arguments to automatically apply\n * when the continuation is called.\n * @example\n *\n * // using apply\n * async.parallel([\n *     async.apply(fs.writeFile, 'testfile1', 'test1'),\n *     async.apply(fs.writeFile, 'testfile2', 'test2')\n * ]);\n *\n *\n * // the same process without using apply\n * async.parallel([\n *     function(callback) {\n *         fs.writeFile('testfile1', 'test1', callback);\n *     },\n *     function(callback) {\n *         fs.writeFile('testfile2', 'test2', callback);\n *     }\n * ]);\n *\n * // It's possible to pass any number of additional arguments when calling the\n * // continuation:\n *\n * node> var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */\nvar apply$2 = rest(function (fn, args) {\n    return rest(function (callArgs) {\n        return fn.apply(null, args.concat(callArgs));\n    });\n});\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2016 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function to convert to an\n * asynchronous function.\n * @returns {Function} An asynchronous wrapper of the `func`. To be invoked with\n * (callback).\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(JSON.parse),\n *     function (data, next) {\n *         // data is the result of parsing the text.\n *         // If there was a parsing error, it would have been caught.\n *     }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(function (contents) {\n *         return db.model.create(contents);\n *     }),\n *     function (model, next) {\n *         // `model` is the instantiated model object.\n *         // If there was an error, this function would be skipped.\n *     }\n * ], callback);\n *\n * // es6 example\n * var q = async.queue(async.asyncify(async function(file) {\n *     var intermediateStep = await processFile(file);\n *     return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n    return initialParams(function (args, callback) {\n        var result;\n        try {\n            result = func.apply(this, args);\n        } catch (e) {\n            return callback(e);\n        }\n        // if result is Promise object\n        if (isObject(result) && typeof result.then === 'function') {\n            result.then(function (value) {\n                callback(null, value);\n            }, function (err) {\n                callback(err.message ? err : new Error(err));\n            });\n        } else {\n            callback(null, result);\n        }\n    });\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\n/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\n/**\n * Determines the best order for running the functions in `tasks`, based on\n * their requirements. Each function can optionally depend on other functions\n * being completed first, and each function is run as soon as its requirements\n * are satisfied.\n *\n * If any of the functions pass an error to their callback, the `auto` sequence\n * will stop. Further tasks will not execute (so any other functions depending\n * on it will not run), and the main `callback` is immediately called with the\n * error.\n *\n * Functions also receive an object containing the results of functions which\n * have completed so far as the first argument, if they have dependencies. If a\n * task function has no dependencies, it will only be passed a callback.\n *\n * @name auto\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object} tasks - An object. Each of its properties is either a\n * function or an array of requirements, with the function itself the last item\n * in the array. The object's key of a property serves as the name of the task\n * defined by that property, i.e. can be used when specifying requirements for\n * other tasks. The function receives one or two arguments:\n * * a `results` object, containing the results of the previously executed\n *   functions, only passed if the task has any dependencies,\n * * a `callback(err, result)` function, which must be called when finished,\n *   passing an `error` (which can be `null`) and the result of the function's\n *   execution.\n * @param {number} [concurrency=Infinity] - An optional `integer` for\n * determining the maximum number of tasks that can be run in parallel. By\n * default, as many as possible.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback. Results are always returned; however, if an\n * error occurs, no further `tasks` will be performed, and the results object\n * will only contain partial results. Invoked with (err, results).\n * @returns undefined\n * @example\n *\n * async.auto({\n *     // this function will just be passed a callback\n *     readData: async.apply(fs.readFile, 'data.txt', 'utf-8'),\n *     showData: ['readData', function(results, cb) {\n *         // results.readData is the file's contents\n *         // ...\n *     }]\n * }, callback);\n *\n * async.auto({\n *     get_data: function(callback) {\n *         console.log('in get_data');\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         console.log('in make_folder');\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: ['get_data', 'make_folder', function(results, callback) {\n *         console.log('in write_file', JSON.stringify(results));\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(results, callback) {\n *         console.log('in email_link', JSON.stringify(results));\n *         // once the file is written let's email a link to it...\n *         // results.write_file contains the filename returned by write_file.\n *         callback(null, {'file':results.write_file, 'email':'user@example.com'});\n *     }]\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('results = ', results);\n * });\n */\nvar auto = function (tasks, concurrency, callback) {\n    if (typeof concurrency === 'function') {\n        // concurrency is optional, shift the args.\n        callback = concurrency;\n        concurrency = null;\n    }\n    callback = once(callback || noop);\n    var keys$$1 = keys(tasks);\n    var numTasks = keys$$1.length;\n    if (!numTasks) {\n        return callback(null);\n    }\n    if (!concurrency) {\n        concurrency = numTasks;\n    }\n\n    var results = {};\n    var runningTasks = 0;\n    var hasError = false;\n\n    var listeners = Object.create(null);\n\n    var readyTasks = [];\n\n    // for cycle detection:\n    var readyToCheck = []; // tasks that have been identified as reachable\n    // without the possibility of returning to an ancestor task\n    var uncheckedDependencies = {};\n\n    baseForOwn(tasks, function (task, key) {\n        if (!isArray(task)) {\n            // no dependencies\n            enqueueTask(key, [task]);\n            readyToCheck.push(key);\n            return;\n        }\n\n        var dependencies = task.slice(0, task.length - 1);\n        var remainingDependencies = dependencies.length;\n        if (remainingDependencies === 0) {\n            enqueueTask(key, task);\n            readyToCheck.push(key);\n            return;\n        }\n        uncheckedDependencies[key] = remainingDependencies;\n\n        arrayEach(dependencies, function (dependencyName) {\n            if (!tasks[dependencyName]) {\n                throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', '));\n            }\n            addListener(dependencyName, function () {\n                remainingDependencies--;\n                if (remainingDependencies === 0) {\n                    enqueueTask(key, task);\n                }\n            });\n        });\n    });\n\n    checkForDeadlocks();\n    processQueue();\n\n    function enqueueTask(key, task) {\n        readyTasks.push(function () {\n            runTask(key, task);\n        });\n    }\n\n    function processQueue() {\n        if (readyTasks.length === 0 && runningTasks === 0) {\n            return callback(null, results);\n        }\n        while (readyTasks.length && runningTasks < concurrency) {\n            var run = readyTasks.shift();\n            run();\n        }\n    }\n\n    function addListener(taskName, fn) {\n        var taskListeners = listeners[taskName];\n        if (!taskListeners) {\n            taskListeners = listeners[taskName] = [];\n        }\n\n        taskListeners.push(fn);\n    }\n\n    function taskComplete(taskName) {\n        var taskListeners = listeners[taskName] || [];\n        arrayEach(taskListeners, function (fn) {\n            fn();\n        });\n        processQueue();\n    }\n\n    function runTask(key, task) {\n        if (hasError) return;\n\n        var taskCallback = onlyOnce(rest(function (err, args) {\n            runningTasks--;\n            if (args.length <= 1) {\n                args = args[0];\n            }\n            if (err) {\n                var safeResults = {};\n                baseForOwn(results, function (val, rkey) {\n                    safeResults[rkey] = val;\n                });\n                safeResults[key] = args;\n                hasError = true;\n                listeners = Object.create(null);\n\n                callback(err, safeResults);\n            } else {\n                results[key] = args;\n                taskComplete(key);\n            }\n        }));\n\n        runningTasks++;\n        var taskFn = task[task.length - 1];\n        if (task.length > 1) {\n            taskFn(results, taskCallback);\n        } else {\n            taskFn(taskCallback);\n        }\n    }\n\n    function checkForDeadlocks() {\n        // Kahn's algorithm\n        // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n        // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n        var currentTask;\n        var counter = 0;\n        while (readyToCheck.length) {\n            currentTask = readyToCheck.pop();\n            counter++;\n            arrayEach(getDependents(currentTask), function (dependent) {\n                if (--uncheckedDependencies[dependent] === 0) {\n                    readyToCheck.push(dependent);\n                }\n            });\n        }\n\n        if (counter !== numTasks) {\n            throw new Error('async.auto cannot execute tasks due to a recursive dependency');\n        }\n    }\n\n    function getDependents(taskName) {\n        var result = [];\n        baseForOwn(tasks, function (task, key) {\n            if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) {\n                result.push(key);\n            }\n        });\n        return result;\n    }\n};\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol$1 ? Symbol$1.prototype : undefined;\nvar symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n  var index = strSymbols.length;\n\n  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n  var index = -1,\n      length = strSymbols.length;\n\n  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff';\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23';\nvar rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0';\nvar rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange$1 = '\\\\ud800-\\\\udfff';\nvar rsComboMarksRange$1 = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23';\nvar rsComboSymbolsRange$1 = '\\\\u20d0-\\\\u20f0';\nvar rsVarRange$1 = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange$1 + ']';\nvar rsCombo = '[' + rsComboMarksRange$1 + rsComboSymbolsRange$1 + ']';\nvar rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]';\nvar rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')';\nvar rsNonAstral = '[^' + rsAstralRange$1 + ']';\nvar rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}';\nvar rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]';\nvar rsZWJ$1 = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?';\nvar rsOptVar = '[' + rsVarRange$1 + ']?';\nvar rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*';\nvar rsSeq = rsOptVar + reOptMod + rsOptJoin;\nvar rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim('  abc  ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map(['  foo  ', '  bar  '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n  string = toString(string);\n  if (string && (guard || chars === undefined)) {\n    return string.replace(reTrim, '');\n  }\n  if (!string || !(chars = baseToString(chars))) {\n    return string;\n  }\n  var strSymbols = stringToArray(string),\n      chrSymbols = stringToArray(chars),\n      start = charsStartIndex(strSymbols, chrSymbols),\n      end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n  return castSlice(strSymbols, start, end).join('');\n}\n\nvar FN_ARGS = /^(function)?\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /(=.+)?(\\s*)$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\nfunction parseParams(func) {\n    func = func.toString().replace(STRIP_COMMENTS, '');\n    func = func.match(FN_ARGS)[2].replace(' ', '');\n    func = func ? func.split(FN_ARG_SPLIT) : [];\n    func = func.map(function (arg) {\n        return trim(arg.replace(FN_ARG, ''));\n    });\n    return func;\n}\n\n/**\n * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n * tasks are specified as parameters to the function, after the usual callback\n * parameter, with the parameter names matching the names of the tasks it\n * depends on. This can provide even more readable task graphs which can be\n * easier to maintain.\n *\n * If a final callback is specified, the task results are similarly injected,\n * specified as named parameters after the initial error parameter.\n *\n * The autoInject function is purely syntactic sugar and its semantics are\n * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n *\n * @name autoInject\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.auto]{@link module:ControlFlow.auto}\n * @category Control Flow\n * @param {Object} tasks - An object, each of whose properties is a function of\n * the form 'func([dependencies...], callback). The object's key of a property\n * serves as the name of the task defined by that property, i.e. can be used\n * when specifying requirements for other tasks.\n * * The `callback` parameter is a `callback(err, result)` which must be called\n *   when finished, passing an `error` (which can be `null`) and the result of\n *   the function's execution. The remaining parameters name other tasks on\n *   which the task is dependent, and the results from those tasks are the\n *   arguments of those parameters.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback, and a `results` object with any completed\n * task results, similar to `auto`.\n * @example\n *\n * //  The example from `auto` can be rewritten as follows:\n * async.autoInject({\n *     get_data: function(callback) {\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: function(get_data, make_folder, callback) {\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     },\n *     email_link: function(write_file, callback) {\n *         // once the file is written let's email a link to it...\n *         // write_file contains the filename returned by write_file.\n *         callback(null, {'file':write_file, 'email':'user@example.com'});\n *     }\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('email_link = ', results.email_link);\n * });\n *\n * // If you are using a JS minifier that mangles parameter names, `autoInject`\n * // will not work with plain functions, since the parameter names will be\n * // collapsed to a single letter identifier.  To work around this, you can\n * // explicitly specify the names of the parameters your task function needs\n * // in an array, similar to Angular.js dependency injection.\n *\n * // This still has an advantage over plain `auto`, since the results a task\n * // depends on are still spread into arguments.\n * async.autoInject({\n *     //...\n *     write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(write_file, callback) {\n *         callback(null, {'file':write_file, 'email':'user@example.com'});\n *     }]\n *     //...\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('email_link = ', results.email_link);\n * });\n */\nfunction autoInject(tasks, callback) {\n    var newTasks = {};\n\n    baseForOwn(tasks, function (taskFn, key) {\n        var params;\n\n        if (isArray(taskFn)) {\n            params = taskFn.slice(0, -1);\n            taskFn = taskFn[taskFn.length - 1];\n\n            newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n        } else if (taskFn.length === 1) {\n            // no dependencies, use the function as-is\n            newTasks[key] = taskFn;\n        } else {\n            params = parseParams(taskFn);\n            if (taskFn.length === 0 && params.length === 0) {\n                throw new Error(\"autoInject task functions require explicit parameters.\");\n            }\n\n            params.pop();\n\n            newTasks[key] = params.concat(newTask);\n        }\n\n        function newTask(results, taskCb) {\n            var newArgs = arrayMap(params, function (name) {\n                return results[name];\n            });\n            newArgs.push(taskCb);\n            taskFn.apply(null, newArgs);\n        }\n    });\n\n    auto(newTasks, callback);\n}\n\nvar hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n    setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n    return rest(function (fn, args) {\n        defer(function () {\n            fn.apply(null, args);\n        });\n    });\n}\n\nvar _defer;\n\nif (hasSetImmediate) {\n    _defer = setImmediate;\n} else if (hasNextTick) {\n    _defer = process.nextTick;\n} else {\n    _defer = fallback;\n}\n\nvar setImmediate$1 = wrap(_defer);\n\n// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nfunction DLL() {\n    this.head = this.tail = null;\n    this.length = 0;\n}\n\nfunction setInitial(dll, node) {\n    dll.length = 1;\n    dll.head = dll.tail = node;\n}\n\nDLL.prototype.removeLink = function (node) {\n    if (node.prev) node.prev.next = node.next;else this.head = node.next;\n    if (node.next) node.next.prev = node.prev;else this.tail = node.prev;\n\n    node.prev = node.next = null;\n    this.length -= 1;\n    return node;\n};\n\nDLL.prototype.empty = DLL;\n\nDLL.prototype.insertAfter = function (node, newNode) {\n    newNode.prev = node;\n    newNode.next = node.next;\n    if (node.next) node.next.prev = newNode;else this.tail = newNode;\n    node.next = newNode;\n    this.length += 1;\n};\n\nDLL.prototype.insertBefore = function (node, newNode) {\n    newNode.prev = node.prev;\n    newNode.next = node;\n    if (node.prev) node.prev.next = newNode;else this.head = newNode;\n    node.prev = newNode;\n    this.length += 1;\n};\n\nDLL.prototype.unshift = function (node) {\n    if (this.head) this.insertBefore(this.head, node);else setInitial(this, node);\n};\n\nDLL.prototype.push = function (node) {\n    if (this.tail) this.insertAfter(this.tail, node);else setInitial(this, node);\n};\n\nDLL.prototype.shift = function () {\n    return this.head && this.removeLink(this.head);\n};\n\nDLL.prototype.pop = function () {\n    return this.tail && this.removeLink(this.tail);\n};\n\nfunction queue(worker, concurrency, payload) {\n    if (concurrency == null) {\n        concurrency = 1;\n    } else if (concurrency === 0) {\n        throw new Error('Concurrency must not be zero');\n    }\n\n    function _insert(data, insertAtFront, callback) {\n        if (callback != null && typeof callback !== 'function') {\n            throw new Error('task callback must be a function');\n        }\n        q.started = true;\n        if (!isArray(data)) {\n            data = [data];\n        }\n        if (data.length === 0 && q.idle()) {\n            // call drain immediately if there are no tasks\n            return setImmediate$1(function () {\n                q.drain();\n            });\n        }\n\n        for (var i = 0, l = data.length; i < l; i++) {\n            var item = {\n                data: data[i],\n                callback: callback || noop\n            };\n\n            if (insertAtFront) {\n                q._tasks.unshift(item);\n            } else {\n                q._tasks.push(item);\n            }\n        }\n        setImmediate$1(q.process);\n    }\n\n    function _next(tasks) {\n        return rest(function (args) {\n            workers -= 1;\n\n            for (var i = 0, l = tasks.length; i < l; i++) {\n                var task = tasks[i];\n                var index = baseIndexOf(workersList, task, 0);\n                if (index >= 0) {\n                    workersList.splice(index);\n                }\n\n                task.callback.apply(task, args);\n\n                if (args[0] != null) {\n                    q.error(args[0], task.data);\n                }\n            }\n\n            if (workers <= q.concurrency - q.buffer) {\n                q.unsaturated();\n            }\n\n            if (q.idle()) {\n                q.drain();\n            }\n            q.process();\n        });\n    }\n\n    var workers = 0;\n    var workersList = [];\n    var isProcessing = false;\n    var q = {\n        _tasks: new DLL(),\n        concurrency: concurrency,\n        payload: payload,\n        saturated: noop,\n        unsaturated: noop,\n        buffer: concurrency / 4,\n        empty: noop,\n        drain: noop,\n        error: noop,\n        started: false,\n        paused: false,\n        push: function (data, callback) {\n            _insert(data, false, callback);\n        },\n        kill: function () {\n            q.drain = noop;\n            q._tasks.empty();\n        },\n        unshift: function (data, callback) {\n            _insert(data, true, callback);\n        },\n        process: function () {\n            // Avoid trying to start too many processing operations. This can occur\n            // when callbacks resolve synchronously (#1267).\n            if (isProcessing) {\n                return;\n            }\n            isProcessing = true;\n            while (!q.paused && workers < q.concurrency && q._tasks.length) {\n                var tasks = [],\n                    data = [];\n                var l = q._tasks.length;\n                if (q.payload) l = Math.min(l, q.payload);\n                for (var i = 0; i < l; i++) {\n                    var node = q._tasks.shift();\n                    tasks.push(node);\n                    data.push(node.data);\n                }\n\n                if (q._tasks.length === 0) {\n                    q.empty();\n                }\n                workers += 1;\n                workersList.push(tasks[0]);\n\n                if (workers === q.concurrency) {\n                    q.saturated();\n                }\n\n                var cb = onlyOnce(_next(tasks));\n                worker(data, cb);\n            }\n            isProcessing = false;\n        },\n        length: function () {\n            return q._tasks.length;\n        },\n        running: function () {\n            return workers;\n        },\n        workersList: function () {\n            return workersList;\n        },\n        idle: function () {\n            return q._tasks.length + workers === 0;\n        },\n        pause: function () {\n            q.paused = true;\n        },\n        resume: function () {\n            if (q.paused === false) {\n                return;\n            }\n            q.paused = false;\n            setImmediate$1(q.process);\n        }\n    };\n    return q;\n}\n\n/**\n * A cargo of tasks for the worker function to complete. Cargo inherits all of\n * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}.\n * @typedef {Object} CargoObject\n * @memberOf module:ControlFlow\n * @property {Function} length - A function returning the number of items\n * waiting to be processed. Invoke like `cargo.length()`.\n * @property {number} payload - An `integer` for determining how many tasks\n * should be process per round. This property can be changed after a `cargo` is\n * created to alter the payload on-the-fly.\n * @property {Function} push - Adds `task` to the `queue`. The callback is\n * called once the `worker` has finished processing the task. Instead of a\n * single task, an array of `tasks` can be submitted. The respective callback is\n * used for every task in the list. Invoke like `cargo.push(task, [callback])`.\n * @property {Function} saturated - A callback that is called when the\n * `queue.length()` hits the concurrency and further tasks will be queued.\n * @property {Function} empty - A callback that is called when the last item\n * from the `queue` is given to a `worker`.\n * @property {Function} drain - A callback that is called when the last item\n * from the `queue` has returned from the `worker`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke like `cargo.idle()`.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke like `cargo.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke like `cargo.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`.\n */\n\n/**\n * Creates a `cargo` object with the specified payload. Tasks added to the\n * cargo will be processed altogether (up to the `payload` limit). If the\n * `worker` is in progress, the task is queued until it becomes available. Once\n * the `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, cargo passes an array of tasks to a single worker, repeating\n * when the worker is finished.\n *\n * @name cargo\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {Function} worker - An asynchronous function for processing an array\n * of queued tasks, which must call its `callback(err)` argument when finished,\n * with an optional `err` argument. Invoked with `(tasks, callback)`.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargo and inner queue.\n * @example\n *\n * // create a cargo object with payload 2\n * var cargo = async.cargo(function(tasks, callback) {\n *     for (var i=0; i<tasks.length; i++) {\n *         console.log('hello ' + tasks[i].name);\n *     }\n *     callback();\n * }, 2);\n *\n * // add some items\n * cargo.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * cargo.push({name: 'bar'}, function(err) {\n *     console.log('finished processing bar');\n * });\n * cargo.push({name: 'baz'}, function(err) {\n *     console.log('finished processing baz');\n * });\n */\nfunction cargo(worker, payload) {\n  return queue(worker, 1, payload);\n}\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`. The\n * `key` is the item's key, or index in the case of an array. The iteratee is\n * passed a `callback(err)` which must be called once it has completed. If no\n * error has occurred, the callback should be run without arguments or with an\n * explicit `null` argument. Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n */\nvar eachOfSeries = doLimit(eachOfLimit, 1);\n\n/**\n * Reduces `coll` into a single value using an async `iteratee` to return each\n * successive step. `memo` is the initial state of the reduction. This function\n * only operates in series.\n *\n * For performance reasons, it may make sense to split a call to this function\n * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n * results. This function is for situations where each step in the reduction\n * needs to be async; if you can get the data before reducing it, then it's\n * probably a good idea to do so.\n *\n * @name reduce\n * @static\n * @memberOf module:Collections\n * @method\n * @alias inject\n * @alias foldl\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {Function} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction. The `iteratee` is passed a\n * `callback(err, reduction)` which accepts an optional error as its first\n * argument, and the state of the reduction as the second. If an error is\n * passed to the callback, the reduction is stopped and the main `callback` is\n * immediately called with the error. Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @example\n *\n * async.reduce([1,2,3], 0, function(memo, item, callback) {\n *     // pointless async:\n *     process.nextTick(function() {\n *         callback(null, memo + item)\n *     });\n * }, function(err, result) {\n *     // result is now equal to the last value of memo, which is 6\n * });\n */\nfunction reduce(coll, memo, iteratee, callback) {\n    callback = once(callback || noop);\n    eachOfSeries(coll, function (x, i, callback) {\n        iteratee(memo, x, function (err, v) {\n            memo = v;\n            callback(err);\n        });\n    }, function (err) {\n        callback(err, memo);\n    });\n}\n\n/**\n * Version of the compose function that is more natural to read. Each function\n * consumes the return value of the previous function. It is the equivalent of\n * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name seq\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.compose]{@link module:ControlFlow.compose}\n * @category Control Flow\n * @param {...Function} functions - the asynchronous functions to compose\n * @returns {Function} a function that composes the `functions` in order\n * @example\n *\n * // Requires lodash (or underscore), express3 and dresende's orm2.\n * // Part of an app, that fetches cats of the logged user.\n * // This example uses `seq` function to avoid overnesting and error\n * // handling clutter.\n * app.get('/cats', function(request, response) {\n *     var User = request.models.User;\n *     async.seq(\n *         _.bind(User.get, User),  // 'User.get' has signature (id, callback(err, data))\n *         function(user, fn) {\n *             user.getCats(fn);      // 'getCats' has signature (callback(err, data))\n *         }\n *     )(req.session.user_id, function (err, cats) {\n *         if (err) {\n *             console.error(err);\n *             response.json({ status: 'error', message: err.message });\n *         } else {\n *             response.json({ status: 'ok', message: 'Cats found', data: cats });\n *         }\n *     });\n * });\n */\nvar seq$1 = rest(function seq(functions) {\n    return rest(function (args) {\n        var that = this;\n\n        var cb = args[args.length - 1];\n        if (typeof cb == 'function') {\n            args.pop();\n        } else {\n            cb = noop;\n        }\n\n        reduce(functions, args, function (newargs, fn, cb) {\n            fn.apply(that, newargs.concat(rest(function (err, nextargs) {\n                cb(err, nextargs);\n            })));\n        }, function (err, results) {\n            cb.apply(that, [err].concat(results));\n        });\n    });\n});\n\n/**\n * Creates a function which is a composition of the passed asynchronous\n * functions. Each function consumes the return value of the function that\n * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name compose\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {...Function} functions - the asynchronous functions to compose\n * @returns {Function} an asynchronous function that is the composed\n * asynchronous `functions`\n * @example\n *\n * function add1(n, callback) {\n *     setTimeout(function () {\n *         callback(null, n + 1);\n *     }, 10);\n * }\n *\n * function mul3(n, callback) {\n *     setTimeout(function () {\n *         callback(null, n * 3);\n *     }, 10);\n * }\n *\n * var add1mul3 = async.compose(mul3, add1);\n * add1mul3(4, function (err, result) {\n *     // result now equals 15\n * });\n */\nvar compose = rest(function (args) {\n  return seq$1.apply(null, args.reverse());\n});\n\nfunction concat$1(eachfn, arr, fn, callback) {\n    var result = [];\n    eachfn(arr, function (x, index, cb) {\n        fn(x, function (err, y) {\n            result = result.concat(y || []);\n            cb(err);\n        });\n    }, function (err) {\n        callback(err, result);\n    });\n}\n\n/**\n * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n * the concatenated list. The `iteratee`s are called in parallel, and the\n * results are concatenated as they return. There is no guarantee that the\n * results array will be returned in the original order of `coll` passed to the\n * `iteratee` function.\n *\n * @name concat\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, results)` which must be called once\n * it has completed with an error (which can be `null`) and an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback(err)] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @example\n *\n * async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files) {\n *     // files is now a list of filenames that exist in the 3 directories\n * });\n */\nvar concat = doParallel(concat$1);\n\nfunction doSeries(fn) {\n    return function (obj, iteratee, callback) {\n        return fn(eachOfSeries, obj, iteratee, callback);\n    };\n}\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, results)` which must be called once\n * it has completed with an error (which can be `null`) and an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback(err)] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n */\nvar concatSeries = doSeries(concat$1);\n\n/**\n * Returns a function that when called, calls-back with the values provided.\n * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n * [`auto`]{@link module:ControlFlow.auto}.\n *\n * @name constant\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {...*} arguments... - Any number of arguments to automatically invoke\n * callback with.\n * @returns {Function} Returns a function that when invoked, automatically\n * invokes the callback with the previous given arguments.\n * @example\n *\n * async.waterfall([\n *     async.constant(42),\n *     function (value, next) {\n *         // value === 42\n *     },\n *     //...\n * ], callback);\n *\n * async.waterfall([\n *     async.constant(filename, \"utf8\"),\n *     fs.readFile,\n *     function (fileData, next) {\n *         //...\n *     }\n *     //...\n * ], callback);\n *\n * async.auto({\n *     hostname: async.constant(\"https://server.net/\"),\n *     port: findFreePort,\n *     launchServer: [\"hostname\", \"port\", function (options, cb) {\n *         startServer(options, cb);\n *     }],\n *     //...\n * }, callback);\n */\nvar constant = rest(function (values) {\n    var args = [null].concat(values);\n    return initialParams(function (ignoredArgs, callback) {\n        return callback.apply(this, args);\n    });\n});\n\nfunction _createTester(check, getResult) {\n    return function (eachfn, arr, iteratee, cb) {\n        cb = cb || noop;\n        var testPassed = false;\n        var testResult;\n        eachfn(arr, function (value, _, callback) {\n            iteratee(value, function (err, result) {\n                if (err) {\n                    callback(err);\n                } else if (check(result) && !testResult) {\n                    testPassed = true;\n                    testResult = getResult(true, value);\n                    callback(null, breakLoop);\n                } else {\n                    callback();\n                }\n            });\n        }, function (err) {\n            if (err) {\n                cb(err);\n            } else {\n                cb(null, testPassed ? testResult : getResult(false));\n            }\n        });\n    };\n}\n\nfunction _findGetResult(v, x) {\n    return x;\n}\n\n/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, truthValue)` which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @example\n *\n * async.detect(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, result) {\n *     // result now equals the first file in the list that exists\n * });\n */\nvar detect = doParallel(_createTester(identity, _findGetResult));\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, truthValue)` which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n */\nvar detectLimit = doParallelLimit(_createTester(identity, _findGetResult));\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, truthValue)` which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n */\nvar detectSeries = doLimit(detectLimit, 1);\n\nfunction consoleFunc(name) {\n    return rest(function (fn, args) {\n        fn.apply(null, args.concat(rest(function (err, args) {\n            if (typeof console === 'object') {\n                if (err) {\n                    if (console.error) {\n                        console.error(err);\n                    }\n                } else if (console[name]) {\n                    arrayEach(args, function (x) {\n                        console[name](x);\n                    });\n                }\n            }\n        })));\n    });\n}\n\n/**\n * Logs the result of an `async` function to the `console` using `console.dir`\n * to display the properties of the resulting object. Only works in Node.js or\n * in browsers that support `console.dir` and `console.error` (such as FF and\n * Chrome). If multiple arguments are returned from the async function,\n * `console.dir` is called on each argument in order.\n *\n * @name dir\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} function - The function you want to eventually apply all\n * arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n *     setTimeout(function() {\n *         callback(null, {hello: name});\n *     }, 1000);\n * };\n *\n * // in the node repl\n * node> async.dir(hello, 'world');\n * {hello: 'world'}\n */\nvar dir = consoleFunc('dir');\n\n/**\n * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in\n * the order of operations, the arguments `test` and `fn` are switched.\n *\n * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function.\n * @name doDuring\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.during]{@link module:ControlFlow.during}\n * @category Control Flow\n * @param {Function} fn - A function which is called each time `test` passes.\n * The function is passed a `callback(err)`, which must be called once it has\n * completed with an optional `err` argument. Invoked with (callback).\n * @param {Function} test - asynchronous truth test to perform before each\n * execution of `fn`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `fn`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `fn` has stopped. `callback`\n * will be passed an error if one occured, otherwise `null`.\n */\nfunction doDuring(fn, test, callback) {\n    callback = onlyOnce(callback || noop);\n\n    var next = rest(function (err, args) {\n        if (err) return callback(err);\n        args.push(check);\n        test.apply(this, args);\n    });\n\n    function check(err, truth) {\n        if (err) return callback(err);\n        if (!truth) return callback(null);\n        fn(next);\n    }\n\n    check(null, true);\n}\n\n/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {Function} iteratee - A function which is called each time `test`\n * passes. The function is passed a `callback(err)`, which must be called once\n * it has completed with an optional `err` argument. Invoked with (callback).\n * @param {Function} test - synchronous truth test to perform after each\n * execution of `iteratee`. Invoked with the non-error callback results of \n * `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n */\nfunction doWhilst(iteratee, test, callback) {\n    callback = onlyOnce(callback || noop);\n    var next = rest(function (err, args) {\n        if (err) return callback(err);\n        if (test.apply(this, args)) return iteratee(next);\n        callback.apply(null, [null].concat(args));\n    });\n    iteratee(next);\n}\n\n/**\n * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n * argument ordering differs from `until`.\n *\n * @name doUntil\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n * @category Control Flow\n * @param {Function} fn - A function which is called each time `test` fails.\n * The function is passed a `callback(err)`, which must be called once it has\n * completed with an optional `err` argument. Invoked with (callback).\n * @param {Function} test - synchronous truth test to perform after each\n * execution of `fn`. Invoked with the non-error callback results of `fn`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `fn` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `fn`'s\n * callback. Invoked with (err, [results]);\n */\nfunction doUntil(fn, test, callback) {\n    doWhilst(fn, function () {\n        return !test.apply(this, arguments);\n    }, callback);\n}\n\n/**\n * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that\n * is passed a callback in the form of `function (err, truth)`. If error is\n * passed to `test` or `fn`, the main callback is immediately called with the\n * value of the error.\n *\n * @name during\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {Function} test - asynchronous truth test to perform before each\n * execution of `fn`. Invoked with (callback).\n * @param {Function} fn - A function which is called each time `test` passes.\n * The function is passed a `callback(err)`, which must be called once it has\n * completed with an optional `err` argument. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `fn` has stopped. `callback`\n * will be passed an error, if one occured, otherwise `null`.\n * @example\n *\n * var count = 0;\n *\n * async.during(\n *     function (callback) {\n *         return callback(null, count < 5);\n *     },\n *     function (callback) {\n *         count++;\n *         setTimeout(callback, 1000);\n *     },\n *     function (err) {\n *         // 5 seconds have passed\n *     }\n * );\n */\nfunction during(test, fn, callback) {\n    callback = onlyOnce(callback || noop);\n\n    function next(err) {\n        if (err) return callback(err);\n        test(check);\n    }\n\n    function check(err, truth) {\n        if (err) return callback(err);\n        if (!truth) return callback(null);\n        fn(next);\n    }\n\n    test(check);\n}\n\nfunction _withoutIndex(iteratee) {\n    return function (value, index, callback) {\n        return iteratee(value, callback);\n    };\n}\n\n/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item\n * in `coll`. The iteratee is passed a `callback(err)` which must be called once\n * it has completed. If no error has occurred, the `callback` should be run\n * without arguments or with an explicit `null` argument. The array index is not\n * passed to the iteratee. Invoked with (item, callback). If you need the index,\n * use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @example\n *\n * // assuming openFiles is an array of file names and saveFile is a function\n * // to save the modified contents of that file:\n *\n * async.each(openFiles, saveFile, function(err){\n *   // if any of the saves produced an error, err would equal that error\n * });\n *\n * // assuming openFiles is an array of file names\n * async.each(openFiles, function(file, callback) {\n *\n *     // Perform operation on file here.\n *     console.log('Processing file ' + file);\n *\n *     if( file.length > 32 ) {\n *       console.log('This file name is too long');\n *       callback('File name too long');\n *     } else {\n *       // Do work to process file here\n *       console.log('File processed');\n *       callback();\n *     }\n * }, function(err) {\n *     // if any of the file processing produced an error, err would equal that error\n *     if( err ) {\n *       // One of the iterations produced an error.\n *       // All processing will now stop.\n *       console.log('A file failed to process');\n *     } else {\n *       console.log('All files have been processed successfully');\n *     }\n * });\n */\nfunction eachLimit(coll, iteratee, callback) {\n  eachOf(coll, _withoutIndex(iteratee), callback);\n}\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A function to apply to each item in `coll`. The\n * iteratee is passed a `callback(err)` which must be called once it has\n * completed. If no error has occurred, the `callback` should be run without\n * arguments or with an explicit `null` argument. The array index is not passed\n * to the iteratee. Invoked with (item, callback). If you need the index, use\n * `eachOfLimit`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nfunction eachLimit$1(coll, limit, iteratee, callback) {\n  _eachOfLimit(limit)(coll, _withoutIndex(iteratee), callback);\n}\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each\n * item in `coll`. The iteratee is passed a `callback(err)` which must be called\n * once it has completed. If no error has occurred, the `callback` should be run\n * without arguments or with an explicit `null` argument. The array index is\n * not passed to the iteratee. Invoked with (item, callback). If you need the\n * index, use `eachOfSeries`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nvar eachSeries = doLimit(eachLimit$1, 1);\n\n/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop.  If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {Function} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n *     if (cache[arg]) {\n *         return callback(null, cache[arg]); // this would be synchronous!!\n *     } else {\n *         doSomeIO(arg, callback); // this IO would be asynchronous\n *     }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */\nfunction ensureAsync(fn) {\n    return initialParams(function (args, callback) {\n        var sync = true;\n        args.push(function () {\n            var innerArgs = arguments;\n            if (sync) {\n                setImmediate$1(function () {\n                    callback.apply(null, innerArgs);\n                });\n            } else {\n                callback.apply(null, innerArgs);\n            }\n        });\n        fn.apply(this, args);\n        sync = false;\n    });\n}\n\nfunction notId(v) {\n    return !v;\n}\n\n/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in the\n * collection in parallel. The iteratee is passed a `callback(err, truthValue)`\n * which must be called with a  boolean argument once it has completed. Invoked\n * with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @example\n *\n * async.every(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, result) {\n *     // if result is true then every file exists\n * });\n */\nvar every = doParallel(_createTester(notId, notId));\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in the\n * collection in parallel. The iteratee is passed a `callback(err, truthValue)`\n * which must be called with a  boolean argument once it has completed. Invoked\n * with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n */\nvar everyLimit = doParallelLimit(_createTester(notId, notId));\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in the\n * collection in parallel. The iteratee is passed a `callback(err, truthValue)`\n * which must be called with a  boolean argument once it has completed. Invoked\n * with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n */\nvar everySeries = doLimit(everyLimit, 1);\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nfunction filterArray(eachfn, arr, iteratee, callback) {\n    var truthValues = new Array(arr.length);\n    eachfn(arr, function (x, index, callback) {\n        iteratee(x, function (err, v) {\n            truthValues[index] = !!v;\n            callback(err);\n        });\n    }, function (err) {\n        if (err) return callback(err);\n        var results = [];\n        for (var i = 0; i < arr.length; i++) {\n            if (truthValues[i]) results.push(arr[i]);\n        }\n        callback(null, results);\n    });\n}\n\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n    var results = [];\n    eachfn(coll, function (x, index, callback) {\n        iteratee(x, function (err, v) {\n            if (err) {\n                callback(err);\n            } else {\n                if (v) {\n                    results.push({ index: index, value: x });\n                }\n                callback();\n            }\n        });\n    }, function (err) {\n        if (err) {\n            callback(err);\n        } else {\n            callback(null, arrayMap(results.sort(function (a, b) {\n                return a.index - b.index;\n            }), baseProperty('value')));\n        }\n    });\n}\n\nfunction _filter(eachfn, coll, iteratee, callback) {\n    var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n    filter(eachfn, coll, iteratee, callback || noop);\n}\n\n/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @example\n *\n * async.filter(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, results) {\n *     // results now equals an array of the existing files\n * });\n */\nvar filter = doParallel(_filter);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n */\nvar filterLimit = doParallelLimit(_filter);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n */\nvar filterSeries = doLimit(filterLimit, 1);\n\n/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the\n * callback then `errback` is called with the error, and execution stops,\n * otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Function} fn - a function to call repeatedly. Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @example\n *\n * async.forever(\n *     function(next) {\n *         // next is suitable for passing to things that need a callback(err [, whatever]);\n *         // it will result in this function being called again.\n *     },\n *     function(err) {\n *         // if next is called with a value in its first parameter, it will appear\n *         // in here as 'err', and execution will stop.\n *     }\n * );\n */\nfunction forever(fn, errback) {\n    var done = onlyOnce(errback || noop);\n    var task = ensureAsync(fn);\n\n    function next(err) {\n        if (err) return done(err);\n        task(next);\n    }\n    next();\n}\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, key)` which must be called once it\n * has completed with an error (which can be `null`) and the `key` to group the\n * value under. Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n */\nvar groupByLimit = function (coll, limit, iteratee, callback) {\n    callback = callback || noop;\n\n    mapLimit(coll, limit, function (val, callback) {\n        iteratee(val, function (err, key) {\n            if (err) return callback(err);\n            return callback(null, { key: key, val: val });\n        });\n    }, function (err, mapResults) {\n        var result = {};\n        // from MDN, handle object having an `hasOwnProperty` prop\n        var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n        for (var i = 0; i < mapResults.length; i++) {\n            if (mapResults[i]) {\n                var key = mapResults[i].key;\n                var val = mapResults[i].val;\n\n                if (hasOwnProperty.call(result, key)) {\n                    result[key].push(val);\n                } else {\n                    result[key] = [val];\n                }\n            }\n        }\n\n        return callback(err, result);\n    });\n};\n\n/**\n * Returns a new object, where each value corresponds to an array of items, from\n * `coll`, that returned the corresponding key. That is, the keys of the object\n * correspond to the values passed to the `iteratee` callback.\n *\n * Note: Since this function applies the `iteratee` to each item in parallel,\n * there is no guarantee that the `iteratee` functions will complete in order.\n * However, the values for each key in the `result` will be in the same order as\n * the original `coll`. For Objects, the values will roughly be in the order of\n * the original Objects' keys (but this can vary across JavaScript engines).\n *\n * @name groupBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, key)` which must be called once it\n * has completed with an error (which can be `null`) and the `key` to group the\n * value under. Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @example\n *\n * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) {\n *     db.findById(userId, function(err, user) {\n *         if (err) return callback(err);\n *         return callback(null, user.age);\n *     });\n * }, function(err, result) {\n *     // result is object containing the userIds grouped by age\n *     // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']};\n * });\n */\nvar groupBy = doLimit(groupByLimit, Infinity);\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n *\n * @name groupBySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, key)` which must be called once it\n * has completed with an error (which can be `null`) and the `key` to group the\n * value under. Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n */\nvar groupBySeries = doLimit(groupByLimit, 1);\n\n/**\n * Logs the result of an `async` function to the `console`. Only works in\n * Node.js or in browsers that support `console.log` and `console.error` (such\n * as FF and Chrome). If multiple arguments are returned from the async\n * function, `console.log` is called on each argument in order.\n *\n * @name log\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} function - The function you want to eventually apply all\n * arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n *     setTimeout(function() {\n *         callback(null, 'hello ' + name);\n *     }, 1000);\n * };\n *\n * // in the node repl\n * node> async.log(hello, 'world');\n * 'hello world'\n */\nvar log = consoleFunc('log');\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name mapValuesLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A function to apply to each value in `obj`.\n * The iteratee is passed a `callback(err, transformed)` which must be called\n * once it has completed with an error (which can be `null`) and a\n * transformed value. Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n */\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n    callback = once(callback || noop);\n    var newObj = {};\n    eachOfLimit(obj, limit, function (val, key, next) {\n        iteratee(val, key, function (err, result) {\n            if (err) return next(err);\n            newObj[key] = result;\n            next();\n        });\n    }, function (err) {\n        callback(err, newObj);\n    });\n}\n\n/**\n * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n *\n * Produces a new Object by mapping each value of `obj` through the `iteratee`\n * function. The `iteratee` is called each `value` and `key` from `obj` and a\n * callback for when it has finished processing. Each of these callbacks takes\n * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n * passes an error to its callback, the main `callback` (for the `mapValues`\n * function) is immediately called with the error.\n *\n * Note, the order of the keys in the result is not guaranteed.  The keys will\n * be roughly in the order they complete, (but this is very engine-specific)\n *\n * @name mapValues\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each value and key in\n * `coll`. The iteratee is passed a `callback(err, transformed)` which must be\n * called once it has completed with an error (which can be `null`) and a\n * transformed value. Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @example\n *\n * async.mapValues({\n *     f1: 'file1',\n *     f2: 'file2',\n *     f3: 'file3'\n * }, function (file, key, callback) {\n *   fs.stat(file, callback);\n * }, function(err, result) {\n *     // result is now a map of stats for each file, e.g.\n *     // {\n *     //     f1: [stats for file1],\n *     //     f2: [stats for file2],\n *     //     f3: [stats for file3]\n *     // }\n * });\n */\n\nvar mapValues = doLimit(mapValuesLimit, Infinity);\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n *\n * @name mapValuesSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each value in `obj`.\n * The iteratee is passed a `callback(err, transformed)` which must be called\n * once it has completed with an error (which can be `null`) and a\n * transformed value. Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n */\nvar mapValuesSeries = doLimit(mapValuesLimit, 1);\n\nfunction has(obj, key) {\n    return key in obj;\n}\n\n/**\n * Caches the results of an `async` function. When creating a hash to store\n * function results against, the callback is omitted from the hash and an\n * optional hash function can be used.\n *\n * If no hash function is specified, the first argument is used as a hash key,\n * which may work reasonably if it is a string or a data type that converts to a\n * distinct string. Note that objects and arrays will not behave reasonably.\n * Neither will cases where the other arguments are significant. In such cases,\n * specify your own hash function.\n *\n * The cache of results is exposed as the `memo` property of the function\n * returned by `memoize`.\n *\n * @name memoize\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function to proxy and cache results from.\n * @param {Function} hasher - An optional function for generating a custom hash\n * for storing results. It has all the arguments applied to it apart from the\n * callback, and must be synchronous.\n * @returns {Function} a memoized version of `fn`\n * @example\n *\n * var slow_fn = function(name, callback) {\n *     // do something\n *     callback(null, result);\n * };\n * var fn = async.memoize(slow_fn);\n *\n * // fn can now be used as if it were slow_fn\n * fn('some name', function() {\n *     // callback\n * });\n */\nfunction memoize(fn, hasher) {\n    var memo = Object.create(null);\n    var queues = Object.create(null);\n    hasher = hasher || identity;\n    var memoized = initialParams(function memoized(args, callback) {\n        var key = hasher.apply(null, args);\n        if (has(memo, key)) {\n            setImmediate$1(function () {\n                callback.apply(null, memo[key]);\n            });\n        } else if (has(queues, key)) {\n            queues[key].push(callback);\n        } else {\n            queues[key] = [callback];\n            fn.apply(null, args.concat(rest(function (args) {\n                memo[key] = args;\n                var q = queues[key];\n                delete queues[key];\n                for (var i = 0, l = q.length; i < l; i++) {\n                    q[i].apply(null, args);\n                }\n            })));\n        }\n    });\n    memoized.memo = memo;\n    memoized.unmemoized = fn;\n    return memoized;\n}\n\n/**\n * Calls `callback` on a later loop around the event loop. In Node.js this just\n * calls `setImmediate`.  In the browser it will use `setImmediate` if\n * available, otherwise `setTimeout(callback, 0)`, which means other higher\n * priority events may precede the execution of `callback`.\n *\n * This is used internally for browser-compatibility purposes.\n *\n * @name nextTick\n * @static\n * @memberOf module:Utils\n * @method\n * @alias setImmediate\n * @category Util\n * @param {Function} callback - The function to call on a later loop around\n * the event loop. Invoked with (args...).\n * @param {...*} args... - any number of additional arguments to pass to the\n * callback on the next tick.\n * @example\n *\n * var call_order = [];\n * async.nextTick(function() {\n *     call_order.push('two');\n *     // call_order now equals ['one','two']\n * });\n * call_order.push('one');\n *\n * async.setImmediate(function (a, b, c) {\n *     // a, b, and c equal 1, 2, and 3\n * }, 1, 2, 3);\n */\nvar _defer$1;\n\nif (hasNextTick) {\n    _defer$1 = process.nextTick;\n} else if (hasSetImmediate) {\n    _defer$1 = setImmediate;\n} else {\n    _defer$1 = fallback;\n}\n\nvar nextTick = wrap(_defer$1);\n\nfunction _parallel(eachfn, tasks, callback) {\n    callback = callback || noop;\n    var results = isArrayLike(tasks) ? [] : {};\n\n    eachfn(tasks, function (task, key, callback) {\n        task(rest(function (err, args) {\n            if (args.length <= 1) {\n                args = args[0];\n            }\n            results[key] = args;\n            callback(err);\n        }));\n    }, function (err) {\n        callback(err, results);\n    });\n}\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code.  If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series.  Any synchronous setup\n * sections for each task will happen one after the other.  JavaScript remains\n * single-threaded.\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection containing functions to run.\n * Each function is passed a `callback(err, result)` which it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n * @example\n * async.parallel([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ],\n * // optional callback\n * function(err, results) {\n *     // the results array will equal ['one','two'] even though\n *     // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }, function(err, results) {\n *     // results is now equals to: {one: 1, two: 2}\n * });\n */\nfunction parallelLimit(tasks, callback) {\n  _parallel(eachOf, tasks, callback);\n}\n\n/**\n * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name parallelLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.parallel]{@link module:ControlFlow.parallel}\n * @category Control Flow\n * @param {Array|Collection} tasks - A collection containing functions to run.\n * Each function is passed a `callback(err, result)` which it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n */\nfunction parallelLimit$1(tasks, limit, callback) {\n  _parallel(_eachOfLimit(limit), tasks, callback);\n}\n\n/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Object} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {Function} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {Function} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {Function} saturated - a callback that is called when the number of\n * running workers hits the `concurrency` limit, and further tasks will be\n * queued.\n * @property {Function} unsaturated - a callback that is called when the number\n * of running workers is less than the `concurrency` & `buffer` limits, and\n * further tasks will not be queued.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a callback that is called when the last item\n * from the `queue` is given to a `worker`.\n * @property {Function} drain - a callback that is called when the last item\n * from the `queue` has returned from the `worker`.\n * @property {Function} error - a callback that is called when a task errors.\n * Has the signature `function(error, task)`.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. Invoke with `queue.kill()`.\n */\n\n/**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Function} worker - An asynchronous function for processing a queued\n * task, which must call its `callback(err)` argument when finished, with an\n * optional `error` as an argument.  If you want to handle errors from an\n * individual task, pass a callback to `q.push()`. Invoked with\n * (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel.  If omitted, the concurrency\n * defaults to `1`.  If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n *     console.log('hello ' + task.name);\n *     callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain = function() {\n *     console.log('all items have been processed');\n * };\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * q.push({name: 'bar'}, function (err) {\n *     console.log('finished processing bar');\n * });\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n *     console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n *     console.log('finished processing bar');\n * });\n */\nvar queue$1 = function (worker, concurrency) {\n  return queue(function (items, cb) {\n    worker(items[0], cb);\n  }, concurrency, 1);\n};\n\n/**\n * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n * completed in ascending priority order.\n *\n * @name priorityQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {Function} worker - An asynchronous function for processing a queued\n * task, which must call its `callback(err)` argument when finished, with an\n * optional `error` as an argument.  If you want to handle errors from an\n * individual task, pass a callback to `q.push()`. Invoked with\n * (task, callback).\n * @param {number} concurrency - An `integer` for determining how many `worker`\n * functions should be run in parallel.  If omitted, the concurrency defaults to\n * `1`.  If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two\n * differences between `queue` and `priorityQueue` objects:\n * * `push(task, priority, [callback])` - `priority` should be a number. If an\n *   array of `tasks` is given, all tasks will be assigned the same priority.\n * * The `unshift` method was removed.\n */\nvar priorityQueue = function (worker, concurrency) {\n    // Start with a normal queue\n    var q = queue$1(worker, concurrency);\n\n    // Override push to accept second parameter representing priority\n    q.push = function (data, priority, callback) {\n        if (callback == null) callback = noop;\n        if (typeof callback !== 'function') {\n            throw new Error('task callback must be a function');\n        }\n        q.started = true;\n        if (!isArray(data)) {\n            data = [data];\n        }\n        if (data.length === 0) {\n            // call drain immediately if there are no tasks\n            return setImmediate$1(function () {\n                q.drain();\n            });\n        }\n\n        priority = priority || 0;\n        var nextNode = q._tasks.head;\n        while (nextNode && priority >= nextNode.priority) {\n            nextNode = nextNode.next;\n        }\n\n        for (var i = 0, l = data.length; i < l; i++) {\n            var item = {\n                data: data[i],\n                priority: priority,\n                callback: callback\n            };\n\n            if (nextNode) {\n                q._tasks.insertBefore(nextNode, item);\n            } else {\n                q._tasks.push(item);\n            }\n        }\n        setImmediate$1(q.process);\n    };\n\n    // Remove unshift function\n    delete q.unshift;\n\n    return q;\n};\n\n/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing functions to run. Each function\n * is passed a `callback(err, result)` which it must call on completion with an\n * error `err` (which can be `null`) and an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns undefined\n * @example\n *\n * async.race([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ],\n * // main callback\n * function(err, result) {\n *     // the result will be equal to 'two' as it finishes earlier\n * });\n */\nfunction race(tasks, callback) {\n    callback = once(callback || noop);\n    if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n    if (!tasks.length) return callback();\n    for (var i = 0, l = tasks.length; i < l; i++) {\n        tasks[i](callback);\n    }\n}\n\nvar slice = Array.prototype.slice;\n\n/**\n * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n *\n * @name reduceRight\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reduce]{@link module:Collections.reduce}\n * @alias foldr\n * @category Collection\n * @param {Array} array - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {Function} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction. The `iteratee` is passed a\n * `callback(err, reduction)` which accepts an optional error as its first\n * argument, and the state of the reduction as the second. If an error is\n * passed to the callback, the reduction is stopped and the main `callback` is\n * immediately called with the error. Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n */\nfunction reduceRight(array, memo, iteratee, callback) {\n  var reversed = slice.call(array).reverse();\n  reduce(reversed, memo, iteratee, callback);\n}\n\n/**\n * Wraps the function in another function that always returns data even when it\n * errors.\n *\n * The object returned has either the property `error` or `value`.\n *\n * @name reflect\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function you want to wrap\n * @returns {Function} - A function that always passes null to it's callback as\n * the error. The second argument to the callback will be an `object` with\n * either an `error` or a `value` property.\n * @example\n *\n * async.parallel([\n *     async.reflect(function(callback) {\n *         // do some stuff ...\n *         callback(null, 'one');\n *     }),\n *     async.reflect(function(callback) {\n *         // do some more stuff but error ...\n *         callback('bad stuff happened');\n *     }),\n *     async.reflect(function(callback) {\n *         // do some more stuff ...\n *         callback(null, 'two');\n *     })\n * ],\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results[0].value = 'one'\n *     // results[1].error = 'bad stuff happened'\n *     // results[2].value = 'two'\n * });\n */\nfunction reflect(fn) {\n    return initialParams(function reflectOn(args, reflectCallback) {\n        args.push(rest(function callback(err, cbArgs) {\n            if (err) {\n                reflectCallback(null, {\n                    error: err\n                });\n            } else {\n                var value = null;\n                if (cbArgs.length === 1) {\n                    value = cbArgs[0];\n                } else if (cbArgs.length > 1) {\n                    value = cbArgs;\n                }\n                reflectCallback(null, {\n                    value: value\n                });\n            }\n        }));\n\n        return fn.apply(this, args);\n    });\n}\n\nfunction reject$1(eachfn, arr, iteratee, callback) {\n    _filter(eachfn, arr, function (value, cb) {\n        iteratee(value, function (err, v) {\n            cb(err, !v);\n        });\n    }, callback);\n}\n\n/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @example\n *\n * async.reject(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, results) {\n *     // results now equals an array of missing files\n *     createFiles(results);\n * });\n */\nvar reject = doParallel(reject$1);\n\n/**\n * A helper function that wraps an array or an object of functions with reflect.\n *\n * @name reflectAll\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.reflect]{@link module:Utils.reflect}\n * @category Util\n * @param {Array} tasks - The array of functions to wrap in `async.reflect`.\n * @returns {Array} Returns an array of functions, each function wrapped in\n * `async.reflect`\n * @example\n *\n * let tasks = [\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         // do some more stuff but error ...\n *         callback(new Error('bad stuff happened'));\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ];\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results[0].value = 'one'\n *     // results[1].error = Error('bad stuff happened')\n *     // results[2].value = 'two'\n * });\n *\n * // an example using an object instead of an array\n * let tasks = {\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         callback('two');\n *     },\n *     three: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'three');\n *         }, 100);\n *     }\n * };\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results.one.value = 'one'\n *     // results.two.error = 'two'\n *     // results.three.value = 'three'\n * });\n */\nfunction reflectAll(tasks) {\n    var results;\n    if (isArray(tasks)) {\n        results = arrayMap(tasks, reflect);\n    } else {\n        results = {};\n        baseForOwn(tasks, function (task, key) {\n            results[key] = reflect.call(this, task);\n        });\n    }\n    return results;\n}\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n */\nvar rejectLimit = doParallelLimit(reject$1);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n */\nvar rejectSeries = doLimit(rejectLimit, 1);\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant$1(value) {\n  return function() {\n    return value;\n  };\n}\n\n/**\n * Attempts to get a successful response from `task` no more than `times` times\n * before returning an error. If the task is successful, the `callback` will be\n * passed the result of the successful task. If all attempts fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name retry\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n * object with `times` and `interval` or a number.\n * * `times` - The number of attempts to make before giving up.  The default\n *   is `5`.\n * * `interval` - The time to wait between retries, in milliseconds.  The\n *   default is `0`. The interval may also be specified as a function of the\n *   retry count (see example).\n * * `errorFilter` - An optional synchronous function that is invoked on\n *   erroneous result. If it returns `true` the retry attempts will continue;\n *   if the function returns `false` the retry flow is aborted with the current\n *   attempt's error and result being returned to the final callback.\n *   Invoked with (err).\n * * If `opts` is a number, the number specifies the number of times to retry,\n *   with the default interval of `0`.\n * @param {Function} task - A function which receives two arguments: (1) a\n * `callback(err, result)` which must be called when finished, passing `err`\n * (which can be `null`) and the `result` of the function's execution, and (2)\n * a `results` object, containing the results of the previously executed\n * functions (if nested inside another control flow). Invoked with\n * (callback, results).\n * @param {Function} [callback] - An optional callback which is called when the\n * task has succeeded, or after the final failed attempt. It receives the `err`\n * and `result` arguments of the last attempt at completing the `task`. Invoked\n * with (err, results).\n * @example\n *\n * // The `retry` function can be used as a stand-alone control flow by passing\n * // a callback, as shown below:\n *\n * // try calling apiMethod 3 times\n * async.retry(3, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod 3 times, waiting 200 ms between each retry\n * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod 10 times with exponential backoff\n * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n * async.retry({\n *   times: 10,\n *   interval: function(retryCount) {\n *     return 50 * Math.pow(2, retryCount);\n *   }\n * }, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod the default 5 times no delay between each retry\n * async.retry(apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod only when error condition satisfies, all other\n * // errors will abort the retry control flow and return to final callback\n * async.retry({\n *   errorFilter: function(err) {\n *     return err.message === 'Temporary error'; // only retry on a specific error\n *   }\n * }, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // It can also be embedded within other control flow functions to retry\n * // individual methods that are not as reliable, like this:\n * async.auto({\n *     users: api.getUsers.bind(api),\n *     payments: async.retry(3, api.getPayments.bind(api))\n * }, function(err, results) {\n *     // do something with the results\n * });\n *\n */\nfunction retry(opts, task, callback) {\n    var DEFAULT_TIMES = 5;\n    var DEFAULT_INTERVAL = 0;\n\n    var options = {\n        times: DEFAULT_TIMES,\n        intervalFunc: constant$1(DEFAULT_INTERVAL)\n    };\n\n    function parseTimes(acc, t) {\n        if (typeof t === 'object') {\n            acc.times = +t.times || DEFAULT_TIMES;\n\n            acc.intervalFunc = typeof t.interval === 'function' ? t.interval : constant$1(+t.interval || DEFAULT_INTERVAL);\n\n            acc.errorFilter = t.errorFilter;\n        } else if (typeof t === 'number' || typeof t === 'string') {\n            acc.times = +t || DEFAULT_TIMES;\n        } else {\n            throw new Error(\"Invalid arguments for async.retry\");\n        }\n    }\n\n    if (arguments.length < 3 && typeof opts === 'function') {\n        callback = task || noop;\n        task = opts;\n    } else {\n        parseTimes(options, opts);\n        callback = callback || noop;\n    }\n\n    if (typeof task !== 'function') {\n        throw new Error(\"Invalid arguments for async.retry\");\n    }\n\n    var attempt = 1;\n    function retryAttempt() {\n        task(function (err) {\n            if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) {\n                setTimeout(retryAttempt, options.intervalFunc(attempt));\n            } else {\n                callback.apply(null, arguments);\n            }\n        });\n    }\n\n    retryAttempt();\n}\n\n/**\n * A close relative of [`retry`]{@link module:ControlFlow.retry}.  This method wraps a task and makes it\n * retryable, rather than immediately calling it with retries.\n *\n * @name retryable\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.retry]{@link module:ControlFlow.retry}\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n * options, exactly the same as from `retry`\n * @param {Function} task - the asynchronous function to wrap\n * @returns {Functions} The wrapped function, which when invoked, will retry on\n * an error, based on the parameters specified in `opts`.\n * @example\n *\n * async.auto({\n *     dep1: async.retryable(3, getFromFlakyService),\n *     process: [\"dep1\", async.retryable(3, function (results, cb) {\n *         maybeProcessData(results.dep1, cb);\n *     })]\n * }, callback);\n */\nvar retryable = function (opts, task) {\n    if (!task) {\n        task = opts;\n        opts = null;\n    }\n    return initialParams(function (args, callback) {\n        function taskFn(cb) {\n            task.apply(null, args.concat(cb));\n        }\n\n        if (opts) retry(opts, taskFn, callback);else retry(taskFn, callback);\n    });\n};\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n *  results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection containing functions to run, each\n * function is passed a `callback(err, result)` it must call on completion with\n * an error `err` (which can be `null`) and an optional `result` value.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @example\n * async.series([\n *     function(callback) {\n *         // do some stuff ...\n *         callback(null, 'one');\n *     },\n *     function(callback) {\n *         // do some more stuff ...\n *         callback(null, 'two');\n *     }\n * ],\n * // optional callback\n * function(err, results) {\n *     // results is now equal to ['one', 'two']\n * });\n *\n * async.series({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback){\n *         setTimeout(function() {\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }, function(err, results) {\n *     // results is now equal to: {one: 1, two: 2}\n * });\n */\nfunction series(tasks, callback) {\n  _parallel(eachOfSeries, tasks, callback);\n}\n\n/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in the array\n * in parallel. The iteratee is passed a `callback(err, truthValue)` which must\n * be called with a boolean argument once it has completed. Invoked with\n * (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @example\n *\n * async.some(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, result) {\n *     // if result is true then at least one of the files exists\n * });\n */\nvar some = doParallel(_createTester(Boolean, identity));\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in the array\n * in parallel. The iteratee is passed a `callback(err, truthValue)` which must\n * be called with a boolean argument once it has completed. Invoked with\n * (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n */\nvar someLimit = doParallelLimit(_createTester(Boolean, identity));\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in the array\n * in parallel. The iteratee is passed a `callback(err, truthValue)` which must\n * be called with a boolean argument once it has completed. Invoked with\n * (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n */\nvar someSeries = doLimit(someLimit, 1);\n\n/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A function to apply to each item in `coll`.\n * The iteratee is passed a `callback(err, sortValue)` which must be called once\n * it has completed with an error (which can be `null`) and a value to use as\n * the sort criteria. Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @example\n *\n * async.sortBy(['file1','file2','file3'], function(file, callback) {\n *     fs.stat(file, function(err, stats) {\n *         callback(err, stats.mtime);\n *     });\n * }, function(err, results) {\n *     // results is now the original array of files sorted by\n *     // modified date\n * });\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy([1,9,3,5], function(x, callback) {\n *     callback(null, x);\n * }, function(err,result) {\n *     // result callback\n * });\n *\n * // descending order\n * async.sortBy([1,9,3,5], function(x, callback) {\n *     callback(null, x*-1);    //<- x*-1 instead of x, turns the order around\n * }, function(err,result) {\n *     // result callback\n * });\n */\nfunction sortBy(coll, iteratee, callback) {\n    map(coll, function (x, callback) {\n        iteratee(x, function (err, criteria) {\n            if (err) return callback(err);\n            callback(null, { value: x, criteria: criteria });\n        });\n    }, function (err, results) {\n        if (err) return callback(err);\n        callback(null, arrayMap(results.sort(comparator), baseProperty('value')));\n    });\n\n    function comparator(left, right) {\n        var a = left.criteria,\n            b = right.criteria;\n        return a < b ? -1 : a > b ? 1 : 0;\n    }\n}\n\n/**\n * Sets a time limit on an asynchronous function. If the function does not call\n * its callback within the specified milliseconds, it will be called with a\n * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n *\n * @name timeout\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} asyncFn - The asynchronous function you want to set the\n * time limit.\n * @param {number} milliseconds - The specified time limit.\n * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n * to timeout Error for more information..\n * @returns {Function} Returns a wrapped function that can be used with any of\n * the control flow functions. Invoke this function with the same\n * parameters as you would `asyncFunc`.\n * @example\n *\n * function myFunction(foo, callback) {\n *     doAsyncTask(foo, function(err, data) {\n *         // handle errors\n *         if (err) return callback(err);\n *\n *         // do some stuff ...\n *\n *         // return processed data\n *         return callback(null, data);\n *     });\n * }\n *\n * var wrapped = async.timeout(myFunction, 1000);\n *\n * // call `wrapped` as you would `myFunction`\n * wrapped({ bar: 'bar' }, function(err, data) {\n *     // if `myFunction` takes < 1000 ms to execute, `err`\n *     // and `data` will have their expected values\n *\n *     // else `err` will be an Error with the code 'ETIMEDOUT'\n * });\n */\nfunction timeout(asyncFn, milliseconds, info) {\n    var originalCallback, timer;\n    var timedOut = false;\n\n    function injectedCallback() {\n        if (!timedOut) {\n            originalCallback.apply(null, arguments);\n            clearTimeout(timer);\n        }\n    }\n\n    function timeoutCallback() {\n        var name = asyncFn.name || 'anonymous';\n        var error = new Error('Callback function \"' + name + '\" timed out.');\n        error.code = 'ETIMEDOUT';\n        if (info) {\n            error.info = info;\n        }\n        timedOut = true;\n        originalCallback(error);\n    }\n\n    return initialParams(function (args, origCallback) {\n        originalCallback = origCallback;\n        // setup timer and call original function\n        timer = setTimeout(timeoutCallback, milliseconds);\n        asyncFn.apply(null, args.concat(injectedCallback));\n    });\n}\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil;\nvar nativeMax$1 = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax$1(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name timesLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} count - The number of times to run the function.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - The function to call `n` times. Invoked with the\n * iteration index and a callback (n, next).\n * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n */\nfunction timeLimit(count, limit, iteratee, callback) {\n  mapLimit(baseRange(0, count, 1), limit, iteratee, callback);\n}\n\n/**\n * Calls the `iteratee` function `n` times, and accumulates results in the same\n * manner you would use with [map]{@link module:Collections.map}.\n *\n * @name times\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {Function} iteratee - The function to call `n` times. Invoked with the\n * iteration index and a callback (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @example\n *\n * // Pretend this is some complicated async factory\n * var createUser = function(id, callback) {\n *     callback(null, {\n *         id: 'user' + id\n *     });\n * };\n *\n * // generate 5 users\n * async.times(5, function(n, next) {\n *     createUser(n, function(err, user) {\n *         next(err, user);\n *     });\n * }, function(err, users) {\n *     // we should now have 5 users\n * });\n */\nvar times = doLimit(timeLimit, Infinity);\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n *\n * @name timesSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {Function} iteratee - The function to call `n` times. Invoked with the\n * iteration index and a callback (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n */\nvar timesSeries = doLimit(timeLimit, 1);\n\n/**\n * A relative of `reduce`.  Takes an Object or Array, and iterates over each\n * element in series, each step potentially mutating an `accumulator` value.\n * The type of the accumulator defaults to the type of collection passed in.\n *\n * @name transform\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {*} [accumulator] - The initial state of the transform.  If omitted,\n * it will default to an empty Object or Array, depending on the type of `coll`\n * @param {Function} iteratee - A function applied to each item in the\n * collection that potentially modifies the accumulator. The `iteratee` is\n * passed a `callback(err)` which accepts an optional error as its first\n * argument. If an error is passed to the callback, the transform is stopped\n * and the main `callback` is immediately called with the error.\n * Invoked with (accumulator, item, key, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the transformed accumulator.\n * Invoked with (err, result).\n * @example\n *\n * async.transform([1,2,3], function(acc, item, index, callback) {\n *     // pointless async:\n *     process.nextTick(function() {\n *         acc.push(item * 2)\n *         callback(null)\n *     });\n * }, function(err, result) {\n *     // result is now equal to [2, 4, 6]\n * });\n *\n * @example\n *\n * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) {\n *     setImmediate(function () {\n *         obj[key] = val * 2;\n *         callback();\n *     })\n * }, function (err, result) {\n *     // result is equal to {a: 2, b: 4, c: 6}\n * })\n */\nfunction transform(coll, accumulator, iteratee, callback) {\n    if (arguments.length <= 3) {\n        callback = iteratee;\n        iteratee = accumulator;\n        accumulator = isArray(coll) ? [] : {};\n    }\n    callback = once(callback || noop);\n\n    eachOf(coll, function (v, k, cb) {\n        iteratee(accumulator, v, k, cb);\n    }, function (err) {\n        callback(err, accumulator);\n    });\n}\n\n/**\n * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n * unmemoized form. Handy for testing.\n *\n * @name unmemoize\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.memoize]{@link module:Utils.memoize}\n * @category Util\n * @param {Function} fn - the memoized function\n * @returns {Function} a function that calls the original unmemoized function\n */\nfunction unmemoize(fn) {\n    return function () {\n        return (fn.unmemoized || fn).apply(null, arguments);\n    };\n}\n\n/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Function} test - synchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {Function} iteratee - A function which is called each time `test` passes.\n * The function is passed a `callback(err)`, which must be called once it has\n * completed with an optional `err` argument. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns undefined\n * @example\n *\n * var count = 0;\n * async.whilst(\n *     function() { return count < 5; },\n *     function(callback) {\n *         count++;\n *         setTimeout(function() {\n *             callback(null, count);\n *         }, 1000);\n *     },\n *     function (err, n) {\n *         // 5 seconds have passed, n = 5\n *     }\n * );\n */\nfunction whilst(test, iteratee, callback) {\n    callback = onlyOnce(callback || noop);\n    if (!test()) return callback(null);\n    var next = rest(function (err, args) {\n        if (err) return callback(err);\n        if (test()) return iteratee(next);\n        callback.apply(null, [null].concat(args));\n    });\n    iteratee(next);\n}\n\n/**\n * Repeatedly call `fn` until `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs. `callback` will be passed an error and any\n * arguments passed to the final `fn`'s callback.\n *\n * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n *\n * @name until\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {Function} test - synchronous truth test to perform before each\n * execution of `fn`. Invoked with ().\n * @param {Function} fn - A function which is called each time `test` fails.\n * The function is passed a `callback(err)`, which must be called once it has\n * completed with an optional `err` argument. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `fn` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `fn`'s\n * callback. Invoked with (err, [results]);\n */\nfunction until(test, fn, callback) {\n    whilst(function () {\n        return !test.apply(this, arguments);\n    }, fn, callback);\n}\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of functions to run, each function is passed\n * a `callback(err, result1, result2, ...)` it must call on completion. The\n * first argument is an error (which can be `null`) and any further arguments\n * will be passed as arguments in order to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns undefined\n * @example\n *\n * async.waterfall([\n *     function(callback) {\n *         callback(null, 'one', 'two');\n *     },\n *     function(arg1, arg2, callback) {\n *         // arg1 now equals 'one' and arg2 now equals 'two'\n *         callback(null, 'three');\n *     },\n *     function(arg1, callback) {\n *         // arg1 now equals 'three'\n *         callback(null, 'done');\n *     }\n * ], function (err, result) {\n *     // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n *     myFirstFunction,\n *     mySecondFunction,\n *     myLastFunction,\n * ], function (err, result) {\n *     // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n *     callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n *     // arg1 now equals 'one' and arg2 now equals 'two'\n *     callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n *     // arg1 now equals 'three'\n *     callback(null, 'done');\n * }\n */\nvar waterfall = function (tasks, callback) {\n    callback = once(callback || noop);\n    if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n    if (!tasks.length) return callback();\n    var taskIndex = 0;\n\n    function nextTask(args) {\n        if (taskIndex === tasks.length) {\n            return callback.apply(null, [null].concat(args));\n        }\n\n        var taskCallback = onlyOnce(rest(function (err, args) {\n            if (err) {\n                return callback.apply(null, [err].concat(args));\n            }\n            nextTask(args);\n        }));\n\n        args.push(taskCallback);\n\n        var task = tasks[taskIndex++];\n        task.apply(null, args);\n    }\n\n    nextTask([]);\n};\n\n/**\n * Async is a utility module which provides straight-forward, powerful functions\n * for working with asynchronous JavaScript. Although originally designed for\n * use with [Node.js](http://nodejs.org) and installable via\n * `npm install --save async`, it can also be used directly in the browser.\n * @module async\n */\n\n/**\n * A collection of `async` functions for manipulating collections, such as\n * arrays and objects.\n * @module Collections\n */\n\n/**\n * A collection of `async` functions for controlling the flow through a script.\n * @module ControlFlow\n */\n\n/**\n * A collection of `async` utility functions.\n * @module Utils\n */\nvar index = {\n  applyEach: applyEach,\n  applyEachSeries: applyEachSeries,\n  apply: apply$2,\n  asyncify: asyncify,\n  auto: auto,\n  autoInject: autoInject,\n  cargo: cargo,\n  compose: compose,\n  concat: concat,\n  concatSeries: concatSeries,\n  constant: constant,\n  detect: detect,\n  detectLimit: detectLimit,\n  detectSeries: detectSeries,\n  dir: dir,\n  doDuring: doDuring,\n  doUntil: doUntil,\n  doWhilst: doWhilst,\n  during: during,\n  each: eachLimit,\n  eachLimit: eachLimit$1,\n  eachOf: eachOf,\n  eachOfLimit: eachOfLimit,\n  eachOfSeries: eachOfSeries,\n  eachSeries: eachSeries,\n  ensureAsync: ensureAsync,\n  every: every,\n  everyLimit: everyLimit,\n  everySeries: everySeries,\n  filter: filter,\n  filterLimit: filterLimit,\n  filterSeries: filterSeries,\n  forever: forever,\n  groupBy: groupBy,\n  groupByLimit: groupByLimit,\n  groupBySeries: groupBySeries,\n  log: log,\n  map: map,\n  mapLimit: mapLimit,\n  mapSeries: mapSeries,\n  mapValues: mapValues,\n  mapValuesLimit: mapValuesLimit,\n  mapValuesSeries: mapValuesSeries,\n  memoize: memoize,\n  nextTick: nextTick,\n  parallel: parallelLimit,\n  parallelLimit: parallelLimit$1,\n  priorityQueue: priorityQueue,\n  queue: queue$1,\n  race: race,\n  reduce: reduce,\n  reduceRight: reduceRight,\n  reflect: reflect,\n  reflectAll: reflectAll,\n  reject: reject,\n  rejectLimit: rejectLimit,\n  rejectSeries: rejectSeries,\n  retry: retry,\n  retryable: retryable,\n  seq: seq$1,\n  series: series,\n  setImmediate: setImmediate$1,\n  some: some,\n  someLimit: someLimit,\n  someSeries: someSeries,\n  sortBy: sortBy,\n  timeout: timeout,\n  times: times,\n  timesLimit: timeLimit,\n  timesSeries: timesSeries,\n  transform: transform,\n  unmemoize: unmemoize,\n  until: until,\n  waterfall: waterfall,\n  whilst: whilst,\n\n  // aliases\n  all: every,\n  any: some,\n  forEach: eachLimit,\n  forEachSeries: eachSeries,\n  forEachLimit: eachLimit$1,\n  forEachOf: eachOf,\n  forEachOfSeries: eachOfSeries,\n  forEachOfLimit: eachOfLimit,\n  inject: reduce,\n  foldl: reduce,\n  foldr: reduceRight,\n  select: filter,\n  selectLimit: filterLimit,\n  selectSeries: filterSeries,\n  wrapSync: asyncify\n};\n\nexports['default'] = index;\nexports.applyEach = applyEach;\nexports.applyEachSeries = applyEachSeries;\nexports.apply = apply$2;\nexports.asyncify = asyncify;\nexports.auto = auto;\nexports.autoInject = autoInject;\nexports.cargo = cargo;\nexports.compose = compose;\nexports.concat = concat;\nexports.concatSeries = concatSeries;\nexports.constant = constant;\nexports.detect = detect;\nexports.detectLimit = detectLimit;\nexports.detectSeries = detectSeries;\nexports.dir = dir;\nexports.doDuring = doDuring;\nexports.doUntil = doUntil;\nexports.doWhilst = doWhilst;\nexports.during = during;\nexports.each = eachLimit;\nexports.eachLimit = eachLimit$1;\nexports.eachOf = eachOf;\nexports.eachOfLimit = eachOfLimit;\nexports.eachOfSeries = eachOfSeries;\nexports.eachSeries = eachSeries;\nexports.ensureAsync = ensureAsync;\nexports.every = every;\nexports.everyLimit = everyLimit;\nexports.everySeries = everySeries;\nexports.filter = filter;\nexports.filterLimit = filterLimit;\nexports.filterSeries = filterSeries;\nexports.forever = forever;\nexports.groupBy = groupBy;\nexports.groupByLimit = groupByLimit;\nexports.groupBySeries = groupBySeries;\nexports.log = log;\nexports.map = map;\nexports.mapLimit = mapLimit;\nexports.mapSeries = mapSeries;\nexports.mapValues = mapValues;\nexports.mapValuesLimit = mapValuesLimit;\nexports.mapValuesSeries = mapValuesSeries;\nexports.memoize = memoize;\nexports.nextTick = nextTick;\nexports.parallel = parallelLimit;\nexports.parallelLimit = parallelLimit$1;\nexports.priorityQueue = priorityQueue;\nexports.queue = queue$1;\nexports.race = race;\nexports.reduce = reduce;\nexports.reduceRight = reduceRight;\nexports.reflect = reflect;\nexports.reflectAll = reflectAll;\nexports.reject = reject;\nexports.rejectLimit = rejectLimit;\nexports.rejectSeries = rejectSeries;\nexports.retry = retry;\nexports.retryable = retryable;\nexports.seq = seq$1;\nexports.series = series;\nexports.setImmediate = setImmediate$1;\nexports.some = some;\nexports.someLimit = someLimit;\nexports.someSeries = someSeries;\nexports.sortBy = sortBy;\nexports.timeout = timeout;\nexports.times = times;\nexports.timesLimit = timeLimit;\nexports.timesSeries = timesSeries;\nexports.transform = transform;\nexports.unmemoize = unmemoize;\nexports.until = until;\nexports.waterfall = waterfall;\nexports.whilst = whilst;\nexports.all = every;\nexports.allLimit = everyLimit;\nexports.allSeries = everySeries;\nexports.any = some;\nexports.anyLimit = someLimit;\nexports.anySeries = someSeries;\nexports.find = detect;\nexports.findLimit = detectLimit;\nexports.findSeries = detectSeries;\nexports.forEach = eachLimit;\nexports.forEachSeries = eachSeries;\nexports.forEachLimit = eachLimit$1;\nexports.forEachOf = eachOf;\nexports.forEachOfSeries = eachOfSeries;\nexports.forEachOfLimit = eachOfLimit;\nexports.inject = reduce;\nexports.foldl = reduce;\nexports.foldr = reduceRight;\nexports.select = filter;\nexports.selectLimit = filterLimit;\nexports.selectSeries = filterSeries;\nexports.wrapSync = asyncify;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/async/dist/async.js\n ** module id = 105\n ** module chunks = 0\n **/","import { Sdk } from \"./Sdk\";\nimport { DataQuery } from \"./dataQuery/DataQuery\";\n\nexport class ProcessableObject {\n    constructor(\n        public sdk: Sdk,\n        public collectionName: string\n    ) {}\n\n    buildDataQuery(data, op, meta): DataQuery {\n        return this.sdk.buildDataQuery(data, op, meta);\n    }\n\n    //TODO: these callbacks should be removed if I recall correctly, check after TS migration is ready\n    processDataQuery<T>(query, success?, error?): Promise<T> {\n        return this.sdk.processDataQuery<T>(query, this, success, error);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/ProcessableObject.ts\n **/","import { EventEmitter } from 'events';\nimport { Query } from '../query/Query';\nimport { DataQueryOperation } from '../Constants';\n\nexport interface DataQueryConfig {\n    meta:any,\n    operation:DataQueryOperation,\n\n    data?:any,\n    query?:Query,\n    originalParameters?:any,\n    additionalOptions?:any\n}\n\nexport class DataQuery extends EventEmitter {\n    data:any;\n    query:Query;\n    originalParameters:any;\n    operation:DataQueryOperation;\n    additionalOptions:any;\n\n    constructor(public config:DataQueryConfig) {\n        super();\n\n        this.data = config.data;\n        this.query = config.query;\n        this.originalParameters = config.originalParameters;\n        this.operation = config.operation;\n        this.additionalOptions = config.additionalOptions;\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/dataQuery/DataQuery.ts\n **/","import * as _ from 'underscore';\nimport {DataQuery} from './DataQuery';\nimport {Query} from '../query/Query';\nimport {DataQueryOperation} from '../Constants';\n\nexport class DataQueryBuilder {\n    _getInitialDataQuery(operation: DataQueryOperation, meta: any): DataQuery {\n        return new DataQuery({meta, operation});\n    }\n\n    buildDataQuery(data: any, op: DataQueryOperation, meta: any): DataQuery {\n        const dataQuery = this._getInitialDataQuery(op, meta);\n\n        if (data instanceof Query) {\n            dataQuery.query = <Query>data;\n        }\n\n        if (data) {\n            dataQuery.additionalOptions = data.additionalOptions;\n        }\n\n        return _.extend(dataQuery, meta);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/dataQuery/DataQueryBuilder.ts\n **/","export class Errors {\n    static cancelled = {\n        code: 3000,\n        message: 'Query cancelled.'\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/errors.ts\n **/","/**\n * @typedef Everlive.Callbacks\n * @description Defines callback functions used throughout the SDK.\n */\n\n/**\n * A function that is called when [authentication.getAuthenticationStatus]{@link ../Authentication/Authentication.getAuthenticationStatus} is executed successfully.\n * @function Everlive.Callbacks.authenticationStatusSuccess\n * @param {Everlive.ResultTypes.authenticationStatusResult} authResult The authentication status success function result.\n */\n\n/**\n * A function that is called when an error occurs during the execution of [authentication.getAuthenticationStatus]{@link ../Authentication/Authentication.getAuthenticationStatus}.\n * @function Everlive.Callbacks.authenticationStatusError\n * @param {Everlive.ResultTypes.authenticationStatusError} authResult The error that occurred during authentication.\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/docs/callbacks.ts\n **/","/**\n * @typedef Everlive.ResultTypes\n * @description Defines result types returned by functions throughout the SDK.\n */\n\n/**\n * @typedef Everlive.ResultTypes.authenticationStatusResult\n * @description An object containing information about the current authentication status.\n * @property {Everlive.AuthStatus} result.status The current authentication status.\n * @property {Everlive.User} [result.user] When the SDK is authenticated, the user is also returned.\n */\n\n/**\n * @typedef Users.ResultTypes\n * @description Defines the result types that can be returned by users functions.\n */\n\n/**\n * @typedef Users.ResultTypes.currentUserResult\n * @description An object containing information about the current user.\n * @property {Date} CreatedAt\n * @property {GUID} CreatedBy\n * @property {GUID} Id\n * @property {String} IdentityProvider\n * @property {Boolean} IsVerified\n * @property {Object} Meta\n * @property {Date} ModifiedAt\n * @property {Date} ModifiedBy\n * @property {GUID} Owner\n * @property {GUID} Role\n * @property {String} Username\n */\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/everlive/docs/resultTypes.ts\n **/","var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n;(function (exports) {\n\t'use strict';\n\n  var Arr = (typeof Uint8Array !== 'undefined')\n    ? Uint8Array\n    : Array\n\n\tvar PLUS   = '+'.charCodeAt(0)\n\tvar SLASH  = '/'.charCodeAt(0)\n\tvar NUMBER = '0'.charCodeAt(0)\n\tvar LOWER  = 'a'.charCodeAt(0)\n\tvar UPPER  = 'A'.charCodeAt(0)\n\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\n\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\n\n\tfunction decode (elt) {\n\t\tvar code = elt.charCodeAt(0)\n\t\tif (code === PLUS ||\n\t\t    code === PLUS_URL_SAFE)\n\t\t\treturn 62 // '+'\n\t\tif (code === SLASH ||\n\t\t    code === SLASH_URL_SAFE)\n\t\t\treturn 63 // '/'\n\t\tif (code < NUMBER)\n\t\t\treturn -1 //no match\n\t\tif (code < NUMBER + 10)\n\t\t\treturn code - NUMBER + 26 + 26\n\t\tif (code < UPPER + 26)\n\t\t\treturn code - UPPER\n\t\tif (code < LOWER + 26)\n\t\t\treturn code - LOWER + 26\n\t}\n\n\tfunction b64ToByteArray (b64) {\n\t\tvar i, j, l, tmp, placeHolders, arr\n\n\t\tif (b64.length % 4 > 0) {\n\t\t\tthrow new Error('Invalid string. Length must be a multiple of 4')\n\t\t}\n\n\t\t// the number of equal signs (place holders)\n\t\t// if there are two placeholders, than the two characters before it\n\t\t// represent one byte\n\t\t// if there is only one, then the three characters before it represent 2 bytes\n\t\t// this is just a cheap hack to not do indexOf twice\n\t\tvar len = b64.length\n\t\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\n\n\t\t// base64 is 4/3 + up to two characters of the original data\n\t\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\n\n\t\t// if there are placeholders, only get up to the last complete 4 chars\n\t\tl = placeHolders > 0 ? b64.length - 4 : b64.length\n\n\t\tvar L = 0\n\n\t\tfunction push (v) {\n\t\t\tarr[L++] = v\n\t\t}\n\n\t\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\n\t\t\tpush((tmp & 0xFF0000) >> 16)\n\t\t\tpush((tmp & 0xFF00) >> 8)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\tif (placeHolders === 2) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\n\t\t\tpush(tmp & 0xFF)\n\t\t} else if (placeHolders === 1) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\n\t\t\tpush((tmp >> 8) & 0xFF)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\treturn arr\n\t}\n\n\tfunction uint8ToBase64 (uint8) {\n\t\tvar i,\n\t\t\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n\t\t\toutput = \"\",\n\t\t\ttemp, length\n\n\t\tfunction encode (num) {\n\t\t\treturn lookup.charAt(num)\n\t\t}\n\n\t\tfunction tripletToBase64 (num) {\n\t\t\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\n\t\t}\n\n\t\t// go through the array every three bytes, we'll deal with trailing stuff later\n\t\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n\t\t\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n\t\t\toutput += tripletToBase64(temp)\n\t\t}\n\n\t\t// pad the end with zeros, but make sure to not forget the extra bytes\n\t\tswitch (extraBytes) {\n\t\t\tcase 1:\n\t\t\t\ttemp = uint8[uint8.length - 1]\n\t\t\t\toutput += encode(temp >> 2)\n\t\t\t\toutput += encode((temp << 4) & 0x3F)\n\t\t\t\toutput += '=='\n\t\t\t\tbreak\n\t\t\tcase 2:\n\t\t\t\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\n\t\t\t\toutput += encode(temp >> 10)\n\t\t\t\toutput += encode((temp >> 4) & 0x3F)\n\t\t\t\toutput += encode((temp << 2) & 0x3F)\n\t\t\t\toutput += '='\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn output\n\t}\n\n\texports.toByteArray = b64ToByteArray\n\texports.fromByteArray = uint8ToBase64\n}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/base64-js/lib/b64.js\n ** module id = 136\n ** module chunks = 0\n **/","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/ieee754/index.js\n ** module id = 137\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\n\nexports.requiredProp = function(type, params, propName) {\n\tif (_.isUndefined(params[propName])) {\n\t\tthrow new Error('`' + propName + '` property is not set in `' + type + '` clause');\n\t}\n};\n\nexports.atLeastOneOfProps = function(type, params, expectedPropNames) {\n\tvar propNames = _(params).chain().keys().intersection(expectedPropNames).value();\n\n\tif (!propNames.length) {\n\t\tthrow new Error('Neither `' + expectedPropNames.join('`, `') +\n\t\t\t'` properties are not set in `' + type + '` clause');\n\t}\n};\n\nexports.onlyOneOfProps = function(type, params, expectedPropNames) {\n\tvar propNames = _(params).chain().keys().intersection(expectedPropNames).value();\n\n\tif (propNames.length > 1) {\n\t\tthrow new Error('Wrong using `' + propNames.join('`, `') + '` properties together in `' +\n\t\t\ttype + '` clause');\n\t}\n};\n\nexports.propType = function(type, params, propName, expectedTypes) {\n\tif (_.isUndefined(params[propName])) return;\n\n\tvar propValue = params[propName];\n\n\tif (!_.isArray(expectedTypes)) expectedTypes = [expectedTypes];\n\n\tvar hasSomeType = _(expectedTypes).some(function(expectedType) {\n\t\treturn _['is' + expectedType.charAt(0).toUpperCase() + expectedType.slice(1)](propValue);\n\t});\n\n\tif (!hasSomeType) {\n\t\tthrow new Error('`' + propName + '` property should have ' +\n\t\t\t(expectedTypes.length > 1 ? 'one of expected types:' : 'type') +\n\t\t\t' \"' + expectedTypes.join('\", \"') + '\" in `' + type + '` clause');\n\t}\n};\n\nexports.minPropLength = function(type, params, propName, length) {\n\tif (_.isUndefined(params[propName])) return;\n\n\tif (params[propName].length < length) {\n\t\tthrow new Error('`' + propName + '` property should not have length less than ' + length +\n\t\t\t' in `' + type + '` clause');\n\t}\n};\n\nexports.propMatch = function(type, params, propName, regExp) {\n\tif (_.isUndefined(params[propName])) return;\n\n\tif (!params[propName].match(regExp)) {\n\t\tthrow new Error('Invalid `' + propName + '` property value \"' + params[propName] + '\" in `' +\n\t\t\ttype + '` clause');\n\t}\n};\n\nexports.customProp = function(type, params, propName, fn) {\n\tif (_.isUndefined(params[propName])) return;\n\n\tif (!fn(params[propName])) {\n\t\tthrow new Error('Invalid `' + propName + '` property value \"' + params[propName] + '\" in `' +\n\t\t\ttype + '` clause');\n\t}\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/utils/templateChecks.js\n ** module id = 138\n ** module chunks = 0\n **/","/**\n * This script gives you the zone info key representing your device's time zone setting.\n *\n * @name jsTimezoneDetect\n * @version 1.0.5\n * @author Jon Nylander\n * @license MIT License - http://www.opensource.org/licenses/mit-license.php\n *\n * For usage and examples, visit:\n * http://pellepim.bitbucket.org/jstz/\n *\n * Copyright (c) Jon Nylander\n */\n\n/*jslint undef: true */\n/*global console, exports*/\n\n(function(root) {\n  /**\n   * Namespace to hold all the code for timezone detection.\n   */\n  var jstz = (function () {\n      'use strict';\n      var HEMISPHERE_SOUTH = 's',\n          \n          /**\n           * Gets the offset in minutes from UTC for a certain date.\n           * @param {Date} date\n           * @returns {Number}\n           */\n          get_date_offset = function (date) {\n              var offset = -date.getTimezoneOffset();\n              return (offset !== null ? offset : 0);\n          },\n\n          get_date = function (year, month, date) {\n              var d = new Date();\n              if (year !== undefined) {\n                d.setFullYear(year);\n              }\n              d.setMonth(month);\n              d.setDate(date);\n              return d;\n          },\n\n          get_january_offset = function (year) {\n              return get_date_offset(get_date(year, 0 ,2));\n          },\n\n          get_june_offset = function (year) {\n              return get_date_offset(get_date(year, 5, 2));\n          },\n\n          /**\n           * Private method.\n           * Checks whether a given date is in daylight saving time.\n           * If the date supplied is after august, we assume that we're checking\n           * for southern hemisphere DST.\n           * @param {Date} date\n           * @returns {Boolean}\n           */\n          date_is_dst = function (date) {\n              var is_southern = date.getMonth() > 7,\n                  base_offset = is_southern ? get_june_offset(date.getFullYear()) : \n                                              get_january_offset(date.getFullYear()),\n                  date_offset = get_date_offset(date),\n                  is_west = base_offset < 0,\n                  dst_offset = base_offset - date_offset;\n                  \n              if (!is_west && !is_southern) {\n                  return dst_offset < 0;\n              }\n\n              return dst_offset !== 0;\n          },\n\n          /**\n           * This function does some basic calculations to create information about\n           * the user's timezone. It uses REFERENCE_YEAR as a solid year for which\n           * the script has been tested rather than depend on the year set by the\n           * client device.\n           *\n           * Returns a key that can be used to do lookups in jstz.olson.timezones.\n           * eg: \"720,1,2\". \n           *\n           * @returns {String}\n           */\n\n          lookup_key = function () {\n              var january_offset = get_january_offset(),\n                  june_offset = get_june_offset(),\n                  diff = january_offset - june_offset;\n\n              if (diff < 0) {\n                  return january_offset + \",1\";\n              } else if (diff > 0) {\n                  return june_offset + \",1,\" + HEMISPHERE_SOUTH;\n              }\n\n              return january_offset + \",0\";\n          },\n\n          /**\n           * Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.\n           *\n           * Returns a primitive object on the format:\n           * {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}\n           *\n           * @returns Object\n           */\n          determine = function () {\n              var key = lookup_key();\n              return new jstz.TimeZone(jstz.olson.timezones[key]);\n          },\n\n          /**\n           * This object contains information on when daylight savings starts for\n           * different timezones.\n           *\n           * The list is short for a reason. Often we do not have to be very specific\n           * to single out the correct timezone. But when we do, this list comes in\n           * handy.\n           *\n           * Each value is a date denoting when daylight savings starts for that timezone.\n           */\n          dst_start_for = function (tz_name) {\n\n            var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)\n                dst_starts = {\n                    'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),\n                    'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),\n                    'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),\n                    'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),\n                    'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),\n                    'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),\n                    'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),\n                    'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),\n                    'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),\n                    'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),\n                    'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),\n                    'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),\n                    'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),\n                    'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),\n                    'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),\n                    'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),\n                    'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),\n                    'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),\n                    'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),\n                    'Europe/Moscow': ru_pre_dst_change,\n                    'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),\n                    'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),\n                    'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),\n                    'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),\n                    'Asia/Yekaterinburg': ru_pre_dst_change,\n                    'Asia/Omsk': ru_pre_dst_change,\n                    'Asia/Krasnoyarsk': ru_pre_dst_change,\n                    'Asia/Irkutsk': ru_pre_dst_change,\n                    'Asia/Yakutsk': ru_pre_dst_change,\n                    'Asia/Vladivostok': ru_pre_dst_change,\n                    'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),\n                    'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),\n                    'Asia/Kamchatka': ru_pre_dst_change,\n                    'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),\n                    'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),\n                    'Europe/Minsk': ru_pre_dst_change,\n                    'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),\n                    'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),\n                    'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)\n                };\n\n              return dst_starts[tz_name];\n          };\n\n      return {\n          determine: determine,\n          date_is_dst: date_is_dst,\n          dst_start_for: dst_start_for \n      };\n  }());\n\n  /**\n   * Simple object to perform ambiguity check and to return name of time zone.\n   */\n  jstz.TimeZone = function (tz_name) {\n      'use strict';\n        /**\n         * The keys in this object are timezones that we know may be ambiguous after\n         * a preliminary scan through the olson_tz object.\n         *\n         * The array of timezones to compare must be in the order that daylight savings\n         * starts for the regions.\n         */\n      var AMBIGUITIES = {\n              'America/Denver':       ['America/Denver', 'America/Mazatlan'],\n              'America/Chicago':      ['America/Chicago', 'America/Mexico_City'],\n              'America/Santiago':     ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],\n              'America/Montevideo':   ['America/Montevideo', 'America/Sao_Paulo'],\n              'Asia/Beirut':          ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],\n              'Pacific/Auckland':     ['Pacific/Auckland', 'Pacific/Fiji'],\n              'America/Los_Angeles':  ['America/Los_Angeles', 'America/Santa_Isabel'],\n              'America/New_York':     ['America/Havana', 'America/New_York'],\n              'America/Halifax':      ['America/Goose_Bay', 'America/Halifax'],\n              'America/Godthab':      ['America/Miquelon', 'America/Godthab'],\n              'Asia/Dubai':           ['Europe/Moscow'],\n              'Asia/Dhaka':           ['Asia/Yekaterinburg'],\n              'Asia/Jakarta':         ['Asia/Omsk'],\n              'Asia/Shanghai':        ['Asia/Krasnoyarsk', 'Australia/Perth'],\n              'Asia/Tokyo':           ['Asia/Irkutsk'],\n              'Australia/Brisbane':   ['Asia/Yakutsk'],\n              'Pacific/Noumea':       ['Asia/Vladivostok'],\n              'Pacific/Tarawa':       ['Asia/Kamchatka', 'Pacific/Fiji'],\n              'Pacific/Tongatapu':    ['Pacific/Apia'],\n              'Asia/Baghdad':         ['Europe/Minsk'],\n              'Asia/Baku':            ['Asia/Yerevan','Asia/Baku'],\n              'Africa/Johannesburg':  ['Asia/Gaza', 'Africa/Cairo']\n          },\n\n          timezone_name = tz_name,\n          \n          /**\n           * Checks if a timezone has possible ambiguities. I.e timezones that are similar.\n           *\n           * For example, if the preliminary scan determines that we're in America/Denver.\n           * We double check here that we're really there and not in America/Mazatlan.\n           *\n           * This is done by checking known dates for when daylight savings start for different\n           * timezones during 2010 and 2011.\n           */\n          ambiguity_check = function () {\n              var ambiguity_list = AMBIGUITIES[timezone_name],\n                  length = ambiguity_list.length,\n                  i = 0,\n                  tz = ambiguity_list[0];\n\n              for (; i < length; i += 1) {\n                  tz = ambiguity_list[i];\n\n                  if (jstz.date_is_dst(jstz.dst_start_for(tz))) {\n                      timezone_name = tz;\n                      return;\n                  }\n              }\n          },\n\n          /**\n           * Checks if it is possible that the timezone is ambiguous.\n           */\n          is_ambiguous = function () {\n              return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';\n          };\n\n      if (is_ambiguous()) {\n          ambiguity_check();\n      }\n\n      return {\n          name: function () {\n              return timezone_name;\n          }\n      };\n  };\n\n  jstz.olson = {};\n\n  /*\n   * The keys in this dictionary are comma separated as such:\n   *\n   * First the offset compared to UTC time in minutes.\n   *\n   * Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it\n   * does.\n   *\n   * Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,\n   * only interesting for timezones with DST.\n   *\n   * The mapped arrays is used for constructing the jstz.TimeZone object from within\n   * jstz.determine_timezone();\n   */\n  jstz.olson.timezones = {\n      '-720,0'   : 'Pacific/Majuro',\n      '-660,0'   : 'Pacific/Pago_Pago',\n      '-600,1'   : 'America/Adak',\n      '-600,0'   : 'Pacific/Honolulu',\n      '-570,0'   : 'Pacific/Marquesas',\n      '-540,0'   : 'Pacific/Gambier',\n      '-540,1'   : 'America/Anchorage',\n      '-480,1'   : 'America/Los_Angeles',\n      '-480,0'   : 'Pacific/Pitcairn',\n      '-420,0'   : 'America/Phoenix',\n      '-420,1'   : 'America/Denver',\n      '-360,0'   : 'America/Guatemala',\n      '-360,1'   : 'America/Chicago',\n      '-360,1,s' : 'Pacific/Easter',\n      '-300,0'   : 'America/Bogota',\n      '-300,1'   : 'America/New_York',\n      '-270,0'   : 'America/Caracas',\n      '-240,1'   : 'America/Halifax',\n      '-240,0'   : 'America/Santo_Domingo',\n      '-240,1,s' : 'America/Santiago',\n      '-210,1'   : 'America/St_Johns',\n      '-180,1'   : 'America/Godthab',\n      '-180,0'   : 'America/Argentina/Buenos_Aires',\n      '-180,1,s' : 'America/Montevideo',\n      '-120,0'   : 'America/Noronha',\n      '-120,1'   : 'America/Noronha',\n      '-60,1'    : 'Atlantic/Azores',\n      '-60,0'    : 'Atlantic/Cape_Verde',\n      '0,0'      : 'UTC',\n      '0,1'      : 'Europe/London',\n      '60,1'     : 'Europe/Berlin',\n      '60,0'     : 'Africa/Lagos',\n      '60,1,s'   : 'Africa/Windhoek',\n      '120,1'    : 'Asia/Beirut',\n      '120,0'    : 'Africa/Johannesburg',\n      '180,0'    : 'Asia/Baghdad',\n      '180,1'    : 'Europe/Moscow',\n      '210,1'    : 'Asia/Tehran',\n      '240,0'    : 'Asia/Dubai',\n      '240,1'    : 'Asia/Baku',\n      '270,0'    : 'Asia/Kabul',\n      '300,1'    : 'Asia/Yekaterinburg',\n      '300,0'    : 'Asia/Karachi',\n      '330,0'    : 'Asia/Kolkata',\n      '345,0'    : 'Asia/Kathmandu',\n      '360,0'    : 'Asia/Dhaka',\n      '360,1'    : 'Asia/Omsk',\n      '390,0'    : 'Asia/Rangoon',\n      '420,1'    : 'Asia/Krasnoyarsk',\n      '420,0'    : 'Asia/Jakarta',\n      '480,0'    : 'Asia/Shanghai',\n      '480,1'    : 'Asia/Irkutsk',\n      '525,0'    : 'Australia/Eucla',\n      '525,1,s'  : 'Australia/Eucla',\n      '540,1'    : 'Asia/Yakutsk',\n      '540,0'    : 'Asia/Tokyo',\n      '570,0'    : 'Australia/Darwin',\n      '570,1,s'  : 'Australia/Adelaide',\n      '600,0'    : 'Australia/Brisbane',\n      '600,1'    : 'Asia/Vladivostok',\n      '600,1,s'  : 'Australia/Sydney',\n      '630,1,s'  : 'Australia/Lord_Howe',\n      '660,1'    : 'Asia/Kamchatka',\n      '660,0'    : 'Pacific/Noumea',\n      '690,0'    : 'Pacific/Norfolk',\n      '720,1,s'  : 'Pacific/Auckland',\n      '720,0'    : 'Pacific/Tarawa',\n      '765,1,s'  : 'Pacific/Chatham',\n      '780,0'    : 'Pacific/Tongatapu',\n      '780,1,s'  : 'Pacific/Apia',\n      '840,0'    : 'Pacific/Kiritimati'\n  };\n\n  if (typeof exports !== 'undefined') {\n    exports.jstz = jstz;\n  } else {\n    root.jstz = jstz;\n  }\n})(this);\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jstimezonedetect/jstz.js\n ** module id = 139\n ** module chunks = 0\n **/","// Mingo.js 0.6.2\n// Copyright (c) 2015 Francis Asante <kofrasa@gmail.com>\n// MIT\n\n;\n(function (root, undefined) {\n\n  \"use strict\";\n\n  // global on the server, window in the browser\n  var Mingo = {}, previousMingo;\n  var _;\n\n  Mingo.VERSION = '0.6.2';\n\n  // backup previous Mingo\n  if (root != null) {\n    previousMingo = root.Mingo;\n  }\n\n  Mingo.noConflict = function () {\n    root.Mingo = previousMingo;\n    return Mingo;\n  };\n\n  var nativeScriptEnabled = Boolean(((typeof android !== 'undefined' && android && android.widget && android.widget.Button)\n  || (typeof UIButton !== 'undefined' && UIButton)));\n\n  var nodeEnabled = ('undefined' !== typeof exports && 'undefined' !== typeof require && 'undefined' === typeof window && !nativeScriptEnabled);\n\n  var browserifyEnabled = 'undefined' !== typeof exports && 'undefined' !== typeof require;\n\n  // Export the Mingo object for Node.js\n  if (nodeEnabled || nativeScriptEnabled || browserifyEnabled) {\n    if (typeof module !== 'undefined') {\n      module.exports = Mingo;\n    }\n    _ = require(\"underscore\"); // get a reference to underscore\n  } else {\n    root.Mingo = Mingo;\n    _ = root._; // get a reference to underscore\n  }\n\n  // quick reference for\n  var primitives = [\n    _.isString, _.isBoolean, _.isNumber, _.isDate, _.isNull, _.isRegExp\n  ];\n\n  function isPrimitive(value) {\n    for (var i = 0; i < primitives.length; i++) {\n      if (primitives[i](value)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Simplify expression for easy evaluation with query operators map\n   * @param expr\n   * @returns {*}\n   */\n  function normalize(expr) {\n\n    // normalized primitives\n    if (isPrimitive(expr)) {\n      return _.isRegExp(expr) ? {\"$regex\": expr} : {\"$eq\": expr};\n    }\n\n    // normalize object expression\n    if (_.isObject(expr)) {\n      var keys = _.keys(expr);\n      var notQuery = _.intersection(ops(OP_QUERY), keys).length === 0;\n\n      // no valid query operator found, so we do simple comparison\n      if (notQuery) {\n        return {\"$eq\": expr};\n      }\n\n      // ensure valid regex\n      if (_.contains(keys, \"$regex\")) {\n        var regex = expr['$regex'];\n        var options = expr['$options'] || \"\";\n        var modifiers = \"\";\n        if (_.isString(regex)) {\n          modifiers += (regex.ignoreCase || options.indexOf(\"i\") >= 0) ? \"i\" : \"\";\n          modifiers += (regex.multiline || options.indexOf(\"m\") >= 0) ? \"m\" : \"\";\n          modifiers += (regex.global || options.indexOf(\"g\") >= 0) ? \"g\" : \"\";\n          regex = new RegExp(regex, modifiers);\n        }\n        expr['$regex'] = regex;\n        delete expr['$options'];\n      }\n    }\n\n    return expr;\n  }\n\n  // Settings used by Mingo internally\n  var settings = {\n    key: \"_id\"\n  };\n\n  /**\n   * Setup default settings for Mingo\n   * @param options\n   */\n  Mingo.setup = function (options) {\n    _.extend(settings, options || {});\n  };\n\n\n  /**\n   * Query object to test collection elements with\n   * @param criteria the pass criteria for the query\n   * @param projection optional projection specifiers\n   * @constructor\n   */\n  Mingo.Query = function (criteria, projection) {\n    if (!(this instanceof Mingo.Query))\n      return new Mingo.Query(criteria, projection);\n\n    this._criteria = criteria;\n    this._projection = projection;\n    this._compiled = [];\n    this._compile();\n  };\n\n  Mingo.Query.prototype = {\n\n    _compile: function () {\n\n      if (_.isEmpty(this._criteria)) return;\n\n      if (_.isArray(this._criteria) || _.isFunction(this._criteria) || !_.isObject(this._criteria)) {\n        throw new Error(\"Invalid type for criteria\");\n      }\n\n      for (var field in this._criteria) {\n        if (this._criteria.hasOwnProperty(field)) {\n          var expr = this._criteria[field];\n          if (_.contains(['$and', '$or', '$nor', '$where'], field)) {\n            this._processOperator(field, field, expr);\n          } else {\n            // normalize expression\n            expr = normalize(expr);\n            for (var op in expr) {\n              if (expr.hasOwnProperty(op)) {\n                this._processOperator(field, op, expr[op]);\n              }\n            }\n          }\n        }\n      }\n    },\n\n    _processOperator: function (field, operator, value) {\n      if (_.contains(ops(OP_QUERY), operator)) {\n        this._compiled.push(queryOperators[operator](field, value));\n      } else {\n        throw new Error(\"Invalid query operator '\" + operator + \"' detected\");\n      }\n    },\n\n    /**\n     * Checks if the object passes the query criteria. Returns true if so, false otherwise.\n     * @param obj\n     * @returns {boolean}\n     */\n    test: function (obj) {\n      for (var i = 0; i < this._compiled.length; i++) {\n        if (!this._compiled[i].test(obj)) {\n          return false;\n        }\n      }\n      return true;\n    },\n\n    /**\n     * Performs a query on a collection and returns a cursor object.\n     * @param collection\n     * @param projection\n     * @returns {Mingo.Cursor}\n     */\n    find: function (collection, projection) {\n      return new Mingo.Cursor(collection, this, projection);\n    },\n\n    /**\n     * Remove matched documents from the collection returning the remainder\n     * @param collection\n     * @returns {Array}\n     */\n    remove: function (collection) {\n      var arr = [];\n      for (var i = 0; i < collection.length; i++) {\n        if (!this.test(collection[i])) {\n          arr.push(collection[i]);\n        }\n      }\n      return arr;\n    }\n  };\n\n  if (nodeEnabled) {\n\n    var Transform = require('stream').Transform;\n    var util = require('util');\n\n    Mingo.Query.prototype.stream = function (options) {\n      return new Mingo.Stream(this, options);\n    };\n\n    /**\n     * Create a Transform class\n     * @param query\n     * @param options\n     * @returns {Mingo.Stream}\n     * @constructor\n     */\n    Mingo.Stream = function (query, options) {\n\n      if (!(this instanceof Mingo.Stream))\n        return new Mingo.Stream(query, options);\n\n      options = options || {};\n      _.extend(options, {objectMode: true});\n      Transform.call(this, options);\n      // query for this stream\n      this._query = query;\n    };\n    // extend Transform\n    util.inherits(Mingo.Stream, Transform);\n\n    Mingo.Stream.prototype._transform = function (chunk, encoding, done) {\n      if (_.isObject(chunk) && this._query.test(chunk)) {\n        if (_.isEmpty(this._query._projection)) {\n          this.push(chunk);\n        } else {\n          var cursor = new Mingo.Cursor([chunk], this._query);\n          if (cursor.hasNext()) {\n            this.push(cursor.next());\n          }\n        }\n      }\n      done();\n    };\n  }\n\n  /**\n   * Cursor to iterate and perform filtering on matched objects\n   * @param collection\n   * @param query\n   * @param projection\n   * @constructor\n   */\n  Mingo.Cursor = function (collection, query, projection) {\n\n    if (!(this instanceof Mingo.Cursor))\n      return new Mingo.Cursor(collection, query, projection);\n\n    this._query = query;\n    this._collection = collection;\n    this._projection = projection || query._projection;\n    this._operators = {};\n    this._result = false;\n    this._position = 0;\n  };\n\n  Mingo.Cursor.prototype = {\n\n    _fetch: function () {\n      var self = this;\n\n      if (this._result !== false) {\n        return this._result;\n      }\n\n      // inject projection operator\n      if (_.isObject(this._projection)) {\n        _.extend(this._operators, {\"$project\": this._projection});\n      }\n\n      // if (!_.isArray(this._collection) && !_.isObject(this._collection)) {\n      //   throw new Error(\"Input collection is not of valid type. Must be an Array.\");\n      // }\n\n      // filter collection\n      this._result = _.filter(this._collection, this._query.test, this._query);\n      var pipeline = [];\n\n      _.each(['$sort', '$skip', '$limit', '$project'], function (op) {\n        if (_.has(self._operators, op)) {\n          pipeline.push(_.pick(self._operators, op));\n        }\n      });\n\n      if (pipeline.length > 0) {\n        var aggregator = new Mingo.Aggregator(pipeline);\n        this._result = aggregator.run(this._result, this._query);\n      }\n      return this._result;\n    },\n\n    /**\n     * Fetch and return all matched results\n     * @returns {Array}\n     */\n    all: function () {\n      return this._fetch();\n    },\n\n    /**\n     * Fetch and return the first matching result\n     * @returns {Object}\n     */\n    first: function () {\n      return this.count() > 0 ? this._fetch()[0] : null;\n    },\n\n    /**\n     * Fetch and return the last matching object from the result\n     * @returns {Object}\n     */\n    last: function () {\n      return this.count() > 0 ? this._fetch()[this.count() - 1] : null;\n    },\n\n    /**\n     * Counts the number of matched objects found\n     * @returns {Number}\n     */\n    count: function () {\n      return this._fetch().length;\n    },\n\n    /**\n     * Returns a cursor that begins returning results only after passing or skipping a number of documents.\n     * @param {Number} n the number of results to skip.\n     * @return {Mingo.Cursor} Returns the cursor, so you can chain this call.\n     */\n    skip: function (n) {\n      _.extend(this._operators, {\"$skip\": n});\n      return this;\n    },\n\n    /**\n     * Constrains the size of a cursor's result set.\n     * @param {Number} n the number of results to limit to.\n     * @return {Mingo.Cursor} Returns the cursor, so you can chain this call.\n     */\n    limit: function (n) {\n      _.extend(this._operators, {\"$limit\": n});\n      return this;\n    },\n\n    /**\n     * Returns results ordered according to a sort specification.\n     * @param {Object} modifier an object of key and values specifying the sort order. 1 for ascending and -1 for descending\n     * @return {Mingo.Cursor} Returns the cursor, so you can chain this call.\n     */\n    sort: function (modifier) {\n      _.extend(this._operators, {\"$sort\": modifier});\n      return this;\n    },\n\n    /**\n     * Returns the next document in a cursor.\n     * @returns {Object | Boolean}\n     */\n    next: function () {\n      if (this.hasNext()) {\n        return this._fetch()[this._position++];\n      }\n      return null;\n    },\n\n    /**\n     * Returns true if the cursor has documents and can be iterated.\n     * @returns {boolean}\n     */\n    hasNext: function () {\n      return this.count() > this._position;\n    },\n\n    /**\n     * Specifies the exclusive upper bound for a specific field\n     * @param expr\n     * @returns {Number}\n     */\n    max: function (expr) {\n      return groupOperators.$max(this._fetch(), expr);\n    },\n\n    /**\n     * Specifies the inclusive lower bound for a specific field\n     * @param expr\n     * @returns {Number}\n     */\n    min: function (expr) {\n      return groupOperators.$min(this._fetch(), expr);\n    },\n\n    /**\n     * Applies a function to each document in a cursor and collects the return values in an array.\n     * @param callback\n     * @returns {Array}\n     */\n    map: function (callback) {\n      return _.map(this._fetch(), callback);\n    },\n\n    /**\n     * Applies a JavaScript function for every document in a cursor.\n     * @param callback\n     */\n    forEach: function (callback) {\n      _.each(this._fetch(), callback);\n    }\n\n  };\n\n  /**\n   * Aggregator for defining filter using mongoDB aggregation pipeline syntax\n   * @param operators an Array of pipeline operators\n   * @constructor\n   */\n  Mingo.Aggregator = function (operators) {\n    if (!(this instanceof Mingo.Aggregator))\n      return new Mingo.Aggregator(operators);\n\n    this._operators = operators;\n  };\n\n  Mingo.Aggregator.prototype = {\n\n    /**\n     * Apply the pipeline operations over the collection by order of the sequence added\n     * @param collection an array of objects to process\n     * @param query the `Mingo.Query` object to use as context\n     * @returns {Array}\n     */\n    run: function (collection, query) {\n      if (!_.isEmpty(this._operators)) {\n        // run aggregation pipeline\n        for (var i = 0; i < this._operators.length; i++) {\n          var operator = this._operators[i];\n          var key = _.keys(operator);\n          if (key.length == 1 && _.contains(ops(OP_PIPELINE), key[0])) {\n            key = key[0];\n            if (query instanceof Mingo.Query) {\n              collection = pipelineOperators[key].call(query, collection, operator[key]);\n            } else {\n              collection = pipelineOperators[key](collection, operator[key]);\n            }\n          } else {\n            throw new Error(\"Invalid aggregation operator '\" + key + \"'\");\n          }\n        }\n      }\n      return collection;\n    }\n  };\n\n  /**\n   * Retrieve the value of a given key on an object\n   * @param obj\n   * @param field\n   * @returns {*}\n   * @private\n   */\n  function getValue(obj, field) {\n    return _.result(obj, field);\n  }\n\n  /**\n   * Resolve the value of the field (dot separated) on the given object\n   * @param obj\n   * @param field\n   * @returns {*}\n   */\n  function resolve(obj, field) {\n    if (!field) {\n      return undefined;\n    }\n    var names = field.split(\".\");\n    var value = obj;\n    var isText;\n\n    for (var i = 0; i < names.length; i++) {\n      isText = names[i].match(/^\\d+$/) === null;\n\n      if (isText && _.isArray(value)) {\n        var res = [];\n        _.each(value, function (item) {\n          res.push(resolve(item, names[i]));\n        });\n        value = res;\n      } else {\n        value = getValue(value, names[i]);\n      }\n\n      if (value === undefined) {\n        break;\n      }\n    }\n\n    return value;\n  }\n\n  /**\n   * Performs a query on a collection and returns a cursor object.\n   * @param collection\n   * @param criteria\n   * @param projection\n   * @returns {Mingo.Cursor}\n   */\n  Mingo.find = function (collection, criteria, projection) {\n    return (new Mingo.Query(criteria)).find(collection, projection);\n  };\n\n  /**\n   * Returns a new array without objects which match the criteria\n   * @param collection\n   * @param criteria\n   * @returns {Array}\n   */\n  Mingo.remove = function (collection, criteria) {\n    return (new Mingo.Query(criteria)).remove(collection);\n  };\n\n  /**\n   * Return the result collection after running the aggregation pipeline for the given collection\n   * @param collection\n   * @param pipeline\n   * @returns {Array}\n   */\n  Mingo.aggregate = function (collection, pipeline) {\n    if (!_.isArray(pipeline)) {\n      throw new Error(\"Aggregation pipeline must be an array\");\n    }\n    return (new Mingo.Aggregator(pipeline)).run(collection);\n  };\n\n  /**\n   * Add new operators\n   * @param type the operator type to extend\n   * @param f a function returning an object of new operators\n   */\n  Mingo.addOperators = function (type, f) {\n    var newOperators = f({\n      resolve: resolve,\n      computeValue: computeValue,\n      ops: ops,\n      key: function () {\n        return settings.key;\n      }\n    });\n\n    // ensure correct type specified\n    if (!_.contains([OP_AGGREGATE, OP_GROUP, OP_PIPELINE, OP_PROJECTION, OP_QUERY], type)) {\n      throw new Error(\"Could not identify type '\" + type + \"'\");\n    }\n\n    var operators = ops(type);\n\n    // check for existing operators\n    _.each(_.keys(newOperators), function (op) {\n      if (!/^\\$\\w+$/.test(op)) {\n        throw new Error(\"Invalid operator name '\" + op + \"'\");\n      }\n      if (_.contains(operators, op)) {\n        throw new Error(\"Operator \" + op + \" is already defined for \" + type + \" operators\");\n      }\n    });\n\n    var wrapped = {};\n\n    switch (type) {\n      case OP_QUERY:\n        _.each(_.keys(newOperators), function (op) {\n          wrapped[op] = (function (f, ctx) {\n            return function (selector, value) {\n              return {\n                test: function (obj) {\n                  // value of field must be fully resolved.\n                  var lhs = resolve(obj, selector);\n                  var result = f.call(ctx, selector, lhs, value);\n                  if (_.isBoolean(result)) {\n                    return result;\n                  } else if (result instanceof Mingo.Query) {\n                    return result.test(obj);\n                  } else {\n                    throw new Error(\"Invalid return type for '\" + op + \"'. Must return a Boolean or Mingo.Query\");\n                  }\n                }\n              };\n            }\n          }(newOperators[op], newOperators));\n        });\n        break;\n      case OP_PROJECTION:\n        _.each(_.keys(newOperators), function (op) {\n          wrapped[op] = (function (f, ctx) {\n            return function (obj, expr, selector) {\n              var lhs = resolve(obj, selector);\n              return f.call(ctx, selector, lhs, expr);\n            }\n          }(newOperators[op], newOperators));\n        });\n        break;\n      default:\n        _.each(_.keys(newOperators), function (op) {\n          wrapped[op] = (function (f, ctx) {\n            return function () {\n              var args = Array.prototype.slice.call(arguments);\n              return f.apply(ctx, args);\n            }\n          }(newOperators[op], newOperators));\n        });\n    }\n\n    // toss the operator salad :)\n    _.extend(OPERATORS[type], wrapped);\n\n  };\n\n  /**\n   * Mixin for Backbone.Collection objects\n   */\n  Mingo.CollectionMixin = {\n    /**\n     * Runs a query and returns a cursor to the result\n     * @param criteria\n     * @param projection\n     * @returns {Mingo.Cursor}\n     */\n    query: function (criteria, projection) {\n      return Mingo.find(this.toJSON(), criteria, projection);\n    },\n\n    /**\n     * Runs the given aggregation operators on this collection\n     * @params pipeline\n     * @returns {Array}\n     */\n    aggregate: function (pipeline) {\n      var args = [this.toJSON(), pipeline];\n      return Mingo.aggregate.apply(null, args);\n    }\n  };\n\n  var pipelineOperators = {\n\n    /**\n     * Groups documents together for the purpose of calculating aggregate values based on a collection of documents.\n     *\n     * @param collection\n     * @param expr\n     * @returns {Array}\n     */\n    $group: function (collection, expr) {\n      // lookup key for grouping\n      var idKey = expr[settings.key];\n\n      var partitions = groupBy(collection, function (obj) {\n        return computeValue(obj, idKey, idKey);\n      });\n\n      var result = [];\n\n      // remove the group key\n      expr = _.omit(expr, settings.key);\n\n      _.each(partitions.keys, function (value, i) {\n        var obj = {};\n\n        // exclude undefined key value\n        if (!_.isUndefined(value)) {\n          obj[settings.key] = value;\n        }\n\n        // compute remaining keys in expression\n        for (var key in expr) {\n          if (expr.hasOwnProperty(key)) {\n            obj[key] = accumulate(partitions.groups[i], key, expr[key]);\n          }\n        }\n        result.push(obj);\n      });\n\n      return result;\n    },\n\n    /**\n     * Filters the document stream, and only allows matching documents to pass into the next pipeline stage.\n     * $match uses standard MongoDB queries.\n     *\n     * @param collection\n     * @param expr\n     * @returns {Array|*}\n     */\n    $match: function (collection, expr) {\n      return (new Mingo.Query(expr)).find(collection).all();\n    },\n\n    /**\n     * Reshapes a document stream.\n     * $project can rename, add, or remove fields as well as create computed values and sub-documents.\n     *\n     * @param collection\n     * @param expr\n     * @returns {Array}\n     */\n    $project: function (collection, expr) {\n\n      if (_.isEmpty(expr)) {\n        return collection;\n      }\n      var usesExclusion = false;\n      _.each(expr, function(val, key) {\n        if(val === 0 && key !== settings.key) {\n           usesExclusion = true;\n        }\n        if(val !== 0 && usesExclusion) {\n            throw new Error(\"You cannot mix including and excluding fields.\"); \n        }\n      });\n\n      // result collection\n      var projected = [];\n      var objKeys = _.keys(expr);\n      var idOnlyExcludedExpression = false;\n\n      if (_.contains(objKeys, settings.key)) {\n        var id = expr[settings.key];\n        if (id === 0 || id === false) {\n          objKeys = _.without(objKeys, settings.key);\n          if (_.isEmpty(objKeys)) {\n            idOnlyExcludedExpression = true;\n          }\n        }\n      } else {\n        // if not specified the add the ID field\n        objKeys.push(settings.key);\n      }\n\n      for (var i = 0; i < collection.length; i++) {\n\n        var obj = collection[i];\n        var cloneObj = {};\n        var foundSlice = false;\n        var foundExclusion = false;\n        var dropKeys = [];\n        if (idOnlyExcludedExpression) {\n          dropKeys.push(settings.key);\n        }\n\n        _.each(objKeys, function (key) {\n\n          var subExpr = expr[key];\n          var newValue;\n          if (key !== settings.key && subExpr === 0) {\n            foundExclusion = true;\n          }\n\n          // tiny optimization here to skip over id\n          if (key === settings.key && _.isEmpty(subExpr)) {\n            newValue = obj[key];\n          } else if (_.isString(subExpr)) {\n            newValue = computeValue(obj, subExpr, key);\n          } else if (subExpr === 1 || subExpr === true) {\n            newValue = _.result(obj, key);\n          } else if (_.isObject(subExpr)) {\n            var operator = _.keys(subExpr);\n            operator = operator.length > 1 ? false : operator[0];\n            if (operator !== false && _.contains(ops(OP_PROJECTION), operator)) {\n              // apply the projection operator on the operator expression for the key\n              var temp = projectionOperators[operator](obj, subExpr[operator], key);\n              if (!_.isUndefined(temp)) {\n                newValue = temp;\n              }\n              if (operator == '$slice') {\n                foundSlice = true;\n              }\n            } else {\n              // compute the value for the sub expression for the key\n              newValue = computeValue(obj, subExpr, key);\n            }\n          } else {\n            dropKeys.push(key);\n          }\n\n          if (!_.isUndefined(newValue)) {\n            cloneObj[key] = newValue;\n          }\n        });\n        // if projection included $slice operator\n        // Also if exclusion fields are found or we want to exclude only the id field\n        // include keys that were not explicitly excluded\n        if (foundSlice || foundExclusion || idOnlyExcludedExpression) {\n          cloneObj = _.defaults(cloneObj, _.omit(obj, dropKeys));\n        }\n        projected.push(cloneObj);\n      }\n\n      return projected;\n    },\n\n    /**\n     * Restricts the number of documents in an aggregation pipeline.\n     *\n     * @param collection\n     * @param value\n     * @returns {Object|*}\n     */\n    $limit: function (collection, value) {\n      return _.first(collection, value);\n    },\n\n    /**\n     * Skips over a specified number of documents from the pipeline and returns the rest.\n     *\n     * @param collection\n     * @param value\n     * @returns {*}\n     */\n    $skip: function (collection, value) {\n      return _.rest(collection, value);\n    },\n\n    /**\n     * Takes an array of documents and returns them as a stream of documents.\n     *\n     * @param collection\n     * @param expr\n     * @returns {Array}\n     */\n    $unwind: function (collection, expr) {\n      var result = [];\n      var field = expr.substr(1);\n      for (var i = 0; i < collection.length; i++) {\n        var obj = collection[i];\n        // must throw an error if value is not an array\n        var value = getValue(obj, field);\n        if (_.isArray(value)) {\n          _.each(value, function (item) {\n            var tmp = _.clone(obj);\n            tmp[field] = item;\n            result.push(tmp);\n          });\n        } else {\n          throw new Error(\"Target field '\" + field + \"' is not of type Array.\");\n        }\n      }\n      return result;\n    },\n\n    /**\n     * Takes all input documents and returns them in a stream of sorted documents.\n     *\n     * @param collection\n     * @param sortKeys\n     * @returns {*}\n     */\n    $sort: function (collection, sortKeys) {\n      if (!_.isEmpty(sortKeys) && _.isObject(sortKeys)) {\n        var modifiers = _.keys(sortKeys);\n        modifiers.reverse().forEach(function (key) {\n          var indexes = [];\n          var grouped = _.groupBy(collection, function (obj) {\n            var value = resolve(obj, key);\n            indexes.push(value);\n            return value;\n          });\n          indexes = _.sortBy(_.uniq(indexes), function (item) {\n            return item;\n          });\n          if (sortKeys[key] === -1) {\n            indexes.reverse();\n          }\n          collection = [];\n          _.each(indexes, function (item) {\n            Array.prototype.push.apply(collection, grouped[item]);\n          });\n        });\n      }\n      return collection;\n    }\n  };\n\n  ////////// QUERY OPERATORS //////////\n  var queryOperators = {};\n\n  var compoundOperators = {\n\n    /**\n     * Joins query clauses with a logical AND returns all documents that match the conditions of both clauses.\n     *\n     * @param selector\n     * @param value\n     * @returns {{test: Function}}\n     */\n    $and: function (selector, value) {\n      if (!_.isArray(value)) {\n        throw new Error(\"Invalid expression for $and criteria\");\n      }\n      var queries = [];\n      _.each(value, function (expr) {\n        queries.push(new Mingo.Query(expr));\n      });\n\n      return {\n        test: function (obj) {\n          for (var i = 0; i < queries.length; i++) {\n            if (!queries[i].test(obj)) {\n              return false;\n            }\n          }\n          return true;\n        }\n      };\n    },\n\n    /**\n     * Joins query clauses with a logical OR returns all documents that match the conditions of either clause.\n     *\n     * @param selector\n     * @param value\n     * @returns {{test: Function}}\n     */\n    $or: function (selector, value) {\n      if (!_.isArray(value)) {\n        throw new Error(\"Invalid expression for $or criteria\");\n      }\n      var queries = [];\n      _.each(value, function (expr) {\n        queries.push(new Mingo.Query(expr));\n      });\n\n      return {\n        test: function (obj) {\n          for (var i = 0; i < queries.length; i++) {\n            if (queries[i].test(obj)) {\n              return true;\n            }\n          }\n          return false;\n        }\n      };\n    },\n\n    /**\n     * Joins query clauses with a logical NOR returns all documents that fail to match both clauses.\n     *\n     * @param selector\n     * @param value\n     * @returns {{test: Function}}\n     */\n    $nor: function (selector, value) {\n      if (!_.isArray(value)) {\n        throw new Error(\"Invalid expression for $nor criteria\");\n      }\n      var query = this.$or(\"$or\", value);\n      return {\n        test: function (obj) {\n          return !query.test(obj);\n        }\n      };\n    },\n\n    /**\n     * Inverts the effect of a query expression and returns documents that do not match the query expression.\n     *\n     * @param selector\n     * @param value\n     * @returns {{test: Function}}\n     */\n    $not: function (selector, value) {\n      var criteria = {};\n      criteria[selector] = normalize(value);\n      var query = new Mingo.Query(criteria);\n      return {\n        test: function (obj) {\n          return !query.test(obj);\n        }\n      };\n    },\n\n    /**\n     * Matches documents that satisfy a JavaScript expression.\n     *\n     * @param selector\n     * @param value\n     * @returns {{test: test}}\n     */\n    $where: function (selector, value) {\n      if (!_.isFunction(value)) {\n        value = new Function(\"return \" + value + \";\");\n      }\n      return {\n        test: function (obj) {\n          return value.call(obj) === true;\n        }\n      };\n    }\n\n  };\n\n  // add compound query operators\n  _.extend(queryOperators, compoundOperators);\n\n  var simpleOperators = {\n\n    /**\n     * Checks that two values are equal. Pseudo operator introduced for convenience and consistency\n     *\n     * @param a\n     * @param b\n     * @returns {*}\n     */\n    $eq: function (a, b) {\n      // flatten to reach nested values. fix for https://github.com/kofrasa/mingo/issues/19\n      a = _.flatten(_.isArray(a) ? a : [a]);\n      a = _.find(a, function (val) {\n        return _.isEqual(val, b);\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Matches all values that are not equal to the value specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean}\n     */\n    $ne: function (a, b) {\n      return !this.$eq(a, b);\n    },\n\n    /**\n     * Matches any of the values that exist in an array specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns {*}\n     */\n    $in: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      return _.intersection(a, b).length > 0;\n    },\n\n    /**\n     * Matches values that do not exist in an array specified to the query.\n     *\n     * @param a\n     * @param b\n     * @returns {*|boolean}\n     */\n    $nin: function (a, b) {\n      return _.isUndefined(a) || !this.$in(a, b);\n    },\n\n    /**\n     * Matches values that are less than the value specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean}\n     */\n    $lt: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      a = _.find(a, function (val) {\n        return val < b\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Matches values that are less than or equal to the value specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean}\n     */\n    $lte: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      a = _.find(a, function (val) {\n        return val <= b\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Matches values that are greater than the value specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean}\n     */\n    $gt: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      a = _.find(a, function (val) {\n        return val > b\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Matches values that are greater than or equal to the value specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean}\n     */\n    $gte: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      a = _.find(a, function (val) {\n        return val >= b\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Performs a modulo operation on the value of a field and selects documents with a specified result.\n     *\n     * @param a\n     * @param b\n     * @returns {*|boolean|boolean}\n     */\n    $mod: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      a = _.find(a, function (val) {\n        return _.isNumber(val) && _.isArray(b) && b.length === 2 && (val % b[0]) === b[1];\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Selects documents where values match a specified regular expression.\n     *\n     * @param a\n     * @param b\n     * @returns {*|boolean}\n     */\n    $regex: function (a, b) {\n      a = _.isArray(a) ? a : [a];\n      a = _.find(a, function (val) {\n        return _.isString(val) && _.isRegExp(b) && (!!val.match(b));\n      });\n      return a !== undefined;\n    },\n\n    /**\n     * Matches documents that have the specified field.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean|*|boolean}\n     */\n    $exists: function (a, b) {\n      return (b === false && _.isUndefined(a)) || (b === true && !_.isUndefined(a));\n    },\n\n    /**\n     * Matches arrays that contain all elements specified in the query.\n     *\n     * @param a\n     * @param b\n     * @returns boolean\n     */\n    $all: function (a, b) {\n      var self = this;\n      var matched = false;\n      if (_.isArray(a) && _.isArray(b)) {\n        for (var i = 0; i < b.length; i++) {\n          if (_.isObject(b[i]) && _.contains(_.keys(b[i]), \"$elemMatch\")) {\n            matched = matched || self.$elemMatch(a, b[i].$elemMatch);\n          } else {\n            // order of arguments matter. underscore maintains order after intersection\n            return _.intersection(b, a).length === b.length;\n          }\n        }\n      }\n      return matched;\n    },\n\n    /**\n     * Selects documents if the array field is a specified size.\n     *\n     * @param a\n     * @param b\n     * @returns {*|boolean}\n     */\n    $size: function (a, b) {\n      return _.isArray(a) && _.isNumber(b) && (a.length === b);\n    },\n\n    /**\n     * Selects documents if element in the array field matches all the specified $elemMatch condition.\n     *\n     * @param a\n     * @param b\n     */\n    $elemMatch: function (a, b) {\n      if (_.isArray(a) && !_.isEmpty(a)) {\n        var query = new Mingo.Query(b);\n        for (var i = 0; i < a.length; i++) {\n          if (query.test(a[i])) {\n            return true;\n          }\n        }\n      }\n      return false;\n    },\n\n    /**\n     * Selects documents if a field is of the specified type.\n     *\n     * @param a\n     * @param b\n     * @returns {boolean}\n     */\n    $type: function (a, b) {\n      switch (b) {\n        case 1:\n          return _.isNumeric(a) && (a + \"\").indexOf(\".\") !== -1;\n        case 2:\n        case 5:\n          return _.isString(a);\n        case 3:\n          return _.isObject(a);\n        case 4:\n          return _.isArray(a);\n        case 8:\n          return _.isBoolean(a);\n        case 9:\n          return _.isDate(a);\n        case 10:\n          return _.isNull(a);\n        case 11:\n          return _.isRegExp(a);\n        case 16:\n          return _.isNumeric(a) && a <= 2147483647 && (a + \"\").indexOf(\".\") === -1;\n        case 18:\n          return _.isNumeric(a) && a > 2147483647 && a <= 9223372036854775807 && (a + \"\").indexOf(\".\") === -1;\n        default:\n          return false;\n      }\n    }\n  };\n  // add simple query operators\n  _.each(_.keys(simpleOperators), function (op) {\n    queryOperators[op] = (function (f, ctx) {\n      return function (selector, value) {\n        return {\n          test: function (obj) {\n            // value of field must be fully resolved.\n            var lhs = resolve(obj, selector);\n            return f.call(ctx, lhs, value);\n          }\n        };\n      }\n    }(simpleOperators[op], simpleOperators));\n  });\n\n  var projectionOperators = {\n\n    /**\n     * Projects the first element in an array that matches the query condition.\n     *\n     * @param obj\n     * @param field\n     * @param expr\n     */\n    $: function (obj, expr, field) {\n      throw new Error(\"$ not implemented\");\n    },\n\n    /**\n     * Projects only the first element from an array that matches the specified $elemMatch condition.\n     *\n     * @param obj\n     * @param field\n     * @param expr\n     * @returns {*}\n     */\n    $elemMatch: function (obj, expr, field) {\n      var array = resolve(obj, field);\n      var query = new Mingo.Query(expr);\n\n      if (_.isUndefined(array) || !_.isArray(array)) {\n        return undefined;\n      }\n\n      for (var i = 0; i < array.length; i++) {\n        if (query.test(array[i])) {\n          return [array[i]];\n        }\n      }\n\n      return undefined;\n    },\n\n    /**\n     * Limits the number of elements projected from an array. Supports skip and limit slices.\n     *\n     * @param obj\n     * @param field\n     * @param expr\n     */\n    $slice: function (obj, expr, field) {\n      var array = resolve(obj, field);\n\n      if (!_.isArray(array)) {\n        return array;\n      }\n      if (!_.isArray(expr)) {\n        if (!_.isNumber(expr)) {\n          throw new Error(\"Invalid type for $slice operator\");\n        }\n        expr = expr < 0 ? [expr] : [0, expr];\n      } else {\n        // MongoDB $slice works a bit differently from Array.slice\n        // Uses single argument for 'limit' and array argument [skip, limit]\n        var skip = (expr[0] < 0) ? array.length + expr[0] : expr;\n        var limit = skip + expr[1];\n        expr = [skip, limit];\n      }\n\n      return Array.prototype.slice.apply(array, expr);\n    }\n  };\n\n  var groupOperators = {\n\n    /**\n     * Returns an array of all the unique values for the selected field among for each document in that group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {*}\n     */\n    $addToSet: function (collection, expr) {\n      var result = _.map(collection, function (obj) {\n        return computeValue(obj, expr, null);\n      });\n      return _.uniq(result);\n    },\n\n    /**\n     * Returns the sum of all the values in a group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {*}\n     */\n    $sum: function (collection, expr) {\n      if (!_.isArray(collection)) {\n        return 0;\n      }\n      if (_.isNumber(expr)) {\n        // take a short cut if expr is number literal\n        return collection.length * expr;\n      }\n      return _.reduce(collection, function (acc, obj) {\n        // pass empty field to avoid naming conflicts with fields on documents\n        return acc + computeValue(obj, expr, null);\n      }, 0);\n    },\n\n    /**\n     * Returns the highest value in a group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {*}\n     */\n    $max: function (collection, expr) {\n      var obj = _.max(collection, function (obj) {\n        return computeValue(obj, expr, null);\n      });\n      return computeValue(obj, expr, null);\n    },\n\n    /**\n     * Returns the lowest value in a group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {*}\n     */\n    $min: function (collection, expr) {\n      var obj = _.min(collection, function (obj) {\n        return computeValue(obj, expr, null);\n      });\n      return computeValue(obj, expr, null);\n    },\n\n    /**\n     * Returns an average of all the values in a group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {number}\n     */\n    $avg: function (collection, expr) {\n      return this.$sum(collection, expr) / (collection.length || 1);\n    },\n\n    /**\n     * Returns an array of all values for the selected field among for each document in that group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {Array|*}\n     */\n    $push: function (collection, expr) {\n      return _.map(collection, function (obj) {\n        return computeValue(obj, expr, null);\n      });\n    },\n\n    /**\n     * Returns the first value in a group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {*}\n     */\n    $first: function (collection, expr) {\n      return (collection.length > 0) ? computeValue(collection[0], expr) : undefined;\n    },\n\n    /**\n     * Returns the last value in a group.\n     *\n     * @param collection\n     * @param expr\n     * @returns {*}\n     */\n    $last: function (collection, expr) {\n      return (collection.length > 0) ? computeValue(collection[collection.length - 1], expr) : undefined;\n    }\n  };\n\n\n  /////////// Aggregation Operators ///////////\n\n  var arithmeticOperators = {\n\n    /**\n     * Computes the sum of an array of numbers.\n     *\n     * @param obj\n     * @param expr\n     * @returns {Object}\n     */\n    $add: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return _.reduce(args, function (memo, num) {\n        return memo + num;\n      }, 0);\n    },\n\n    /**\n     * Takes an array that contains two numbers or two dates and subtracts the second value from the first.\n     *\n     * @param obj\n     * @param expr\n     * @returns {number}\n     */\n    $subtract: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return args[0] - args[1];\n    },\n\n    /**\n     * Takes two numbers and divides the first number by the second.\n     *\n     * @param obj\n     * @param expr\n     * @returns {number}\n     */\n    $divide: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return args[0] / args[1];\n    },\n\n    /**\n     * Computes the product of an array of numbers.\n     *\n     * @param obj\n     * @param expr\n     * @returns {Object}\n     */\n    $multiply: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return _.reduce(args, function (memo, num) {\n        return memo * num;\n      }, 1);\n    },\n\n    /**\n     * Takes two numbers and calculates the modulo of the first number divided by the second.\n     *\n     * @param obj\n     * @param expr\n     * @returns {number}\n     */\n    $mod: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return args[0] % args[1];\n    }\n  };\n\n  var stringOperators = {\n\n    /**\n     * Concatenates two strings.\n     *\n     * @param obj\n     * @param expr\n     * @returns {string|*}\n     */\n    $concat: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      // does not allow concatenation with nulls\n      if (_.contains(args, null) || _.contains(args, undefined)) {\n        return null;\n      }\n      return args.join(\"\");\n    },\n\n    /**\n     * Compares two strings and returns an integer that reflects the comparison.\n     *\n     * @param obj\n     * @param expr\n     * @returns {number}\n     */\n    $strcasecmp: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      args[0] = _.isEmpty(args[0]) ? \"\" : args[0].toUpperCase();\n      args[1] = _.isEmpty(args[1]) ? \"\" : args[1].toUpperCase();\n      if (args[0] > args[1]) {\n        return 1;\n      }\n      return (args[0] < args[1]) ? -1 : 0;\n    },\n\n    /**\n     * Returns a substring of a string, starting at a specified index position and including the specified number of characters.\n     * The index is zero-based.\n     *\n     * @param obj\n     * @param expr\n     * @returns {string}\n     */\n    $substr: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      if (_.isString(args[0])) {\n        if (args[1] < 0) {\n          return \"\";\n        } else if (args[2] < 0) {\n          return args[0].substr(args[1]);\n        } else {\n          return args[0].substr(args[1], args[2]);\n        }\n      }\n      return \"\";\n    },\n\n    /**\n     * Converts a string to lowercase.\n     *\n     * @param obj\n     * @param expr\n     * @returns {string}\n     */\n    $toLower: function (obj, expr) {\n      var value = computeValue(obj, expr, null);\n      return _.isEmpty(value) ? \"\" : value.toLowerCase();\n    },\n\n    /**\n     * Converts a string to uppercase.\n     *\n     * @param obj\n     * @param expr\n     * @returns {string}\n     */\n    $toUpper: function (obj, expr) {\n      var value = computeValue(obj, expr, null);\n      return _.isEmpty(value) ? \"\" : value.toUpperCase();\n    }\n  };\n\n  var dateOperators = {\n    /**\n     * Returns the day of the year for a date as a number between 1 and 366 (leap year).\n     * @param obj\n     * @param expr\n     */\n    $dayOfYear: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      if (_.isDate(d)) {\n        var start = new Date(d.getFullYear(), 0, 0);\n        var diff = d - start;\n        var oneDay = 1000 * 60 * 60 * 24;\n        return Math.round(diff / oneDay);\n      }\n      return undefined;\n    },\n\n    /**\n     * Returns the day of the month for a date as a number between 1 and 31.\n     * @param obj\n     * @param expr\n     */\n    $dayOfMonth: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getDate() : undefined;\n    },\n\n    /**\n     * Returns the day of the week for a date as a number between 1 (Sunday) and 7 (Saturday).\n     * @param obj\n     * @param expr\n     */\n    $dayOfWeek: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getDay() + 1 : undefined;\n    },\n\n    /**\n     * Returns the year for a date as a number (e.g. 2014).\n     * @param obj\n     * @param expr\n     */\n    $year: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getFullYear() : undefined;\n    },\n\n    /**\n     * Returns the month for a date as a number between 1 (January) and 12 (December).\n     * @param obj\n     * @param expr\n     */\n    $month: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getMonth() + 1 : undefined;\n    },\n\n    /**\n     * Returns the week number for a date as a number between 0\n     * (the partial week that precedes the first Sunday of the year) and 53 (leap year).\n     * @param obj\n     * @param expr\n     */\n    $week: function (obj, expr) {\n      // source: http://stackoverflow.com/a/6117889/1370481\n      var d = computeValue(obj, expr, null);\n\n      // Copy date so don't modify original\n      d = new Date(+d);\n      d.setHours(0, 0, 0);\n      // Set to nearest Thursday: current date + 4 - current day number\n      // Make Sunday's day number 7\n      d.setDate(d.getDate() + 4 - (d.getDay() || 7));\n      // Get first day of year\n      var yearStart = new Date(d.getFullYear(), 0, 1);\n      // Calculate full weeks to nearest Thursday\n      return Math.floor(( ( (d - yearStart) / 8.64e7) + 1) / 7);\n    },\n\n    /**\n     * Returns the hour for a date as a number between 0 and 23.\n     * @param obj\n     * @param expr\n     */\n    $hour: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getHours() : undefined;\n    },\n\n    /**\n     * Returns the minute for a date as a number between 0 and 59.\n     * @param obj\n     * @param expr\n     */\n    $minute: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getMinutes() : undefined;\n    },\n\n    /**\n     * Returns the seconds for a date as a number between 0 and 60 (leap seconds).\n     * @param obj\n     * @param expr\n     */\n    $second: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getSeconds() : undefined;\n    },\n\n    /**\n     * Returns the milliseconds of a date as a number between 0 and 999.\n     * @param obj\n     * @param expr\n     */\n    $millisecond: function (obj, expr) {\n      var d = computeValue(obj, expr, null);\n      return _.isDate(d) ? d.getMilliseconds() : undefined;\n    },\n\n    /**\n     * Returns the date as a formatted string.\n     *\n     * %Y  Year (4 digits, zero padded)  0000-9999\n     * %m  Month (2 digits, zero padded)  01-12\n     * %d  Day of Month (2 digits, zero padded)  01-31\n     * %H  Hour (2 digits, zero padded, 24-hour clock)  00-23\n     * %M  Minute (2 digits, zero padded)  00-59\n     * %S  Second (2 digits, zero padded)  00-60\n     * %L  Millisecond (3 digits, zero padded)  000-999\n     * %j  Day of year (3 digits, zero padded)  001-366\n     * %w  Day of week (1-Sunday, 7-Saturday)  1-7\n     * %U  Week of year (2 digits, zero padded)  00-53\n     * %%  Percent Character as a Literal  %\n     *\n     * @param obj current object\n     * @param expr operator expression\n     */\n    $dateToString: function (obj, expr) {\n\n      var fmt = expr['format'];\n      var date = computeValue(obj, expr['date'], null);\n      var matches = fmt.match(/(%%|%Y|%m|%d|%H|%M|%S|%L|%j|%w|%U)/g);\n\n      for (var i = 0, len = matches.length; i < len; i++) {\n        var hdlr = DATE_SYM_TABLE[matches[i]];\n        var value = hdlr;\n\n        if (_.isArray(hdlr)) {\n          // reuse date operators\n          var fn = this[hdlr[0]];\n          var pad = hdlr[1];\n          value = padDigits(fn.call(this, obj, date), pad);\n        }\n        // replace the match with resolved value\n        fmt = fmt.replace(matches[i], value);\n      }\n\n      return fmt;\n    }\n  };\n\n  var setOperators = {\n    /**\n     * Returns true if two sets have the same elements.\n     * @param obj\n     * @param expr\n     */\n    $setEquals: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      var first = _.uniq(args[0]);\n      var second = _.uniq(args[1]);\n      if (first.length !== second.length) {\n        return false;\n      }\n      return _.difference(first, second).length == 0;\n    },\n\n    /**\n     * Returns the common elements of the input sets.\n     * @param obj\n     * @param expr\n     */\n    $setIntersection: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return _.intersection(args[0], args[1]);\n    },\n\n    /**\n     * Returns elements of a set that do not appear in a second set.\n     * @param obj\n     * @param expr\n     */\n    $setDifference: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return _.difference(args[0], args[1]);\n    },\n\n    /**\n     * Returns a set that holds all elements of the input sets.\n     * @param obj\n     * @param expr\n     */\n    $setUnion: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return _.union(args[0], args[1]);\n    },\n\n    /**\n     * Returns true if all elements of a set appear in a second set.\n     * @param obj\n     * @param expr\n     */\n    $setIsSubset: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return _.intersection(args[0], args[1]).length === args[0].length;\n    },\n\n    /**\n     * Returns true if any elements of a set evaluate to true, and false otherwise.\n     * @param obj\n     * @param expr\n     */\n    $anyElementTrue: function (obj, expr) {\n      // mongodb nests the array expression in another\n      var args = computeValue(obj, expr, null)[0];\n      for (var i = 0; i < args.length; i++) {\n        if (!!args[i])\n          return true;\n      }\n      return false;\n    },\n\n    /**\n     * Returns true if all elements of a set evaluate to true, and false otherwise.\n     * @param obj\n     * @param expr\n     */\n    $allElementsTrue: function (obj, expr) {\n      // mongodb nests the array expression in another\n      var args = computeValue(obj, expr, null)[0];\n      for (var i = 0; i < args.length; i++) {\n        if (!args[i])\n          return false;\n      }\n      return true;\n    }\n  };\n\n  var conditionalOperators = {\n\n    /**\n     * A ternary operator that evaluates one expression,\n     * and depending on the result returns the value of one following expressions.\n     *\n     * @param obj\n     * @param expr\n     */\n    $cond: function (obj, expr) {\n      var ifExpr, thenExpr, elseExpr;\n      if (_.isArray(expr)) {\n        if (expr.length != 3) {\n          throw new Error(\"Invalid arguments for $cond operator\");\n        }\n        ifExpr = expr[0];\n        thenExpr = expr[1];\n        elseExpr = expr[2];\n      } else if (_.isObject(expr)) {\n        ifExpr = expr['if'];\n        thenExpr = expr['then'];\n        elseExpr = expr['else'];\n      }\n      var condition = computeValue(obj, ifExpr, null);\n      return condition ? computeValue(obj, thenExpr, null) : computeValue(obj, elseExpr, null);\n    },\n\n    /**\n     * Evaluates an expression and returns the first expression if it evaluates to a non-null value.\n     * Otherwise, $ifNull returns the second expression's value.\n     *\n     * @param obj\n     * @param expr\n     * @returns {*}\n     */\n    $ifNull: function (obj, expr) {\n      if (!_.isArray(expr) || expr.length != 2) {\n        throw new Error(\"Invalid arguments for $ifNull operator\");\n      }\n      var args = computeValue(obj, expr, null);\n      return (args[0] === null || args[0] === undefined) ? args[1] : args[0];\n    }\n  };\n\n  var comparisonOperators = {\n    /**\n     * Compares two values and returns the result of the comparison as an integer.\n     *\n     * @param obj\n     * @param expr\n     * @returns {number}\n     */\n    $cmp: function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      if (args[0] > args[1]) {\n        return 1;\n      }\n      return (args[0] < args[1]) ? -1 : 0;\n    }\n  };\n  // mixin comparison operators\n  _.each([\"$eq\", \"$ne\", \"$gt\", \"$gte\", \"$lt\", \"$lte\"], function (op) {\n    comparisonOperators[op] = function (obj, expr) {\n      var args = computeValue(obj, expr, null);\n      return simpleOperators[op](args[0], args[1]);\n    };\n  });\n\n  var arrayOperators = {\n    /**\n     * Counts and returns the total the number of items in an array.\n     * @param obj\n     * @param expr\n     */\n    $size: function (obj, expr) {\n      var value = computeValue(obj, expr, null);\n      return _.isArray(value) ? value.length : undefined;\n    }\n  };\n\n  var literalOperators = {\n    /**\n     * Return a value without parsing.\n     * @param obj\n     * @param expr\n     */\n    $literal: function (obj, expr) {\n      return expr;\n    }\n  };\n\n\n  var variableOperators = {\n    /**\n     * Applies a subexpression to each element of an array and returns the array of resulting values in order.\n     * @param obj\n     * @param expr\n     * @returns {Array|*}\n     */\n    $map: function (obj, expr) {\n      var inputExpr = computeValue(obj, expr[\"input\"], null);\n      if (!_.isArray(inputExpr)) {\n        throw new Error(\"Input expression for $map must resolve to an array\");\n      }\n      var asExpr = expr[\"as\"];\n      var inExpr = expr[\"in\"];\n\n      // HACK: add the \"as\" expression as a value on the object to take advantage of \"resolve()\"\n      // which will reduce to that value when invoked. The reference to the as expression will be prefixed with \"$$\".\n      // But since a \"$\" is stripped of before passing the name to \"resolve()\" we just need to prepend \"$\" to the key.\n      var tempKey = \"$\" + asExpr;\n      // let's save any value that existed, kinda useless but YOU CAN NEVER BE TOO SURE, CAN YOU :)\n      var original = obj[tempKey];\n      return _.map(inputExpr, function (item) {\n        obj[tempKey] = item;\n        var value = computeValue(obj, inExpr, null);\n        // cleanup and restore\n        if (_.isUndefined(original)) {\n          delete obj[tempKey];\n        } else {\n          obj[tempKey] = original;\n        }\n        return value;\n      });\n\n    },\n\n    /**\n     * Defines variables for use within the scope of a subexpression and returns the result of the subexpression.\n     * @param obj\n     * @param expr\n     * @returns {*}\n     */\n    $let: function (obj, expr) {\n      var varsExpr = expr[\"vars\"];\n      var inExpr = expr[\"in\"];\n\n      // resolve vars\n      var originals = {};\n      var varsKeys = _.keys(varsExpr);\n      _.each(varsKeys, function (key) {\n        var val = computeValue(obj, varsExpr[key], null);\n        var tempKey = \"$\" + key;\n        // set value on object using same technique as in \"$map\"\n        originals[tempKey] = obj[tempKey];\n        obj[tempKey] = val;\n      });\n\n      var value = computeValue(obj, inExpr, null);\n\n      // cleanup and restore\n      _.each(varsKeys, function (key) {\n        var tempKey = \"$\" + key;\n        if (_.isUndefined(originals[tempKey])) {\n          delete obj[tempKey];\n        } else {\n          obj[tempKey] = originals[tempKey];\n        }\n      });\n\n      return value;\n    }\n  };\n\n  var booleanOperators = {\n    /**\n     * Returns true only when all its expressions evaluate to true. Accepts any number of argument expressions.\n     * @param obj\n     * @param expr\n     * @returns {boolean}\n     */\n    $and: function (obj, expr) {\n      var value = computeValue(obj, expr, null);\n      return _.every(value);\n    },\n\n    /**\n     * Returns true when any of its expressions evaluates to true. Accepts any number of argument expressions.\n     * @param obj\n     * @param expr\n     * @returns {boolean}\n     */\n    $or: function (obj, expr) {\n      var value = computeValue(obj, expr, null);\n      return _.some(value);\n    },\n\n    /**\n     * Returns the boolean value that is the opposite of its argument expression. Accepts a single argument expression.\n     * @param obj\n     * @param expr\n     * @returns {boolean}\n     */\n    $not: function (obj, expr) {\n      return !computeValue(obj, expr[0], null);\n    }\n  };\n\n  // combine aggregate operators\n  var aggregateOperators = _.extend(\n    {},\n    arrayOperators,\n    arithmeticOperators,\n    booleanOperators,\n    comparisonOperators,\n    conditionalOperators,\n    dateOperators,\n    literalOperators,\n    setOperators,\n    stringOperators,\n    variableOperators\n  );\n\n  var OP_QUERY = Mingo.OP_QUERY = 'query',\n    OP_GROUP = Mingo.OP_GROUP = 'group',\n    OP_AGGREGATE = Mingo.OP_AGGREGATE = 'aggregate',\n    OP_PIPELINE = Mingo.OP_PIPELINE = 'pipeline',\n    OP_PROJECTION = Mingo.OP_PROJECTION = 'projection';\n\n  // operator definitions\n  var OPERATORS = {\n    'aggregate': aggregateOperators,\n    'group': groupOperators,\n    'pipeline': pipelineOperators,\n    'projection': projectionOperators,\n    'query': queryOperators\n  };\n\n  // used for formatting dates in $dateToString operator\n  var DATE_SYM_TABLE = {\n    '%Y': ['$year', 4],\n    '%m': ['$month', 2],\n    '%d': ['$dayOfMonth', 2],\n    '%H': ['$hour', 2],\n    '%M': ['$minute', 2],\n    '%S': ['$second', 2],\n    '%L': ['$millisecond', 3],\n    '%j': ['$dayOfYear', 3],\n    '%w': ['$dayOfWeek', 1],\n    '%U': ['$week', 2],\n    '%%': '%'\n  };\n\n  function padDigits(number, digits) {\n    return new Array(Math.max(digits - String(number).length + 1, 0)).join('0') + number;\n  }\n\n  /**\n   * Return the registered operators on the given operator category\n   * @param type catgory of operators\n   * @returns {*}\n   */\n  function ops(type) {\n    return _.keys(OPERATORS[type]);\n  }\n\n  /**\n   * Groups the collection into sets by the returned key\n   *\n   * @param collection\n   * @param fn\n   */\n  function groupBy(collection, fn) {\n\n    var result = {\n      'keys': [],\n      'groups': []\n    };\n\n    _.each(collection, function (obj) {\n\n      var key = fn(obj);\n      var index = -1;\n\n      if (_.isObject(key)) {\n        for (var i = 0; i < result.keys.length; i++) {\n          if (_.isEqual(key, result.keys[i])) {\n            index = i;\n            break;\n          }\n        }\n      } else {\n        index = _.indexOf(result.keys, key);\n      }\n\n      if (index > -1) {\n        result.groups[index].push(obj);\n      } else {\n        result.keys.push(key);\n        result.groups.push([obj]);\n      }\n    });\n\n    // assert this\n    if (result.keys.length !== result.groups.length) {\n      throw new Error(\"assert groupBy(): keys.length !== groups.length\");\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns the result of evaluating a $group operation over a collection\n   *\n   * @param collection\n   * @param field the name of the aggregate operator or field\n   * @param expr the expression of the aggregate operator for the field\n   * @returns {*}\n   */\n  function accumulate(collection, field, expr) {\n    if (_.contains(ops(OP_GROUP), field)) {\n      return groupOperators[field](collection, expr);\n    }\n\n    if (_.isObject(expr)) {\n      var result = {};\n      for (var key in expr) {\n        if (expr.hasOwnProperty(key)) {\n          result[key] = accumulate(collection, key, expr[key]);\n          // must run ONLY one group operator per expression\n          // if so, return result of the computed value\n          if (_.contains(ops(OP_GROUP), key)) {\n            result = result[key];\n            // if there are more keys in expression this is bad\n            if (_.keys(expr).length > 1) {\n              throw new Error(\"Invalid $group expression '\" + JSON.stringify(expr) + \"'\");\n            }\n            break;\n          }\n        }\n      }\n      return result;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Computes the actual value of the expression using the given object as context\n   *\n   * @param obj the current object from the collection\n   * @param expr the expression for the given field\n   * @param field the field name (may also be an aggregate operator)\n   * @returns {*}\n   */\n  function computeValue(obj, expr, field) {\n\n    // if the field of the object is a valid operator\n    if (_.contains(ops(OP_AGGREGATE), field)) {\n      return aggregateOperators[field](obj, expr);\n    }\n\n    // if expr is a variable for an object field\n    // field not used in this case\n    if (_.isString(expr) && expr.length > 0 && expr[0] === \"$\") {\n      return resolve(obj, expr.slice(1));\n    }\n\n    var result;\n\n    // check and return value if already in a resolved state\n    if (isPrimitive(expr)) {\n      return expr;\n    } else if (_.isArray(expr)) {\n      result = _.map(expr, function (item) {\n        return computeValue(obj, item, null);\n      });\n    } else if (_.isObject(expr)) {\n      result = {};\n      for (var key in expr) {\n        if (expr.hasOwnProperty(key)) {\n          result[key] = computeValue(obj, expr[key], key);\n\n          // must run ONLY one aggregate operator per expression\n          // if so, return result of the computed value\n          if (_.contains(ops(OP_AGGREGATE), key)) {\n            result = result[key];\n            // if there are more keys in expression this is bad\n            if (_.keys(expr).length > 1) {\n              throw new Error(\"Invalid aggregation expression '\" + JSON.stringify(expr) + \"'\");\n            }\n            break;\n          }\n        }\n      }\n    }\n\n    return result;\n  }\n\n}(this));\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mingo/mingo.js\n ** module id = 140\n ** module chunks = 0\n **/","var CryptoJS = require('./lib/core').CryptoJS;\nrequire('./lib/enc-base64');\nrequire('./lib/md5');\nrequire('./lib/evpkdf');\nrequire('./lib/cipher-core');\nrequire('./lib/aes');\nvar JsonFormatter = require('./lib/jsonformatter').JsonFormatter;\n\nexports.CryptoJS = CryptoJS;\nexports.JsonFormatter = JsonFormatter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/cryptojs.js\n ** module id = 141\n ** module chunks = 0\n **/","// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/lib/_stream_passthrough.js\n ** module id = 142\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream;\n(function () {\n  try {\n    Stream = require('st' + 'ream');\n  } catch (_) {} finally {\n    if (!Stream) Stream = require('events').EventEmitter;\n  }\n})();\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\n/*<replacement>*/\nvar bufferShim = require('buffer-shims');\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') {\n    return emitter.prependListener(event, fn);\n  } else {\n    // This is a hack to make sure that our error handler is attached before any\n    // userland ones.  NEVER DO THIS. This is here only because this code needs\n    // to continue to work with older versions of Node.js that do not include\n    // the prependListener() method. The goal is to eventually remove this hack.\n    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n  }\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = ~~this.highWaterMark;\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // when piping, we only care about 'readable' events that happen\n  // after read()ing all the bytes and not getting any pushback.\n  this.ranOut = false;\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options && typeof options.read === 'function') this._read = options.read;\n\n  Stream.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n\n  if (!state.objectMode && typeof chunk === 'string') {\n    encoding = encoding || state.defaultEncoding;\n    if (encoding !== state.encoding) {\n      chunk = bufferShim.from(chunk, encoding);\n      encoding = '';\n    }\n  }\n\n  return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  var state = this._readableState;\n  return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n  var er = chunkInvalid(state, chunk);\n  if (er) {\n    stream.emit('error', er);\n  } else if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else if (state.objectMode || chunk && chunk.length > 0) {\n    if (state.ended && !addToFront) {\n      var e = new Error('stream.push() after EOF');\n      stream.emit('error', e);\n    } else if (state.endEmitted && addToFront) {\n      var _e = new Error('stream.unshift() after end event');\n      stream.emit('error', _e);\n    } else {\n      var skipAdd;\n      if (state.decoder && !addToFront && !encoding) {\n        chunk = state.decoder.write(chunk);\n        skipAdd = !state.objectMode && chunk.length === 0;\n      }\n\n      if (!addToFront) state.reading = false;\n\n      // Don't add to the buffer if we've decoded to an empty string chunk and\n      // we're not in object mode\n      if (!skipAdd) {\n        // if we want the data now, just emit it.\n        if (state.flowing && state.length === 0 && !state.sync) {\n          stream.emit('data', chunk);\n          stream.read(0);\n        } else {\n          // update the buffer info.\n          state.length += state.objectMode ? 1 : chunk.length;\n          if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n          if (state.needReadable) emitReadable(stream);\n        }\n      }\n\n      maybeReadMore(stream, state);\n    }\n  } else if (!addToFront) {\n    state.reading = false;\n  }\n\n  return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n  var er = null;\n  if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    processNextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : cleanup;\n  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable) {\n    debug('onunpipe');\n    if (readable === src) {\n      cleanup();\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', cleanup);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        processNextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this, state);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    processNextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var state = this._readableState;\n  var paused = false;\n\n  var self = this;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) self.push(chunk);\n    }\n\n    self.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = self.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n  forEach(events, function (ev) {\n    stream.on(ev, self.emit.bind(self, ev));\n  });\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  self._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = bufferShim.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    processNextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction forEach(xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/lib/_stream_readable.js\n ** module id = 143\n ** module chunks = 0\n **/","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar Buffer = require('buffer').Buffer;\n\nvar isBufferEncoding = Buffer.isEncoding\n  || function(encoding) {\n       switch (encoding && encoding.toLowerCase()) {\n         case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n         default: return false;\n       }\n     }\n\n\nfunction assertEncoding(encoding) {\n  if (encoding && !isBufferEncoding(encoding)) {\n    throw new Error('Unknown encoding: ' + encoding);\n  }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nvar StringDecoder = exports.StringDecoder = function(encoding) {\n  this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n  assertEncoding(encoding);\n  switch (this.encoding) {\n    case 'utf8':\n      // CESU-8 represents each of Surrogate Pair by 3-bytes\n      this.surrogateSize = 3;\n      break;\n    case 'ucs2':\n    case 'utf16le':\n      // UTF-16 represents each of Surrogate Pair by 2-bytes\n      this.surrogateSize = 2;\n      this.detectIncompleteChar = utf16DetectIncompleteChar;\n      break;\n    case 'base64':\n      // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n      this.surrogateSize = 3;\n      this.detectIncompleteChar = base64DetectIncompleteChar;\n      break;\n    default:\n      this.write = passThroughWrite;\n      return;\n  }\n\n  // Enough space to store all bytes of a single character. UTF-8 needs 4\n  // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n  this.charBuffer = new Buffer(6);\n  // Number of bytes received for the current incomplete multi-byte character.\n  this.charReceived = 0;\n  // Number of bytes expected for the current incomplete multi-byte character.\n  this.charLength = 0;\n};\n\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n  var charStr = '';\n  // if our last write ended with an incomplete multibyte character\n  while (this.charLength) {\n    // determine how many remaining bytes this buffer has to offer for this char\n    var available = (buffer.length >= this.charLength - this.charReceived) ?\n        this.charLength - this.charReceived :\n        buffer.length;\n\n    // add the new bytes to the char buffer\n    buffer.copy(this.charBuffer, this.charReceived, 0, available);\n    this.charReceived += available;\n\n    if (this.charReceived < this.charLength) {\n      // still not enough chars in this buffer? wait for more ...\n      return '';\n    }\n\n    // remove bytes belonging to the current character from the buffer\n    buffer = buffer.slice(available, buffer.length);\n\n    // get the character that was split\n    charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n    // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n    var charCode = charStr.charCodeAt(charStr.length - 1);\n    if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n      this.charLength += this.surrogateSize;\n      charStr = '';\n      continue;\n    }\n    this.charReceived = this.charLength = 0;\n\n    // if there are no more bytes in this buffer, just emit our char\n    if (buffer.length === 0) {\n      return charStr;\n    }\n    break;\n  }\n\n  // determine and set charLength / charReceived\n  this.detectIncompleteChar(buffer);\n\n  var end = buffer.length;\n  if (this.charLength) {\n    // buffer the incomplete character bytes we got\n    buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n    end -= this.charReceived;\n  }\n\n  charStr += buffer.toString(this.encoding, 0, end);\n\n  var end = charStr.length - 1;\n  var charCode = charStr.charCodeAt(end);\n  // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n  if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n    var size = this.surrogateSize;\n    this.charLength += size;\n    this.charReceived += size;\n    this.charBuffer.copy(this.charBuffer, size, 0, size);\n    buffer.copy(this.charBuffer, 0, 0, size);\n    return charStr.substring(0, end);\n  }\n\n  // or just emit the charStr\n  return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n  // determine how many bytes we have to check at the end of this buffer\n  var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n  // Figure out if one of the last i bytes of our buffer announces an\n  // incomplete char.\n  for (; i > 0; i--) {\n    var c = buffer[buffer.length - i];\n\n    // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n    // 110XXXXX\n    if (i == 1 && c >> 5 == 0x06) {\n      this.charLength = 2;\n      break;\n    }\n\n    // 1110XXXX\n    if (i <= 2 && c >> 4 == 0x0E) {\n      this.charLength = 3;\n      break;\n    }\n\n    // 11110XXX\n    if (i <= 3 && c >> 3 == 0x1E) {\n      this.charLength = 4;\n      break;\n    }\n  }\n  this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n  var res = '';\n  if (buffer && buffer.length)\n    res = this.write(buffer);\n\n  if (this.charReceived) {\n    var cr = this.charReceived;\n    var buf = this.charBuffer;\n    var enc = this.encoding;\n    res += buf.slice(0, cr).toString(enc);\n  }\n\n  return res;\n};\n\nfunction passThroughWrite(buffer) {\n  return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n  this.charReceived = buffer.length % 2;\n  this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n  this.charReceived = buffer.length % 3;\n  this.charLength = this.charReceived ? 3 : 0;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/string_decoder/index.js\n ** module id = 144\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_145__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"http\"\n ** module id = 145\n ** module chunks = 0\n **/","export class CommonSetup {\n    \n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/CommonSetup.ts\n **/","import { ProcessableObject } from './ProcessableObject';\nimport { Sdk } from './Sdk';\n\nexport default class CommonData extends ProcessableObject {\n    constructor(\n        sdk: Sdk,\n        public collectionName: string,\n        public settings?: any\n    ) {\n        super(sdk, collectionName);\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/Data.ts\n **/","import {DataQueryProcessor} from './dataQuery/Processor';\nimport ErrorProcessor from './processors/ErrorProcessor';\nimport {DataQueryBuilder} from './dataQuery/DataQueryBuilder';\nimport {DataQuery} from './dataQuery/DataQuery';\nimport {EventEmitterExtended} from './EventEmitterExtended';\nimport { Data } from '../everlive/types/Data';\nimport { CommonSetup } from './CommonSetup';\nimport { Item } from \"../everlive/interfaces/Item\";\n\nconst MethodMustBeOverridenError = new Error('Method must be overriden');\nexport class Sdk extends EventEmitterExtended {\n    setup: CommonSetup;\n    dataQueryProcessor: DataQueryProcessor;\n    dataQueryBuilder: DataQueryBuilder;\n    authentication: any;\n\n    constructor(\n        public options: any\n    ) {\n        super();\n        this.setup = this._getSetup(options);\n\n        this.dataQueryProcessor = this._getDataQueryProcessor();\n        this.dataQueryBuilder = this._getDataQueryBuilder();\n\n        this.authentication = this._getAuthentication();\n\n        this.registerErrorProcessor(new ErrorProcessor());\n    }\n\n    registerDataQueryPreProcessor(processor) {\n        this.dataQueryProcessor.preProcessors.push(processor);\n    }\n\n    registerDataQueryProcessor(processor) {\n        this.dataQueryProcessor.processors.push(processor);\n    }\n\n    registerDataQueryPostProcessor(processor) {\n        this.dataQueryProcessor.postProcessors.push(processor);\n    }\n\n    registerErrorProcessor(processor) {\n        this.dataQueryProcessor.errorProcessors.push(processor);\n    }\n\n    processDataQuery<T>(query, data, success, error): Promise<T> {\n        return this.dataQueryProcessor.process(query, data, success, error);\n    }\n\n    buildDataQuery(data = {}, op, meta): DataQuery {\n        return this.dataQueryBuilder.buildDataQuery(data, op, meta);\n    }\n\n    data<T extends Item>(name: string): Data<T> {\n        return this._getData<T>(name);\n    }\n\n    protected _getDataQueryProcessor(): DataQueryProcessor {\n        return new DataQueryProcessor(this);\n    }\n\n    protected _getDataQueryBuilder(): DataQueryBuilder {\n        return new DataQueryBuilder();\n    }\n\n    protected _getSetup(options): CommonSetup {\n        throw MethodMustBeOverridenError;\n    }\n\n    protected _getData<T extends Item>(name: string): Data<T> {\n        throw MethodMustBeOverridenError;\n    }\n\n    protected _getAuthentication() {\n        throw MethodMustBeOverridenError;\n    }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/Sdk.ts\n **/","import {QueryProcessorIterator} from './QueryProcessorIterator';\nimport {Errors} from '../errors';\nimport {Utils} from '../utils';\nimport {Sdk} from '../Sdk';\n\nexport class DataQueryProcessor {\n    preProcessors: any[];\n    processors: any[];\n    postProcessors: any[];\n    errorProcessors: any[]; //TODO: types\n\n    constructor(\n        public sdk: Sdk\n    ) {\n        this.preProcessors = [];\n        this.processors = [];\n        this.postProcessors = [];\n        this.errorProcessors = [];\n    }\n\n    _iterate(query, processors, data, value?) {\n        return new Promise((resolve, reject) => {\n            const iterator = new QueryProcessorIterator(processors, query);\n\n            let iteratorTimeout = null;\n            const onNext = (processor, value) => {\n                clearTimeout(iteratorTimeout);\n                iteratorTimeout = setTimeout(() => {\n                    return iterator.error(new Error(`Iterator timed out. Processor: ${processor.constructor.name}. Value - ${JSON.stringify(value)}`));\n                }, 10 * 6000); //throw error if somewhere the chain hangs for more than 10 seconds\n\n                try {\n                    return processor.processDataQuery(query, iterator, data, value);\n                } catch (e) {\n                    return iterator.error(e);\n                }\n            };\n\n            const cleanUp = () => {\n                iterator.removeListener('next', onNext);\n                clearTimeout(iteratorTimeout);\n            };\n\n            iterator\n                .on('next', onNext)\n                .once('end', value => {\n                    cleanUp();\n                    return resolve(value);\n                })\n                .once('error', err => {\n                    cleanUp();\n                    const processedError = this._processError(query, data, err);\n                    const error = processedError || err;\n                    return reject(error);\n                })\n                .once('cancel', reason => {\n                    cleanUp();\n                    return reject({\n                        reason,\n                        error: Errors.cancelled\n                    });\n                })\n                .start(value);\n        });\n    }\n\n    _preProcess(query, data) {\n        return this._iterate(query, this.preProcessors, data);\n    }\n\n    _process(query, data, value) {\n        return this._iterate(query, this.processors, data, value);\n    }\n\n    _postProcess(query, data, value) {\n        return this._iterate(query, this.postProcessors, data, value);\n    }\n\n    _processError(query, data, err) {\n        let error = err;\n        this.errorProcessors.forEach(p => {\n            error = p.processError(query, data, error);\n        });\n\n        return error;\n    }\n\n    process<T>(query, data, success, error): Promise<T> {\n        return Utils.buildPromise<T>((resolve, reject) => {\n            return this._preProcess(query, data)\n                .then(value => {\n                    return this._process(query, data, value);\n                })\n                .then(value => {\n                    return this._postProcess(query, data, value);\n                })\n                .then(res => {\n                    resolve(res);\n                })\n                .catch(err => {\n                    reject(err);\n                });\n        }, success, error);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/dataQuery/Processor.ts\n **/","import {random} from 'underscore';\n\nimport {EventEmitterExtended} from '../EventEmitterExtended';\nimport {Query} from '../query/Query';\nimport {DataQueryOperation} from '../Constants';\n\nexport class QueryProcessorIterator extends EventEmitterExtended {\n    done: boolean;\n    position: number;\n    processors: any[];\n\n    $id: number;\n    $query: Query;\n    $operation: DataQueryOperation;\n\n    private _initialValue: any;\n\n    constructor(processors, query) {\n        super();\n\n        this.done = false;\n        this.position = -1;\n\n        this.processors = processors;\n\n        //helps with debugging\n        this.$id = random(0, 5000);\n        this.$query = query;\n        this.$operation = query.operation;\n\n        this._initialValue = null;\n    }\n\n    restart(value = this._initialValue) {\n        return this.start(value);\n    }\n\n    start(value) {\n        this._initialValue = value;\n        this.position = -1;\n        this.done = false;\n        return this.next(value);\n    }\n\n    next(value) {\n        this.position++;\n        if (this.position >= this.processors.length) {\n            return this.end(value);\n        }\n\n        const nextProcessor = this.processors[this.position];\n        return this.emit('next', nextProcessor, value);\n    }\n\n    end(value) {\n        this.done = true;\n        return this.emit('end', value);\n    }\n\n    cancel(reason) {\n        this.done = true;\n        return this.emit('cancel', reason);\n    }\n\n    error(error) {\n        return this.emit('error', error);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/dataQuery/QueryProcessorIterator.ts\n **/","// Registering underscore mixins:\nimport './mixins/mixins';\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/index.ts\n **/","import * as _ from 'underscore';\n\nimport {deepExtend} from './underscoreDeepExtend';\nimport {compactObject} from './underscoreCompactObject';\nimport {isEmpty} from './underscoreIsObjectEmpty';\n\n_.mixin({'deepExtend': deepExtend});\n_.mixin({'compactObject': compactObject});\n_.mixin({'isEmptyObject': isEmpty});\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/mixins/mixins.ts\n **/","import * as _ from 'underscore';\n\n//http://stackoverflow.com/questions/14058193/remove-empty-properties-falsy-values-from-object-with-underscore-js\nexport function compactObject(o) {\n    var newObject = {};\n    _.each(o, function(v, k) {\n        if(v !== null && v !== undefined) {\n            newObject[k] = v\n        }\n    });\n\n    return newObject;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/mixins/underscoreCompactObject.ts\n **/","/*  Copyright (C) 2012-2014  Kurt Milam - http://xioup.com | Source: https://gist.github.com/1868955\n *   \n *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n *  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n **/\n\n// Based conceptually on the _.extend() function in underscore.js ( see http://documentcloud.github.com/underscore/#extend for more details )\n\nimport * as _ from 'underscore';\n\nexport function deepExtend(obj) {\n    var parentRE = /#{\\s*?_\\s*?}/,\n        slice = Array.prototype.slice;\n\n    _.each(slice.call(arguments, 1), function (source) {\n        for (var prop in source) {\n            if (_.isUndefined(obj[prop]) || _.isFunction(obj[prop]) || _.isNull(source[prop]) || _.isDate(source[prop])) {\n                obj[prop] = source[prop];\n            }\n            else if (_.isString(source[prop]) && parentRE.test(source[prop])) {\n                if (_.isString(obj[prop])) {\n                    obj[prop] = source[prop].replace(parentRE, obj[prop]);\n                }\n            }\n            else if (_.isArray(obj[prop]) || _.isArray(source[prop])) {\n                if (!_.isArray(obj[prop]) || !_.isArray(source[prop])) {\n                    throw new Error('Trying to combine an array with a non-array (' + prop + ')');\n                } else {\n                    obj[prop] = _.reject((<any>_).deepExtend(_.clone(obj[prop]), source[prop]), function (item) {\n                        return _.isNull(item);\n                    });\n                }\n            }\n            else if (_.isObject(obj[prop]) || _.isObject(source[prop])) {\n                if (!_.isObject(obj[prop]) || !_.isObject(source[prop])) {\n                    throw new Error('Trying to combine an object with a non-object (' + prop + ')');\n                } else {\n                    obj[prop] = (<any>_).deepExtend(_.clone(obj[prop]), source[prop]);\n                }\n            } else {\n                obj[prop] = source[prop];\n            }\n        }\n    });\n    return obj;\n};\n\n/**\n * Dependency: underscore.js ( http://documentcloud.github.com/underscore/ )\n *\n * Mix it in with underscore.js:\n * _.mixin({deepExtend: deepExtend});\n *\n * Call it like this:\n * var myObj = _.deepExtend(grandparent, child, grandchild, greatgrandchild)\n *\n * Notes:\n * Keep it DRY.\n * This function is especially useful if you're working with JSON config documents. It allows you to create a default\n * config document with the most common settings, then override those settings for specific cases. It accepts any\n * number of objects as arguments, giving you fine-grained control over your config document hierarchy.\n *\n * Special Features and Considerations:\n * - parentRE allows you to concatenate strings. example:\n *   var obj = _.deepExtend({url: \"www.example.com\"}, {url: \"http://#{_}/path/to/file.html\"});\n *   console.log(obj.url);\n *   output: \"http://www.example.com/path/to/file.html\"\n *\n * - parentRE also acts as a placeholder, which can be useful when you need to change one value in an array, while\n *   leaving the others untouched. example:\n *   var arr = _.deepExtend([100,    {id: 1234}, true,  \"foo\",  [250, 500]],\n *                          [\"#{_}\", \"#{_}\",     false, \"#{_}\", \"#{_}\"]);\n *   console.log(arr);\n *   output: [100, {id: 1234}, false, \"foo\", [250, 500]]\n *\n * - The previous example can also be written like this:\n *   var arr = _.deepExtend([100,    {id:1234},   true,  \"foo\",  [250, 500]],\n *                          [\"#{_}\", {},          false, \"#{_}\", []]);\n *   console.log(arr);\n *   output: [100, {id: 1234}, false, \"foo\", [250, 500]]\n *\n * - And also like this:\n *   var arr = _.deepExtend([100,    {id:1234},   true,  \"foo\",  [250, 500]],\n *                          [\"#{_}\", {},          false]);\n *   console.log(arr);\n *   output: [100, {id: 1234}, false, \"foo\", [250, 500]]\n *\n * - Array order is important. example:\n *   var arr = _.deepExtend([1, 2, 3, 4], [1, 4, 3, 2]);\n *   console.log(arr);\n *   output: [1, 4, 3, 2]\n *\n * - You can remove an array element set in a parent object by setting the same index value to null in a child object.\n *   example:\n *   var obj = _.deepExtend({arr: [1, 2, 3, 4]}, {arr: [\"#{_}\", null]});\n *   console.log(obj.arr);\n *   output: [1, 3, 4]\n *\n **/\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/mixins/underscoreDeepExtend.ts\n **/","// http://stackoverflow.com/questions/4994201/is-object-empty\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function isEmpty(obj) {\n\n    // null and undefined are \"empty\"\n    if (obj == null) return true;\n\n    // Assume if it has a length property with a non-zero value\n    // that that property is correct.\n    if (obj.length > 0)    return false;\n    if (obj.length === 0)  return true;\n\n    // Otherwise, does it have any properties of its own?\n    // Note that this doesn't handle\n    // toString and valueOf enumeration bugs in IE < 9\n    for (var key in obj) {\n        if (hasOwnProperty.call(obj, key)) return false;\n    }\n\n    return true;\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/mixins/underscoreIsObjectEmpty.ts\n **/","import {Utils} from '../utils';\n\nexport default class ErrorProcessor {\n    processError(query, data, err) {\n        const setup = data.sdk.setup;\n\n        var parseOnlyCompleteDateTimeString = setup && setup.parseOnlyCompleteDateTimeObjects;\n        var reviver = Utils.parseUtilities.getReviver(parseOnlyCompleteDateTimeString);\n\n        return Utils.parseUtilities.parseXhrError(reviver, err);\n    }\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/processors/ErrorProcessor.ts\n **/","/// <reference path=\"typings/custom.d.ts\" />\n\nimport { polyfill } from 'es6-promise';\npolyfill();\n\nimport './common/index'; //initialize common sdk\nimport { Everlive } from './everlive/index';\n\n//we want to have both the es6 export syntax and commonjs module.exports\n//the es6 export is used in the typings, this allows you to use import KendoSdk from 'everlive-sdk'\n//while the commonjs var KendoSdk = require('everlive-sdk') still works\nexport default Everlive;\n\nmodule.exports = Everlive;\nmodule.exports.default = Everlive;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.everlive.ts\n **/","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = debug.debug = debug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lowercased letter, i.e. \"n\".\n */\n\nexports.formatters = {};\n\n/**\n * Previously assigned color.\n */\n\nvar prevColor = 0;\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n *\n * @return {Number}\n * @api private\n */\n\nfunction selectColor() {\n  return exports.colors[prevColor++ % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction debug(namespace) {\n\n  // define the `disabled` version\n  function disabled() {\n  }\n  disabled.enabled = false;\n\n  // define the `enabled` version\n  function enabled() {\n\n    var self = enabled;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // add the `color` if not set\n    if (null == self.useColors) self.useColors = exports.useColors();\n    if (null == self.color && self.useColors) self.color = selectColor();\n\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %o\n      args = ['%o'].concat(args);\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting\n    args = exports.formatArgs.apply(self, args);\n\n    var logFn = enabled.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n  enabled.enabled = true;\n\n  var fn = exports.enabled(namespace) ? enabled : disabled;\n\n  fn.namespace = namespace;\n\n  return fn;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  var split = (namespaces || '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/[\\\\^$+?.()|[\\]{}]/g, '\\\\$&').replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/debug/debug.js\n ** module id = 158\n ** module chunks = 0\n **/","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version   4.0.5\n */\n\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n  return typeof x === 'function' || typeof x === 'object' && x !== null;\n}\n\nfunction isFunction(x) {\n  return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (!Array.isArray) {\n  _isArray = function (x) {\n    return Object.prototype.toString.call(x) === '[object Array]';\n  };\n} else {\n  _isArray = Array.isArray;\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n  queue[len] = callback;\n  queue[len + 1] = arg;\n  len += 2;\n  if (len === 2) {\n    // If len is 2, that means that we need to schedule an async flush.\n    // If additional callbacks are queued before the queue is flushed, they\n    // will be processed by this flush that we are scheduling.\n    if (customSchedulerFn) {\n      customSchedulerFn(flush);\n    } else {\n      scheduleFlush();\n    }\n  }\n};\n\nfunction setScheduler(scheduleFn) {\n  customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n  asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n  // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n  // see https://github.com/cujojs/when/issues/410 for details\n  return function () {\n    return process.nextTick(flush);\n  };\n}\n\n// vertx\nfunction useVertxTimer() {\n  if (typeof vertxNext !== 'undefined') {\n    return function () {\n      vertxNext(flush);\n    };\n  }\n\n  return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n  var iterations = 0;\n  var observer = new BrowserMutationObserver(flush);\n  var node = document.createTextNode('');\n  observer.observe(node, { characterData: true });\n\n  return function () {\n    node.data = iterations = ++iterations % 2;\n  };\n}\n\n// web worker\nfunction useMessageChannel() {\n  var channel = new MessageChannel();\n  channel.port1.onmessage = flush;\n  return function () {\n    return channel.port2.postMessage(0);\n  };\n}\n\nfunction useSetTimeout() {\n  // Store setTimeout reference so es6-promise will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var globalSetTimeout = setTimeout;\n  return function () {\n    return globalSetTimeout(flush, 1);\n  };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n  for (var i = 0; i < len; i += 2) {\n    var callback = queue[i];\n    var arg = queue[i + 1];\n\n    callback(arg);\n\n    queue[i] = undefined;\n    queue[i + 1] = undefined;\n  }\n\n  len = 0;\n}\n\nfunction attemptVertx() {\n  try {\n    var r = require;\n    var vertx = r('vertx');\n    vertxNext = vertx.runOnLoop || vertx.runOnContext;\n    return useVertxTimer();\n  } catch (e) {\n    return useSetTimeout();\n  }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n  scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n  scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n  scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n  scheduleFlush = attemptVertx();\n} else {\n  scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n  var _arguments = arguments;\n\n  var parent = this;\n\n  var child = new this.constructor(noop);\n\n  if (child[PROMISE_ID] === undefined) {\n    makePromise(child);\n  }\n\n  var _state = parent._state;\n\n  if (_state) {\n    (function () {\n      var callback = _arguments[_state - 1];\n      asap(function () {\n        return invokeCallback(_state, child, callback, parent._result);\n      });\n    })();\n  } else {\n    subscribe(parent, child, onFulfillment, onRejection);\n  }\n\n  return child;\n}\n\n/**\n  `Promise.resolve` returns a promise that will become resolved with the\n  passed `value`. It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    resolve(1);\n  });\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.resolve(1);\n\n  promise.then(function(value){\n    // value === 1\n  });\n  ```\n\n  @method resolve\n  @static\n  @param {Any} value value that the returned promise will be resolved with\n  Useful for tooling.\n  @return {Promise} a promise that will become fulfilled with the given\n  `value`\n*/\nfunction resolve(object) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (object && typeof object === 'object' && object.constructor === Constructor) {\n    return object;\n  }\n\n  var promise = new Constructor(noop);\n  _resolve(promise, object);\n  return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n  return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n  return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n  try {\n    return promise.then;\n  } catch (error) {\n    GET_THEN_ERROR.error = error;\n    return GET_THEN_ERROR;\n  }\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n  try {\n    then.call(value, fulfillmentHandler, rejectionHandler);\n  } catch (e) {\n    return e;\n  }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n  asap(function (promise) {\n    var sealed = false;\n    var error = tryThen(then, thenable, function (value) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n      if (thenable !== value) {\n        _resolve(promise, value);\n      } else {\n        fulfill(promise, value);\n      }\n    }, function (reason) {\n      if (sealed) {\n        return;\n      }\n      sealed = true;\n\n      _reject(promise, reason);\n    }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n    if (!sealed && error) {\n      sealed = true;\n      _reject(promise, error);\n    }\n  }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n  if (thenable._state === FULFILLED) {\n    fulfill(promise, thenable._result);\n  } else if (thenable._state === REJECTED) {\n    _reject(promise, thenable._result);\n  } else {\n    subscribe(thenable, undefined, function (value) {\n      return _resolve(promise, value);\n    }, function (reason) {\n      return _reject(promise, reason);\n    });\n  }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$) {\n  if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {\n    handleOwnThenable(promise, maybeThenable);\n  } else {\n    if (then$$ === GET_THEN_ERROR) {\n      _reject(promise, GET_THEN_ERROR.error);\n    } else if (then$$ === undefined) {\n      fulfill(promise, maybeThenable);\n    } else if (isFunction(then$$)) {\n      handleForeignThenable(promise, maybeThenable, then$$);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n}\n\nfunction _resolve(promise, value) {\n  if (promise === value) {\n    _reject(promise, selfFulfillment());\n  } else if (objectOrFunction(value)) {\n    handleMaybeThenable(promise, value, getThen(value));\n  } else {\n    fulfill(promise, value);\n  }\n}\n\nfunction publishRejection(promise) {\n  if (promise._onerror) {\n    promise._onerror(promise._result);\n  }\n\n  publish(promise);\n}\n\nfunction fulfill(promise, value) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n\n  promise._result = value;\n  promise._state = FULFILLED;\n\n  if (promise._subscribers.length !== 0) {\n    asap(publish, promise);\n  }\n}\n\nfunction _reject(promise, reason) {\n  if (promise._state !== PENDING) {\n    return;\n  }\n  promise._state = REJECTED;\n  promise._result = reason;\n\n  asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n  var _subscribers = parent._subscribers;\n  var length = _subscribers.length;\n\n  parent._onerror = null;\n\n  _subscribers[length] = child;\n  _subscribers[length + FULFILLED] = onFulfillment;\n  _subscribers[length + REJECTED] = onRejection;\n\n  if (length === 0 && parent._state) {\n    asap(publish, parent);\n  }\n}\n\nfunction publish(promise) {\n  var subscribers = promise._subscribers;\n  var settled = promise._state;\n\n  if (subscribers.length === 0) {\n    return;\n  }\n\n  var child = undefined,\n      callback = undefined,\n      detail = promise._result;\n\n  for (var i = 0; i < subscribers.length; i += 3) {\n    child = subscribers[i];\n    callback = subscribers[i + settled];\n\n    if (child) {\n      invokeCallback(settled, child, callback, detail);\n    } else {\n      callback(detail);\n    }\n  }\n\n  promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n  this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n  try {\n    return callback(detail);\n  } catch (e) {\n    TRY_CATCH_ERROR.error = e;\n    return TRY_CATCH_ERROR;\n  }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n  var hasCallback = isFunction(callback),\n      value = undefined,\n      error = undefined,\n      succeeded = undefined,\n      failed = undefined;\n\n  if (hasCallback) {\n    value = tryCatch(callback, detail);\n\n    if (value === TRY_CATCH_ERROR) {\n      failed = true;\n      error = value.error;\n      value = null;\n    } else {\n      succeeded = true;\n    }\n\n    if (promise === value) {\n      _reject(promise, cannotReturnOwn());\n      return;\n    }\n  } else {\n    value = detail;\n    succeeded = true;\n  }\n\n  if (promise._state !== PENDING) {\n    // noop\n  } else if (hasCallback && succeeded) {\n      _resolve(promise, value);\n    } else if (failed) {\n      _reject(promise, error);\n    } else if (settled === FULFILLED) {\n      fulfill(promise, value);\n    } else if (settled === REJECTED) {\n      _reject(promise, value);\n    }\n}\n\nfunction initializePromise(promise, resolver) {\n  try {\n    resolver(function resolvePromise(value) {\n      _resolve(promise, value);\n    }, function rejectPromise(reason) {\n      _reject(promise, reason);\n    });\n  } catch (e) {\n    _reject(promise, e);\n  }\n}\n\nvar id = 0;\nfunction nextId() {\n  return id++;\n}\n\nfunction makePromise(promise) {\n  promise[PROMISE_ID] = id++;\n  promise._state = undefined;\n  promise._result = undefined;\n  promise._subscribers = [];\n}\n\nfunction Enumerator(Constructor, input) {\n  this._instanceConstructor = Constructor;\n  this.promise = new Constructor(noop);\n\n  if (!this.promise[PROMISE_ID]) {\n    makePromise(this.promise);\n  }\n\n  if (isArray(input)) {\n    this._input = input;\n    this.length = input.length;\n    this._remaining = input.length;\n\n    this._result = new Array(this.length);\n\n    if (this.length === 0) {\n      fulfill(this.promise, this._result);\n    } else {\n      this.length = this.length || 0;\n      this._enumerate();\n      if (this._remaining === 0) {\n        fulfill(this.promise, this._result);\n      }\n    }\n  } else {\n    _reject(this.promise, validationError());\n  }\n}\n\nfunction validationError() {\n  return new Error('Array Methods must be provided an Array');\n};\n\nEnumerator.prototype._enumerate = function () {\n  var length = this.length;\n  var _input = this._input;\n\n  for (var i = 0; this._state === PENDING && i < length; i++) {\n    this._eachEntry(_input[i], i);\n  }\n};\n\nEnumerator.prototype._eachEntry = function (entry, i) {\n  var c = this._instanceConstructor;\n  var resolve$$ = c.resolve;\n\n  if (resolve$$ === resolve) {\n    var _then = getThen(entry);\n\n    if (_then === then && entry._state !== PENDING) {\n      this._settledAt(entry._state, i, entry._result);\n    } else if (typeof _then !== 'function') {\n      this._remaining--;\n      this._result[i] = entry;\n    } else if (c === Promise) {\n      var promise = new c(noop);\n      handleMaybeThenable(promise, entry, _then);\n      this._willSettleAt(promise, i);\n    } else {\n      this._willSettleAt(new c(function (resolve$$) {\n        return resolve$$(entry);\n      }), i);\n    }\n  } else {\n    this._willSettleAt(resolve$$(entry), i);\n  }\n};\n\nEnumerator.prototype._settledAt = function (state, i, value) {\n  var promise = this.promise;\n\n  if (promise._state === PENDING) {\n    this._remaining--;\n\n    if (state === REJECTED) {\n      _reject(promise, value);\n    } else {\n      this._result[i] = value;\n    }\n  }\n\n  if (this._remaining === 0) {\n    fulfill(promise, this._result);\n  }\n};\n\nEnumerator.prototype._willSettleAt = function (promise, i) {\n  var enumerator = this;\n\n  subscribe(promise, undefined, function (value) {\n    return enumerator._settledAt(FULFILLED, i, value);\n  }, function (reason) {\n    return enumerator._settledAt(REJECTED, i, reason);\n  });\n};\n\n/**\n  `Promise.all` accepts an array of promises, and returns a new promise which\n  is fulfilled with an array of fulfillment values for the passed promises, or\n  rejected with the reason of the first passed promise to be rejected. It casts all\n  elements of the passed iterable to promises as it runs this algorithm.\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = resolve(2);\n  let promise3 = resolve(3);\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // The array here would be [ 1, 2, 3 ];\n  });\n  ```\n\n  If any of the `promises` given to `all` are rejected, the first promise\n  that is rejected will be given as an argument to the returned promises's\n  rejection handler. For example:\n\n  Example:\n\n  ```javascript\n  let promise1 = resolve(1);\n  let promise2 = reject(new Error(\"2\"));\n  let promise3 = reject(new Error(\"3\"));\n  let promises = [ promise1, promise2, promise3 ];\n\n  Promise.all(promises).then(function(array){\n    // Code here never runs because there are rejected promises!\n  }, function(error) {\n    // error.message === \"2\"\n  });\n  ```\n\n  @method all\n  @static\n  @param {Array} entries array of promises\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled when all `promises` have been\n  fulfilled, or rejected if any of them become rejected.\n  @static\n*/\nfunction all(entries) {\n  return new Enumerator(this, entries).promise;\n}\n\n/**\n  `Promise.race` returns a new promise which is settled in the same way as the\n  first passed promise to settle.\n\n  Example:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 2');\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // result === 'promise 2' because it was resolved before promise1\n    // was resolved.\n  });\n  ```\n\n  `Promise.race` is deterministic in that only the state of the first\n  settled promise matters. For example, even if other promises given to the\n  `promises` array argument are resolved, but the first settled promise has\n  become rejected before the other promises became fulfilled, the returned\n  promise will become rejected:\n\n  ```javascript\n  let promise1 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      resolve('promise 1');\n    }, 200);\n  });\n\n  let promise2 = new Promise(function(resolve, reject){\n    setTimeout(function(){\n      reject(new Error('promise 2'));\n    }, 100);\n  });\n\n  Promise.race([promise1, promise2]).then(function(result){\n    // Code here never runs\n  }, function(reason){\n    // reason.message === 'promise 2' because promise 2 became rejected before\n    // promise 1 became fulfilled\n  });\n  ```\n\n  An example real-world use case is implementing timeouts:\n\n  ```javascript\n  Promise.race([ajax('foo.json'), timeout(5000)])\n  ```\n\n  @method race\n  @static\n  @param {Array} promises array of promises to observe\n  Useful for tooling.\n  @return {Promise} a promise which settles in the same way as the first passed\n  promise to settle.\n*/\nfunction race(entries) {\n  /*jshint validthis:true */\n  var Constructor = this;\n\n  if (!isArray(entries)) {\n    return new Constructor(function (_, reject) {\n      return reject(new TypeError('You must pass an array to race.'));\n    });\n  } else {\n    return new Constructor(function (resolve, reject) {\n      var length = entries.length;\n      for (var i = 0; i < length; i++) {\n        Constructor.resolve(entries[i]).then(resolve, reject);\n      }\n    });\n  }\n}\n\n/**\n  `Promise.reject` returns a promise rejected with the passed `reason`.\n  It is shorthand for the following:\n\n  ```javascript\n  let promise = new Promise(function(resolve, reject){\n    reject(new Error('WHOOPS'));\n  });\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  Instead of writing the above, your code now simply becomes the following:\n\n  ```javascript\n  let promise = Promise.reject(new Error('WHOOPS'));\n\n  promise.then(function(value){\n    // Code here doesn't run because the promise is rejected!\n  }, function(reason){\n    // reason.message === 'WHOOPS'\n  });\n  ```\n\n  @method reject\n  @static\n  @param {Any} reason value that the returned promise will be rejected with.\n  Useful for tooling.\n  @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject(reason) {\n  /*jshint validthis:true */\n  var Constructor = this;\n  var promise = new Constructor(noop);\n  _reject(promise, reason);\n  return promise;\n}\n\nfunction needsResolver() {\n  throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n  throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n  Promise objects represent the eventual result of an asynchronous operation. The\n  primary way of interacting with a promise is through its `then` method, which\n  registers callbacks to receive either a promise's eventual value or the reason\n  why the promise cannot be fulfilled.\n\n  Terminology\n  -----------\n\n  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n  - `thenable` is an object or function that defines a `then` method.\n  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n  - `exception` is a value that is thrown using the throw statement.\n  - `reason` is a value that indicates why a promise was rejected.\n  - `settled` the final resting state of a promise, fulfilled or rejected.\n\n  A promise can be in one of three states: pending, fulfilled, or rejected.\n\n  Promises that are fulfilled have a fulfillment value and are in the fulfilled\n  state.  Promises that are rejected have a rejection reason and are in the\n  rejected state.  A fulfillment value is never a thenable.\n\n  Promises can also be said to *resolve* a value.  If this value is also a\n  promise, then the original promise's settled state will match the value's\n  settled state.  So a promise that *resolves* a promise that rejects will\n  itself reject, and a promise that *resolves* a promise that fulfills will\n  itself fulfill.\n\n\n  Basic Usage:\n  ------------\n\n  ```js\n  let promise = new Promise(function(resolve, reject) {\n    // on success\n    resolve(value);\n\n    // on failure\n    reject(reason);\n  });\n\n  promise.then(function(value) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Advanced Usage:\n  ---------------\n\n  Promises shine when abstracting away asynchronous interactions such as\n  `XMLHttpRequest`s.\n\n  ```js\n  function getJSON(url) {\n    return new Promise(function(resolve, reject){\n      let xhr = new XMLHttpRequest();\n\n      xhr.open('GET', url);\n      xhr.onreadystatechange = handler;\n      xhr.responseType = 'json';\n      xhr.setRequestHeader('Accept', 'application/json');\n      xhr.send();\n\n      function handler() {\n        if (this.readyState === this.DONE) {\n          if (this.status === 200) {\n            resolve(this.response);\n          } else {\n            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n          }\n        }\n      };\n    });\n  }\n\n  getJSON('/posts.json').then(function(json) {\n    // on fulfillment\n  }, function(reason) {\n    // on rejection\n  });\n  ```\n\n  Unlike callbacks, promises are great composable primitives.\n\n  ```js\n  Promise.all([\n    getJSON('/posts'),\n    getJSON('/comments')\n  ]).then(function(values){\n    values[0] // => postsJSON\n    values[1] // => commentsJSON\n\n    return values;\n  });\n  ```\n\n  @class Promise\n  @param {function} resolver\n  Useful for tooling.\n  @constructor\n*/\nfunction Promise(resolver) {\n  this[PROMISE_ID] = nextId();\n  this._result = this._state = undefined;\n  this._subscribers = [];\n\n  if (noop !== resolver) {\n    typeof resolver !== 'function' && needsResolver();\n    this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n  }\n}\n\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = resolve;\nPromise.reject = reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;\n\nPromise.prototype = {\n  constructor: Promise,\n\n  /**\n    The primary way of interacting with a promise is through its `then` method,\n    which registers callbacks to receive either a promise's eventual value or the\n    reason why the promise cannot be fulfilled.\n  \n    ```js\n    findUser().then(function(user){\n      // user is available\n    }, function(reason){\n      // user is unavailable, and you are given the reason why\n    });\n    ```\n  \n    Chaining\n    --------\n  \n    The return value of `then` is itself a promise.  This second, 'downstream'\n    promise is resolved with the return value of the first promise's fulfillment\n    or rejection handler, or rejected if the handler throws an exception.\n  \n    ```js\n    findUser().then(function (user) {\n      return user.name;\n    }, function (reason) {\n      return 'default name';\n    }).then(function (userName) {\n      // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n      // will be `'default name'`\n    });\n  \n    findUser().then(function (user) {\n      throw new Error('Found user, but still unhappy');\n    }, function (reason) {\n      throw new Error('`findUser` rejected and we're unhappy');\n    }).then(function (value) {\n      // never reached\n    }, function (reason) {\n      // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n      // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n    });\n    ```\n    If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n  \n    ```js\n    findUser().then(function (user) {\n      throw new PedagogicalException('Upstream error');\n    }).then(function (value) {\n      // never reached\n    }).then(function (value) {\n      // never reached\n    }, function (reason) {\n      // The `PedgagocialException` is propagated all the way down to here\n    });\n    ```\n  \n    Assimilation\n    ------------\n  \n    Sometimes the value you want to propagate to a downstream promise can only be\n    retrieved asynchronously. This can be achieved by returning a promise in the\n    fulfillment or rejection handler. The downstream promise will then be pending\n    until the returned promise is settled. This is called *assimilation*.\n  \n    ```js\n    findUser().then(function (user) {\n      return findCommentsByAuthor(user);\n    }).then(function (comments) {\n      // The user's comments are now available\n    });\n    ```\n  \n    If the assimliated promise rejects, then the downstream promise will also reject.\n  \n    ```js\n    findUser().then(function (user) {\n      return findCommentsByAuthor(user);\n    }).then(function (comments) {\n      // If `findCommentsByAuthor` fulfills, we'll have the value here\n    }, function (reason) {\n      // If `findCommentsByAuthor` rejects, we'll have the reason here\n    });\n    ```\n  \n    Simple Example\n    --------------\n  \n    Synchronous Example\n  \n    ```javascript\n    let result;\n  \n    try {\n      result = findResult();\n      // success\n    } catch(reason) {\n      // failure\n    }\n    ```\n  \n    Errback Example\n  \n    ```js\n    findResult(function(result, err){\n      if (err) {\n        // failure\n      } else {\n        // success\n      }\n    });\n    ```\n  \n    Promise Example;\n  \n    ```javascript\n    findResult().then(function(result){\n      // success\n    }, function(reason){\n      // failure\n    });\n    ```\n  \n    Advanced Example\n    --------------\n  \n    Synchronous Example\n  \n    ```javascript\n    let author, books;\n  \n    try {\n      author = findAuthor();\n      books  = findBooksByAuthor(author);\n      // success\n    } catch(reason) {\n      // failure\n    }\n    ```\n  \n    Errback Example\n  \n    ```js\n  \n    function foundBooks(books) {\n  \n    }\n  \n    function failure(reason) {\n  \n    }\n  \n    findAuthor(function(author, err){\n      if (err) {\n        failure(err);\n        // failure\n      } else {\n        try {\n          findBoooksByAuthor(author, function(books, err) {\n            if (err) {\n              failure(err);\n            } else {\n              try {\n                foundBooks(books);\n              } catch(reason) {\n                failure(reason);\n              }\n            }\n          });\n        } catch(error) {\n          failure(err);\n        }\n        // success\n      }\n    });\n    ```\n  \n    Promise Example;\n  \n    ```javascript\n    findAuthor().\n      then(findBooksByAuthor).\n      then(function(books){\n        // found books\n    }).catch(function(reason){\n      // something went wrong\n    });\n    ```\n  \n    @method then\n    @param {Function} onFulfilled\n    @param {Function} onRejected\n    Useful for tooling.\n    @return {Promise}\n  */\n  then: then,\n\n  /**\n    `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n    as the catch block of a try/catch statement.\n  \n    ```js\n    function findAuthor(){\n      throw new Error('couldn't find that author');\n    }\n  \n    // synchronous\n    try {\n      findAuthor();\n    } catch(reason) {\n      // something went wrong\n    }\n  \n    // async with promises\n    findAuthor().catch(function(reason){\n      // something went wrong\n    });\n    ```\n  \n    @method catch\n    @param {Function} onRejection\n    Useful for tooling.\n    @return {Promise}\n  */\n  'catch': function _catch(onRejection) {\n    return this.then(null, onRejection);\n  }\n};\n\nfunction polyfill() {\n    var local = undefined;\n\n    if (typeof global !== 'undefined') {\n        local = global;\n    } else if (typeof self !== 'undefined') {\n        local = self;\n    } else {\n        try {\n            local = Function('return this')();\n        } catch (e) {\n            throw new Error('polyfill failed because global object is unavailable in this environment');\n        }\n    }\n\n    var P = local.Promise;\n\n    if (P) {\n        var promiseToString = null,\n            promiseInstance = null;\n        try {\n            promiseInstance = P.resolve();\n            promiseToString = Object.prototype.toString.call(promiseInstance);\n        } catch (e) {\n            // silently ignored\n        }\n\n        if (!P.cast && (promiseToString === '[object Promise]' || (typeof promiseInstance === 'object'))) {\n            return;\n        }\n    }\n\n    local.Promise = Promise;\n}\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\n\nreturn Promise;\n\n})));\n//# sourceMappingURL=es6-promise.map\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/es6-promise/dist/es6-promise.js\n ** module id = 159\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\n\nvar dialectsHash = {\n\tbase: require('./dialects/base'),\n\tmssql: require('./dialects/mssql'),\n\tpostgresql: require('./dialects/postgresql'),\n\tsqlite: require('./dialects/sqlite'),\n\tmysql: require('./dialects/mysql')\n};\n\nvar Builder = module.exports = function(options) {\n\tthis.configure(options);\n};\n\nBuilder.prototype._reset = function() {\n\tif (this.options.separatedValues) {\n\t\tthis._placeholderId = 1;\n\t\tthis._values = this.options.namedValues ? {} : [];\n\t} else {\n\t\tdelete this._placeholderId;\n\t\tdelete this._values;\n\t}\n\n\tthis._query = '';\n};\n\nBuilder.prototype._getPlaceholder = function() {\n\treturn (this.options.namedValues ? 'p' : '') + (this._placeholderId++);\n};\n\nBuilder.prototype._wrapPlaceholder = function(name) {\n\treturn this.options.valuesPrefix + name;\n};\n\nBuilder.prototype._pushValue = function(value) {\n\tif (_.isUndefined(value) || _.isNull(value)) {\n\t\treturn 'null';\n\t} else if (_.isNumber(value) || _.isBoolean(value)) {\n\t\treturn String(value);\n\t} else if (_.isString(value)) {\n\t\tif (this.options.separatedValues) {\n\t\t\tvar placeholder = this._getPlaceholder();\n\t\t\tif (this.options.namedValues) {\n\t\t\t\tthis._values[placeholder] = value;\n\t\t\t} else {\n\t\t\t\tthis._values.push(value);\n\t\t\t}\n\t\t\treturn this._wrapPlaceholder(placeholder);\n\t\t} else {\n\t\t\treturn '\\'' + value + '\\'';\n\t\t}\n\t} else {\n\t\tthrow new Error('Wrong value type \"' + (typeof value) + '\"');\n\t}\n};\n\nBuilder.prototype.configure = function(options) {\n\toptions = options || {};\n\n\tthis.options = _.defaults({}, options, {\n\t\tseparatedValues: true,\n\t\tnamedValues: true,\n\t\tvaluesPrefix: '$',\n\t\tdialect: 'base',\n\t\twrappedIdentifiers: true\n\t});\n\n\tthis.setDialect(this.options.dialect);\n\n\tthis._reset();\n};\n\nBuilder.prototype.build = function(params) {\n\tvar builder = this;\n\n\tthis._reset();\n\n\tthis._query = this.dialect.buildTemplate('query', {queryBody: params}) + ';';\n\n\tif (this.options.separatedValues) {\n\t\treturn {\n\t\t\tquery: this._query,\n\t\t\tvalues: this._values,\n\t\t\tprefixValues: function() {\n\t\t\t\tvar values = {};\n\t\t\t\t_(this.getValuesObject()).each(function(value, name) {\n\t\t\t\t\tvalues[builder._wrapPlaceholder(name)] = value;\n\t\t\t\t});\n\t\t\t\treturn values;\n\t\t\t},\n\t\t\tgetValuesArray: function() {\n\t\t\t\treturn _.isArray(this.values) ? this.values : _(this.values).values();\n\t\t\t},\n\t\t\tgetValuesObject: function() {\n\t\t\t\treturn _.isArray(this.values) ? _(_.range(1, this.values.length + 1)).object(this.values) :\n\t\t\t\t\tthis.values;\n\t\t\t}\n\t\t};\n\t} else {\n\t\treturn {query: this._query};\n\t}\n};\n\nBuilder.prototype.setDialect = function(name) {\n\tif (!dialectsHash[name]) {\n\t\tthrow new Error('Unknown dialect \"' + name + '\"');\n\t}\n\n\tthis.dialect = new (dialectsHash[name])(this);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/builder.js\n ** module id = 160\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\n\nvar removeTopBrackets = function(condition) {\n\tif (condition.length && condition[0] === '(' &&\n\t\tcondition[condition.length - 1] === ')') {\n\t\tcondition = condition.slice(1, condition.length - 1);\n\t}\n\n\treturn condition;\n};\n\n// check if object contains any of expected keys\nvar hasSome = function(obj, keys) {\n\tvar objKeys = _(obj).keys();\n\treturn _(keys).some(function(key) {\n\t\treturn _(objKeys).contains(key);\n\t});\n};\n\nvar termKeys = ['select', 'query', 'field', 'value', 'func', 'expression'];\nvar isTerm = function(obj) {\n\treturn _.isObject(obj) && !_.isArray(obj) && hasSome(obj, termKeys);\n};\n\nvar isSimpleValue = function(value) {\n\treturn (\n\t\t_.isString(value) ||\n\t\t_.isNumber(value) ||\n\t\t_.isBoolean(value) ||\n\t\t_.isNull(value) ||\n\t\t_.isUndefined(value) ||\n\t\t_.isRegExp(value) ||\n\t\t_.isDate(value)\n\t);\n};\n\nmodule.exports = function(dialect) {\n\tdialect.blocks.add('distinct', function() {\n\t\treturn 'distinct';\n\t});\n\n\tdialect.blocks.add('fields', function(params) {\n\t\tvar fields = params.fields || {};\n\n\t\tif (!_.isObject(fields)) {\n\t\t\tthrow new Error('Invalid `fields` property type \"' + (typeof fields) + '\"');\n\t\t}\n\n\t\tif(_.isObject(params.count)){\n\t\t\treturn '';\n\t\t}\n\n\t\tif (_.isEmpty(fields)) {\n\t\t\treturn '*';\n\t\t}\n\n\t\t// If fields is array: ['a', {b: 'c'}, {name: '', table: 't', alias: 'r'}]\n\t\tif (_.isArray(fields)) {\n\t\t\tfields = _(fields).map(function(field) {\n\t\t\t\tif (isSimpleValue(field) || isTerm(field) || _.has(field, 'name')) {\n\t\t\t\t\t// if field has simple type or is field object: {name: '', table: 't', alias: 'r'}\n\t\t\t\t\treturn dialect.buildBlock('term', {term: field, type: 'field'});\n\t\t\t\t} else {\n\t\t\t\t\t// if field is non-field object: {b: 'c'}\n\t\t\t\t\treturn dialect.buildBlock('fields', {fields: field});\n\t\t\t\t}\n\t\t\t});\n\n\t\t// If fields is object: {a: 'u', b: {table: 't', alias: 'c'}}\n\t\t} else {\n\t\t\t// use keys as field names\n\t\t\tfields = _(fields).map(function(field, name) {\n\t\t\t\t// if field is not an object value, use it as alias\n\t\t\t\tif (_.isString(field)) field = {alias: field};\n\n\t\t\t\t// if field does not have name, get it from key\n\t\t\t\tif (!_.has(field, 'name')) field = _.defaults({name: name}, field);\n\n\t\t\t\treturn dialect.buildBlock('term', {term: field, type: 'field'});\n\t\t\t});\n\t\t}\n\n\t\treturn _(fields).compact().join(', ');\n\t});\n\n\tdialect.blocks.add('count', function(params) {\n\t\treturn 'COUNT(*) as Count';\n\t});\n\n\tdialect.blocks.add('term', function(params) {\n\t\tvar term = params.term;\n\t\tvar type = params.type || 'field';\n\n\t\tvar notObject = isSimpleValue(term) || _.isArray(term);\n\n\t\tif (notObject && !_.isString(term)) type = 'value';\n\n\t\tif (notObject || !isTerm(term)) {\n\t\t\tterm = _(term).chain().pick('cast', 'alias').extend(_.object([type], [term])).value();\n\t\t}\n\n\t\ttype = _(termKeys).find(function(key) {\n\t\t\treturn _.has(term, key);\n\t\t});\n\n\t\tvar result = dialect.buildBlock(type, _(term).pick(type));\n\n\t\tif (_.has(term, 'cast')) {\n\t\t\tresult = 'cast(' + result + ' as ' + term.cast + ')';\n\t\t}\n\n\t\tif (_.has(term, 'alias')) {\n\t\t\tresult += ' ' + dialect.buildBlock('alias', {alias: term.alias});\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('table', function(params) {\n\t\treturn dialect.buildBlock('name', {name: params.table});\n\t});\n\n\tdialect.blocks.add('func', function(params) {\n\t\tvar func = params.func;\n\n\t\tif (_.isString(func)) func = {name: func};\n\n\t\tif (!_.isObject(func)) {\n\t\t\tthrow new Error('Invalid `func` property type \"' + (typeof func) + '\"');\n\t\t}\n\n\t\tif (!_.has(func, 'name')) {\n\t\t\tthrow new Error('`func.name` property is required');\n\t\t}\n\n\t\tvar args = '';\n\n\t\tif (_.isArray(func.args)) {\n\t\t\targs = _(func.args).map(function(arg) {\n\t\t\t\treturn dialect.buildBlock('term', {term: arg, type: 'value'});\n\t\t\t}).join(', ');\n\t\t}\n\n\t\treturn func.name + '(' + args + ')';\n\t});\n\n\tdialect.blocks.add('expression', function(params) {\n\t\tvar expression = params.expression;\n\n\t\tif (_.isString(expression)) expression = {pattern: expression};\n\n\t\tif (!_.isObject(expression)) {\n\t\t\tthrow new Error('Invalid `expression` property type \"' + (typeof expression) + '\"');\n\t\t}\n\n\t\tif (!_.has(expression, 'pattern')) {\n\t\t\tthrow new Error('`expression.pattern` property is required');\n\t\t}\n\n\t\tvar values = expression.values || {};\n\n\t\treturn expression.pattern.replace(/\\{([a-z0-9]+)\\}/ig, function(fullMatch, block) {\n\t\t\tif (!_.has(values, block)) {\n\t\t\t\tthrow new Error('Field `' + block + '` is required in `expression.values` property');\n\t\t\t}\n\n\t\t\treturn dialect.buildBlock('term', {term: values[block], type: 'value'});\n\t\t}).trim();\n\t});\n\n\tdialect.blocks.add('field', function(params) {\n\t\tvar field = params.field;\n\n\t\tif (_.isString(field)) field = {name: field};\n\n\t\tif (!_.isObject(field)) {\n\t\t\tthrow new Error('Invalid `field` property type \"' + (typeof field) + '\"');\n\t\t}\n\n\t\tif (!_.has(field, 'name')) {\n\t\t\tthrow new Error('`field.name` property is required');\n\t\t}\n\n\t\tvar result = dialect.buildBlock('name', {name: field.name});\n\n\t\tif (_.has(field, 'table')) {\n\t\t\tresult = dialect.buildBlock('table', {table: field.table}) + '.' + result;\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('value', function(params) {\n\t\tvar value = params.value;\n\t\tif (_.isRegExp(value)) value = value.source;\n\t\treturn dialect.builder._pushValue(value);\n\t});\n\n\tdialect.blocks.add('name', function(params) {\n\t\treturn dialect._wrapIdentifier(params.name);\n\t});\n\n\tdialect.blocks.add('alias', function(params) {\n\t\tvar alias = params.alias;\n\n\t\tif (_.isString(alias)) alias = {name: alias};\n\n\t\tif (!_.isObject(alias)) {\n\t\t\tthrow new Error('Invalid `alias` property type \"' + (typeof alias) + '\"');\n\t\t}\n\t\tif (!_.has(alias, 'name')) {\n\t\t\tthrow new Error('`alias.name` property is required');\n\t\t}\n\n\t\tvar result = 'as ' + dialect._wrapIdentifier(alias.name);\n\n\t\tif (_.isArray(alias.columns)) {\n\t\t\tresult += '(' + _(alias.columns).map(function(column) {\n\t\t\t\treturn dialect._wrapIdentifier(column);\n\t\t\t}).join(', ') + ')';\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('condition', function(params) {\n\t\tvar result = dialect.buildCondition({\n\t\t\tvalue: params.condition,\n\t\t\tdefaultFetchingOperator: '$value'\n\t\t});\n\n\t\tif (result) {\n\t\t\tresult = 'where ' + removeTopBrackets(result);\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('modifier', function(params) {\n\t\tvar result = dialect.buildModifier({\n\t\t\tmodifier: params.modifier\n\t\t});\n\n\t\tif (result) {\n\t\t\tresult = 'set ' + result;\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('join', function(params) {\n\t\tvar join = params.join;\n\t\tvar result = '';\n\n\t\t// if join is array -> make each joinItem\n\t\tif (_.isArray(join)) {\n\t\t\tresult = _(join).map(function(joinItem) {\n\t\t\t\treturn dialect.buildTemplate('joinItem', joinItem);\n\t\t\t}).join(' ');\n\n\t\t// if join is object -> set table name from key and make each joinItem\n\t\t} else if (_.isObject(join)) {\n\t\t\tresult = _(join).map(function(joinItem, table) {\n\t\t\t\tif (!hasSome(joinItem, ['table', 'query', 'select', 'expression'])) {\n\t\t\t\t\tjoinItem = _.defaults({table: table}, joinItem);\n\t\t\t\t}\n\n\t\t\t\treturn dialect.buildTemplate('joinItem', joinItem);\n\t\t\t}).join(' ');\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('joinItem:type', function(params) {\n\t\treturn params.type.toLowerCase();\n\t});\n\n\tdialect.blocks.add('joinItem:on', function(params) {\n\t\t// `on` block is use `$field` as default query operator because it most used case\n\t\tvar result = dialect.buildCondition({\n\t\t\tvalue: params.on,\n\t\t\tdefaultFetchingOperator: '$field'\n\t\t});\n\n\t\tif (result) {\n\t\t\tresult = 'on ' + removeTopBrackets(result);\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('group', function(params) {\n\t\tvar group = params.group;\n\t\tvar result = '';\n\n\t\tif (_.isString(group)) group = [group];\n\n\t\tif (_.isArray(group)) {\n\t\t\tresult = _(group).map(function(field) {\n\t\t\t\treturn dialect._wrapIdentifier(field);\n\t\t\t}).join(', ');\n\t\t}\n\n\t\tif (result) {\n\t\t\tresult = 'group by ' + result;\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('having', function(params) {\n\t\tvar result = dialect.buildCondition({\n\t\t\tvalue: params.having,\n\t\t\tdefaultFetchingOperator: '$value'\n\t\t});\n\n\t\tif (result) {\n\t\t\tresult = 'having ' + removeTopBrackets(result);\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('sort', function(params) {\n\t\tvar sort = params.sort;\n\t\tvar result = '';\n\n\t\tif (_.isString(sort)) sort = [sort];\n\n\t\tif (_.isArray(sort)) {\n\t\t\tresult = _(sort).map(function(sortField) {\n\t\t\t\treturn dialect._wrapIdentifier(sortField);\n\t\t\t}).join(', ');\n\t\t} else if (_.isObject(sort)) {\n\t\t\tresult = _(sort).map(function(direction, field) {\n\t\t\t\treturn dialect._wrapIdentifier(field) + ' ' + (direction > 0 ? 'asc' : 'desc');\n\t\t\t}).join(', ');\n\t\t}\n\n\t\tif (result) {\n\t\t\tresult = 'order by ' + result;\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('limit', function(params) {\n\t\treturn 'limit ' + dialect.builder._pushValue(params.limit);\n\t});\n\n\tdialect.blocks.add('offset', function(params) {\n\t\treturn 'offset ' + dialect.builder._pushValue(params.offset);\n\t});\n\n\tdialect.blocks.add('or', function(params) {\n\t\treturn 'or ' + params.or;\n\t});\n\n\tdialect.blocks.add('insert:values', function(params) {\n\t\tvar values = params.values;\n\n\t\tif (!_.isArray(values)) values = [values];\n\n\t\tvar fields = params.fields || _(values)\n\t\t\t.chain()\n\t\t\t.map(function(row) {\n\t\t\t\treturn _(row).keys();\n\t\t\t})\n\t\t\t.flatten()\n\t\t\t.uniq()\n\t\t\t.value();\n\n\t\treturn dialect.buildTemplate('insertValues', {\n\t\t\tfields: fields,\n\t\t\tvalues: _(values).map(function(row) {\n\t\t\t\treturn _(fields).map(function(field) {\n\t\t\t\t\treturn dialect.buildBlock('value', {value: row[field]});\n\t\t\t\t});\n\t\t\t})\n\t\t});\n\t});\n\n\tdialect.blocks.add('insertValues:values', function(params) {\n\t\treturn _(params.values).map(function(row) {\n\t\t\treturn '(' + row.join(', ') + ')';\n\t\t}).join(', ');\n\t});\n\n\tdialect.blocks.add('queryBody', function(params) {\n\t\tvar queryBody = params.queryBody || {};\n\n\t\treturn dialect.buildTemplate(queryBody.type || 'select', queryBody);\n\t});\n\n\tdialect.blocks.add('query', function(params) {\n\t\treturn dialect.buildTemplate('subQuery', {queryBody: params.query});\n\t});\n\n\tdialect.blocks.add('select', function(params) {\n\t\treturn dialect.buildTemplate('subQuery', {queryBody: params.select});\n\t});\n\n\tdialect.blocks.add('queries', function(params) {\n\t\treturn _(params.queries).map(function(query) {\n\t\t\treturn dialect.buildTemplate('subQuery', {queryBody: query});\n\t\t}).join(' ' + params.type + (params.all ? ' all' : '') + ' ');\n\t});\n\n\tfunction buildWith(withList) {\n\t\tvar result = '';\n\n\t\t// if with clause is array -> make each withItem\n\t\tif (_.isArray(withList)) {\n\t\t\tresult = _(withList).map(function(withItem) {\n\t\t\t\treturn dialect.buildTemplate('withItem', withItem);\n\t\t\t}).join(', ');\n\n\t\t// if with clause is object -> set name from key and make each withItem\n\t\t} else if (_.isObject(withList)) {\n\t\t\tresult = _(withList).map(function(withItem, name) {\n\t\t\t\tif (!withItem.name) {\n\t\t\t\t\twithItem = _.clone(withItem);\n\t\t\t\t\twithItem.name = name;\n\t\t\t\t}\n\t\t\t\treturn dialect.buildTemplate('withItem', withItem);\n\t\t\t}).join(', ');\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tdialect.blocks.add('with', function(params) {\n\t\tvar result = buildWith(params['with']);\n\n\t\tif (result) result = 'with ' + result;\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('withRecursive', function(params) {\n\t\tvar result = buildWith(params.withRecursive);\n\n\t\tif (result) result = 'with recursive ' + result;\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('returning', function(params) {\n\t\tvar result = dialect.buildBlock('fields', {fields: params.returning});\n\n\t\tif (result) result = 'returning ' + result;\n\n\t\treturn result;\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/blocks.js\n ** module id = 161\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function(dialect) {\n\tdialect.modifiers.add('$set', function(field, value) {\n\t\treturn [field, '=', value].join(' ');\n\t});\n\n\tdialect.modifiers.add('$inc', function(field, value) {\n\t\treturn [field, '=', field, '+', value].join(' ');\n\t});\n\n\tdialect.modifiers.add('$dec', function(field, value) {\n\t\treturn [field, '=', field, '-', value].join(' ');\n\t});\n\n\tdialect.modifiers.add('$mul', function(field, value) {\n\t\treturn [field, '=', field, '*', value].join(' ');\n\t});\n\n\tdialect.modifiers.add('$div', function(field, value) {\n\t\treturn [field, '=', field, '/', value].join(' ');\n\t});\n\n\tdialect.modifiers.add('$default', function(field) {\n\t\treturn [field, '=', 'default'].join(' ');\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/modifiers.js\n ** module id = 162\n ** module chunks = 0\n **/","'use strict';\n\nvar buildComparisonOperator = function(field, operator, value) {\n\treturn [field, operator, value].join(' ');\n};\n\nvar buildBooleanOperator = function(field, operator, value) {\n\treturn buildComparisonOperator(field, 'is' + (value ? '' : ' not'), operator);\n};\n\nmodule.exports = function(dialect) {\n\tdialect.operators.comparison.add('$eq', {\n\t\tinversedOperator: '$ne',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '=', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$ne', {\n\t\tinversedOperator: '$eq',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '!=', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$gt', {\n\t\tinversedOperator: '$lte',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '>', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$lt', {\n\t\tinversedOperator: '$gte',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '<', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$gte', {\n\t\tinversedOperator: '$lt',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '>=', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$lte', {\n\t\tinversedOperator: '$gt',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '<=', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$is', {\n\t\tinversedOperator: '$isNot',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'is', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$isNot', {\n\t\tinversedOperator: '$is',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'is not', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$isDistinct', {\n\t\tinversedOperator: '$isNotDistinct',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'is distinct from', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$isNotDistinct', {\n\t\tinversedOperator: '$isDistinct',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'is not distinct from', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$like', {\n\t\tinversedOperator: '$nlike',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'like', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nlike', {\n\t\tinversedOperator: '$like',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'not like', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$similarTo', {\n\t\tinversedOperator: '$nsimilarTo',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'similar to', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nsimilarTo', {\n\t\tinversedOperator: '$similarTo',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'not similar to', value);\n\t\t}\n\t});\n\n\n\tdialect.operators.comparison.add('$match', {\n\t\tinversedOperator: '$nmatch',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '~', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nmatch', {\n\t\tinversedOperator: '$match',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '!~', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$imatch', {\n\t\tinversedOperator: '$nimatch',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '~*', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nimatch', {\n\t\tinversedOperator: '$imatch',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, '!~*', value);\n\t\t}\n\t});\n\n\n\tdialect.operators.comparison.add('$null', {\n\t\tinversedOperator: '$nnull',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'null', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nnull', {\n\t\tinversedOperator: '$null',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'null', !value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$true', {\n\t\tinversedOperator: '$ntrue',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'true', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$ntrue', {\n\t\tinversedOperator: '$true',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'true', !value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$false', {\n\t\tinversedOperator: '$nfalse',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'false', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nfalse', {\n\t\tinversedOperator: '$false',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'false', !value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$unknown', {\n\t\tinversedOperator: '$nunknown',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'unknown', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nunknown', {\n\t\tinversedOperator: '$unknown',\n\t\tdefaultFetchingOperator: '$boolean',\n\t\tfn: function(field, value) {\n\t\t\treturn buildBooleanOperator(field, 'unknown', !value);\n\t\t}\n\t});\n\n\n\tdialect.operators.comparison.add('$in', {\n\t\tinversedOperator: '$nin',\n\t\tdefaultFetchingOperator: '$inValues',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'in', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nin', {\n\t\tinversedOperator: '$in',\n\t\tdefaultFetchingOperator: '$inValues',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'not in', value);\n\t\t}\n\t});\n\n\n\tdialect.operators.comparison.add('$between', {\n\t\tinversedOperator: '$nbetween',\n\t\tdefaultFetchingOperator: '$betweenValues',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'between', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nbetween', {\n\t\tinversedOperator: '$between',\n\t\tdefaultFetchingOperator: '$betweenValues',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonOperator(field, 'not between', value);\n\t\t}\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/operators/comparison.js\n ** module id = 163\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\n\nmodule.exports = function(dialect) {\n\tdialect.operators.fetching.add('$field', {\n\t\tfn: function(value) {\n\t\t\treturn dialect.buildBlock('term', {term: value, type: 'field'});\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$value', {\n\t\tfn: function(value) {\n\t\t\treturn dialect.buildBlock('term', {term: value, type: 'value'});\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$func', {\n\t\tfn: function(value) {\n\t\t\treturn dialect.buildBlock('term', {term: value, type: 'func'});\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$expression', {\n\t\tfn: function(value) {\n\t\t\treturn dialect.buildBlock('term', {term: value, type: 'expression'});\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$select', {\n\t\tfn: function(value) {\n\t\t\treturn dialect.buildTemplate('subQuery', {queryBody: value});\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$query', {\n\t\tfn: function(value) {\n\t\t\treturn dialect.buildTemplate('subQuery', {queryBody: value});\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$boolean', {\n\t\tfn: function(value) {\n\t\t\treturn Boolean(value);\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$inValues', {\n\t\tfn: function(value) {\n\t\t\tif (!_.isObject(value)) {\n\t\t\t\tthrow new Error('Invalid `$in/$nin` value type \"' + (typeof value) + '\"');\n\t\t\t}\n\n\t\t\tif (_.isArray(value)) {\n\t\t\t\tif (!value.length) value = [null];\n\n\t\t\t\treturn '(' + _(value).map(function(item) {\n\t\t\t\t\treturn dialect.builder._pushValue(item);\n\t\t\t\t}).join(', ') + ')';\n\t\t\t} else {\n\t\t\t\treturn dialect.buildTemplate('subQuery', {queryBody: value});\n\t\t\t}\n\t\t}\n\t});\n\n\tdialect.operators.fetching.add('$betweenValues', {\n\t\tfn: function(value) {\n\t\t\tif (!_.isArray(value)) {\n\t\t\t\tthrow new Error('Invalid `$between` value type \"' + (typeof value) + '\"');\n\t\t\t}\n\n\t\t\tif (value.length < 2) {\n\t\t\t\tthrow new Error('`$between` array length should be 2 or greater');\n\t\t\t}\n\n\t\t\treturn dialect.builder._pushValue(value[0]) + ' and ' + dialect.builder._pushValue(value[1]);\n\t\t}\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/operators/fetching.js\n ** module id = 164\n ** module chunks = 0\n **/","'use strict';\n\nvar comparisonOperatorsInit = require('./comparison');\nvar logicalOperatorsInit = require('./logical');\nvar fetchingOperatorsInit = require('./fetching');\nvar stateOperatorsInit = require('./state');\n\nmodule.exports = function(dialect) {\n\tcomparisonOperatorsInit(dialect);\n\tlogicalOperatorsInit(dialect);\n\tfetchingOperatorsInit(dialect);\n\tstateOperatorsInit(dialect);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/operators/index.js\n ** module id = 165\n ** module chunks = 0\n **/","'use strict';\n\nfunction buildLogicalOperator(operator, values) {\n\tif (!values.length) return '';\n\n\tvar result = values.join(' ' + operator + ' ');\n\tif (values.length > 1) result = '(' + result + ')';\n\n\treturn result;\n}\n\nmodule.exports = function(dialect) {\n\tdialect.operators.logical.add('$and', {\n\t\tfn: function(values) {\n\t\t\treturn buildLogicalOperator('and', values);\n\t\t}\n\t});\n\n\tdialect.operators.logical.add('$or', {\n\t\tfn: function(values) {\n\t\t\treturn buildLogicalOperator('or', values);\n\t\t}\n\t});\n\n\tdialect.operators.logical.add('$not', {\n\t\tfn: function(values) {\n\t\t\treturn 'not ' + buildLogicalOperator('and', values);\n\t\t}\n\t});\n\n\tdialect.operators.logical.add('$nor', {\n\t\tfn: function(values) {\n\t\t\treturn 'not ' + buildLogicalOperator('or', values);\n\t\t}\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/operators/logical.js\n ** module id = 166\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function(dialect) {\n\tdialect.operators.state.add('$not', {\n\t\tgetOperator: function(operator) {\n\t\t\tvar operatorParams = dialect.operators.comparison.get(operator);\n\n\t\t\tif (!operatorParams || !operatorParams.inversedOperator) {\n\t\t\t\tthrow new Error('Cannot get inversed operator for operator `' + operator +'`');\n\t\t\t}\n\n\t\t\treturn operatorParams.inversedOperator;\n\t\t}\n\t});\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/operators/state.js\n ** module id = 167\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\nvar templateChecks = require('../../utils/templateChecks');\n\nmodule.exports = function(dialect) {\n\tvar availableJoinTypes = ['natural', 'cross', 'inner', 'outer', 'left', 'right', 'full', 'self'];\n\tvar orRegExp = /^(rollback|abort|replace|fail|ignore)$/i;\n\n\t// private templates\n\n\tdialect.templates.add('query', {\n\t\tpattern: '{queryBody}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.requiredProp(type, params, 'queryBody');\n\t\t\ttemplateChecks.propType(type, params, 'queryBody', 'object');\n\t\t}\n\t});\n\n\n\tdialect.templates.add('subQuery', {\n\t\tpattern: '({queryBody})',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.requiredProp(type, params, 'queryBody');\n\t\t\ttemplateChecks.propType(type, params, 'queryBody', 'object');\n\t\t}\n\t});\n\n\n\tdialect.templates.add('queriesCombination', {\n\t\tpattern: '{with} {withRecursive} {queries} {sort} {limit} {offset}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);\n\t\t\ttemplateChecks.propType(type, params, 'with', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'withRecursive', 'object');\n\n\t\t\ttemplateChecks.requiredProp(type, params, 'queries');\n\t\t\ttemplateChecks.propType(type, params, 'queries', 'array');\n\t\t\ttemplateChecks.minPropLength(type, params, 'queries', 2);\n\n\t\t\ttemplateChecks.propType(type, params, 'sort', ['string', 'array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'limit', ['number', 'string']);\n\n\t\t\ttemplateChecks.propType(type, params, 'offset', ['number', 'string']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('insertValues', {\n\t\tpattern: '({fields}) values {values}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.requiredProp('values', params, 'fields');\n\t\t\ttemplateChecks.propType('values', params, 'fields', 'array');\n\t\t\ttemplateChecks.minPropLength('values', params, 'fields', 1);\n\n\t\t\ttemplateChecks.requiredProp('values', params, 'values');\n\t\t\ttemplateChecks.propType('values', params, 'values', 'array');\n\t\t\ttemplateChecks.minPropLength('values', params, 'values', 1);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('joinItem', {\n\t\tpattern: '{type} join {table} {query} {select} {expression} {alias} {on}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.propType('join', params, 'type', 'string');\n\t\t\ttemplateChecks.customProp('join', params, 'type', function(value) {\n\t\t\t\tvar splitType = _(value.toLowerCase().split(' ')).compact();\n\t\t\t\treturn !_.difference(splitType, availableJoinTypes).length;\n\t\t\t});\n\n\t\t\ttemplateChecks.atLeastOneOfProps('join', params, ['table', 'query', 'select', 'expression']);\n\t\t\ttemplateChecks.onlyOneOfProps('join', params, ['table', 'query', 'select', 'expression']);\n\n\t\t\ttemplateChecks.propType('join', params, 'table', 'string');\n\t\t\ttemplateChecks.propType('join', params, 'query', 'object');\n\t\t\ttemplateChecks.propType('join', params, 'select', 'object');\n\t\t\ttemplateChecks.propType('join', params, 'expression', ['string', 'object']);\n\n\t\t\ttemplateChecks.propType('join', params, 'alias', ['string', 'object']);\n\n\t\t\ttemplateChecks.propType('join', params, 'on', ['array', 'object']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('withItem', {\n\t\tpattern: '{name} {fields} as {query} {select} {expression}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.requiredProp('with', params, 'name');\n\t\t\ttemplateChecks.propType('with', params, 'name', 'string');\n\n\t\t\ttemplateChecks.propType(type, params, 'fields', ['array', 'object']);\n\n\t\t\ttemplateChecks.atLeastOneOfProps('with', params, ['query', 'select', 'expression']);\n\t\t\ttemplateChecks.onlyOneOfProps('with', params, ['query', 'select', 'expression']);\n\n\t\t\ttemplateChecks.propType('with', params, 'query', 'object');\n\t\t\ttemplateChecks.propType('with', params, 'select', 'object');\n\t\t\ttemplateChecks.propType('with', params, 'expression', ['string', 'object']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('fromItem', {\n\t\tpattern: '{table} {query} {select} {expression} {alias}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.atLeastOneOfProps('from', params, ['table', 'query', 'select', 'expression']);\n\t\t\ttemplateChecks.onlyOneOfProps('from', params, ['table', 'query', 'select', 'expression']);\n\n\t\t\ttemplateChecks.propType('from', params, 'table', 'string');\n\t\t\ttemplateChecks.propType('from', params, 'query', 'object');\n\t\t\ttemplateChecks.propType('from', params, 'select', 'object');\n\t\t\ttemplateChecks.propType('from', params, 'expression', ['string', 'object']);\n\n\t\t\ttemplateChecks.propType('from', params, 'alias', ['string', 'object']);\n\t\t}\n\t});\n\n\n\t// public templates\n\n\tdialect.templates.add('select', {\n\t\tpattern: '{with} {withRecursive} select {distinct} {fields} {count} ' +\n\t\t\t'from {from} {table} {query} {select} {expression} {alias} ' +\n\t\t\t'{join} {condition} {group} {having} {sort} {limit} {offset}',\n\t\tdefaults: {\n\t\t\tfields: {}\n\t\t},\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);\n\t\t\ttemplateChecks.propType(type, params, 'with', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'withRecursive', 'object');\n\n\t\t\ttemplateChecks.propType(type, params, 'distinct', 'boolean');\n\n\t\t\ttemplateChecks.propType(type, params, 'fields', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'count', 'object');\n\n\t\t\ttemplateChecks.propType(type, params, 'from', ['string', 'array', 'object']);\n\n\t\t\ttemplateChecks.atLeastOneOfProps(type, params, ['table', 'query', 'select', 'expression']);\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['table', 'query', 'select', 'expression']);\n\n\t\t\ttemplateChecks.propType(type, params, 'table', 'string');\n\t\t\ttemplateChecks.propType(type, params, 'query', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'select', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'expression', ['string', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'alias', ['string', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'join', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'condition', ['array', 'object']);\n\t\t\ttemplateChecks.propType(type, params, 'having', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'group', ['string', 'array']);\n\n\t\t\ttemplateChecks.propType(type, params, 'sort', ['string', 'array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'limit', ['number', 'string']);\n\n\t\t\ttemplateChecks.propType(type, params, 'offset', ['number', 'string']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('insert', {\n\t\tpattern: '{with} {withRecursive} insert {or} into {table} {values} {condition} ' +\n\t\t\t'{returning}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);\n\t\t\ttemplateChecks.propType(type, params, 'with', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'withRecursive', 'object');\n\n\t\t\ttemplateChecks.propType(type, params, 'or', 'string');\n\t\t\ttemplateChecks.propMatch(type, params, 'or', orRegExp);\n\n\t\t\ttemplateChecks.requiredProp(type, params, 'table');\n\t\t\ttemplateChecks.propType(type, params, 'table', 'string');\n\n\t\t\ttemplateChecks.requiredProp(type, params, 'values');\n\t\t\ttemplateChecks.propType(type, params, 'values', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'condition', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'returning', ['array', 'object']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('update', {\n\t\tpattern: '{with} {withRecursive} update {or} {table} {alias} {modifier} {condition} {returning}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);\n\t\t\ttemplateChecks.propType(type, params, 'with', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'withRecursive', 'object');\n\n\t\t\ttemplateChecks.propType(type, params, 'or', 'string');\n\t\t\ttemplateChecks.propMatch(type, params, 'or', orRegExp);\n\n\t\t\ttemplateChecks.requiredProp(type, params, 'table');\n\t\t\ttemplateChecks.propType(type, params, 'table', 'string');\n\n\t\t\ttemplateChecks.propType(type, params, 'alias', 'string');\n\n\t\t\ttemplateChecks.requiredProp(type, params, 'modifier');\n\t\t\ttemplateChecks.propType(type, params, 'modifier', 'object');\n\n\t\t\ttemplateChecks.propType(type, params, 'condition', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'returning', ['array', 'object']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('remove', {\n\t\tpattern: '{with} {withRecursive} delete from {table} {alias} {condition} {returning}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);\n\t\t\ttemplateChecks.propType(type, params, 'with', 'object');\n\t\t\ttemplateChecks.propType(type, params, 'withRecursive', 'object');\n\n\t\t\ttemplateChecks.requiredProp(type, params, 'table');\n\t\t\ttemplateChecks.propType(type, params, 'table', 'string');\n\n\t\t\ttemplateChecks.propType(type, params, 'alias', 'string');\n\n\t\t\ttemplateChecks.propType(type, params, 'condition', ['array', 'object']);\n\n\t\t\ttemplateChecks.propType(type, params, 'returning', ['array', 'object']);\n\t\t}\n\t});\n\n\n\tdialect.templates.add('union', dialect.templates.get('queriesCombination'));\n\n\n\tdialect.templates.add('intersect', dialect.templates.get('queriesCombination'));\n\n\n\tdialect.templates.add('except', dialect.templates.get('queriesCombination'));\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/base/templates.js\n ** module id = 168\n ** module chunks = 0\n **/","'use strict';\n\nvar BaseDialect = require('../base');\nvar _ = require('underscore');\nvar util = require('util');\n\nvar Dialect = module.exports = function(builder) {\n\tBaseDialect.call(this, builder);\n};\n\nutil.inherits(Dialect, BaseDialect);\n\nDialect.prototype.config = _({}).extend(BaseDialect.prototype.config, {});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/mssql/index.js\n ** module id = 169\n ** module chunks = 0\n **/","'use strict';\n\nvar BaseDialect = require('../base');\nvar _ = require('underscore');\nvar util = require('util');\n\nvar Dialect = module.exports = function(builder) {\n\tBaseDialect.call(this, builder);\n};\n\nutil.inherits(Dialect, BaseDialect);\n\nDialect.prototype.config = _({}).extend(BaseDialect.prototype.config, {\n\tidentifierPrefix: '`',\n\tidentifierSuffix: '`'\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/mysql/index.js\n ** module id = 170\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\n\nmodule.exports = function(dialect) {\n\tvar parentValueBlock = dialect.blocks.get('value');\n\tdialect.blocks.set('value', function(params) {\n\t\tvar value = params.value;\n\n\t\tvar result;\n\t\tif (_.isArray(value)) {\n\t\t\tresult = 'array[' + _(value).map(function(item) {\n\t\t\t\treturn dialect.builder._pushValue(item);\n\t\t\t}).join(', ') + ']';\n\t\t} else if (_.isObject(value)) {\n\t\t\tresult = dialect.builder._pushValue(JSON.stringify(value));\n\t\t} else {\n\t\t\tresult = parentValueBlock(params);\n\t\t}\n\n\t\treturn result;\n\t});\n\n\tdialect.blocks.add('explain:options', function(params) {\n\t\treturn '(' +\n\t\t\t_(params.options)\n\t\t\t\t.chain()\n\t\t\t\t.pick(['analyze', 'verbose', 'costs', 'buffers', 'timing', 'format'])\n\t\t\t\t.map(function(value, key) {\n\t\t\t\t\treturn key + ' ' + value;\n\t\t\t\t})\n\t\t\t\t.value()\n\t\t\t\t.join(', ') +\n\t\t\t')';\n\t});\n\n\tdialect.blocks.add('explain:analyze', function() {\n\t\treturn 'analyze';\n\t});\n\n\tdialect.blocks.add('explain:verbose', function() {\n\t\treturn 'verbose';\n\t});\n\n\tdialect.blocks.add('distinctOn', function(params) {\n\t\tvar distinctOn = params.distinctOn;\n\t\tvar result = '';\n\n\t\tif (_.isString(distinctOn)) distinctOn = [distinctOn];\n\n\t\tif (_.isArray(distinctOn)) {\n\t\t\tresult = _(distinctOn).map(function(distinctOnField) {\n\t\t\t\treturn dialect._wrapIdentifier(distinctOnField);\n\t\t\t}).join(', ');\n\t\t}\n\n\t\tif (result) {\n\t\t\tresult = 'distinct on (' + result + ')';\n\t\t}\n\n\t\treturn result;\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/postgresql/blocks.js\n ** module id = 171\n ** module chunks = 0\n **/","'use strict';\n\nvar BaseDialect = require('../base');\nvar\t_ = require('underscore');\nvar\tutil = require('util');\n\nvar templatesInit = require('./templates');\nvar blocksInit = require('./blocks');\nvar operatorsInit = require('./operators');\n\nvar Dialect = module.exports = function(builder) {\n\tBaseDialect.call(this, builder);\n\n\t// init templates\n\ttemplatesInit(this);\n\n\t// init blocks\n\tblocksInit(this);\n\n\t// init operators\n\toperatorsInit(this);\n};\n\nutil.inherits(Dialect, BaseDialect);\n\nDialect.prototype.config = _({\n\tjsonSeparatorRegexp: /->>?/g\n}).extend(BaseDialect.prototype.config);\n\nDialect.prototype._wrapIdentifier = function(name) {\n\t// split by json separator\n\tvar nameParts = name.split(this.config.jsonSeparatorRegexp);\n\tvar separators = name.match(this.config.jsonSeparatorRegexp);\n\n\t// wrap base identifier\n\tvar identifier = BaseDialect.prototype._wrapIdentifier.call(this, nameParts[0]);\n\n\t// wrap all json identifier and join them with separators\n\tidentifier += _(separators).reduce(function(memo, separator, index) {\n\t\treturn memo + separator + '\\'' + nameParts[index + 1] + '\\'';\n\t}, '');\n\n\treturn identifier;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/postgresql/index.js\n ** module id = 172\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function(dialect) {\n\tvar buildComparisonCondition = function(field, operator, value) {\n\t\treturn [field, operator, value].join(' ');\n\t};\n\n\tdialect.operators.comparison.add('$jsonContains', {\n\t\tdefaultFetchingOperator: '$json',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, '@>', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$jsonIn', {\n\t\tdefaultFetchingOperator: '$json',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, '<@', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$jsonHas', {\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, '?', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$jsonHasAny', {\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, '?|', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$jsonHasAll', {\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, '?&', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$ilike', {\n\t\tinversedOperator: '$nilike',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, 'ilike', value);\n\t\t}\n\t});\n\n\tdialect.operators.comparison.add('$nilike', {\n\t\tinversedOperator: '$ilike',\n\t\tdefaultFetchingOperator: '$value',\n\t\tfn: function(field, value) {\n\t\t\treturn buildComparisonCondition(field, 'not ilike', value);\n\t\t}\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/postgresql/operators/comparison.js\n ** module id = 173\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = function(dialect) {\n\tdialect.operators.fetching.add('$json', {\n\t\tfn: function(value, end) {\n\t\t\tif (end) value = {value: value};\n\t\t\treturn dialect.buildBlock('term', {term: value, type: 'value'});\n\t\t}\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/postgresql/operators/fetching.js\n ** module id = 174\n ** module chunks = 0\n **/","'use strict';\n\nvar comparisonOperatorsInit = require('./comparison');\nvar fetchingOperatorsInit = require('./fetching');\n\nmodule.exports = function(dialect) {\n\tcomparisonOperatorsInit(dialect);\n\tfetchingOperatorsInit(dialect);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/postgresql/operators/index.js\n ** module id = 175\n ** module chunks = 0\n **/","'use strict';\n\nvar _ = require('underscore');\nvar templateChecks = require('../../utils/templateChecks');\n\nmodule.exports = function(dialect) {\n\tvar explainFormatRegExp = /^(text|xml|json|yaml)$/i;\n\n\tdialect.templates.add('explain', {\n\t\tpattern: 'explain {options} {analyze} {verbose} {query} {select} {expression}',\n\t\tvalidate: function(type, params) {\n\t\t\ttemplateChecks.atLeastOneOfProps(type, params, ['query', 'select', 'expression']);\n\t\t\ttemplateChecks.onlyOneOfProps(type, params, ['query', 'select', 'expression']);\n\n\t\t\ttemplateChecks.propType(type, params, 'options', 'object');\n\n\t\t\tif (!_.isUndefined(params.options)) {\n\t\t\t\ttemplateChecks.atLeastOneOfProps(\n\t\t\t\t\t'explain:options',\n\t\t\t\t\tparams.options,\n\t\t\t\t\t['analyze', 'verbose', 'costs', 'buffers', 'timing', 'format']\n\t\t\t\t);\n\t\t\t\ttemplateChecks.propType('explain:options', params.options, 'analyze', 'boolean');\n\t\t\t\ttemplateChecks.propType('explain:options', params.options, 'verbose', 'boolean');\n\t\t\t\ttemplateChecks.propType('explain:options', params.options, 'costs', 'boolean');\n\t\t\t\ttemplateChecks.propType('explain:options', params.options, 'buffers', 'boolean');\n\t\t\t\ttemplateChecks.propType('explain:options', params.options, 'timing', 'boolean');\n\t\t\t\ttemplateChecks.propType('explain:options', params.options, 'format', 'string');\n\t\t\t\ttemplateChecks.propMatch('explain:options', params.options, 'format', explainFormatRegExp);\n\t\t\t}\n\n\t\t\ttemplateChecks.propType(type, params, 'analyze', 'boolean');\n\t\t\ttemplateChecks.propType(type, params, 'verbose', 'boolean');\n\t\t}\n\t});\n\n\t// patch parent select template to add some blocks\n\tvar selectTemplate = dialect.templates.get('select');\n\tselectTemplate.pattern = selectTemplate.pattern.replace('{distinct}', '{distinct} {distinctOn}');\n\n\tvar parentSelectValidate = selectTemplate.validate;\n\tselectTemplate.validate = function(type, params) {\n\t\tparentSelectValidate(type, params);\n\n\t\ttemplateChecks.propType(type, params, 'distinctOn', ['string', 'array']);\n\t};\n\n\tdialect.templates.set('select', selectTemplate);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/postgresql/templates.js\n ** module id = 176\n ** module chunks = 0\n **/","'use strict';\n\nvar\t_ = require('underscore');\n\nmodule.exports = function(dialect) {\n\tdialect.blocks.add('offset', function(params) {\n\t\tvar limit = '';\n\n\t\tif (_.isUndefined(params.limit)) {\n\t\t\tlimit = dialect.buildBlock('limit', {limit: -1}) + ' ';\n\t\t}\n\n\t\treturn limit + 'offset ' + dialect.builder._pushValue(params.offset);\n\t});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/sqlite/blocks.js\n ** module id = 177\n ** module chunks = 0\n **/","'use strict';\n\nvar BaseDialect = require('../base');\nvar _ = require('underscore');\nvar util = require('util');\nvar blocksInit = require('./blocks');\n\nvar Dialect = module.exports = function(builder) {\n\tBaseDialect.call(this, builder);\n\n\t// init blocks\n\tblocksInit(this);\n};\n\nutil.inherits(Dialect, BaseDialect);\n\nDialect.prototype.config = _({}).extend(BaseDialect.prototype.config);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/dialects/sqlite/index.js\n ** module id = 178\n ** module chunks = 0\n **/","'use strict';\n\nvar Builder = require('./builder');\n\nmodule.exports = function(options) {\n\treturn new Builder(options);\n};\nmodule.exports.Builder = Builder;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/index.js\n ** module id = 179\n ** module chunks = 0\n **/","'use strict';\n\nmodule.exports = ValuesStore;\n\nfunction ValuesStore(options) {\n\toptions = options || {};\n\tthis._values = options.values || {};\n}\n\nValuesStore.prototype.add = ValuesStore.prototype.set = function(name, value) {\n\tthis._values[name] = value;\n};\n\nValuesStore.prototype.get = function(name) {\n\treturn this._values[name] || null;\n};\n\nValuesStore.prototype.remove = function(name) {\n\tdelete this._values[name];\n};\n\nValuesStore.prototype.has = function(name) {\n\treturn this._values.hasOwnProperty(name);\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-sql/lib/utils/valuesStore.js\n ** module id = 180\n ** module chunks = 0\n **/","var json = typeof JSON !== 'undefined' ? JSON : require('jsonify');\n\nmodule.exports = function (obj, opts) {\n    if (!opts) opts = {};\n    if (typeof opts === 'function') opts = { cmp: opts };\n    var space = opts.space || '';\n    if (typeof space === 'number') space = Array(space+1).join(' ');\n    var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;\n    var replacer = opts.replacer || function(key, value) { return value; };\n\n    var cmp = opts.cmp && (function (f) {\n        return function (node) {\n            return function (a, b) {\n                var aobj = { key: a, value: node[a] };\n                var bobj = { key: b, value: node[b] };\n                return f(aobj, bobj);\n            };\n        };\n    })(opts.cmp);\n\n    var seen = [];\n    return (function stringify (parent, key, node, level) {\n        var indent = space ? ('\\n' + new Array(level + 1).join(space)) : '';\n        var colonSeparator = space ? ': ' : ':';\n\n        if (node && node.toJSON && typeof node.toJSON === 'function') {\n            node = node.toJSON();\n        }\n\n        node = replacer.call(parent, key, node);\n\n        if (node === undefined) {\n            return;\n        }\n        if (typeof node !== 'object' || node === null) {\n            return json.stringify(node);\n        }\n        if (isArray(node)) {\n            var out = [];\n            for (var i = 0; i < node.length; i++) {\n                var item = stringify(node, i, node[i], level+1) || json.stringify(null);\n                out.push(indent + space + item);\n            }\n            return '[' + out.join(',') + indent + ']';\n        }\n        else {\n            if (seen.indexOf(node) !== -1) {\n                if (cycles) return json.stringify('__cycle__');\n                throw new TypeError('Converting circular structure to JSON');\n            }\n            else seen.push(node);\n\n            var keys = objectKeys(node).sort(cmp && cmp(node));\n            var out = [];\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                var value = stringify(node, key, node[key], level+1);\n\n                if(!value) continue;\n\n                var keyValue = json.stringify(key)\n                    + colonSeparator\n                    + value;\n                ;\n                out.push(indent + space + keyValue);\n            }\n            return '{' + out.join(',') + indent + '}';\n        }\n    })({ '': obj }, '', obj, 0);\n};\n\nvar isArray = Array.isArray || function (x) {\n    return {}.toString.call(x) === '[object Array]';\n};\n\nvar objectKeys = Object.keys || function (obj) {\n    var has = Object.prototype.hasOwnProperty || function () { return true };\n    var keys = [];\n    for (var key in obj) {\n        if (has.call(obj, key)) keys.push(key);\n    }\n    return keys;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/json-stable-stringify/index.js\n ** module id = 181\n ** module chunks = 0\n **/","exports.parse = require('./lib/parse');\nexports.stringify = require('./lib/stringify');\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jsonify/index.js\n ** module id = 182\n ** module chunks = 0\n **/","var at, // The index of the current character\n    ch, // The current character\n    escapee = {\n        '\"':  '\"',\n        '\\\\': '\\\\',\n        '/':  '/',\n        b:    '\\b',\n        f:    '\\f',\n        n:    '\\n',\n        r:    '\\r',\n        t:    '\\t'\n    },\n    text,\n\n    error = function (m) {\n        // Call error when something is wrong.\n        throw {\n            name:    'SyntaxError',\n            message: m,\n            at:      at,\n            text:    text\n        };\n    },\n    \n    next = function (c) {\n        // If a c parameter is provided, verify that it matches the current character.\n        if (c && c !== ch) {\n            error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n        }\n        \n        // Get the next character. When there are no more characters,\n        // return the empty string.\n        \n        ch = text.charAt(at);\n        at += 1;\n        return ch;\n    },\n    \n    number = function () {\n        // Parse a number value.\n        var number,\n            string = '';\n        \n        if (ch === '-') {\n            string = '-';\n            next('-');\n        }\n        while (ch >= '0' && ch <= '9') {\n            string += ch;\n            next();\n        }\n        if (ch === '.') {\n            string += '.';\n            while (next() && ch >= '0' && ch <= '9') {\n                string += ch;\n            }\n        }\n        if (ch === 'e' || ch === 'E') {\n            string += ch;\n            next();\n            if (ch === '-' || ch === '+') {\n                string += ch;\n                next();\n            }\n            while (ch >= '0' && ch <= '9') {\n                string += ch;\n                next();\n            }\n        }\n        number = +string;\n        if (!isFinite(number)) {\n            error(\"Bad number\");\n        } else {\n            return number;\n        }\n    },\n    \n    string = function () {\n        // Parse a string value.\n        var hex,\n            i,\n            string = '',\n            uffff;\n        \n        // When parsing for string values, we must look for \" and \\ characters.\n        if (ch === '\"') {\n            while (next()) {\n                if (ch === '\"') {\n                    next();\n                    return string;\n                } else if (ch === '\\\\') {\n                    next();\n                    if (ch === 'u') {\n                        uffff = 0;\n                        for (i = 0; i < 4; i += 1) {\n                            hex = parseInt(next(), 16);\n                            if (!isFinite(hex)) {\n                                break;\n                            }\n                            uffff = uffff * 16 + hex;\n                        }\n                        string += String.fromCharCode(uffff);\n                    } else if (typeof escapee[ch] === 'string') {\n                        string += escapee[ch];\n                    } else {\n                        break;\n                    }\n                } else {\n                    string += ch;\n                }\n            }\n        }\n        error(\"Bad string\");\n    },\n\n    white = function () {\n\n// Skip whitespace.\n\n        while (ch && ch <= ' ') {\n            next();\n        }\n    },\n\n    word = function () {\n\n// true, false, or null.\n\n        switch (ch) {\n        case 't':\n            next('t');\n            next('r');\n            next('u');\n            next('e');\n            return true;\n        case 'f':\n            next('f');\n            next('a');\n            next('l');\n            next('s');\n            next('e');\n            return false;\n        case 'n':\n            next('n');\n            next('u');\n            next('l');\n            next('l');\n            return null;\n        }\n        error(\"Unexpected '\" + ch + \"'\");\n    },\n\n    value,  // Place holder for the value function.\n\n    array = function () {\n\n// Parse an array value.\n\n        var array = [];\n\n        if (ch === '[') {\n            next('[');\n            white();\n            if (ch === ']') {\n                next(']');\n                return array;   // empty array\n            }\n            while (ch) {\n                array.push(value());\n                white();\n                if (ch === ']') {\n                    next(']');\n                    return array;\n                }\n                next(',');\n                white();\n            }\n        }\n        error(\"Bad array\");\n    },\n\n    object = function () {\n\n// Parse an object value.\n\n        var key,\n            object = {};\n\n        if (ch === '{') {\n            next('{');\n            white();\n            if (ch === '}') {\n                next('}');\n                return object;   // empty object\n            }\n            while (ch) {\n                key = string();\n                white();\n                next(':');\n                if (Object.hasOwnProperty.call(object, key)) {\n                    error('Duplicate key \"' + key + '\"');\n                }\n                object[key] = value();\n                white();\n                if (ch === '}') {\n                    next('}');\n                    return object;\n                }\n                next(',');\n                white();\n            }\n        }\n        error(\"Bad object\");\n    };\n\nvalue = function () {\n\n// Parse a JSON value. It could be an object, an array, a string, a number,\n// or a word.\n\n    white();\n    switch (ch) {\n    case '{':\n        return object();\n    case '[':\n        return array();\n    case '\"':\n        return string();\n    case '-':\n        return number();\n    default:\n        return ch >= '0' && ch <= '9' ? number() : word();\n    }\n};\n\n// Return the json_parse function. It will have access to all of the above\n// functions and variables.\n\nmodule.exports = function (source, reviver) {\n    var result;\n    \n    text = source;\n    at = 0;\n    ch = ' ';\n    result = value();\n    white();\n    if (ch) {\n        error(\"Syntax error\");\n    }\n\n    // If there is a reviver function, we recursively walk the new structure,\n    // passing each name/value pair to the reviver function for possible\n    // transformation, starting with a temporary root object that holds the result\n    // in an empty key. If there is not a reviver function, we simply return the\n    // result.\n\n    return typeof reviver === 'function' ? (function walk(holder, key) {\n        var k, v, value = holder[key];\n        if (value && typeof value === 'object') {\n            for (k in value) {\n                if (Object.prototype.hasOwnProperty.call(value, k)) {\n                    v = walk(value, k);\n                    if (v !== undefined) {\n                        value[k] = v;\n                    } else {\n                        delete value[k];\n                    }\n                }\n            }\n        }\n        return reviver.call(holder, key, value);\n    }({'': result}, '')) : result;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jsonify/lib/parse.js\n ** module id = 183\n ** module chunks = 0\n **/","var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n    escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n    gap,\n    indent,\n    meta = {    // table of character substitutions\n        '\\b': '\\\\b',\n        '\\t': '\\\\t',\n        '\\n': '\\\\n',\n        '\\f': '\\\\f',\n        '\\r': '\\\\r',\n        '\"' : '\\\\\"',\n        '\\\\': '\\\\\\\\'\n    },\n    rep;\n\nfunction quote(string) {\n    // If the string contains no control characters, no quote characters, and no\n    // backslash characters, then we can safely slap some quotes around it.\n    // Otherwise we must also replace the offending characters with safe escape\n    // sequences.\n    \n    escapable.lastIndex = 0;\n    return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n        var c = meta[a];\n        return typeof c === 'string' ? c :\n            '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n    }) + '\"' : '\"' + string + '\"';\n}\n\nfunction str(key, holder) {\n    // Produce a string from holder[key].\n    var i,          // The loop counter.\n        k,          // The member key.\n        v,          // The member value.\n        length,\n        mind = gap,\n        partial,\n        value = holder[key];\n    \n    // If the value has a toJSON method, call it to obtain a replacement value.\n    if (value && typeof value === 'object' &&\n            typeof value.toJSON === 'function') {\n        value = value.toJSON(key);\n    }\n    \n    // If we were called with a replacer function, then call the replacer to\n    // obtain a replacement value.\n    if (typeof rep === 'function') {\n        value = rep.call(holder, key, value);\n    }\n    \n    // What happens next depends on the value's type.\n    switch (typeof value) {\n        case 'string':\n            return quote(value);\n        \n        case 'number':\n            // JSON numbers must be finite. Encode non-finite numbers as null.\n            return isFinite(value) ? String(value) : 'null';\n        \n        case 'boolean':\n        case 'null':\n            // If the value is a boolean or null, convert it to a string. Note:\n            // typeof null does not produce 'null'. The case is included here in\n            // the remote chance that this gets fixed someday.\n            return String(value);\n            \n        case 'object':\n            if (!value) return 'null';\n            gap += indent;\n            partial = [];\n            \n            // Array.isArray\n            if (Object.prototype.toString.apply(value) === '[object Array]') {\n                length = value.length;\n                for (i = 0; i < length; i += 1) {\n                    partial[i] = str(i, value) || 'null';\n                }\n                \n                // Join all of the elements together, separated with commas, and\n                // wrap them in brackets.\n                v = partial.length === 0 ? '[]' : gap ?\n                    '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' :\n                    '[' + partial.join(',') + ']';\n                gap = mind;\n                return v;\n            }\n            \n            // If the replacer is an array, use it to select the members to be\n            // stringified.\n            if (rep && typeof rep === 'object') {\n                length = rep.length;\n                for (i = 0; i < length; i += 1) {\n                    k = rep[i];\n                    if (typeof k === 'string') {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            }\n            else {\n                // Otherwise, iterate through all of the keys in the object.\n                for (k in value) {\n                    if (Object.prototype.hasOwnProperty.call(value, k)) {\n                        v = str(k, value);\n                        if (v) {\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\n                        }\n                    }\n                }\n            }\n            \n        // Join all of the member texts together, separated with commas,\n        // and wrap them in braces.\n\n        v = partial.length === 0 ? '{}' : gap ?\n            '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' :\n            '{' + partial.join(',') + '}';\n        gap = mind;\n        return v;\n    }\n}\n\nmodule.exports = function (value, replacer, space) {\n    var i;\n    gap = '';\n    indent = '';\n    \n    // If the space parameter is a number, make an indent string containing that\n    // many spaces.\n    if (typeof space === 'number') {\n        for (i = 0; i < space; i += 1) {\n            indent += ' ';\n        }\n    }\n    // If the space parameter is a string, it will be used as the indent string.\n    else if (typeof space === 'string') {\n        indent = space;\n    }\n\n    // If there is a replacer, it must be a function or an array.\n    // Otherwise, throw an error.\n    rep = replacer;\n    if (replacer && typeof replacer !== 'function'\n    && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) {\n        throw new Error('JSON.stringify');\n    }\n    \n    // Make a fake root object containing our value under the key of ''.\n    // Return the result of stringifying the value.\n    return str('', {'': value});\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/jsonify/lib/stringify.js\n ** module id = 184\n ** module chunks = 0\n **/","\n/**\n * Module dependencies.\n */\n\nvar ops = require('./ops');\nvar eql = require('mongo-eql');\nvar dot = require('dot-component');\nvar type = require('component-type');\nvar object = require('object-component');\nvar debug = require('debug')('mongo-query');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = filter;\nexports.ops = ops;\n\n/**\n * Filters an `obj` by the given `query` for subdocuments.\n *\n * @return {Object|Boolean} false if no match, or matched subdocs\n * @api public\n */\n\nfunction filter(obj, query){\n  obj = obj || {};\n  var ret = {};\n\n  for (var key in query) {\n    if (!query.hasOwnProperty(key)) continue;\n\n    // search value\n    var val = query[key];\n\n    // split the key into prefix and suffix\n    var keys = key.split('.');\n    var target = obj;\n    var prefix, search;\n    var matches = [];\n\n    walk_keys:\n    for (var i = 0; i < keys.length; i++) {\n      target = target[keys[i]];\n\n      switch (type(target)) {\n        case 'array':\n          // if it's an array subdocument search we stop here\n          prefix = keys.slice(0, i + 1).join('.');\n          search = keys.slice(i + 1).join('.');\n\n          debug('searching array \"%s\"', prefix);\n\n          // we special case operators that don't walk the array\n          if (val.$size && !search.length) {\n            return compare(val, target);\n          }\n\n          // walk subdocs\n          var subset = ret[prefix] || target;\n\n          for (var ii = 0; ii < subset.length; ii++) {\n            if (search.length) {\n              var q = {};\n              q[search] = val;\n              if ('object' == type(subset[ii])) {\n                debug('attempting subdoc search with query %j', q);\n                if (filter(subset[ii], q)) {\n                  // we ignore the ret value of filter\n                  if (!ret[prefix] || !~ret[prefix].indexOf(subset[ii])) {\n                    matches.push(subset[ii]);\n                  }\n                }\n              }\n            } else {\n              debug('performing simple array item search');\n              if (compare(val, subset[ii])) {\n                if (!ret[prefix] || !~ret[prefix].indexOf(subset[ii])) {\n                  matches.push(subset[ii]);\n                }\n              }\n            }\n          }\n\n          if (matches.length) {\n            ret[prefix] = ret[prefix] || [];\n            ret[prefix].push.apply(ret[prefix], matches);\n          }\n\n          // we don't continue the key search\n          break walk_keys;\n\n        case 'undefined':\n          // if we can't find the key\n          return false;\n\n        case 'object':\n          if (null != keys[i + 1]) {\n            continue;\n          } else if (!compare(val, target)) {\n            return false;\n          }\n          break;\n\n        default:\n          if (!compare(val, target)) return false;\n      }\n    }\n  }\n\n  return ret;\n}\n\n/**\n * Compares the given matcher with the document value.\n *\n * @param {Mixed} matcher\n * @param {Mixed} value\n * @api private\n */\n\nfunction compare(matcher, val){\n  if ('object' != type(matcher)) {\n    return eql(matcher, val);\n  }\n\n  var keys = object.keys(matcher);\n  if ('$' == keys[0][0]) {\n    for (var i = 0; i < keys.length; i++) {\n      // special case for sub-object matching\n      if ('$elemMatch' == keys[i]) {\n        return false !== filter(val, matcher.$elemMatch);\n      } else {\n        if (!ops[keys[i]](matcher[keys[i]], val)) return false;\n      }\n    }\n    return true;\n  } else {\n    return eql(matcher, val);\n  }\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mongo-query/filter.js\n ** module id = 185\n ** module chunks = 0\n **/","\n/**\n * Module dependencies.\n */\n\nvar mods = require('./mods');\nvar filter = require('./filter');\nvar dot = require('dot-component');\nvar type = require('component-type');\nvar object = require('object-component');\nvar debug = require('debug')('mongo-query');\n\n/**\n * Module exports.\n */\n\nmodule.exports = exports = query;\n\n/**\n * Export filter helper.\n */\n\nexports.filter = filter;\n\n/**\n * Export modifiers.\n */\n\nexports.mods = mods;\n\n/**\n * Execute a query.\n *\n * Options:\n *  - `strict` only modify if query matches\n *\n * @param {Object} object to alter\n * @param {Object} query to filter modifications by\n * @param {Object} update object\n * @param {Object} options\n */\n\nfunction query(obj, query, update, opts){\n  obj = obj || {};\n  opts = opts || {};\n  query = query || {};\n  update = update || {};\n\n  // strict mode\n  var strict = !!opts.strict;\n\n  var match;\n  var log = [];\n\n  if (object.length(query)) {\n    match = filter(obj, query);\n  }\n\n  if (!strict || false !== match) {\n    var keys = object.keys(update);\n    var transactions = [];\n\n    for (var i = 0, l = keys.length; i < l; i++) {\n      if (mods[keys[i]]) {\n        debug('found modifier \"%s\"', keys[i]);\n        for (var key in update[keys[i]]) {\n          var pos = key.indexOf('.$.');\n\n          if (~pos) {\n            var prefix = key.substr(0, pos);\n            var suffix = key.substr(pos + 3);\n\n            if (match[prefix]) {\n              debug('executing \"%s\" %s on first match within \"%s\"', key, keys[i], prefix);\n              var fn = mods[keys[i]](match[prefix][0], suffix, update[keys[i]][key]);\n              if (fn) {\n                // produce a key name replacing $ with the actual index\n                // TODO: this is unnecessarily expensive\n                var index = dot.get(obj, prefix).indexOf(match[prefix][0]);\n                fn.key = prefix + '.' + index + '.' + suffix;\n                fn.op = keys[i];\n                transactions.push(fn);\n              }\n            } else {\n              debug('ignoring \"%s\" %s - no matches within \"%s\"', key, keys[i], prefix);\n            }\n          } else {\n            var fn = mods[keys[i]](obj, key, update[keys[i]][key]);\n            if (fn) {\n              fn.key = key;\n              fn.op = keys[i];\n              transactions.push(fn);\n            }\n          }\n        }\n      } else {\n        debug('skipping unknown modifier \"%s\"', keys[i]);\n      }\n    }\n\n    if (transactions.length) {\n      // if we got here error free we process all transactions\n      for (var i = 0; i < transactions.length; i++) {\n        var fn = transactions[i];\n        var val = fn();\n        log.push({ op: fn.op, key: fn.key, value: val });\n      }\n    }\n  } else {\n    debug('no matches for query %j', query);\n  }\n\n  return log;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mongo-query/index.js\n ** module id = 186\n ** module chunks = 0\n **/","\n/**\n * Module dependencies.\n */\n\nvar eql = require('mongo-eql');\nvar dot = require('dot-component');\nvar type = require('component-type');\nvar keys = require('object-component').keys;\nvar debug = require('debug')('mongo-query');\n\n/**\n * Performs a `$set`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {String} value to set\n * @return {Function} transaction (unless noop)\n */\n\nexports.$set = function $set(obj, path, val){\n  var key = path.split('.').pop();\n  obj = dot.parent(obj, path, true);\n\n  switch (type(obj)) {\n    case 'object':\n      if (!eql(obj[key], val)) {\n        return function(){\n          obj[key] = val;\n          return val;\n        };\n      }\n      break;\n\n    case 'array':\n      if (numeric(key)) {\n        if (!eql(obj[key], val)) {\n          return function(){\n            obj[key] = val;\n            return val;\n          };\n        }\n      } else {\n        throw new Error('can\\'t append to array using string field name [' + key + ']');\n      }\n      break;\n\n    default:\n      throw new Error('$set only supports object not ' + type(obj));\n  }\n};\n\n/**\n * Performs an `$unset`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {String} value to set\n * @return {Function} transaction (unless noop)\n */\n\nexports.$unset = function $unset(obj, path){\n  var key = path.split('.').pop();\n  obj = dot.parent(obj, path);\n\n  switch (type(obj)) {\n    case 'array':\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        return function(){\n          // reminder: `delete arr[1]` === `delete arr['1']` [!]\n          delete obj[key];\n        };\n      } else {\n        // we fail silently\n        debug('ignoring unset of inexisting key');\n      }\n  }\n};\n\n/**\n * Performs a `$rename`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {String} value to set\n * @return {Function} transaction (unless noop)\n */\n\nexports.$rename = function $rename(obj, path, newKey){\n  // target = source\n  if (path == newKey) {\n    throw new Error('$rename source must differ from target');\n  }\n\n  // target is parent of source\n  if (0 === path.indexOf(newKey + '.')) {\n    throw new Error('$rename target may not be a parent of source');\n  }\n\n  var p = dot.parent(obj, path);\n  var t = type(p);\n\n  if ('object' == t) {\n    var key = path.split('.').pop();\n\n    if (p.hasOwnProperty(key)) {\n      return function(){\n        var val = p[key];\n        delete p[key];\n\n        // target does initialize the path\n        var newp = dot.parent(obj, newKey, true);\n\n        // and also fails silently upon type mismatch\n        if ('object' == type(newp)) {\n          newp[newKey.split('.').pop()] = val;\n        } else {\n          debug('invalid $rename target path type');\n        }\n\n        // returns the name of the new key\n        return newKey;\n      };\n    } else {\n      debug('ignoring rename from inexisting source');\n    }\n  } else if ('undefined' != t) {\n    throw new Error('$rename source field invalid');\n  }\n};\n\n/**\n * Performs an `$inc`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {String} value to set\n * @return {Function} transaction (unless noop)\n */\n\nexports.$inc = function $inc(obj, path, inc){\n  if ('number' != type(inc)) {\n    throw new Error('Modifier $inc allowed for numbers only');\n  }\n\n  obj = dot.parent(obj, path, true);\n  var key = path.split('.').pop();\n\n  switch (type(obj)) {\n    case 'array':\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        if ('number' != type(obj[key])) {\n          throw new Error('Cannot apply $inc modifier to non-number');\n        }\n\n        return function(){\n          obj[key] += inc;\n          return inc;\n        };\n      } else if('object' == type(obj) || numeric(key)){\n        return function(){\n          obj[key] = inc;\n          return inc;\n        };\n      } else {\n        throw new Error('can\\'t append to array using string field name [' + key + ']');\n      }\n      break;\n\n    default:\n      throw new Error('Cannot apply $inc modifier to non-number');\n  }\n};\n\n/**\n * Performs an `$pop`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {String} value to set\n * @return {Function} transaction (unless noop)\n */\n\nexports.$pop = function $pop(obj, path, val){\n  obj = dot.parent(obj, path);\n  var key = path.split('.').pop();\n\n  // we make sure the array is not just the parent of the main key\n  switch (type(obj)) {\n    case 'array':\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        switch (type(obj[key])) {\n          case 'array':\n            if (obj[key].length) {\n              return function(){\n                if (-1 == val) {\n                  return obj[key].shift();\n                } else {\n                  // mongodb allows any value to pop\n                  return obj[key].pop();\n                }\n              };\n            }\n            break;\n\n          case 'undefined':\n            debug('ignoring pop to inexisting key');\n            break;\n\n          default:\n            throw new Error('Cannot apply $pop modifier to non-array');\n        }\n      } else {\n        debug('ignoring pop to inexisting key');\n      }\n      break;\n\n    case 'undefined':\n      debug('ignoring pop to inexisting key');\n      break;\n  }\n};\n\n/**\n * Performs a `$push`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {Object} value to push\n * @return {Function} transaction (unless noop)\n */\n\nexports.$push = function $push(obj, path, val){\n  obj = dot.parent(obj, path, true);\n  var key = path.split('.').pop();\n\n  switch (type(obj)) {\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          return function(){\n            obj[key].push(val);\n            return val;\n          };\n        } else {\n          throw new Error('Cannot apply $push/$pushAll modifier to non-array');\n        }\n      } else {\n        return function(){\n          obj[key] = [val];\n          return val;\n        };\n      }\n      break;\n\n    case 'array':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          return function(){\n            obj[key].push(val);\n            return val;\n          };\n        } else {\n          throw new Error('Cannot apply $push/$pushAll modifier to non-array');\n        }\n      } else if (numeric(key)) {\n        return function(){\n          obj[key] = [val];\n          return val;\n        };\n      } else {\n        throw new Error('can\\'t append to array using string field name [' + key + ']');\n      }\n      break;\n  }\n};\n\n/**\n * Performs a `$pushAll`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {Array} values to push\n * @return {Function} transaction (unless noop)\n */\n\nexports.$pushAll = function $pushAll(obj, path, val){\n  if ('array' != type(val)) {\n    throw new Error('Modifier $pushAll/pullAll allowed for arrays only');\n  }\n\n  obj = dot.parent(obj, path, true);\n  var key = path.split('.').pop();\n\n  switch (type(obj)) {\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          return function(){\n            obj[key].push.apply(obj[key], val);\n            return val;\n          };\n        } else {\n          throw new Error('Cannot apply $push/$pushAll modifier to non-array');\n        }\n      } else {\n        return function(){\n          obj[key] = val;\n          return val;\n        };\n      }\n      break;\n\n    case 'array':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          return function(){\n            obj[key].push.apply(obj[key], val);\n            return val;\n          };\n        } else {\n          throw new Error('Cannot apply $push/$pushAll modifier to non-array');\n        }\n      } else if (numeric(key)) {\n        return function(){\n          obj[key] = val;\n          return val;\n        };\n      } else {\n        throw new Error('can\\'t append to array using string field name [' + key + ']');\n      }\n      break;\n  }\n};\n\n/**\n * Performs a `$pull`.\n */\n\nexports.$pull = function $pull(obj, path, val){\n  obj = dot.parent(obj, path, true);\n  var key = path.split('.').pop();\n  var t = type(obj);\n\n  switch (t) {\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          var pulled = [];\n          var splice = pull(obj[key], [val], pulled);\n          if (pulled.length) {\n            return function(){\n              splice();\n              return pulled;\n            };\n          }\n        } else {\n          throw new Error('Cannot apply $pull/$pullAll modifier to non-array');\n        }\n      }\n      break;\n\n    case 'array':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          var pulled = [];\n          var splice = pull(obj[key], [val], pulled);\n          if (pulled.length) {\n            return function(){\n              splice();\n              return pulled;\n            };\n          }\n        } else {\n          throw new Error('Cannot apply $pull/$pullAll modifier to non-array');\n        }\n      } else {\n        debug('ignoring pull to non array');\n      }\n      break;\n\n    default:\n      if ('undefined' != t) {\n        throw new Error('LEFT_SUBFIELD only supports Object: hello not: ' + t);\n      }\n  }\n};\n\n/**\n * Performs a `$pullAll`.\n */\n\nexports.$pullAll = function $pullAll(obj, path, val){\n  if ('array' != type(val)) {\n    throw new Error('Modifier $pushAll/pullAll allowed for arrays only');\n  }\n\n  obj = dot.parent(obj, path, true);\n  var key = path.split('.').pop();\n  var t = type(obj);\n\n  switch (t) {\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          var pulled = [];\n          var splice = pull(obj[key], val, pulled);\n          if (pulled.length) {\n            return function(){\n              splice();\n              return pulled;\n            };\n          }\n        } else {\n          throw new Error('Cannot apply $pull/$pullAll modifier to non-array');\n        }\n      }\n      break;\n\n    case 'array':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          var pulled = [];\n          var splice = pull(obj[key], val, pulled);\n          if (pulled.length) {\n            return function(){\n              splice();\n              return pulled;\n            };\n          }\n        } else {\n          throw new Error('Cannot apply $pull/$pullAll modifier to non-array');\n        }\n      } else {\n        debug('ignoring pull to non array');\n      }\n      break;\n\n    default:\n      if ('undefined' != t) {\n        throw new Error('LEFT_SUBFIELD only supports Object: hello not: ' + t);\n      }\n  }\n};\n\n/**\n * Performs a `$addToSet`.\n *\n * @param {Object} object to modify\n * @param {String} path to alter\n * @param {Object} value to push\n * @param {Boolean} internal, true if recursing\n * @return {Function} transaction (unless noop)\n */\n\nexports.$addToSet = function $addToSet(obj, path, val, recursing){\n  if (!recursing && 'array' == type(val.$each)) {\n    var fns = [];\n    for (var i = 0, l = val.$each.length; i < l; i++) {\n      var fn = $addToSet(obj, path, val.$each[i], true);\n      if (fn) fns.push(fn);\n    }\n    if (fns.length) {\n      return function(){\n        var values = [];\n        for (var i = 0; i < fns.length; i++) values.push(fns[i]());\n        return values;\n      };\n    } else {\n      return;\n    }\n  }\n\n  obj = dot.parent(obj, path, true);\n  var key = path.split('.').pop();\n\n  switch (type(obj)) {\n    case 'object':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          if (!has(obj[key], val)) {\n            return function(){\n              obj[key].push(val);\n              return val;\n            };\n          }\n        } else {\n          throw new Error('Cannot apply $addToSet modifier to non-array');\n        }\n      } else {\n        return function(){\n          obj[key] = [val];\n          return val;\n        };\n      }\n      break;\n\n    case 'array':\n      if (obj.hasOwnProperty(key)) {\n        if ('array' == type(obj[key])) {\n          if (!has(obj[key], val)) {\n            return function(){\n              obj[key].push(val);\n              return val;\n            };\n          }\n        } else {\n          throw new Error('Cannot apply $addToSet modifier to non-array');\n        }\n      } else if (numeric(key)) {\n        return function(){\n          obj[key] = [val];\n          return val;\n        };\n      } else {\n        throw new Error('can\\'t append to array using string field name [' + key + ']');\n      }\n      break;\n  }\n};\n\n/**\n * Helper for determining if an array has the given value.\n *\n * @param {Array} array\n * @param {Object} value to check\n * @return {Boolean}\n */\n\nfunction has(array, val){\n  for (var i = 0, l = array.length; i < l; i++) {\n    if (eql(val, array[i])) return true;\n  }\n  return false;\n}\n\n/**\n * Array#filter function generator for `$pull`/`$pullAll` operations.\n *\n * @param {Array} array of values to match\n * @param {Array} array to populate with results\n * @return {Function} that splices the array\n */\n\nfunction pull(arr, vals, pulled){\n  var indexes = [];\n\n  for (var a = 0; a < arr.length; a++) {\n    var val = arr[a];\n\n    for (var i = 0; i < vals.length; i++) {\n      var matcher = vals[i];\n      if ('object' == type(matcher)) {\n        // we only are only interested in obj <-> obj comparisons\n        if ('object' == type(val)) {\n          var match = false;\n\n          if (keys(matcher).length) {\n            for (var i in matcher) {\n              if (matcher.hasOwnProperty(i)) {\n                // we need at least one matching key to pull\n                if (eql(matcher[i], val[i])) {\n                  match = true;\n                } else {\n                  // if a single key doesn't match we move on\n                  match = false;\n                  break;\n                }\n              }\n            }\n          } else if (!keys(val).length) {\n            // pull `{}` matches [{}]\n            match = true;\n          }\n\n          if (match) {\n            indexes.push(a);\n            pulled.push(val);\n            continue;\n          }\n        } else {\n          debug('ignoring pull match against object');\n        }\n      } else {\n        if (eql(matcher, val)) {\n          indexes.push(a);\n          pulled.push(val);\n          continue;\n        }\n      }\n    }\n  }\n\n  return function(){\n    for (var i = 0; i < indexes.length; i++) {\n      var index = indexes[i];\n      arr.splice(index - i, 1);\n    }\n  };\n}\n\n/**\n * Helper to determine if a value is numeric.\n *\n * @param {String|Number} value\n * @return {Boolean} true if numeric\n * @api private\n */\n\nfunction numeric(val){\n  return 'number' == type(val) || Number(val) == val;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mongo-query/mods.js\n ** module id = 187\n ** module chunks = 0\n **/","\n/**\n * Module dependencies.\n */\n\nvar eql = require('mongo-eql');\nvar type = require('component-type');\n\n/**\n * $ne: not equal.\n */\n\nexports.$ne = function $ne(matcher, val){\n  return !eql(matcher, val);\n};\n\n/**\n * $gt: greater than.\n */\n\nexports.$gt = function $gt(matcher, val){\n  return type(matcher) === 'number' && val > matcher;\n};\n\n/**\n * $gte: greater than equal.\n */\n\nexports.$gte = function $gte(matcher, val){\n  return type(matcher) === 'number' && val >= matcher;\n};\n\n/**\n * $lt: less than.\n */\n\nexports.$lt = function $lt(matcher, val){\n  return type(matcher) === 'number' && val < matcher;\n};\n\n/**\n * $lte: less than equal.\n */\n\nexports.$lte = function $lte(matcher, val){\n  return type(matcher) === 'number' && val <= matcher;\n};\n\n/**\n * $regex: supply a regular expression as a string.\n */\n\nexports.$regex = function $regex(matcher, val){\n  // TODO: add $options support\n  if ('regexp' != type('matcher')) matcher = new RegExp(matcher);\n  return matcher.test(val);\n};\n\n/**\n * $exists: key exists.\n */\n\nexports.$exists = function $exists(matcher, val){\n  if (matcher) {\n    return undefined !== val;\n  } else {\n    return undefined === val;\n  }\n};\n\n/**\n * $in: value in array.\n */\n\nexports.$in = function $in(matcher, val){\n  if ('array' != type(matcher)) return false;\n  for (var i = 0; i < matcher.length; i++) {\n    if (eql(matcher[i], val)) return true;\n  }\n  return false;\n};\n\n/**\n * $nin: value not in array.\n */\n\nexports.$nin = function $nin(matcher, val){\n  return !exports.$in(matcher, val);\n};\n\n/**\n * @size: array length\n */\n\nexports.$size = function(matcher, val){\n  return Array.isArray(val) && matcher == val.length;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/mongo-query/ops.js\n ** module id = 188\n ** module chunks = 0\n **/","/**\n * Helpers.\n */\n\nvar s = 1000\nvar m = s * 60\nvar h = m * 60\nvar d = h * 24\nvar y = d * 365.25\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} options\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {}\n  var type = typeof val\n  if (type === 'string' && val.length > 0) {\n    return parse(val)\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ?\n\t\t\tfmtLong(val) :\n\t\t\tfmtShort(val)\n  }\n  throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val))\n}\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str)\n  if (str.length > 10000) {\n    return\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str)\n  if (!match) {\n    return\n  }\n  var n = parseFloat(match[1])\n  var type = (match[2] || 'ms').toLowerCase()\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n\n    default:\n      return undefined\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd'\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h'\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm'\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's'\n  }\n  return ms + 'ms'\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms'\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's'\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/ms/index.js\n ** module id = 189\n ** module chunks = 0\n **/","var CryptoJS = require('./core').CryptoJS;\r\n\r\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\r\n    // Shortcuts\r\n    var C = CryptoJS;\r\n    var C_lib = C.lib;\r\n    var BlockCipher = C_lib.BlockCipher;\r\n    var C_algo = C.algo;\r\n\r\n    // Lookup tables\r\n    var SBOX = [];\r\n    var INV_SBOX = [];\r\n    var SUB_MIX_0 = [];\r\n    var SUB_MIX_1 = [];\r\n    var SUB_MIX_2 = [];\r\n    var SUB_MIX_3 = [];\r\n    var INV_SUB_MIX_0 = [];\r\n    var INV_SUB_MIX_1 = [];\r\n    var INV_SUB_MIX_2 = [];\r\n    var INV_SUB_MIX_3 = [];\r\n\r\n    // Compute lookup tables\r\n    (function () {\r\n        // Compute double table\r\n        var d = [];\r\n        for (var i = 0; i < 256; i++) {\r\n            if (i < 128) {\r\n                d[i] = i << 1;\r\n            } else {\r\n                d[i] = (i << 1) ^ 0x11b;\r\n            }\r\n        }\r\n\r\n        // Walk GF(2^8)\r\n        var x = 0;\r\n        var xi = 0;\r\n        for (var i = 0; i < 256; i++) {\r\n            // Compute sbox\r\n            var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\r\n            sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\r\n            SBOX[x] = sx;\r\n            INV_SBOX[sx] = x;\r\n\r\n            // Compute multiplication\r\n            var x2 = d[x];\r\n            var x4 = d[x2];\r\n            var x8 = d[x4];\r\n\r\n            // Compute sub bytes, mix columns tables\r\n            var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\r\n            SUB_MIX_0[x] = (t << 24) | (t >>> 8);\r\n            SUB_MIX_1[x] = (t << 16) | (t >>> 16);\r\n            SUB_MIX_2[x] = (t << 8)  | (t >>> 24);\r\n            SUB_MIX_3[x] = t;\r\n\r\n            // Compute inv sub bytes, inv mix columns tables\r\n            var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\r\n            INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\r\n            INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\r\n            INV_SUB_MIX_2[sx] = (t << 8)  | (t >>> 24);\r\n            INV_SUB_MIX_3[sx] = t;\r\n\r\n            // Compute next counter\r\n            if (!x) {\r\n                x = xi = 1;\r\n            } else {\r\n                x = x2 ^ d[d[d[x8 ^ x2]]];\r\n                xi ^= d[d[xi]];\r\n            }\r\n        }\r\n    }());\r\n\r\n    // Precomputed Rcon lookup\r\n    var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\r\n\r\n    /**\r\n     * AES block cipher algorithm.\r\n     */\r\n    var AES = C_algo.AES = BlockCipher.extend({\r\n        _doReset: function () {\r\n            // Shortcuts\r\n            var key = this._key;\r\n            var keyWords = key.words;\r\n            var keySize = key.sigBytes / 4;\r\n\r\n            // Compute number of rounds\r\n            var nRounds = this._nRounds = keySize + 6\r\n\r\n            // Compute number of key schedule rows\r\n            var ksRows = (nRounds + 1) * 4;\r\n\r\n            // Compute key schedule\r\n            var keySchedule = this._keySchedule = [];\r\n            for (var ksRow = 0; ksRow < ksRows; ksRow++) {\r\n                if (ksRow < keySize) {\r\n                    keySchedule[ksRow] = keyWords[ksRow];\r\n                } else {\r\n                    var t = keySchedule[ksRow - 1];\r\n\r\n                    if (!(ksRow % keySize)) {\r\n                        // Rot word\r\n                        t = (t << 8) | (t >>> 24);\r\n\r\n                        // Sub word\r\n                        t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\r\n\r\n                        // Mix Rcon\r\n                        t ^= RCON[(ksRow / keySize) | 0] << 24;\r\n                    } else if (keySize > 6 && ksRow % keySize == 4) {\r\n                        // Sub word\r\n                        t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\r\n                    }\r\n\r\n                    keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\r\n                }\r\n            }\r\n\r\n            // Compute inv key schedule\r\n            var invKeySchedule = this._invKeySchedule = [];\r\n            for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\r\n                var ksRow = ksRows - invKsRow;\r\n\r\n                if (invKsRow % 4) {\r\n                    var t = keySchedule[ksRow];\r\n                } else {\r\n                    var t = keySchedule[ksRow - 4];\r\n                }\r\n\r\n                if (invKsRow < 4 || ksRow <= 4) {\r\n                    invKeySchedule[invKsRow] = t;\r\n                } else {\r\n                    invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\r\n                                               INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\r\n                }\r\n            }\r\n        },\r\n\r\n        encryptBlock: function (M, offset) {\r\n            this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\r\n        },\r\n\r\n        decryptBlock: function (M, offset) {\r\n            // Swap 2nd and 4th rows\r\n            var t = M[offset + 1];\r\n            M[offset + 1] = M[offset + 3];\r\n            M[offset + 3] = t;\r\n\r\n            this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\r\n\r\n            // Inv swap 2nd and 4th rows\r\n            var t = M[offset + 1];\r\n            M[offset + 1] = M[offset + 3];\r\n            M[offset + 3] = t;\r\n        },\r\n\r\n        _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\r\n            // Shortcut\r\n            var nRounds = this._nRounds;\r\n\r\n            // Get input, add round key\r\n            var s0 = M[offset]     ^ keySchedule[0];\r\n            var s1 = M[offset + 1] ^ keySchedule[1];\r\n            var s2 = M[offset + 2] ^ keySchedule[2];\r\n            var s3 = M[offset + 3] ^ keySchedule[3];\r\n\r\n            // Key schedule row counter\r\n            var ksRow = 4;\r\n\r\n            // Rounds\r\n            for (var round = 1; round < nRounds; round++) {\r\n                // Shift rows, sub bytes, mix columns, add round key\r\n                var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\r\n                var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\r\n                var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\r\n                var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\r\n\r\n                // Update state\r\n                s0 = t0;\r\n                s1 = t1;\r\n                s2 = t2;\r\n                s3 = t3;\r\n            }\r\n\r\n            // Shift rows, sub bytes, add round key\r\n            var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\r\n            var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\r\n            var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\r\n            var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\r\n\r\n            // Set output\r\n            M[offset]     = t0;\r\n            M[offset + 1] = t1;\r\n            M[offset + 2] = t2;\r\n            M[offset + 3] = t3;\r\n        },\r\n\r\n        keySize: 256/32\r\n    });\r\n\r\n    /**\r\n     * Shortcut functions to the cipher's object interface.\r\n     *\r\n     * @example\r\n     *\r\n     *     var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\r\n     *     var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);\r\n     */\r\n    C.AES = BlockCipher._createHelper(AES);\r\n}());\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/aes.js\n ** module id = 190\n ** module chunks = 0\n **/","var CryptoJS = require('./core').CryptoJS;\r\n\r\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n/**\r\n * Cipher core components.\r\n */\r\nCryptoJS.lib.Cipher || (function (undefined) {\r\n    // Shortcuts\r\n    var C = CryptoJS;\r\n    var C_lib = C.lib;\r\n    var Base = C_lib.Base;\r\n    var WordArray = C_lib.WordArray;\r\n    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\r\n    var C_enc = C.enc;\r\n    var Utf8 = C_enc.Utf8;\r\n    var Base64 = C_enc.Base64;\r\n    var C_algo = C.algo;\r\n    var EvpKDF = C_algo.EvpKDF;\r\n\r\n    /**\r\n     * Abstract base cipher template.\r\n     *\r\n     * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\r\n     * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\r\n     * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\r\n     * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\r\n     */\r\n    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\r\n        /**\r\n         * Configuration options.\r\n         *\r\n         * @property {WordArray} iv The IV to use for this operation.\r\n         */\r\n        cfg: Base.extend(),\r\n\r\n        /**\r\n         * Creates this cipher in encryption mode.\r\n         *\r\n         * @param {WordArray} key The key.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @return {Cipher} A cipher instance.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\r\n         */\r\n        createEncryptor: function (key, cfg) {\r\n            return this.create(this._ENC_XFORM_MODE, key, cfg);\r\n        },\r\n\r\n        /**\r\n         * Creates this cipher in decryption mode.\r\n         *\r\n         * @param {WordArray} key The key.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @return {Cipher} A cipher instance.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\r\n         */\r\n        createDecryptor: function (key, cfg) {\r\n            return this.create(this._DEC_XFORM_MODE, key, cfg);\r\n        },\r\n\r\n        /**\r\n         * Initializes a newly created cipher.\r\n         *\r\n         * @param {number} xformMode Either the encryption or decryption transormation mode constant.\r\n         * @param {WordArray} key The key.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @example\r\n         *\r\n         *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\r\n         */\r\n        init: function (xformMode, key, cfg) {\r\n            // Apply config defaults\r\n            this.cfg = this.cfg.extend(cfg);\r\n\r\n            // Store transform mode and key\r\n            this._xformMode = xformMode;\r\n            this._key = key;\r\n\r\n            // Set initial values\r\n            this.reset();\r\n        },\r\n\r\n        /**\r\n         * Resets this cipher to its initial state.\r\n         *\r\n         * @example\r\n         *\r\n         *     cipher.reset();\r\n         */\r\n        reset: function () {\r\n            // Reset data buffer\r\n            BufferedBlockAlgorithm.reset.call(this);\r\n\r\n            // Perform concrete-cipher logic\r\n            this._doReset();\r\n        },\r\n\r\n        /**\r\n         * Adds data to be encrypted or decrypted.\r\n         *\r\n         * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\r\n         *\r\n         * @return {WordArray} The data after processing.\r\n         *\r\n         * @example\r\n         *\r\n         *     var encrypted = cipher.process('data');\r\n         *     var encrypted = cipher.process(wordArray);\r\n         */\r\n        process: function (dataUpdate) {\r\n            // Append\r\n            this._append(dataUpdate);\r\n\r\n            // Process available blocks\r\n            return this._process();\r\n        },\r\n\r\n        /**\r\n         * Finalizes the encryption or decryption process.\r\n         * Note that the finalize operation is effectively a destructive, read-once operation.\r\n         *\r\n         * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\r\n         *\r\n         * @return {WordArray} The data after final processing.\r\n         *\r\n         * @example\r\n         *\r\n         *     var encrypted = cipher.finalize();\r\n         *     var encrypted = cipher.finalize('data');\r\n         *     var encrypted = cipher.finalize(wordArray);\r\n         */\r\n        finalize: function (dataUpdate) {\r\n            // Final data update\r\n            if (dataUpdate) {\r\n                this._append(dataUpdate);\r\n            }\r\n\r\n            // Perform concrete-cipher logic\r\n            var finalProcessedData = this._doFinalize();\r\n\r\n            return finalProcessedData;\r\n        },\r\n\r\n        keySize: 128/32,\r\n\r\n        ivSize: 128/32,\r\n\r\n        _ENC_XFORM_MODE: 1,\r\n\r\n        _DEC_XFORM_MODE: 2,\r\n\r\n        /**\r\n         * Creates shortcut functions to a cipher's object interface.\r\n         *\r\n         * @param {Cipher} cipher The cipher to create a helper for.\r\n         *\r\n         * @return {Object} An object with encrypt and decrypt shortcut functions.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\r\n         */\r\n        _createHelper: (function () {\r\n            function selectCipherStrategy(key) {\r\n                if (typeof key == 'string') {\r\n                    return PasswordBasedCipher;\r\n                } else {\r\n                    return SerializableCipher;\r\n                }\r\n            }\r\n\r\n            return function (cipher) {\r\n                return {\r\n                    encrypt: function (message, key, cfg) {\r\n                        return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\r\n                    },\r\n\r\n                    decrypt: function (ciphertext, key, cfg) {\r\n                        return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\r\n                    }\r\n                };\r\n            };\r\n        }())\r\n    });\r\n\r\n    /**\r\n     * Abstract base stream cipher template.\r\n     *\r\n     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\r\n     */\r\n    var StreamCipher = C_lib.StreamCipher = Cipher.extend({\r\n        _doFinalize: function () {\r\n            // Process partial blocks\r\n            var finalProcessedBlocks = this._process(!!'flush');\r\n\r\n            return finalProcessedBlocks;\r\n        },\r\n\r\n        blockSize: 1\r\n    });\r\n\r\n    /**\r\n     * Mode namespace.\r\n     */\r\n    var C_mode = C.mode = {};\r\n\r\n    /**\r\n     * Abstract base block cipher mode template.\r\n     */\r\n    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\r\n        /**\r\n         * Creates this mode for encryption.\r\n         *\r\n         * @param {Cipher} cipher A block cipher instance.\r\n         * @param {Array} iv The IV words.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\r\n         */\r\n        createEncryptor: function (cipher, iv) {\r\n            return this.Encryptor.create(cipher, iv);\r\n        },\r\n\r\n        /**\r\n         * Creates this mode for decryption.\r\n         *\r\n         * @param {Cipher} cipher A block cipher instance.\r\n         * @param {Array} iv The IV words.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\r\n         */\r\n        createDecryptor: function (cipher, iv) {\r\n            return this.Decryptor.create(cipher, iv);\r\n        },\r\n\r\n        /**\r\n         * Initializes a newly created mode.\r\n         *\r\n         * @param {Cipher} cipher A block cipher instance.\r\n         * @param {Array} iv The IV words.\r\n         *\r\n         * @example\r\n         *\r\n         *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\r\n         */\r\n        init: function (cipher, iv) {\r\n            this._cipher = cipher;\r\n            this._iv = iv;\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Cipher Block Chaining mode.\r\n     */\r\n    var CBC = C_mode.CBC = (function () {\r\n        /**\r\n         * Abstract base CBC mode.\r\n         */\r\n        var CBC = BlockCipherMode.extend();\r\n\r\n        /**\r\n         * CBC encryptor.\r\n         */\r\n        CBC.Encryptor = CBC.extend({\r\n            /**\r\n             * Processes the data block at offset.\r\n             *\r\n             * @param {Array} words The data words to operate on.\r\n             * @param {number} offset The offset where the block starts.\r\n             *\r\n             * @example\r\n             *\r\n             *     mode.processBlock(data.words, offset);\r\n             */\r\n            processBlock: function (words, offset) {\r\n                // Shortcuts\r\n                var cipher = this._cipher;\r\n                var blockSize = cipher.blockSize;\r\n\r\n                // XOR and encrypt\r\n                xorBlock.call(this, words, offset, blockSize);\r\n                cipher.encryptBlock(words, offset);\r\n\r\n                // Remember this block to use with next block\r\n                this._prevBlock = words.slice(offset, offset + blockSize);\r\n            }\r\n        });\r\n\r\n        /**\r\n         * CBC decryptor.\r\n         */\r\n        CBC.Decryptor = CBC.extend({\r\n            /**\r\n             * Processes the data block at offset.\r\n             *\r\n             * @param {Array} words The data words to operate on.\r\n             * @param {number} offset The offset where the block starts.\r\n             *\r\n             * @example\r\n             *\r\n             *     mode.processBlock(data.words, offset);\r\n             */\r\n            processBlock: function (words, offset) {\r\n                // Shortcuts\r\n                var cipher = this._cipher;\r\n                var blockSize = cipher.blockSize;\r\n\r\n                // Remember this block to use with next block\r\n                var thisBlock = words.slice(offset, offset + blockSize);\r\n\r\n                // Decrypt and XOR\r\n                cipher.decryptBlock(words, offset);\r\n                xorBlock.call(this, words, offset, blockSize);\r\n\r\n                // This block becomes the previous block\r\n                this._prevBlock = thisBlock;\r\n            }\r\n        });\r\n\r\n        function xorBlock(words, offset, blockSize) {\r\n            // Shortcut\r\n            var iv = this._iv;\r\n\r\n            // Choose mixing block\r\n            if (iv) {\r\n                var block = iv;\r\n\r\n                // Remove IV for subsequent blocks\r\n                this._iv = undefined;\r\n            } else {\r\n                var block = this._prevBlock;\r\n            }\r\n\r\n            // XOR blocks\r\n            for (var i = 0; i < blockSize; i++) {\r\n                words[offset + i] ^= block[i];\r\n            }\r\n        }\r\n\r\n        return CBC;\r\n    }());\r\n\r\n    /**\r\n     * Padding namespace.\r\n     */\r\n    var C_pad = C.pad = {};\r\n\r\n    /**\r\n     * PKCS #5/7 padding strategy.\r\n     */\r\n    var Pkcs7 = C_pad.Pkcs7 = {\r\n        /**\r\n         * Pads data using the algorithm defined in PKCS #5/7.\r\n         *\r\n         * @param {WordArray} data The data to pad.\r\n         * @param {number} blockSize The multiple that the data should be padded to.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);\r\n         */\r\n        pad: function (data, blockSize) {\r\n            // Shortcut\r\n            var blockSizeBytes = blockSize * 4;\r\n\r\n            // Count padding bytes\r\n            var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\r\n\r\n            // Create padding word\r\n            var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\r\n\r\n            // Create padding\r\n            var paddingWords = [];\r\n            for (var i = 0; i < nPaddingBytes; i += 4) {\r\n                paddingWords.push(paddingWord);\r\n            }\r\n            var padding = WordArray.create(paddingWords, nPaddingBytes);\r\n\r\n            // Add padding\r\n            data.concat(padding);\r\n        },\r\n\r\n        /**\r\n         * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\r\n         *\r\n         * @param {WordArray} data The data to unpad.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     CryptoJS.pad.Pkcs7.unpad(wordArray);\r\n         */\r\n        unpad: function (data) {\r\n            // Get number of padding bytes from last byte\r\n            var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\r\n\r\n            // Remove padding\r\n            data.sigBytes -= nPaddingBytes;\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Abstract base block cipher template.\r\n     *\r\n     * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\r\n     */\r\n    var BlockCipher = C_lib.BlockCipher = Cipher.extend({\r\n        /**\r\n         * Configuration options.\r\n         *\r\n         * @property {Mode} mode The block mode to use. Default: CBC\r\n         * @property {Padding} padding The padding strategy to use. Default: Pkcs7\r\n         */\r\n        cfg: Cipher.cfg.extend({\r\n            mode: CBC,\r\n            padding: Pkcs7\r\n        }),\r\n\r\n        reset: function () {\r\n            // Reset cipher\r\n            Cipher.reset.call(this);\r\n\r\n            // Shortcuts\r\n            var cfg = this.cfg;\r\n            var iv = cfg.iv;\r\n            var mode = cfg.mode;\r\n\r\n            // Reset block mode\r\n            if (this._xformMode == this._ENC_XFORM_MODE) {\r\n                var modeCreator = mode.createEncryptor;\r\n            } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\r\n                var modeCreator = mode.createDecryptor;\r\n\r\n                // Keep at least one block in the buffer for unpadding\r\n                this._minBufferSize = 1;\r\n            }\r\n            this._mode = modeCreator.call(mode, this, iv && iv.words);\r\n        },\r\n\r\n        _doProcessBlock: function (words, offset) {\r\n            this._mode.processBlock(words, offset);\r\n        },\r\n\r\n        _doFinalize: function () {\r\n            // Shortcut\r\n            var padding = this.cfg.padding;\r\n\r\n            // Finalize\r\n            if (this._xformMode == this._ENC_XFORM_MODE) {\r\n                // Pad data\r\n                padding.pad(this._data, this.blockSize);\r\n\r\n                // Process final blocks\r\n                var finalProcessedBlocks = this._process(!!'flush');\r\n            } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\r\n                // Process final blocks\r\n                var finalProcessedBlocks = this._process(!!'flush');\r\n\r\n                // Unpad data\r\n                padding.unpad(finalProcessedBlocks);\r\n            }\r\n\r\n            return finalProcessedBlocks;\r\n        },\r\n\r\n        blockSize: 128/32\r\n    });\r\n\r\n    /**\r\n     * A collection of cipher parameters.\r\n     *\r\n     * @property {WordArray} ciphertext The raw ciphertext.\r\n     * @property {WordArray} key The key to this ciphertext.\r\n     * @property {WordArray} iv The IV used in the ciphering operation.\r\n     * @property {WordArray} salt The salt used with a key derivation function.\r\n     * @property {Cipher} algorithm The cipher algorithm.\r\n     * @property {Mode} mode The block mode used in the ciphering operation.\r\n     * @property {Padding} padding The padding scheme used in the ciphering operation.\r\n     * @property {number} blockSize The block size of the cipher.\r\n     * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\r\n     */\r\n    var CipherParams = C_lib.CipherParams = Base.extend({\r\n        /**\r\n         * Initializes a newly created cipher params object.\r\n         *\r\n         * @param {Object} cipherParams An object with any of the possible cipher parameters.\r\n         *\r\n         * @example\r\n         *\r\n         *     var cipherParams = CryptoJS.lib.CipherParams.create({\r\n         *         ciphertext: ciphertextWordArray,\r\n         *         key: keyWordArray,\r\n         *         iv: ivWordArray,\r\n         *         salt: saltWordArray,\r\n         *         algorithm: CryptoJS.algo.AES,\r\n         *         mode: CryptoJS.mode.CBC,\r\n         *         padding: CryptoJS.pad.PKCS7,\r\n         *         blockSize: 4,\r\n         *         formatter: CryptoJS.format.OpenSSL\r\n         *     });\r\n         */\r\n        init: function (cipherParams) {\r\n            this.mixIn(cipherParams);\r\n        },\r\n\r\n        /**\r\n         * Converts this cipher params object to a string.\r\n         *\r\n         * @param {Format} formatter (Optional) The formatting strategy to use.\r\n         *\r\n         * @return {string} The stringified cipher params.\r\n         *\r\n         * @throws Error If neither the formatter nor the default formatter is set.\r\n         *\r\n         * @example\r\n         *\r\n         *     var string = cipherParams + '';\r\n         *     var string = cipherParams.toString();\r\n         *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);\r\n         */\r\n        toString: function (formatter) {\r\n            return (formatter || this.formatter).stringify(this);\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Format namespace.\r\n     */\r\n    var C_format = C.format = {};\r\n\r\n    /**\r\n     * OpenSSL formatting strategy.\r\n     */\r\n    var OpenSSLFormatter = C_format.OpenSSL = {\r\n        /**\r\n         * Converts a cipher params object to an OpenSSL-compatible string.\r\n         *\r\n         * @param {CipherParams} cipherParams The cipher params object.\r\n         *\r\n         * @return {string} The OpenSSL-compatible string.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\r\n         */\r\n        stringify: function (cipherParams) {\r\n            // Shortcuts\r\n            var ciphertext = cipherParams.ciphertext;\r\n            var salt = cipherParams.salt;\r\n\r\n            // Format\r\n            if (salt) {\r\n                var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\r\n            } else {\r\n                var wordArray = ciphertext;\r\n            }\r\n\r\n            return wordArray.toString(Base64);\r\n        },\r\n\r\n        /**\r\n         * Converts an OpenSSL-compatible string to a cipher params object.\r\n         *\r\n         * @param {string} openSSLStr The OpenSSL-compatible string.\r\n         *\r\n         * @return {CipherParams} The cipher params object.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\r\n         */\r\n        parse: function (openSSLStr) {\r\n            // Parse base64\r\n            var ciphertext = Base64.parse(openSSLStr);\r\n\r\n            // Shortcut\r\n            var ciphertextWords = ciphertext.words;\r\n\r\n            // Test for salt\r\n            if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\r\n                // Extract salt\r\n                var salt = WordArray.create(ciphertextWords.slice(2, 4));\r\n\r\n                // Remove salt from ciphertext\r\n                ciphertextWords.splice(0, 4);\r\n                ciphertext.sigBytes -= 16;\r\n            }\r\n\r\n            return CipherParams.create({ ciphertext: ciphertext, salt: salt });\r\n        }\r\n    };\r\n\r\n    /**\r\n     * A cipher wrapper that returns ciphertext as a serializable cipher params object.\r\n     */\r\n    var SerializableCipher = C_lib.SerializableCipher = Base.extend({\r\n        /**\r\n         * Configuration options.\r\n         *\r\n         * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\r\n         */\r\n        cfg: Base.extend({\r\n            format: OpenSSLFormatter\r\n        }),\r\n\r\n        /**\r\n         * Encrypts a message.\r\n         *\r\n         * @param {Cipher} cipher The cipher algorithm to use.\r\n         * @param {WordArray|string} message The message to encrypt.\r\n         * @param {WordArray} key The key.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @return {CipherParams} A cipher params object.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\r\n         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\r\n         *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\r\n         */\r\n        encrypt: function (cipher, message, key, cfg) {\r\n            // Apply config defaults\r\n            cfg = this.cfg.extend(cfg);\r\n\r\n            // Encrypt\r\n            var encryptor = cipher.createEncryptor(key, cfg);\r\n            var ciphertext = encryptor.finalize(message);\r\n\r\n            // Shortcut\r\n            var cipherCfg = encryptor.cfg;\r\n\r\n            // Create and return serializable cipher params\r\n            return CipherParams.create({\r\n                ciphertext: ciphertext,\r\n                key: key,\r\n                iv: cipherCfg.iv,\r\n                algorithm: cipher,\r\n                mode: cipherCfg.mode,\r\n                padding: cipherCfg.padding,\r\n                blockSize: cipher.blockSize,\r\n                formatter: cfg.format\r\n            });\r\n        },\r\n\r\n        /**\r\n         * Decrypts serialized ciphertext.\r\n         *\r\n         * @param {Cipher} cipher The cipher algorithm to use.\r\n         * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\r\n         * @param {WordArray} key The key.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @return {WordArray} The plaintext.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\r\n         *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\r\n         */\r\n        decrypt: function (cipher, ciphertext, key, cfg) {\r\n            // Apply config defaults\r\n            cfg = this.cfg.extend(cfg);\r\n\r\n            // Convert string to CipherParams\r\n            ciphertext = this._parse(ciphertext, cfg.format);\r\n\r\n            // Decrypt\r\n            var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\r\n\r\n            return plaintext;\r\n        },\r\n\r\n        /**\r\n         * Converts serialized ciphertext to CipherParams,\r\n         * else assumed CipherParams already and returns ciphertext unchanged.\r\n         *\r\n         * @param {CipherParams|string} ciphertext The ciphertext.\r\n         * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\r\n         *\r\n         * @return {CipherParams} The unserialized ciphertext.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\r\n         */\r\n        _parse: function (ciphertext, format) {\r\n            if (typeof ciphertext == 'string') {\r\n                return format.parse(ciphertext, this);\r\n            } else {\r\n                return ciphertext;\r\n            }\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Key derivation function namespace.\r\n     */\r\n    var C_kdf = C.kdf = {};\r\n\r\n    /**\r\n     * OpenSSL key derivation function.\r\n     */\r\n    var OpenSSLKdf = C_kdf.OpenSSL = {\r\n        /**\r\n         * Derives a key and IV from a password.\r\n         *\r\n         * @param {string} password The password to derive from.\r\n         * @param {number} keySize The size in words of the key to generate.\r\n         * @param {number} ivSize The size in words of the IV to generate.\r\n         * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\r\n         *\r\n         * @return {CipherParams} A cipher params object with the key, IV, and salt.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\r\n         *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\r\n         */\r\n        execute: function (password, keySize, ivSize, salt) {\r\n            // Generate random salt\r\n            if (!salt) {\r\n                salt = WordArray.random(64/8);\r\n            }\r\n\r\n            // Derive key and IV\r\n            var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\r\n\r\n            // Separate key and IV\r\n            var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\r\n            key.sigBytes = keySize * 4;\r\n\r\n            // Return params\r\n            return CipherParams.create({ key: key, iv: iv, salt: salt });\r\n        }\r\n    };\r\n\r\n    /**\r\n     * A serializable cipher wrapper that derives the key from a password,\r\n     * and returns ciphertext as a serializable cipher params object.\r\n     */\r\n    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\r\n        /**\r\n         * Configuration options.\r\n         *\r\n         * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\r\n         */\r\n        cfg: SerializableCipher.cfg.extend({\r\n            kdf: OpenSSLKdf\r\n        }),\r\n\r\n        /**\r\n         * Encrypts a message using a password.\r\n         *\r\n         * @param {Cipher} cipher The cipher algorithm to use.\r\n         * @param {WordArray|string} message The message to encrypt.\r\n         * @param {string} password The password.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @return {CipherParams} A cipher params object.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\r\n         *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\r\n         */\r\n        encrypt: function (cipher, message, password, cfg) {\r\n            // Apply config defaults\r\n            cfg = this.cfg.extend(cfg);\r\n\r\n            // Derive key and other params\r\n            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\r\n\r\n            // Add IV to config\r\n            cfg.iv = derivedParams.iv;\r\n\r\n            // Encrypt\r\n            var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\r\n\r\n            // Mix in derived params\r\n            ciphertext.mixIn(derivedParams);\r\n\r\n            return ciphertext;\r\n        },\r\n\r\n        /**\r\n         * Decrypts serialized ciphertext using a password.\r\n         *\r\n         * @param {Cipher} cipher The cipher algorithm to use.\r\n         * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\r\n         * @param {string} password The password.\r\n         * @param {Object} cfg (Optional) The configuration options to use for this operation.\r\n         *\r\n         * @return {WordArray} The plaintext.\r\n         *\r\n         * @static\r\n         *\r\n         * @example\r\n         *\r\n         *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\r\n         *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\r\n         */\r\n        decrypt: function (cipher, ciphertext, password, cfg) {\r\n            // Apply config defaults\r\n            cfg = this.cfg.extend(cfg);\r\n\r\n            // Convert string to CipherParams\r\n            ciphertext = this._parse(ciphertext, cfg.format);\r\n\r\n            // Derive key and other params\r\n            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\r\n\r\n            // Add IV to config\r\n            cfg.iv = derivedParams.iv;\r\n\r\n            // Decrypt\r\n            var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\r\n\r\n            return plaintext;\r\n        }\r\n    });\r\n}());\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/cipher-core.js\n ** module id = 191\n ** module chunks = 0\n **/","var CryptoJS = require('./core').CryptoJS;\n\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n    // Shortcuts\n    var C = CryptoJS;\n    var C_lib = C.lib;\n    var WordArray = C_lib.WordArray;\n    var C_enc = C.enc;\n\n    /**\n     * Base64 encoding strategy.\n     */\n    var Base64 = C_enc.Base64 = {\n        /**\n         * Converts a word array to a Base64 string.\n         *\n         * @param {WordArray} wordArray The word array.\n         *\n         * @return {string} The Base64 string.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n         */\n        stringify: function (wordArray) {\n            // Shortcuts\n            var words = wordArray.words;\n            var sigBytes = wordArray.sigBytes;\n            var map = this._map;\n\n            // Clamp excess bits\n            wordArray.clamp();\n\n            // Convert\n            var base64Chars = [];\n            for (var i = 0; i < sigBytes; i += 3) {\n                var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff;\n                var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n                var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n                var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n                for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n                    base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n                }\n            }\n\n            // Add padding\n            var paddingChar = map.charAt(64);\n            if (paddingChar) {\n                while (base64Chars.length % 4) {\n                    base64Chars.push(paddingChar);\n                }\n            }\n\n            return base64Chars.join('');\n        },\n\n        /**\n         * Converts a Base64 string to a word array.\n         *\n         * @param {string} base64Str The Base64 string.\n         *\n         * @return {WordArray} The word array.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n         */\n        parse: function (base64Str) {\n            // Shortcuts\n            var base64StrLength = base64Str.length;\n            var map = this._map;\n\n            // Ignore padding\n            var paddingChar = map.charAt(64);\n            if (paddingChar) {\n                var paddingIndex = base64Str.indexOf(paddingChar);\n                if (paddingIndex != -1) {\n                    base64StrLength = paddingIndex;\n                }\n            }\n\n            // Convert\n            var words = [];\n            var nBytes = 0;\n            for (var i = 0; i < base64StrLength; i++) {\n                if (i % 4) {\n                    var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);\n                    var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);\n                    words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n                    nBytes++;\n                }\n            }\n\n            return WordArray.create(words, nBytes);\n        },\n\n        _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n    };\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/enc-base64.js\n ** module id = 192\n ** module chunks = 0\n **/","var CryptoJS = require('./core').CryptoJS;\r\n\r\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\r\n    // Shortcuts\r\n    var C = CryptoJS;\r\n    var C_lib = C.lib;\r\n    var Base = C_lib.Base;\r\n    var WordArray = C_lib.WordArray;\r\n    var C_algo = C.algo;\r\n    var MD5 = C_algo.MD5;\r\n\r\n    /**\r\n     * This key derivation function is meant to conform with EVP_BytesToKey.\r\n     * www.openssl.org/docs/crypto/EVP_BytesToKey.html\r\n     */\r\n    var EvpKDF = C_algo.EvpKDF = Base.extend({\r\n        /**\r\n         * Configuration options.\r\n         *\r\n         * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\r\n         * @property {Hasher} hasher The hash algorithm to use. Default: MD5\r\n         * @property {number} iterations The number of iterations to perform. Default: 1\r\n         */\r\n        cfg: Base.extend({\r\n            keySize: 128/32,\r\n            hasher: MD5,\r\n            iterations: 1\r\n        }),\r\n\r\n        /**\r\n         * Initializes a newly created key derivation function.\r\n         *\r\n         * @param {Object} cfg (Optional) The configuration options to use for the derivation.\r\n         *\r\n         * @example\r\n         *\r\n         *     var kdf = CryptoJS.algo.EvpKDF.create();\r\n         *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\r\n         *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\r\n         */\r\n        init: function (cfg) {\r\n            this.cfg = this.cfg.extend(cfg);\r\n        },\r\n\r\n        /**\r\n         * Derives a key from a password.\r\n         *\r\n         * @param {WordArray|string} password The password.\r\n         * @param {WordArray|string} salt A salt.\r\n         *\r\n         * @return {WordArray} The derived key.\r\n         *\r\n         * @example\r\n         *\r\n         *     var key = kdf.compute(password, salt);\r\n         */\r\n        compute: function (password, salt) {\r\n            // Shortcut\r\n            var cfg = this.cfg;\r\n\r\n            // Init hasher\r\n            var hasher = cfg.hasher.create();\r\n\r\n            // Initial values\r\n            var derivedKey = WordArray.create();\r\n\r\n            // Shortcuts\r\n            var derivedKeyWords = derivedKey.words;\r\n            var keySize = cfg.keySize;\r\n            var iterations = cfg.iterations;\r\n\r\n            // Generate key\r\n            while (derivedKeyWords.length < keySize) {\r\n                if (block) {\r\n                    hasher.update(block);\r\n                }\r\n                var block = hasher.update(password).finalize(salt);\r\n                hasher.reset();\r\n\r\n                // Iterations\r\n                for (var i = 1; i < iterations; i++) {\r\n                    block = hasher.finalize(block);\r\n                    hasher.reset();\r\n                }\r\n\r\n                derivedKey.concat(block);\r\n            }\r\n            derivedKey.sigBytes = keySize * 4;\r\n\r\n            return derivedKey;\r\n        }\r\n    });\r\n\r\n    /**\r\n     * Derives a key from a password.\r\n     *\r\n     * @param {WordArray|string} password The password.\r\n     * @param {WordArray|string} salt A salt.\r\n     * @param {Object} cfg (Optional) The configuration options to use for this computation.\r\n     *\r\n     * @return {WordArray} The derived key.\r\n     *\r\n     * @static\r\n     *\r\n     * @example\r\n     *\r\n     *     var key = CryptoJS.EvpKDF(password, salt);\r\n     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\r\n     *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\r\n     */\r\n    C.EvpKDF = function (password, salt, cfg) {\r\n        return EvpKDF.create(cfg).compute(password, salt);\r\n    };\r\n}());\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/evpkdf.js\n ** module id = 193\n ** module chunks = 0\n **/","var CryptoJS = require('./core').CryptoJS;\n\n// create custom json serialization format\nvar JsonFormatter = {\n\tstringify: function (cipherParams) {\n\t\t// create json object with ciphertext\n\t\tvar jsonObj = {\n\t\t\tct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64)\n\t\t};\n\t\t\n\t\t// optionally add iv and salt\n\t\tif (cipherParams.iv) {\n\t\t\tjsonObj.iv = cipherParams.iv.toString();\n\t\t}\n\t\t\n\t\tif (cipherParams.salt) {\n\t\t\tjsonObj.s = cipherParams.salt.toString();\n\t\t}\n\n\t\t// stringify json object\n\t\treturn JSON.stringify(jsonObj)\n\t},\n\n\tparse: function (jsonStr) {\n\t\t// parse json string\n\t\tvar jsonObj = JSON.parse(jsonStr);\n\t\t\n\t\t// extract ciphertext from json object, and create cipher params object\n\t\tvar cipherParams = CryptoJS.lib.CipherParams.create({\n\t\t\tciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)\n\t\t});\n\t\t\n\t\t// optionally extract iv and salt\n\t\tif (jsonObj.iv) {\n\t\t\tcipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);\n\t\t}\n            \n\t\tif (jsonObj.s) {\n\t\t\tcipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);\n\t\t}\n\t\t\n\t\treturn cipherParams;\n\t}\n};\n\nexports.JsonFormatter = JsonFormatter;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/jsonformatter.js\n ** module id = 194\n ** module chunks = 0\n **/","var CryptoJS = require('./core').CryptoJS;\r\n\r\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (Math) {\r\n    // Shortcuts\r\n    var C = CryptoJS;\r\n    var C_lib = C.lib;\r\n    var WordArray = C_lib.WordArray;\r\n    var Hasher = C_lib.Hasher;\r\n    var C_algo = C.algo;\r\n\r\n    // Constants table\r\n    var T = [];\r\n\r\n    // Compute constants\r\n    (function () {\r\n        for (var i = 0; i < 64; i++) {\r\n            T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\r\n        }\r\n    }());\r\n\r\n    /**\r\n     * MD5 hash algorithm.\r\n     */\r\n    var MD5 = C_algo.MD5 = Hasher.extend({\r\n        _doReset: function () {\r\n            this._hash = new WordArray.init([\r\n                0x67452301, 0xefcdab89,\r\n                0x98badcfe, 0x10325476\r\n            ]);\r\n        },\r\n\r\n        _doProcessBlock: function (M, offset) {\r\n            // Swap endian\r\n            for (var i = 0; i < 16; i++) {\r\n                // Shortcuts\r\n                var offset_i = offset + i;\r\n                var M_offset_i = M[offset_i];\r\n\r\n                M[offset_i] = (\r\n                    (((M_offset_i << 8)  | (M_offset_i >>> 24)) & 0x00ff00ff) |\r\n                    (((M_offset_i << 24) | (M_offset_i >>> 8))  & 0xff00ff00)\r\n                );\r\n            }\r\n\r\n            // Shortcuts\r\n            var H = this._hash.words;\r\n\r\n            var M_offset_0  = M[offset + 0];\r\n            var M_offset_1  = M[offset + 1];\r\n            var M_offset_2  = M[offset + 2];\r\n            var M_offset_3  = M[offset + 3];\r\n            var M_offset_4  = M[offset + 4];\r\n            var M_offset_5  = M[offset + 5];\r\n            var M_offset_6  = M[offset + 6];\r\n            var M_offset_7  = M[offset + 7];\r\n            var M_offset_8  = M[offset + 8];\r\n            var M_offset_9  = M[offset + 9];\r\n            var M_offset_10 = M[offset + 10];\r\n            var M_offset_11 = M[offset + 11];\r\n            var M_offset_12 = M[offset + 12];\r\n            var M_offset_13 = M[offset + 13];\r\n            var M_offset_14 = M[offset + 14];\r\n            var M_offset_15 = M[offset + 15];\r\n\r\n            // Working varialbes\r\n            var a = H[0];\r\n            var b = H[1];\r\n            var c = H[2];\r\n            var d = H[3];\r\n\r\n            // Computation\r\n            a = FF(a, b, c, d, M_offset_0,  7,  T[0]);\r\n            d = FF(d, a, b, c, M_offset_1,  12, T[1]);\r\n            c = FF(c, d, a, b, M_offset_2,  17, T[2]);\r\n            b = FF(b, c, d, a, M_offset_3,  22, T[3]);\r\n            a = FF(a, b, c, d, M_offset_4,  7,  T[4]);\r\n            d = FF(d, a, b, c, M_offset_5,  12, T[5]);\r\n            c = FF(c, d, a, b, M_offset_6,  17, T[6]);\r\n            b = FF(b, c, d, a, M_offset_7,  22, T[7]);\r\n            a = FF(a, b, c, d, M_offset_8,  7,  T[8]);\r\n            d = FF(d, a, b, c, M_offset_9,  12, T[9]);\r\n            c = FF(c, d, a, b, M_offset_10, 17, T[10]);\r\n            b = FF(b, c, d, a, M_offset_11, 22, T[11]);\r\n            a = FF(a, b, c, d, M_offset_12, 7,  T[12]);\r\n            d = FF(d, a, b, c, M_offset_13, 12, T[13]);\r\n            c = FF(c, d, a, b, M_offset_14, 17, T[14]);\r\n            b = FF(b, c, d, a, M_offset_15, 22, T[15]);\r\n\r\n            a = GG(a, b, c, d, M_offset_1,  5,  T[16]);\r\n            d = GG(d, a, b, c, M_offset_6,  9,  T[17]);\r\n            c = GG(c, d, a, b, M_offset_11, 14, T[18]);\r\n            b = GG(b, c, d, a, M_offset_0,  20, T[19]);\r\n            a = GG(a, b, c, d, M_offset_5,  5,  T[20]);\r\n            d = GG(d, a, b, c, M_offset_10, 9,  T[21]);\r\n            c = GG(c, d, a, b, M_offset_15, 14, T[22]);\r\n            b = GG(b, c, d, a, M_offset_4,  20, T[23]);\r\n            a = GG(a, b, c, d, M_offset_9,  5,  T[24]);\r\n            d = GG(d, a, b, c, M_offset_14, 9,  T[25]);\r\n            c = GG(c, d, a, b, M_offset_3,  14, T[26]);\r\n            b = GG(b, c, d, a, M_offset_8,  20, T[27]);\r\n            a = GG(a, b, c, d, M_offset_13, 5,  T[28]);\r\n            d = GG(d, a, b, c, M_offset_2,  9,  T[29]);\r\n            c = GG(c, d, a, b, M_offset_7,  14, T[30]);\r\n            b = GG(b, c, d, a, M_offset_12, 20, T[31]);\r\n\r\n            a = HH(a, b, c, d, M_offset_5,  4,  T[32]);\r\n            d = HH(d, a, b, c, M_offset_8,  11, T[33]);\r\n            c = HH(c, d, a, b, M_offset_11, 16, T[34]);\r\n            b = HH(b, c, d, a, M_offset_14, 23, T[35]);\r\n            a = HH(a, b, c, d, M_offset_1,  4,  T[36]);\r\n            d = HH(d, a, b, c, M_offset_4,  11, T[37]);\r\n            c = HH(c, d, a, b, M_offset_7,  16, T[38]);\r\n            b = HH(b, c, d, a, M_offset_10, 23, T[39]);\r\n            a = HH(a, b, c, d, M_offset_13, 4,  T[40]);\r\n            d = HH(d, a, b, c, M_offset_0,  11, T[41]);\r\n            c = HH(c, d, a, b, M_offset_3,  16, T[42]);\r\n            b = HH(b, c, d, a, M_offset_6,  23, T[43]);\r\n            a = HH(a, b, c, d, M_offset_9,  4,  T[44]);\r\n            d = HH(d, a, b, c, M_offset_12, 11, T[45]);\r\n            c = HH(c, d, a, b, M_offset_15, 16, T[46]);\r\n            b = HH(b, c, d, a, M_offset_2,  23, T[47]);\r\n\r\n            a = II(a, b, c, d, M_offset_0,  6,  T[48]);\r\n            d = II(d, a, b, c, M_offset_7,  10, T[49]);\r\n            c = II(c, d, a, b, M_offset_14, 15, T[50]);\r\n            b = II(b, c, d, a, M_offset_5,  21, T[51]);\r\n            a = II(a, b, c, d, M_offset_12, 6,  T[52]);\r\n            d = II(d, a, b, c, M_offset_3,  10, T[53]);\r\n            c = II(c, d, a, b, M_offset_10, 15, T[54]);\r\n            b = II(b, c, d, a, M_offset_1,  21, T[55]);\r\n            a = II(a, b, c, d, M_offset_8,  6,  T[56]);\r\n            d = II(d, a, b, c, M_offset_15, 10, T[57]);\r\n            c = II(c, d, a, b, M_offset_6,  15, T[58]);\r\n            b = II(b, c, d, a, M_offset_13, 21, T[59]);\r\n            a = II(a, b, c, d, M_offset_4,  6,  T[60]);\r\n            d = II(d, a, b, c, M_offset_11, 10, T[61]);\r\n            c = II(c, d, a, b, M_offset_2,  15, T[62]);\r\n            b = II(b, c, d, a, M_offset_9,  21, T[63]);\r\n\r\n            // Intermediate hash value\r\n            H[0] = (H[0] + a) | 0;\r\n            H[1] = (H[1] + b) | 0;\r\n            H[2] = (H[2] + c) | 0;\r\n            H[3] = (H[3] + d) | 0;\r\n        },\r\n\r\n        _doFinalize: function () {\r\n            // Shortcuts\r\n            var data = this._data;\r\n            var dataWords = data.words;\r\n\r\n            var nBitsTotal = this._nDataBytes * 8;\r\n            var nBitsLeft = data.sigBytes * 8;\r\n\r\n            // Add padding\r\n            dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\r\n\r\n            var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\r\n            var nBitsTotalL = nBitsTotal;\r\n            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\r\n                (((nBitsTotalH << 8)  | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\r\n                (((nBitsTotalH << 24) | (nBitsTotalH >>> 8))  & 0xff00ff00)\r\n            );\r\n            dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\r\n                (((nBitsTotalL << 8)  | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\r\n                (((nBitsTotalL << 24) | (nBitsTotalL >>> 8))  & 0xff00ff00)\r\n            );\r\n\r\n            data.sigBytes = (dataWords.length + 1) * 4;\r\n\r\n            // Hash final blocks\r\n            this._process();\r\n\r\n            // Shortcuts\r\n            var hash = this._hash;\r\n            var H = hash.words;\r\n\r\n            // Swap endian\r\n            for (var i = 0; i < 4; i++) {\r\n                // Shortcut\r\n                var H_i = H[i];\r\n\r\n                H[i] = (((H_i << 8)  | (H_i >>> 24)) & 0x00ff00ff) |\r\n                       (((H_i << 24) | (H_i >>> 8))  & 0xff00ff00);\r\n            }\r\n\r\n            // Return final computed hash\r\n            return hash;\r\n        },\r\n\r\n        clone: function () {\r\n            var clone = Hasher.clone.call(this);\r\n            clone._hash = this._hash.clone();\r\n\r\n            return clone;\r\n        }\r\n    });\r\n\r\n    function FF(a, b, c, d, x, s, t) {\r\n        var n = a + ((b & c) | (~b & d)) + x + t;\r\n        return ((n << s) | (n >>> (32 - s))) + b;\r\n    }\r\n\r\n    function GG(a, b, c, d, x, s, t) {\r\n        var n = a + ((b & d) | (c & ~d)) + x + t;\r\n        return ((n << s) | (n >>> (32 - s))) + b;\r\n    }\r\n\r\n    function HH(a, b, c, d, x, s, t) {\r\n        var n = a + (b ^ c ^ d) + x + t;\r\n        return ((n << s) | (n >>> (32 - s))) + b;\r\n    }\r\n\r\n    function II(a, b, c, d, x, s, t) {\r\n        var n = a + (c ^ (b | ~d)) + x + t;\r\n        return ((n << s) | (n >>> (32 - s))) + b;\r\n    }\r\n\r\n    /**\r\n     * Shortcut function to the hasher's object interface.\r\n     *\r\n     * @param {WordArray|string} message The message to hash.\r\n     *\r\n     * @return {WordArray} The hash.\r\n     *\r\n     * @static\r\n     *\r\n     * @example\r\n     *\r\n     *     var hash = CryptoJS.MD5('message');\r\n     *     var hash = CryptoJS.MD5(wordArray);\r\n     */\r\n    C.MD5 = Hasher._createHelper(MD5);\r\n\r\n    /**\r\n     * Shortcut function to the HMAC's object interface.\r\n     *\r\n     * @param {WordArray|string} message The message to hash.\r\n     * @param {WordArray|string} key The secret key.\r\n     *\r\n     * @return {WordArray} The HMAC.\r\n     *\r\n     * @static\r\n     *\r\n     * @example\r\n     *\r\n     *     var hmac = CryptoJS.HmacMD5(message, key);\r\n     */\r\n    C.HmacMD5 = Hasher._createHmacHelper(MD5);\r\n}(Math));\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/node-cryptojs-aes/lib/md5.js\n ** module id = 195\n ** module chunks = 0\n **/","module.exports = require(\"./lib/_stream_duplex.js\")\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/duplex.js\n ** module id = 196\n ** module chunks = 0\n **/","'use strict';\n\nvar Buffer = require('buffer').Buffer;\n/*<replacement>*/\nvar bufferShim = require('buffer-shims');\n/*</replacement>*/\n\nmodule.exports = BufferList;\n\nfunction BufferList() {\n  this.head = null;\n  this.tail = null;\n  this.length = 0;\n}\n\nBufferList.prototype.push = function (v) {\n  var entry = { data: v, next: null };\n  if (this.length > 0) this.tail.next = entry;else this.head = entry;\n  this.tail = entry;\n  ++this.length;\n};\n\nBufferList.prototype.unshift = function (v) {\n  var entry = { data: v, next: this.head };\n  if (this.length === 0) this.tail = entry;\n  this.head = entry;\n  ++this.length;\n};\n\nBufferList.prototype.shift = function () {\n  if (this.length === 0) return;\n  var ret = this.head.data;\n  if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n  --this.length;\n  return ret;\n};\n\nBufferList.prototype.clear = function () {\n  this.head = this.tail = null;\n  this.length = 0;\n};\n\nBufferList.prototype.join = function (s) {\n  if (this.length === 0) return '';\n  var p = this.head;\n  var ret = '' + p.data;\n  while (p = p.next) {\n    ret += s + p.data;\n  }return ret;\n};\n\nBufferList.prototype.concat = function (n) {\n  if (this.length === 0) return bufferShim.alloc(0);\n  if (this.length === 1) return this.head.data;\n  var ret = bufferShim.allocUnsafe(n >>> 0);\n  var p = this.head;\n  var i = 0;\n  while (p) {\n    p.data.copy(ret, i);\n    i += p.data.length;\n    p = p.next;\n  }\n  return ret;\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/lib/internal/streams/BufferList.js\n ** module id = 197\n ** module chunks = 0\n **/","module.exports = require(\"./lib/_stream_passthrough.js\")\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/passthrough.js\n ** module id = 198\n ** module chunks = 0\n **/","var Stream = (function (){\n  try {\n    return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify\n  } catch(_){}\n}());\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = Stream || exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\nif (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/readable.js\n ** module id = 199\n ** module chunks = 0\n **/","module.exports = require(\"./lib/_stream_transform.js\")\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/transform.js\n ** module id = 200\n ** module chunks = 0\n **/","module.exports = require(\"./lib/_stream_writable.js\")\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/readable-stream/writable.js\n ** module id = 201\n ** module chunks = 0\n **/","/*!\n  * Reqwest! A general purpose XHR connection manager\n  * license MIT (c) Dustin Diaz 2015\n  * https://github.com/ded/reqwest\n  */\n\n!function (name, context, definition) {\n  if (typeof module != 'undefined' && module.exports) module.exports = definition()\n  else if (typeof define == 'function' && define.amd) define(definition)\n  else context[name] = definition()\n}('reqwest', this, function () {\n\n  var context = this\n\n  if ('window' in context) {\n    var doc = document\n      , byTag = 'getElementsByTagName'\n      , head = doc[byTag]('head')[0]\n  } else {\n    var XHR2\n    try {\n      XHR2 = require('xhr2')\n    } catch (ex) {\n      throw new Error('Peer dependency `xhr2` required! Please npm install xhr2')\n    }\n  }\n\n\n  var httpsRe = /^http/\n    , protocolRe = /(^\\w+):\\/\\//\n    , twoHundo = /^(20\\d|1223)$/ //http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request\n    , readyState = 'readyState'\n    , contentType = 'Content-Type'\n    , requestedWith = 'X-Requested-With'\n    , uniqid = 0\n    , callbackPrefix = 'reqwest_' + (+new Date())\n    , lastValue // data stored by the most recent JSONP callback\n    , xmlHttpRequest = 'XMLHttpRequest'\n    , xDomainRequest = 'XDomainRequest'\n    , noop = function () {}\n\n    , isArray = typeof Array.isArray == 'function'\n        ? Array.isArray\n        : function (a) {\n            return a instanceof Array\n          }\n\n    , defaultHeaders = {\n          'contentType': 'application/x-www-form-urlencoded'\n        , 'requestedWith': xmlHttpRequest\n        , 'accept': {\n              '*':  'text/javascript, text/html, application/xml, text/xml, */*'\n            , 'xml':  'application/xml, text/xml'\n            , 'html': 'text/html'\n            , 'text': 'text/plain'\n            , 'json': 'application/json, text/javascript'\n            , 'js':   'application/javascript, text/javascript'\n          }\n      }\n\n    , xhr = function(o) {\n        // is it x-domain\n        if (o['crossOrigin'] === true) {\n          var xhr = context[xmlHttpRequest] ? new XMLHttpRequest() : null\n          if (xhr && 'withCredentials' in xhr) {\n            return xhr\n          } else if (context[xDomainRequest]) {\n            return new XDomainRequest()\n          } else {\n            throw new Error('Browser does not support cross-origin requests')\n          }\n        } else if (context[xmlHttpRequest]) {\n          return new XMLHttpRequest()\n        } else if (XHR2) {\n          return new XHR2()\n        } else {\n          return new ActiveXObject('Microsoft.XMLHTTP')\n        }\n      }\n    , globalSetupOptions = {\n        dataFilter: function (data) {\n          return data\n        }\n      }\n\n  function succeed(r) {\n    var protocol = protocolRe.exec(r.url)\n    protocol = (protocol && protocol[1]) || context.location.protocol\n    return httpsRe.test(protocol) ? twoHundo.test(r.request.status) : !!r.request.response\n  }\n\n  function handleReadyState(r, success, error) {\n    return function () {\n      // use _aborted to mitigate against IE err c00c023f\n      // (can't read props on aborted request objects)\n      if (r._aborted) return error(r.request)\n      if (r._timedOut) return error(r.request, 'Request is aborted: timeout')\n      if (r.request && r.request[readyState] == 4) {\n        r.request.onreadystatechange = noop\n        if (succeed(r)) success(r.request)\n        else\n          error(r.request)\n      }\n    }\n  }\n\n  function setHeaders(http, o) {\n    var headers = o['headers'] || {}\n      , h\n\n    headers['Accept'] = headers['Accept']\n      || defaultHeaders['accept'][o['type']]\n      || defaultHeaders['accept']['*']\n\n    var isAFormData = typeof FormData !== 'undefined' && (o['data'] instanceof FormData);\n    // breaks cross-origin requests with legacy browsers\n    if (!o['crossOrigin'] && !headers[requestedWith]) headers[requestedWith] = defaultHeaders['requestedWith']\n    if (!headers[contentType] && !isAFormData) headers[contentType] = o['contentType'] || defaultHeaders['contentType']\n    for (h in headers)\n      headers.hasOwnProperty(h) && 'setRequestHeader' in http && http.setRequestHeader(h, headers[h])\n  }\n\n  function setCredentials(http, o) {\n    if (typeof o['withCredentials'] !== 'undefined' && typeof http.withCredentials !== 'undefined') {\n      http.withCredentials = !!o['withCredentials']\n    }\n  }\n\n  function generalCallback(data) {\n    lastValue = data\n  }\n\n  function urlappend (url, s) {\n    return url + (/\\?/.test(url) ? '&' : '?') + s\n  }\n\n  function handleJsonp(o, fn, err, url) {\n    var reqId = uniqid++\n      , cbkey = o['jsonpCallback'] || 'callback' // the 'callback' key\n      , cbval = o['jsonpCallbackName'] || reqwest.getcallbackPrefix(reqId)\n      , cbreg = new RegExp('((^|\\\\?|&)' + cbkey + ')=([^&]+)')\n      , match = url.match(cbreg)\n      , script = doc.createElement('script')\n      , loaded = 0\n      , isIE10 = navigator.userAgent.indexOf('MSIE 10.0') !== -1\n\n    if (match) {\n      if (match[3] === '?') {\n        url = url.replace(cbreg, '$1=' + cbval) // wildcard callback func name\n      } else {\n        cbval = match[3] // provided callback func name\n      }\n    } else {\n      url = urlappend(url, cbkey + '=' + cbval) // no callback details, add 'em\n    }\n\n    context[cbval] = generalCallback\n\n    script.type = 'text/javascript'\n    script.src = url\n    script.async = true\n    if (typeof script.onreadystatechange !== 'undefined' && !isIE10) {\n      // need this for IE due to out-of-order onreadystatechange(), binding script\n      // execution to an event listener gives us control over when the script\n      // is executed. See http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html\n      script.htmlFor = script.id = '_reqwest_' + reqId\n    }\n\n    script.onload = script.onreadystatechange = function () {\n      if ((script[readyState] && script[readyState] !== 'complete' && script[readyState] !== 'loaded') || loaded) {\n        return false\n      }\n      script.onload = script.onreadystatechange = null\n      script.onclick && script.onclick()\n      // Call the user callback with the last value stored and clean up values and scripts.\n      fn(lastValue)\n      lastValue = undefined\n      head.removeChild(script)\n      loaded = 1\n    }\n\n    // Add the script to the DOM head\n    head.appendChild(script)\n\n    // Enable JSONP timeout\n    return {\n      abort: function () {\n        script.onload = script.onreadystatechange = null\n        err({}, 'Request is aborted: timeout', {})\n        lastValue = undefined\n        head.removeChild(script)\n        loaded = 1\n      }\n    }\n  }\n\n  function getRequest(fn, err) {\n    var o = this.o\n      , method = (o['method'] || 'GET').toUpperCase()\n      , url = typeof o === 'string' ? o : o['url']\n      // convert non-string objects to query-string form unless o['processData'] is false\n      , data = (o['processData'] !== false && o['data'] && typeof o['data'] !== 'string')\n        ? reqwest.toQueryString(o['data'])\n        : (o['data'] || null)\n      , http\n      , sendWait = false\n\n    // if we're working on a GET request and we have data then we should append\n    // query string to end of URL and not post data\n    if ((o['type'] == 'jsonp' || method == 'GET') && data) {\n      url = urlappend(url, data)\n      data = null\n    }\n\n    if (o['type'] == 'jsonp') return handleJsonp(o, fn, err, url)\n\n    // get the xhr from the factory if passed\n    // if the factory returns null, fall-back to ours\n    http = (o.xhr && o.xhr(o)) || xhr(o)\n\n    http.open(method, url, o['async'] === false ? false : true)\n    setHeaders(http, o)\n    setCredentials(http, o)\n    if (context[xDomainRequest] && http instanceof context[xDomainRequest]) {\n        http.onload = fn\n        http.onerror = err\n        // NOTE: see\n        // http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/30ef3add-767c-4436-b8a9-f1ca19b4812e\n        http.onprogress = function() {}\n        sendWait = true\n    } else {\n      http.onreadystatechange = handleReadyState(this, fn, err)\n    }\n    o['before'] && o['before'](http)\n    if (sendWait) {\n      setTimeout(function () {\n        http.send(data)\n      }, 200)\n    } else {\n      http.send(data)\n    }\n    return http\n  }\n\n  function Reqwest(o, fn) {\n    this.o = o\n    this.fn = fn\n\n    init.apply(this, arguments)\n  }\n\n  function setType(header) {\n    // json, javascript, text/plain, text/html, xml\n    if (header === null) return undefined; //In case of no content-type.\n    if (header.match('json')) return 'json'\n    if (header.match('javascript')) return 'js'\n    if (header.match('text')) return 'html'\n    if (header.match('xml')) return 'xml'\n  }\n\n  function init(o, fn) {\n\n    this.url = typeof o == 'string' ? o : o['url']\n    this.timeout = null\n\n    // whether request has been fulfilled for purpose\n    // of tracking the Promises\n    this._fulfilled = false\n    // success handlers\n    this._successHandler = function(){}\n    this._fulfillmentHandlers = []\n    // error handlers\n    this._errorHandlers = []\n    // complete (both success and fail) handlers\n    this._completeHandlers = []\n    this._erred = false\n    this._responseArgs = {}\n\n    var self = this\n\n    fn = fn || function () {}\n\n    if (o['timeout']) {\n      this.timeout = setTimeout(function () {\n        timedOut()\n      }, o['timeout'])\n    }\n\n    if (o['success']) {\n      this._successHandler = function () {\n        o['success'].apply(o, arguments)\n      }\n    }\n\n    if (o['error']) {\n      this._errorHandlers.push(function () {\n        o['error'].apply(o, arguments)\n      })\n    }\n\n    if (o['complete']) {\n      this._completeHandlers.push(function () {\n        o['complete'].apply(o, arguments)\n      })\n    }\n\n    function complete (resp) {\n      o['timeout'] && clearTimeout(self.timeout)\n      self.timeout = null\n      while (self._completeHandlers.length > 0) {\n        self._completeHandlers.shift()(resp)\n      }\n    }\n\n    function success (resp) {\n      var type = o['type'] || resp && setType(resp.getResponseHeader('Content-Type')) // resp can be undefined in IE\n      resp = (type !== 'jsonp') ? self.request : resp\n      // use global data filter on response text\n      var filteredResponse = globalSetupOptions.dataFilter(resp.responseText, type)\n        , r = filteredResponse\n      try {\n        resp.responseText = r\n      } catch (e) {\n        // can't assign this in IE<=8, just ignore\n      }\n      if (r) {\n        switch (type) {\n        case 'json':\n          try {\n            resp = context.JSON ? context.JSON.parse(r) : eval('(' + r + ')')\n          } catch (err) {\n            return error(resp, 'Could not parse JSON in response', err)\n          }\n          break\n        case 'js':\n          resp = eval(r)\n          break\n        case 'html':\n          resp = r\n          break\n        case 'xml':\n          resp = resp.responseXML\n              && resp.responseXML.parseError // IE trololo\n              && resp.responseXML.parseError.errorCode\n              && resp.responseXML.parseError.reason\n            ? null\n            : resp.responseXML\n          break\n        }\n      }\n\n      self._responseArgs.resp = resp\n      self._fulfilled = true\n      fn(resp)\n      self._successHandler(resp)\n      while (self._fulfillmentHandlers.length > 0) {\n        resp = self._fulfillmentHandlers.shift()(resp)\n      }\n\n      complete(resp)\n    }\n\n    function timedOut() {\n      self._timedOut = true\n      self.request.abort()\n    }\n\n    function error(resp, msg, t) {\n      resp = self.request\n      self._responseArgs.resp = resp\n      self._responseArgs.msg = msg\n      self._responseArgs.t = t\n      self._erred = true\n      while (self._errorHandlers.length > 0) {\n        self._errorHandlers.shift()(resp, msg, t)\n      }\n      complete(resp)\n    }\n\n    this.request = getRequest.call(this, success, error)\n  }\n\n  Reqwest.prototype = {\n    abort: function () {\n      this._aborted = true\n      this.request.abort()\n    }\n\n  , retry: function () {\n      init.call(this, this.o, this.fn)\n    }\n\n    /**\n     * Small deviation from the Promises A CommonJs specification\n     * http://wiki.commonjs.org/wiki/Promises/A\n     */\n\n    /**\n     * `then` will execute upon successful requests\n     */\n  , then: function (success, fail) {\n      success = success || function () {}\n      fail = fail || function () {}\n      if (this._fulfilled) {\n        this._responseArgs.resp = success(this._responseArgs.resp)\n      } else if (this._erred) {\n        fail(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)\n      } else {\n        this._fulfillmentHandlers.push(success)\n        this._errorHandlers.push(fail)\n      }\n      return this\n    }\n\n    /**\n     * `always` will execute whether the request succeeds or fails\n     */\n  , always: function (fn) {\n      if (this._fulfilled || this._erred) {\n        fn(this._responseArgs.resp)\n      } else {\n        this._completeHandlers.push(fn)\n      }\n      return this\n    }\n\n    /**\n     * `fail` will execute when the request fails\n     */\n  , fail: function (fn) {\n      if (this._erred) {\n        fn(this._responseArgs.resp, this._responseArgs.msg, this._responseArgs.t)\n      } else {\n        this._errorHandlers.push(fn)\n      }\n      return this\n    }\n  , 'catch': function (fn) {\n      return this.fail(fn)\n    }\n  }\n\n  function reqwest(o, fn) {\n    return new Reqwest(o, fn)\n  }\n\n  // normalize newline variants according to spec -> CRLF\n  function normalize(s) {\n    return s ? s.replace(/\\r?\\n/g, '\\r\\n') : ''\n  }\n\n  function serial(el, cb) {\n    var n = el.name\n      , t = el.tagName.toLowerCase()\n      , optCb = function (o) {\n          // IE gives value=\"\" even where there is no value attribute\n          // 'specified' ref: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-862529273\n          if (o && !o['disabled'])\n            cb(n, normalize(o['attributes']['value'] && o['attributes']['value']['specified'] ? o['value'] : o['text']))\n        }\n      , ch, ra, val, i\n\n    // don't serialize elements that are disabled or without a name\n    if (el.disabled || !n) return\n\n    switch (t) {\n    case 'input':\n      if (!/reset|button|image|file/i.test(el.type)) {\n        ch = /checkbox/i.test(el.type)\n        ra = /radio/i.test(el.type)\n        val = el.value\n        // WebKit gives us \"\" instead of \"on\" if a checkbox has no value, so correct it here\n        ;(!(ch || ra) || el.checked) && cb(n, normalize(ch && val === '' ? 'on' : val))\n      }\n      break\n    case 'textarea':\n      cb(n, normalize(el.value))\n      break\n    case 'select':\n      if (el.type.toLowerCase() === 'select-one') {\n        optCb(el.selectedIndex >= 0 ? el.options[el.selectedIndex] : null)\n      } else {\n        for (i = 0; el.length && i < el.length; i++) {\n          el.options[i].selected && optCb(el.options[i])\n        }\n      }\n      break\n    }\n  }\n\n  // collect up all form elements found from the passed argument elements all\n  // the way down to child elements; pass a '<form>' or form fields.\n  // called with 'this'=callback to use for serial() on each element\n  function eachFormElement() {\n    var cb = this\n      , e, i\n      , serializeSubtags = function (e, tags) {\n          var i, j, fa\n          for (i = 0; i < tags.length; i++) {\n            fa = e[byTag](tags[i])\n            for (j = 0; j < fa.length; j++) serial(fa[j], cb)\n          }\n        }\n\n    for (i = 0; i < arguments.length; i++) {\n      e = arguments[i]\n      if (/input|select|textarea/i.test(e.tagName)) serial(e, cb)\n      serializeSubtags(e, [ 'input', 'select', 'textarea' ])\n    }\n  }\n\n  // standard query string style serialization\n  function serializeQueryString() {\n    return reqwest.toQueryString(reqwest.serializeArray.apply(null, arguments))\n  }\n\n  // { 'name': 'value', ... } style serialization\n  function serializeHash() {\n    var hash = {}\n    eachFormElement.apply(function (name, value) {\n      if (name in hash) {\n        hash[name] && !isArray(hash[name]) && (hash[name] = [hash[name]])\n        hash[name].push(value)\n      } else hash[name] = value\n    }, arguments)\n    return hash\n  }\n\n  // [ { name: 'name', value: 'value' }, ... ] style serialization\n  reqwest.serializeArray = function () {\n    var arr = []\n    eachFormElement.apply(function (name, value) {\n      arr.push({name: name, value: value})\n    }, arguments)\n    return arr\n  }\n\n  reqwest.serialize = function () {\n    if (arguments.length === 0) return ''\n    var opt, fn\n      , args = Array.prototype.slice.call(arguments, 0)\n\n    opt = args.pop()\n    opt && opt.nodeType && args.push(opt) && (opt = null)\n    opt && (opt = opt.type)\n\n    if (opt == 'map') fn = serializeHash\n    else if (opt == 'array') fn = reqwest.serializeArray\n    else fn = serializeQueryString\n\n    return fn.apply(null, args)\n  }\n\n  reqwest.toQueryString = function (o, trad) {\n    var prefix, i\n      , traditional = trad || false\n      , s = []\n      , enc = encodeURIComponent\n      , add = function (key, value) {\n          // If value is a function, invoke it and return its value\n          value = ('function' === typeof value) ? value() : (value == null ? '' : value)\n          s[s.length] = enc(key) + '=' + enc(value)\n        }\n    // If an array was passed in, assume that it is an array of form elements.\n    if (isArray(o)) {\n      for (i = 0; o && i < o.length; i++) add(o[i]['name'], o[i]['value'])\n    } else {\n      // If traditional, encode the \"old\" way (the way 1.3.2 or older\n      // did it), otherwise encode params recursively.\n      for (prefix in o) {\n        if (o.hasOwnProperty(prefix)) buildParams(prefix, o[prefix], traditional, add)\n      }\n    }\n\n    // spaces should be + according to spec\n    return s.join('&').replace(/%20/g, '+')\n  }\n\n  function buildParams(prefix, obj, traditional, add) {\n    var name, i, v\n      , rbracket = /\\[\\]$/\n\n    if (isArray(obj)) {\n      // Serialize array item.\n      for (i = 0; obj && i < obj.length; i++) {\n        v = obj[i]\n        if (traditional || rbracket.test(prefix)) {\n          // Treat each array item as a scalar.\n          add(prefix, v)\n        } else {\n          buildParams(prefix + '[' + (typeof v === 'object' ? i : '') + ']', v, traditional, add)\n        }\n      }\n    } else if (obj && obj.toString() === '[object Object]') {\n      // Serialize object item.\n      for (name in obj) {\n        buildParams(prefix + '[' + name + ']', obj[name], traditional, add)\n      }\n\n    } else {\n      // Serialize scalar item.\n      add(prefix, obj)\n    }\n  }\n\n  reqwest.getcallbackPrefix = function () {\n    return callbackPrefix\n  }\n\n  // jQuery and Zepto compatibility, differences can be remapped here so you can call\n  // .ajax.compat(options, callback)\n  reqwest.compat = function (o, fn) {\n    if (o) {\n      o['type'] && (o['method'] = o['type']) && delete o['type']\n      o['dataType'] && (o['type'] = o['dataType'])\n      o['jsonpCallback'] && (o['jsonpCallbackName'] = o['jsonpCallback']) && delete o['jsonpCallback']\n      o['jsonp'] && (o['jsonpCallback'] = o['jsonp'])\n    }\n    return new Reqwest(o, fn)\n  }\n\n  reqwest.ajaxSetup = function (options) {\n    options = options || {}\n    for (var k in options) {\n      globalSetupOptions[k] = options[k]\n    }\n  }\n\n  return reqwest\n});\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/reqwest/reqwest.js\n ** module id = 202\n ** module chunks = 0\n **/","\n/**\n * toString ref.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Return the type of `val`.\n *\n * @param {Mixed} val\n * @return {String}\n * @api public\n */\n\nmodule.exports = function(val){\n  switch (toString.call(val)) {\n    case '[object Function]': return 'function';\n    case '[object Date]': return 'date';\n    case '[object RegExp]': return 'regexp';\n    case '[object Arguments]': return 'arguments';\n    case '[object Array]': return 'array';\n  }\n\n  if (val === null) return 'null';\n  if (val === undefined) return 'undefined';\n  if (val === Object(val)) return 'object';\n\n  return typeof val;\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/type-component/index.js\n ** module id = 203\n ** module chunks = 0\n **/","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/util-deprecate/browser.js\n ** module id = 204\n ** module chunks = 0\n **/","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/util/support/isBufferBrowser.js\n ** module id = 205\n ** module chunks = 0\n **/","module.exports = __webpack_amd_options__;\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-options.js\n ** module id = 206\n ** module chunks = 0\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 207\n ** module chunks = 0\n **/","var map = {\n\t\"./AutoQueue\": 47,\n\t\"./AutoQueue.ts\": 47,\n\t\"./Everlive\": 30,\n\t\"./Everlive.ts\": 30,\n\t\"./EverliveError\": 3,\n\t\"./EverliveError.ts\": 3,\n\t\"./ExpandProcessor\": 48,\n\t\"./ExpandProcessor.ts\": 48,\n\t\"./Expression\": 20,\n\t\"./Expression.ts\": 20,\n\t\"./GeoPoint\": 31,\n\t\"./GeoPoint.ts\": 31,\n\t\"./Push\": 49,\n\t\"./Push.ts\": 49,\n\t\"./Request\": 10,\n\t\"./Request.ts\": 10,\n\t\"./Setup\": 50,\n\t\"./Setup.ts\": 50,\n\t\"./auth/Authentication\": 51,\n\t\"./auth/Authentication.ts\": 51,\n\t\"./auth/AuthenticationSetup\": 52,\n\t\"./auth/AuthenticationSetup.ts\": 52,\n\t\"./business-logic/BusinessLogic\": 53,\n\t\"./business-logic/BusinessLogic.ts\": 53,\n\t\"./caching/CacheModule\": 54,\n\t\"./caching/CacheModule.ts\": 54,\n\t\"./caching/caching\": 55,\n\t\"./caching/caching.ts\": 55,\n\t\"./constants\": 2,\n\t\"./constants.ts\": 2,\n\t\"./dataQuery/DataQuery\": 15,\n\t\"./dataQuery/DataQuery.ts\": 15,\n\t\"./dataQuery/DataQueryBuilder\": 56,\n\t\"./dataQuery/DataQueryBuilder.ts\": 56,\n\t\"./docs/callbacks\": 110,\n\t\"./docs/callbacks.ts\": 110,\n\t\"./docs/resultTypes\": 111,\n\t\"./docs/resultTypes.ts\": 111,\n\t\"./encryption/CryptographicProvider\": 57,\n\t\"./encryption/CryptographicProvider.ts\": 57,\n\t\"./helpers/helpers\": 58,\n\t\"./helpers/helpers.ts\": 58,\n\t\"./helpers/html/htmlHelper\": 59,\n\t\"./helpers/html/htmlHelper.ts\": 59,\n\t\"./helpers/html/htmlHelperOfflineModule\": 60,\n\t\"./helpers/html/htmlHelperOfflineModule.ts\": 60,\n\t\"./helpers/html/htmlHelperResponsiveModule\": 61,\n\t\"./helpers/html/htmlHelperResponsiveModule.ts\": 61,\n\t\"./index\": 62,\n\t\"./index.ts\": 62,\n\t\"./interfaces/AuthInfoResult\": 112,\n\t\"./interfaces/AuthInfoResult.ts\": 112,\n\t\"./interfaces/CloudFunctionInvocationParameters\": 113,\n\t\"./interfaces/CloudFunctionInvocationParameters.ts\": 113,\n\t\"./interfaces/CordovaFileEntry\": 114,\n\t\"./interfaces/CordovaFileEntry.ts\": 114,\n\t\"./interfaces/CordovaFileUploadOptions\": 115,\n\t\"./interfaces/CordovaFileUploadOptions.ts\": 115,\n\t\"./interfaces/CreateItemResult\": 116,\n\t\"./interfaces/CreateItemResult.ts\": 116,\n\t\"./interfaces/ErrorCallback\": 117,\n\t\"./interfaces/ErrorCallback.ts\": 117,\n\t\"./interfaces/File\": 118,\n\t\"./interfaces/File.ts\": 118,\n\t\"./interfaces/FileContent\": 119,\n\t\"./interfaces/FileContent.ts\": 119,\n\t\"./interfaces/Item\": 120,\n\t\"./interfaces/Item.ts\": 120,\n\t\"./interfaces/MultipleResult\": 121,\n\t\"./interfaces/MultipleResult.ts\": 121,\n\t\"./interfaces/RequestOptions\": 122,\n\t\"./interfaces/RequestOptions.ts\": 122,\n\t\"./interfaces/SQLiteStore\": 123,\n\t\"./interfaces/SQLiteStore.ts\": 123,\n\t\"./interfaces/SaveItemResult\": 124,\n\t\"./interfaces/SaveItemResult.ts\": 124,\n\t\"./interfaces/SetUserPasswordByResetCodePayload\": 125,\n\t\"./interfaces/SetUserPasswordByResetCodePayload.ts\": 125,\n\t\"./interfaces/SetUserPasswordBySecretAnswerPayload\": 126,\n\t\"./interfaces/SetUserPasswordBySecretAnswerPayload.ts\": 126,\n\t\"./interfaces/SingleResult\": 127,\n\t\"./interfaces/SingleResult.ts\": 127,\n\t\"./interfaces/SocialLoginResult\": 128,\n\t\"./interfaces/SocialLoginResult.ts\": 128,\n\t\"./interfaces/SuccessCallback\": 129,\n\t\"./interfaces/SuccessCallback.ts\": 129,\n\t\"./interfaces/UpdateItemResult\": 130,\n\t\"./interfaces/UpdateItemResult.ts\": 130,\n\t\"./interfaces/User\": 131,\n\t\"./interfaces/User.ts\": 131,\n\t\"./interfaces/UserInfo\": 132,\n\t\"./interfaces/UserInfo.ts\": 132,\n\t\"./interfaces/UserLoginResult\": 133,\n\t\"./interfaces/UserLoginResult.ts\": 133,\n\t\"./interfaces/UserSocialIdentity\": 134,\n\t\"./interfaces/UserSocialIdentity.ts\": 134,\n\t\"./kendo/kendo.everlive\": 63,\n\t\"./kendo/kendo.everlive.ts\": 63,\n\t\"./offline/OfflineFilesModule\": 64,\n\t\"./offline/OfflineFilesModule.ts\": 64,\n\t\"./offline/OfflineFilesProcessor\": 65,\n\t\"./offline/OfflineFilesProcessor.ts\": 65,\n\t\"./offline/OfflineStorageModule\": 66,\n\t\"./offline/OfflineStorageModule.ts\": 66,\n\t\"./offline/offline\": 32,\n\t\"./offline/offline.ts\": 32,\n\t\"./offline/offlinePersisters\": 21,\n\t\"./offline/offlinePersisters.ts\": 21,\n\t\"./offline/offlineTransformations\": 16,\n\t\"./offline/offlineTransformations.ts\": 16,\n\t\"./offline/persisters/BasePersister\": 17,\n\t\"./offline/persisters/BasePersister.ts\": 17,\n\t\"./offline/persisters/FileSystemPersister\": 67,\n\t\"./offline/persisters/FileSystemPersister.ts\": 67,\n\t\"./offline/persisters/LocalStoragePersister\": 68,\n\t\"./offline/persisters/LocalStoragePersister.ts\": 68,\n\t\"./offline/persisters/Persister\": 135,\n\t\"./offline/persisters/Persister.ts\": 135,\n\t\"./offline/persisters/SQLitePersister\": 69,\n\t\"./offline/persisters/SQLitePersister.ts\": 69,\n\t\"./offline/persisters/sqlite/FieldDefinition\": 70,\n\t\"./offline/persisters/sqlite/FieldDefinition.ts\": 70,\n\t\"./offline/persisters/sqlite/SystemDefinitions\": 71,\n\t\"./offline/persisters/sqlite/SystemDefinitions.ts\": 71,\n\t\"./offline/processors/OfflineInMemoryQueryProcessor\": 72,\n\t\"./offline/processors/OfflineInMemoryQueryProcessor.ts\": 72,\n\t\"./offline/processors/OfflineQueryProcessor\": 33,\n\t\"./offline/processors/OfflineQueryProcessor.ts\": 33,\n\t\"./offline/processors/OfflineSQLiteQueryProcessor\": 73,\n\t\"./offline/processors/OfflineSQLiteQueryProcessor.ts\": 73,\n\t\"./push/CordovaCurrentDevice\": 34,\n\t\"./push/CordovaCurrentDevice.ts\": 34,\n\t\"./push/CurrentDevice\": 74,\n\t\"./push/CurrentDevice.ts\": 74,\n\t\"./push/NativeScriptCurrentDevice\": 35,\n\t\"./push/NativeScriptCurrentDevice.ts\": 35,\n\t\"./query/AggregateQuery\": 22,\n\t\"./query/AggregateQuery.ts\": 22,\n\t\"./query/EventQuery\": 75,\n\t\"./query/EventQuery.ts\": 75,\n\t\"./query/Query\": 6,\n\t\"./query/Query.ts\": 6,\n\t\"./query/QueryBuilder\": 23,\n\t\"./query/QueryBuilder.ts\": 23,\n\t\"./query/RequestOptionsBuilder\": 36,\n\t\"./query/RequestOptionsBuilder.ts\": 36,\n\t\"./query/WhereQuery\": 76,\n\t\"./query/WhereQuery.ts\": 76,\n\t\"./reqwest.everlive\": 24,\n\t\"./reqwest.everlive.ts\": 24,\n\t\"./reqwest.nativescript\": 77,\n\t\"./reqwest.nativescript.ts\": 77,\n\t\"./reqwest.nodejs\": 78,\n\t\"./reqwest.nodejs.ts\": 78,\n\t\"./response/ResponseParserProcessor\": 79,\n\t\"./response/ResponseParserProcessor.ts\": 79,\n\t\"./response/ResponseTransformProcessor\": 80,\n\t\"./response/ResponseTransformProcessor.ts\": 80,\n\t\"./services/RequestService\": 11,\n\t\"./services/RequestService.ts\": 11,\n\t\"./storages/CordovaSQLiteStore\": 81,\n\t\"./storages/CordovaSQLiteStore.ts\": 81,\n\t\"./storages/FileStore\": 37,\n\t\"./storages/FileStore.ts\": 37,\n\t\"./storages/LocalStore\": 38,\n\t\"./storages/LocalStore.ts\": 38,\n\t\"./storages/NativeScriptFileStore\": 82,\n\t\"./storages/NativeScriptFileStore.ts\": 82,\n\t\"./storages/NativeScriptSQLiteStore\": 83,\n\t\"./storages/NativeScriptSQLiteStore.ts\": 83,\n\t\"./storages/SQLiteStore\": 39,\n\t\"./storages/SQLiteStore.ts\": 39,\n\t\"./storages/WebFileStore\": 84,\n\t\"./storages/WebFileStore.ts\": 84,\n\t\"./types/Data\": 18,\n\t\"./types/Data.ts\": 18,\n\t\"./types/Files\": 85,\n\t\"./types/Files.ts\": 85,\n\t\"./types/Users\": 86,\n\t\"./types/Users.ts\": 86,\n\t\"./types/preProcessors/DataPreprocessor\": 87,\n\t\"./types/preProcessors/DataPreprocessor.ts\": 87,\n\t\"./types/preProcessors/OfflineQueryPreprocessor\": 88,\n\t\"./types/preProcessors/OfflineQueryPreprocessor.ts\": 88,\n\t\"./types/processors/AuthenticationProcessor\": 89,\n\t\"./types/processors/AuthenticationProcessor.ts\": 89,\n\t\"./types/processors/BusinessLogicQueryProcessor\": 90,\n\t\"./types/processors/BusinessLogicQueryProcessor.ts\": 90,\n\t\"./types/processors/CacheQueryProcessor\": 91,\n\t\"./types/processors/CacheQueryProcessor.ts\": 91,\n\t\"./types/processors/EventQueryProcessor\": 92,\n\t\"./types/processors/EventQueryProcessor.ts\": 92,\n\t\"./types/processors/OfflineQueryProcessor\": 93,\n\t\"./types/processors/OfflineQueryProcessor.ts\": 93,\n\t\"./types/processors/OnlineQueryProcessor\": 94,\n\t\"./types/processors/OnlineQueryProcessor.ts\": 94,\n\t\"./utils\": 4,\n\t\"./utils.ts\": 4\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 208;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/everlive ^\\.\\/.*$\n ** module id = 208\n ** module chunks = 0\n **/","'use strict';\n\nvar AggregationTranslator = {};\n\nfunction getFieldAggregation(aggregationDefinition) {\n    var result;\n\n    if (aggregationDefinition.hasOwnProperty('count')) {\n        result = {'$sum': 1};\n    } else if (aggregationDefinition.min) {\n        result = {'$min': '$' + aggregationDefinition.min};\n    } else if (aggregationDefinition.max) {\n        result = {'$max': '$' + aggregationDefinition.max};\n    } else if (aggregationDefinition.avg) {\n        result = {'$avg': '$' + aggregationDefinition.avg};\n    } else if (aggregationDefinition.sum) {\n        result = {'$sum': '$' + aggregationDefinition.sum};\n    } else {\n        throw new Error('The aggregating function was not recognized or is not supported: ' + JSON.stringify(aggregationDefinition));\n    }\n\n    return result;\n};\n\nfunction addGroupingField(fieldName, _idObject, $project) {\n    //Add the field in the _id object\n    _idObject[fieldName] = '$' + fieldName;\n\n    //Add projection so that the result contains the actual field e.g. is { fieldName: fieldValue } instead of { _id: { fieldName: fieldValue } }\n    $project[fieldName] = '$_id.' + fieldName;\n}\n\n\n/*\n * aggregateDefinition = {\n *\t\tFilter: object|null,\n *\t\tGroupBy: string|array|null,\n *\t\tAggregate: object|null\n * }\n */\nAggregationTranslator.translate = function (aggregateDefinition, options) {\n    var $match;     //$match clause for the pipeline\n    var $group;     //$group clause for the pipeline\n    var $project;   //$project clause for the pipeline\n\n    options = options || {};\n\n    //Process the filter\n    if (aggregateDefinition.Filter) {\n        $match = aggregateDefinition.Filter;\n    }\n\n    //Process the GroupBy clause\n    var _id;\t//The required _id clause in the Mongo $group clause\n    var groupByDefinition = aggregateDefinition.GroupBy;\n    if (groupByDefinition) {\n        //Mongo returns all the values of the grouping fields in an _id field, but we use projection to put the values of grouping fields on first level, thus we do not want the _id\n        $project = {_id: 0};\n\n        _id = {};\n        if (Array.isArray(groupByDefinition)) {\n            //The GroupBy value is an array of fields to group by\n            var groupingFields = groupByDefinition;\n\n            //Process each grouping field\n            for (var i = 0; i < groupingFields.length; i++) {\n                var groupingField = groupingFields[i];\n                addGroupingField(groupingField, _id, $project);\n            }\n        } else {\n            //TODO: check if the value is string, and if not - throw error\n\n            //The GroupBy value is the name of the field to group by\n            var groupingField = groupByDefinition;\n\n            //Process the grouping field\n            addGroupingField(groupingField, _id, $project);\n        }\n    } else {\n        //No GroupBy clause, meaning we apply the aggregation to the whole resultset\n        _id = null;\n\n        //Adjust the $project definition so that the '_id' returned by Mongo is not included in the result.\n        $project = {_id: 0};\n    }\n    $group = {'_id': _id};\n\n    //Process the Aggregate clause\n    var aggregateDefinition = aggregateDefinition.Aggregate;\n    if (aggregateDefinition) {\n        for (var outputFieldName in aggregateDefinition) {\n            if (aggregateDefinition.hasOwnProperty(outputFieldName)) {\n                var fieldAggregation = aggregateDefinition[outputFieldName];\n\n                //Add the field aggregation to the Mongo $group clause\n                $group[outputFieldName] = getFieldAggregation(fieldAggregation);\n\n                //Add the field to the projection, so that it is included in the result\n                $project[outputFieldName] = 1;\n            }\n        }\n    }\n\n    //Construct the pipeline\n    var pipeline = [];\n\n    if ($match) pipeline.push({$match: $match});\n\n    if (options.maxDocumentsCount) {\n        pipeline.push({$limit: options.maxDocumentsCount});\n    }\n\n    if ($group) pipeline.push({$group: $group});\n\n    if ($project) pipeline.push({$project: $project});\n\n    return pipeline;\n};\n\nmodule.exports = AggregationTranslator;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-aggregation-translator/index.js\n ** module id = 209\n ** module chunks = 0\n **/","'use strict';\nvar Constants = require('./Constants');\n\n/**\n * A class that is used to get all required information in order to process a set of relations.\n * @param parent - An ExecutionNode instance used to supply the tree like data structure.\n * @param relationNode - The relation node used to created the ExecutionNode instance (ExecutionNode instance should contain one or many relations\n * if they can be combined for batch execution).\n * @constructor\n */\nvar ExecutionNode = function (parentNode, relationNode) {\n    var parentPath = '';\n    if (parentNode) {\n        parentPath = parentNode.path;\n    }\n    this.parent = parentPath;\n    this.relations = [relationNode.path];\n    this.name = relationNode.path;\n    this.targetTypeName = relationNode.targetTypeName;\n    this.canAddOtherRelations = !relationNode.filterExpression && !relationNode.sortExpression && !relationNode.aggregateExpression && !relationNode.take && !relationNode.skip;\n    this.children = [];\n    var path = '';\n    if (parentPath) {\n        path += parentPath + '.';\n    }\n    path += relationNode.targetTypeName;\n    this.path = path;\n};\n\n/**\n * Inserts a RelationNode to an ExecutionNode.\n * @param relation - A RelationNode instance.\n */\nExecutionNode.prototype._insertRelationNode = function (relation) {\n    this.relations.push(relation.path);\n};\n\n/**\n * Inserts a child node (which relations) depends from parent node result.\n * @param child - ExecutionNode instance representing child node.\n */\nExecutionNode.prototype._insertChildNode = function (child) {\n    this.children.push(child.name);\n};\n\n/**\n * Helper method that checks if some relations could be combined (for example have same TargetType).\n * @param relation\n * @returns {boolean}\n */\nExecutionNode.prototype.canCombineWithRelation = function (relation) {\n    if (!this.canAddOtherRelations) {\n        return false;\n    }\n\n    return this.targetTypeName === relation.targetTypeName && !relation.filterExpression && !relation.sortExpression && !relation.aggregateExpression && !relation.take && !relation.skip;\n};\n\n/** ExecutionTree\n * Class that allows the creation of an execution tree from a RelationTree object. Used to process all queries (master and child) in a correct order.\n * @param relationTree - An instance of RelationTree.\n * @constructor\n */\nvar ExecutionTree = function (relationTree) {\n    this._relationTree = relationTree;\n    this._map = {};\n};\n\n/**\n * Adds execution node to the ExecutionTree.\n * @param executionNode\n */\nExecutionTree.prototype.addExecutionNode = function (executionNode) {\n    this._map[executionNode.name] = executionNode;\n};\n\n/**\n * Finds the ExecutionNode which contains the requested relation.\n * @param relation - A Relation instance.\n * @returns {*}\n */\nExecutionTree.prototype.getExecutionNodeOfRelation = function (relation) {\n    for (var execNode in this._map) {\n        if (this._map.hasOwnProperty(execNode)) {\n            if (this._map[execNode].relations.indexOf(relation) > -1) {\n                return this._map[execNode];\n            }\n        }\n    }\n    return null;\n};\n\nExecutionTree.prototype.getRelationTree = function () {\n\treturn this._relationTree;\n};\n\n/**\n * Finds a RelationNode within the RelationTree.\n * @param relationNodePath - String that represents the relation within the RelationTree (for example: Activities.Likes.Role).\n * @returns {*}\n */\nExecutionTree.prototype.getRelationNode = function (relationNodePath) {\n    if (relationNodePath) {\n        return this._relationTree.map[relationNodePath] || null;\n    } else {\n        return null;\n    }\n};\n\nExecutionTree.prototype.getRootRelationNode = function () {\n    return this._relationTree.map[this._relationTree.map.$root] || null;\n};\n\nExecutionTree.prototype.getRootNode = function () {\n\tvar executionTreeMap = this._map;\n    var executionTreeRoot = null;\n    for (var exNode in executionTreeMap) {\n        if (executionTreeMap.hasOwnProperty(exNode)) {\n            if (executionTreeMap[exNode].parent === '') {\n                executionTreeRoot = executionTreeMap[exNode];\n                break;\n            }\n        }\n    }\n    return executionTreeRoot;\n};\n\nExecutionTree.prototype.getNode = function (nodeName) {\n\treturn this._map[nodeName];\n};\n\n/**\n * Builds the ExecutionTree from a RelationTree.\n */\nExecutionTree.prototype.build = function () {\n    //build beginning from the root\n    var relationRoot = this.getRelationNode(this._relationTree.map.$root);\n    //Setup the root of the execution tree.\n    var rootExecutionNode = new ExecutionNode(null, relationRoot);//no parent node\n    this.addExecutionNode(rootExecutionNode);\n    this.buildInternal(relationRoot);\n};\n\n/**\n * Traverse the relation tree and build the execution tree.\n * @param relationRoot - The root node of the RelationTree.\n */\nExecutionTree.prototype.buildInternal = function (relationRoot) {\n    relationRoot.children.forEach(function (child) {\n        var childRelationNode = this.getRelationNode(child);\n        this.insertRelationNodeInExecutionTree(childRelationNode);\n        this.buildInternal(childRelationNode);\n    }, this);\n};\n\n/**\n * Inserts a relation node within the execution tree (based on its dependencies).\n * @param relation - The relation that will be inserted.\n */\nExecutionTree.prototype.insertRelationNodeInExecutionTree = function (relation) {\n    var rootExecutionNode = this.getExecutionNodeOfRelation(relation.parentPath);\n    var childToCombine = this.tryGetChildNodeToCombine(rootExecutionNode, relation);\n    if (childToCombine) {//if there is a child that we combine the relation\n        childToCombine._insertRelationNode(relation);\n    } else {\n        var newExecutionNode = new ExecutionNode(rootExecutionNode, relation);//create a separate execution node that will host the relation\n        rootExecutionNode._insertChildNode(newExecutionNode);\n        this.addExecutionNode(newExecutionNode);\n    }\n};\n\n/**\n * Tries to find an ExecutionNode which could be combined with a relation.\n * @param rootExecutionNode - The root node of the ExecutionTree.\n * @param relation - Relation that will be added to the ExecutionTree.\n * @returns {*}\n */\nExecutionTree.prototype.tryGetChildNodeToCombine = function (rootExecutionNode, relation) {\n    if (rootExecutionNode.canCombineWithRelation(relation)) {\n        return rootExecutionNode;\n    }\n    var children = rootExecutionNode.children;\n    for (var i = 0; i < children.length; i++) {\n        var child = this._map[children[i]];\n        var childToCombine = this.tryGetChildNodeToCombine(child, relation);\n        if (childToCombine) {\n            return childToCombine;\n        }\n    }\n    return null;\n};\n\n/**\n * Gets the filter expression from all relations inside an ExecutionNode.\n * @param executionNode - The ExecutionNode instance.\n * @returns {{}}\n */\nExecutionTree.prototype.getFilterFromExecutionNode = function (executionNode, includeArrays) {\n    var filter = {};\n    var subRelationsFilter = [];\n    for (var i = 0; i < executionNode.relations.length; i++) {\n        var innerFilter = this.getFilterFromSingleRelation(this._relationTree.map[executionNode.relations[i]], includeArrays);\n        if (innerFilter) {\n            subRelationsFilter.push(innerFilter);\n        }\n    }\n\n    if (subRelationsFilter.length > 1) {\n        filter.$or = subRelationsFilter;\n    } else if (subRelationsFilter.length > 0) {\n        filter = subRelationsFilter[0];\n    } else {\n        filter = null;\n    }\n    return filter;\n};\n\n\n\n/**\n * Gets filter expression from a single relation. Traverse the relation tree in order to get the \"Id\"s from the result of parent relation\n * along with user defined filters.\n * @param relation - A Relation instance.\n * @returns {*}\n */\nExecutionTree.prototype.getFilterFromSingleRelation = function (relation, includeArrays) {\n    var userDefinedFilter = relation.filterExpression;\n    var parentRelationFilter = {};\n    var parentRelationIds = this.getRelationFieldValues(relation, includeArrays);\n    var parentRelationFieldName = (relation.isInvertedRelation ? relation.relationField : Constants.IdFieldNameClient);\n\n    if (parentRelationIds.length > 0) {\n        parentRelationFilter[parentRelationFieldName] = {'$in': parentRelationIds};\n    } else {\n        return null;\n    }\n\n    if (userDefinedFilter !== undefined) {\n        var filters = [];\n        filters.push(parentRelationFilter);\n        filters.push(userDefinedFilter);\n        return {'$and': filters};\n    } else {\n        return parentRelationFilter;\n    }\n};\n\n/**\n * Get relation field values of parent relation in order to construct a proper filter (to create a relation).\n * @param relation - A RelationNode instance which will get the filter.\n * @param includeArrays - Whether to include array values of the parent items when calculating the items that will be expanded on the current level.\n * @returns {Array} - An array of relation field values.\n */\nExecutionTree.prototype.getRelationFieldValues = function (relation, includeArrays) {\n    var parentRelationIds = [];\n    var parentRelation = this._relationTree.map[relation.parentPath];\n    // parentRelationResult actually is an Activity or Array of Activities\n    var parentRelationResult = Array.isArray(parentRelation.result) ? parentRelation.result : [parentRelation.result];\n    if (relation.isInvertedRelation) {\n        for (var p = 0; p < parentRelationResult.length; p++) {\n            parentRelationIds.push(parentRelationResult[p][relation.parentRelationField]);\n        }\n    } else {\n        // all comments are related to expand of type content type Activities expand: {\"Likes\": true}\n        if (parentRelation && parentRelation.result) {\n            relation.parentRelationIds = relation.parentRelationIds || {};\n            for (var i = 0; i < parentRelationResult.length; i++) {\n                // itemFromParentRelation is single Activity\n                var itemFromParentRelation = parentRelationResult[i];\n\n                // parentRelationFieldValue is Activity.Likes\n                var parentRelationFieldValue = itemFromParentRelation[relation.relationField];\n                if (Array.isArray(parentRelationFieldValue)) {\n                    relation.hasArrayValues = true;\n                    if (includeArrays) {\n                        for (var j = 0; j < parentRelationFieldValue.length; j++) {\n                            // itemToExpandId is current value in Activity.Likes array or just a single \"Id\"\n                            var itemToExpandId = parentRelationFieldValue[j];\n                            if(itemToExpandId !== undefined && itemToExpandId !== null) {\n                                parentRelationIds.push(itemToExpandId);\n                                // we set any value just to create a map of Ids\n                                relation.parentRelationIds[itemToExpandId] = 1;\n                            }\n                        }\n                    }\n                } else {\n                    if(parentRelationFieldValue !== undefined && parentRelationFieldValue !== null) {\n                        parentRelationIds.push(parentRelationFieldValue);\n                        relation.parentRelationIds[parentRelationFieldValue] = 1;\n                    }\n                }\n            }\n        }\n    }\n\n    return parentRelationIds;\n};\n\nmodule.exports = ExecutionTree;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-expand-processor/ExecutionTree.js\n ** module id = 210\n ** module chunks = 0\n **/","'use strict';\nvar async = require('async');\nvar RelationTreeBuilder = require('./RelationTreeBuilder');\nvar ExecutionTree = require('./ExecutionTree');\nvar Constants = require('./Constants');\nvar ExpandError = require('./ExpandError');\n\nfunction Processor(options) {\n    this._executionNodeFunction = options.executionNodeFunction;\n    this._metadataProviderFunction = options.metadataProviderFunction;\n}\n\nProcessor.prototype._createExecuteNodeExecutor = function (relationsTree, executionTree, executionNode, expandContext) {\n    var self = this;\n    return function (done) {\n        var relationNode = executionTree.getRelationNode(executionNode.relations[0]);//get the relation node for the only relation of the execution node.\n        var parentRelationNode = executionTree.getRelationNode(relationNode.parentPath);\n        var includeArrays = !(parentRelationNode.parentPath && parentRelationNode.hasArrayValues); //only expand array fields if the parent relation is not an array. This means that if we have expanded a Likes (multiple to Users), we won't expand any array relations that are nested in it such as the UserComments (multiple relation to Comments).\n        var filter = executionTree.getFilterFromExecutionNode(executionNode, includeArrays);\n\n        var errorMessage = RelationTreeBuilder.validateSingleRelation(relationNode);\n        if (errorMessage) {\n            return done(new ExpandError(errorMessage));\n        }\n\n        // if we have such options executionNode should have only one relation.\n        var node = {};\n        node.select = relationNode.fieldsExpression;\n        node.sort = relationNode.sortExpression;\n        node.skip = relationNode.skip;\n        node.take = relationNode.take;\n        node.filter = filter;\n        node.targetTypeName = relationNode.targetTypeName;\n\t\tnode.returnItemsCount = relationNode.returnItemsCount;\n\t\tnode.aggregate = relationNode.aggregateExpression;\n\n        self._executionNodeFunction.call(null, node, expandContext, function onProcessExecutionNode(err, result) {\n            if (err) {\n                return done(err);\n            }\n\t\t\t\n\t\t\tvar childRelationNode;\n\n            for (var i = 0; i < executionNode.relations.length; i++) {\n                childRelationNode = executionTree.getRelationNode(executionNode.relations[i]);\n                childRelationNode.result = self._extractResultForRelation(childRelationNode, result);\n            }\n            executionNode.result = childRelationNode.result;\n\t\t\t\n            var arr = [];\n            for (var j = 0; j < executionNode.children.length; j++) {\n                var executionTreeMap = executionTree._map;\n                arr.push(self._createExecuteNodeExecutor(relationsTree, executionTree, executionTreeMap[executionNode.children[j]], expandContext));\n            }\n            async.parallel(arr, done);\n        });\n    };\n};\n\nProcessor.prototype._getSingleResult = function (relationsTree, relation, singleObject, singleObjectIndex) {\n    if (!singleObject) {\n        return null;\n    }\n\n    var childRelation;\n    var childItem;\n\n    // if relation has singleFieldName option we just replace the parent id with a single value\n    if (relation.singleFieldName) {\n        if (relation.children && relation.children.length > 0) {\n            childRelation = relationsTree[relation.children[0]];\n            childItem = this._getObjectByIdFromArray(childRelation.result, singleObject[relation.singleFieldName]);\n            return this._getSingleResult(relationsTree, childRelation, childItem, 0);\n        }\n        return singleObject[relation.singleFieldName];\n    }\n\n    var result = {};\n    var passedProperties = {};\n\n    if (relation.children && relation.children.length > 0) {\n        for (var j = 0; j < relation.children.length; j++) {\n            childRelation = relationsTree[relation.children[j]];\n            var childRelationField = childRelation.relationField;\n            var userDefinedRelName = childRelation.userDefinedName;\n            if (!childRelation.isInvertedRelation && childRelationField === userDefinedRelName) {\n                passedProperties[childRelationField] = 1;\n            }\n\n            var innerRelationResult = childRelation.result;\n\n            if (childRelation.isInvertedRelation) {\n\t\t\t\tif (childRelation.aggregateExpression) {\n\t\t\t\t\tresult[userDefinedRelName] = innerRelationResult[singleObjectIndex];\n\t\t\t\t} else if (childRelation.returnItemsCount) {\n\t\t\t\t\tresult[userDefinedRelName] = innerRelationResult;\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k = 0; k < innerRelationResult.length; k++) {\n\t\t\t\t\t\tvar singleResult = this._getSingleResult(relationsTree, childRelation, innerRelationResult[k], k);\n\t\t\t\t\t\tif (singleResult) {\n\t\t\t\t\t\t\tresult[userDefinedRelName] = result[userDefinedRelName] || [];\n\t\t\t\t\t\t\tif (Array.isArray(relation.result)) {\n\t\t\t\t\t\t\t\t//Insert the related items in their proper place in the parent item\n\t\t\t\t\t\t\t\tif (singleResult[childRelation.relationField] === singleObject.Id) {\n\t\t\t\t\t\t\t\t\tresult[userDefinedRelName].push(singleResult);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresult[userDefinedRelName].push(singleResult);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n            } else {\n                result[userDefinedRelName] = childRelation.isArray() ? [] : null;\n\n                if (singleObject[childRelationField]) {\n                    if (Array.isArray(singleObject[childRelationField])) {\n\t\t\t\t\t\tif (childRelation.aggregateExpression) {\n\t\t\t\t\t\t\tresult[userDefinedRelName] = innerRelationResult[singleObjectIndex];\n                        } else if (childRelation.sortExpression) {\n                            // if there is a sorting we replace items using order of the query result\n                            for (var p = 0; p < innerRelationResult.length; p++) {\n                                if (singleObject[childRelationField].indexOf(innerRelationResult[p].Id) > -1) {\n                                    childItem = innerRelationResult[p];\n                                    this._addSingleResultToParentArray(relationsTree, childRelation, childItem, result, userDefinedRelName);\n                                }\n                            }\n                        } else {\n\t\t\t\t\t\t\t// we just replace items getting them by id which we have\n\t\t\t\t\t\t\tfor (var i = 0; i < singleObject[childRelationField].length; i++) {\n\t\t\t\t\t\t\t\tchildItem = this._getObjectByIdFromArray(innerRelationResult, singleObject[childRelationField][i]);\n\t\t\t\t\t\t\t\tthis._addSingleResultToParentArray(relationsTree, childRelation, childItem, result, userDefinedRelName);\n\t\t\t\t\t\t\t}\n                        }\n                    } else {\n                        childItem = this._getObjectByIdFromArray(innerRelationResult, singleObject[childRelationField]);\n                        result[userDefinedRelName] = this._getSingleResult(relationsTree, childRelation, childItem, 0);\n                    }\n                }\n            }\n        }\n    }\n\n    // add all other fields to the result (except the relation fields which we have already replaced).\n    for (var prop in singleObject) {\n\t\tif (singleObject.hasOwnProperty(prop)) {\n\t\t\tvar propertyShouldBeAddedToResult = !passedProperties[prop] && this._fieldExistInFieldsExpression(prop, relation.originalFieldsExpression);\n\t\t\tif (propertyShouldBeAddedToResult) {\n\t\t\t\tresult[prop] = singleObject[prop];\n\t\t\t}\n\t\t}\n    }\n\n    return result;\n};\n\nProcessor.prototype._addSingleResultToParentArray = function (relationsTree, childRelation, childItem, result, userDefinedRelName) {\n    var singleResult = this._getSingleResult(relationsTree, childRelation, childItem, 0);\n    result[userDefinedRelName] = result[userDefinedRelName] || [];\n    if (singleResult) {\n        result[userDefinedRelName].push(singleResult);\n    }\n};\n\n/**\n * Checks if a field will be returned via given fields expression.\n * @param field - The name of the field.\n * @param fieldsExpression - The Fields expression which is checked.\n * @returns {*}\n */\nProcessor.prototype._fieldExistInFieldsExpression = function (field, fieldsExpression) {\n    if (fieldsExpression === undefined || Object.keys(fieldsExpression).length === 0) {\n        return true;\n    }\n\n    if (field === Constants.IdFieldNameClient) {\n        if (fieldsExpression[field] === undefined) {\n            return true;\n        }\n        return fieldsExpression[field];\n    }\n\n    var isExclusive = RelationTreeBuilder.getIsFieldsExpressionExclusive(fieldsExpression);\n\n    if (isExclusive === undefined) {\n        return true;\n    }\n\n    if (isExclusive) {\n        return !fieldsExpression.hasOwnProperty(field);\n    } else {\n        return fieldsExpression.hasOwnProperty(field);\n    }\n};\n\n/**\n * Extracts the result for a single relation (in cases when ExecutionNode contains more than one relations).\n * @param relation - The relation object.\n * @param queryResult - Result of the combined query.\n * @returns {Array}\n */\nProcessor.prototype._extractResultForRelation = function (relation, queryResult) {\n\tif (relation.returnItemsCount || relation.aggregateExpression) {\n\t\treturn queryResult;\n\t} else {\n\t\tvar result = [];\n\t\tfor (var i = 0; i < queryResult.length; i++) {\n\t\t\tif (relation.parentRelationIds) {\n\t\t\t\tif (relation.parentRelationIds.hasOwnProperty(queryResult[i].Id)) {\n\t\t\t\t\tresult.push(queryResult[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (relation.isInvertedRelation) {\n\t\t\t\tresult.push(queryResult[i]);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n};\n\n/**\n * Gets an object with a given Id from Array.\n * @param array\n * @param id\n * @returns {*}\n */\nProcessor.prototype._getObjectByIdFromArray = function (array, id) {\n    if (array) {\n        for (var i = 0; i < array.length; i++) {\n            if (array[i].Id === id) {\n                return array[i];\n            }\n        }\n    }\n    return null;\n};\n\n/**\n * @public\n * @param expandExpression\n * @param mainTypeName\n * @param isArray\n * @param fieldsExpression\n * @param maxTakeValue\n * @param prepareContext\n * @param done\n */\nProcessor.prototype.prepare = function (expandExpression, mainTypeName, isArray, fieldsExpression, maxTakeValue, prepareContext, done) {\n    var rtb = new RelationTreeBuilder(expandExpression, mainTypeName, isArray, fieldsExpression, maxTakeValue, this._metadataProviderFunction, prepareContext);\n    rtb.build(function (err, map) {\n        var mainQueryFieldsExpression;\n        if (map) {\n            mainQueryFieldsExpression = map[map.$root].fieldsExpression;\n            var prepareResult = {\n                relationsTree: rtb,\n                mainQueryFieldsExpression: mainQueryFieldsExpression\n            }\n        }\n        done(err, prepareResult);\n    });\n};\n\n/**\n * @public\n * @param relationsTree\n * @param mainQueryResult\n * @param expandContext\n * @param done\n */\nProcessor.prototype.expand = function (relationsTree, mainQueryResult, expandContext, done) {\n    var relationsTreeMap = relationsTree.map;\n    var self = this;\n\t\n\t//Build the execution tree\n    var executionTree = new ExecutionTree(relationsTree);\n    executionTree.build();\n    relationsTreeMap[relationsTreeMap.$root].result = mainQueryResult;\n\t\n    var executionTreeMap = executionTree._map;\n    var rootExecutionNode = executionTree.getRootNode();\n    if (!rootExecutionNode) return;\n\n\t//Get a list of execute definitions(queries) to execute against the DB\n\tvar executionList = this._getExecutionList(executionTree, rootExecutionNode, expandContext);\n\t\n\t//Check for the max queries limit\n    var maxQueriesCount = 25;\n    if (executionList.length > maxQueriesCount) {\n        done(new ExpandError('Expand expression results in more than ' + maxQueriesCount + ' inner queries!'));\n    }\n\t\n\t//Execute them in series, since the result of the parent relation is used to get correct filter.\n\tasync.forEachSeries(\n\t\texecutionList,\n\t\tfunction(executeDefinition, callback) {\n\t\t\tvar executeOptions = executeDefinition.executeOptions;\n\t\t\tvar relationNode = executeDefinition.relationNode;\n\t\t\t\n\t\t\t//Adjust the filter for the execute definition, as it sometimes uses the result of the parent relation, which is only available after execution\n\t\t\tself._adjustFilterForExecuteDefinition(executionTree, executeDefinition);\n\t\t\t\n\t\t\t//Apply the restrictions for expand\n\t\t\tvar errorMessage = RelationTreeBuilder.validateSingleRelation(relationNode, relationsTree);\n\t\t\tif (errorMessage) {\n\t\t\t\treturn callback(new ExpandError(errorMessage));\n\t\t\t}\n\t\t\t\n\t\t\t//Execute the query and set the result\n\t\t\tself._executionNodeFunction.call(null, executeOptions, expandContext, function onProcessExecutionNode(err, result) {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar relationResult;\n\t\t\t\t\n\t\t\t\tif (executeDefinition.dataItem) {\n\t\t\t\t\trelationResult = self._extractResultForRelation(relationNode, result);\n\t\t\t\t\tif (!relationNode.result) relationNode.result = [];\n\t\t\t\t\trelationNode.result.push(relationResult);\n\t\t\t\t} else {\n\t\t\t\t\tvar executionNode = executeDefinition.executionNode;\n\t\t\t\t\tvar childRelationNode;\n\t\t\t\t\tfor (var i = 0; i < executionNode.relations.length; i++) {\n\t\t\t\t\t\tchildRelationNode = executionTree.getRelationNode(executionNode.relations[i]);\n\t\t\t\t\t\tchildRelationNode.result = self._extractResultForRelation(childRelationNode, result);\n\t\t\t\t\t}\n\t\t\t\t\texecutionNode.result = childRelationNode.result;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcallback();\n\t\t\t});\n\t\t},\n\t\tfunction onProcessExecutionTree(err) {\n\t\t\tif (err) {\n\t\t\t\tdone(err);\n\t\t\t} else {\n\t\t\t\tvar output;\n\t\t\t\tvar rootRelation = relationsTreeMap[relationsTreeMap.$root];\n\t\t\t\tif (Array.isArray(mainQueryResult)) {\n\t\t\t\t\toutput = [];\n\t\t\t\t\tfor (var i = 0; i < mainQueryResult.length; i++) {\n\t\t\t\t\t\tvar singleResult = self._getSingleResult(relationsTreeMap, rootRelation, mainQueryResult[i], i);\n\t\t\t\t\t\tif (singleResult) {\n\t\t\t\t\t\t\toutput.push(singleResult);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toutput = self._getSingleResult(relationsTreeMap, rootRelation, mainQueryResult, 0);\n\t\t\t\t}\n\t\t\t\tdone(null, output);\n\t\t\t}\n\t\t}\n\t);\n};\n\nProcessor.prototype._getExecutionList = function(executionTree, executionNode, expandContext) {\n    var self = this;\n\t\n\tvar relationTree = executionTree.getRelationTree();\n\tvar relationNode = executionTree.getRelationNode(executionNode.name);\n\tvar relationResult = relationNode.result;\n\t\n\tvar executeDefinitions = [];\n\tfor (var i = 0; i < executionNode.children.length; i++) {\n\t\tvar executeDefinition;\n\t\t\n\t\tvar childNodeName = executionNode.children[i];\n\t\tvar childExecutionNode = executionTree.getNode(childNodeName);\n\t\tvar childRelationNode = executionTree.getRelationNode(childNodeName);\n\t\tif (childRelationNode.aggregateExpression) {\n\t\t\tvar relationResult = relationResult;\n\t\t\tif (!Array.isArray(relationResult)) relationResult = [ relationResult ];\n\t\t\t\n\t\t\tfor (var j = 0; j < relationResult.length; j++) {\n\t\t\t\texecuteDefinition = this._getExecuteDefinitionForItem(relationResult[j], childRelationNode, relationTree, expandContext);\n\t\t\t\texecuteDefinitions.push(executeDefinition);\n\t\t\t}\n\t\t} else {\n\t\t\texecuteDefinition = this._getExecuteDefinitionForNode(executionTree, childExecutionNode, expandContext);\n\t\t\texecuteDefinitions.push(executeDefinition);\n\t\t}\n\t\t\n\t\tvar childFunctions = this._getExecutionList(executionTree, childExecutionNode, expandContext);\n\t\texecuteDefinitions = executeDefinitions.concat(childFunctions);\n\t}\n\t\n\treturn executeDefinitions;\n};\n\n//Adjusts the filter for the query\nProcessor.prototype._adjustFilterForExecuteDefinition = function (executionTree, executeDefinition) {\n\tvar filter;\n\t\n\tvar relationNode = executeDefinition.relationNode;\n\t\n\tif (executeDefinition.dataItem) {\n\t\tfilter = this._getFilterFromSingleItem(executeDefinition.dataItem, relationNode);\n\t} else {\n\t\tvar executionNode = executeDefinition.executionNode;\n\t\tvar parentRelationNode = executionTree.getRelationNode(relationNode.parentPath);\n\t\tvar includeArrays = !(parentRelationNode.parentPath && parentRelationNode.hasArrayValues); //only expand array fields if the parent relation is not an array. This means that if we have expanded a Likes (multiple to Users), we won't expand any array relations that are nested in it such as the UserComments (multiple relation to Comments).\n\t\tfilter = executionTree.getFilterFromExecutionNode(executionNode, includeArrays);\n\t}\n\n\texecuteDefinition.executeOptions.filter = filter;\n};\n\nProcessor.prototype._getExecuteDefinitionForItem = function (dataItem, relationNode, relationTree, expandContext) {\n\t//Create ExecuteOptions object\n\tvar executeOptions = {};\n\texecuteOptions.select = relationNode.fieldsExpression;\n\texecuteOptions.sort = relationNode.sortExpression;\n\texecuteOptions.skip = relationNode.skip;\n\texecuteOptions.take = relationNode.take;\n\texecuteOptions.targetTypeName = relationNode.targetTypeName;\n\texecuteOptions.returnItemsCount = relationNode.returnItemsCount;\n\texecuteOptions.aggregate = relationNode.aggregateExpression;\n\n\treturn {\n\t\texecuteOptions: executeOptions,\n\t\trelationNode: relationNode,\n\t\tdataItem: dataItem\n\t};\n};\n\nProcessor.prototype._getExecuteDefinitionForNode = function (executionTree, executionNode, expandContext) {\n\t//get the relation node for the only relation of the execution node.\n\tvar relationNode = executionTree.getRelationNode(executionNode.relations[0]);\n\n\t// if we have such options executionNode should have only one relation.\n\tvar executeOptions = {};\n\texecuteOptions.select = relationNode.fieldsExpression;\n\texecuteOptions.sort = relationNode.sortExpression;\n\texecuteOptions.skip = relationNode.skip;\n\texecuteOptions.take = relationNode.take;\n\texecuteOptions.targetTypeName = relationNode.targetTypeName;\n\texecuteOptions.returnItemsCount = relationNode.returnItemsCount;\n\texecuteOptions.aggregate = relationNode.aggregateExpression;\n\n\treturn {\n\t\texecuteOptions: executeOptions,\n\t\trelationNode: relationNode,\n\t\texecutionNode: executionNode\n\t};\n};\n\n/**\n * Gets filter expression from a single item for certain relation.\n * along with user defined filters.\n * @param dataItem - The dataItem to get filter for.\n * @param relationNode - A RelationNode instance.\n * @returns {*}\n */\nProcessor.prototype._getFilterFromSingleItem = function (dataItem, relationNode) {\n\tvar userDefinedFilter = relationNode.filterExpression;\n\tvar itemFilter;\n\t\t\n\tvar relationFieldName = relationNode.relationField;\n\t\n\tif (relationNode.isInvertedRelation) {\n\t\titemFilter = {};\n\t\titemFilter[relationNode.relationField] = dataItem.Id;\n\t} else {\n\t\tvar relationData = dataItem[relationFieldName];\n\t\tif (relationData) {\n\t\t\tif (Array.isArray(relationData)) {\n\t\t\t\titemFilter = { \"Id\": { \"$in\": relationData } };\n\t\t\t} else {\n\t\t\t\titemFilter = { \"Id\": relationData };\n\t\t\t}\n\t\t} else {\n\t\t\t//TODO\n\t\t\t//Here we must stop the query, as there are no related items\n\t\t}\n\t}\n\t\t\n\tif (itemFilter && userDefinedFilter) {\n\t\treturn { '$and': [itemFilter, userDefinedFilter] };\n\t} else if (itemFilter) {\n\t\treturn itemFilter;\n\t} else if (userDefinedFilter) {\n\t\treturn userDefinedFilter;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nProcessor.Constants = Constants;\n\nmodule.exports = Processor;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-expand-processor/Processor.js\n ** module id = 211\n ** module chunks = 0\n **/","'use strict';\nvar Constants = require('./Constants');\nvar _ = require('underscore');\nvar ExpandError = require('./ExpandError');\n\nfunction RelationNode(options) {\n    this.parentPath = options.parent;\n    this.relationField = options.relationField;\n    this.path = options.path || options.parent + '.' + options.relationField;\n    this.fieldsExpression = options.fieldsExpression || {};\n    this.targetTypeName = options.targetTypeName;\n\t//An array containing the paths(strings) of the child relations for this node\n    this.children = [];\n    this.isInvertedRelation = options.isInvertedRelation;\n    this.isArrayRoot = options.isArrayRoot; //used for validation of cases where various expand features are disabled for a GetAll scenario.\n    this.hasArrayValues = false;//set when we have executed the query. Used in validation scenarios where we do not have metadata about whether the relation is an array or not.\n\n    var expandExpression = options.expandExpression || {};\n\n    this.parentRelationField = expandExpression[Constants.ParentRelationFieldName] || Constants.IdFieldNameClient;\n    var relationField = this.isInvertedRelation ? this.path : this.relationField; //inverted relations appear with the full path - ContentType.Field - in the result when expanding.\n    this.userDefinedName = expandExpression[Constants.ReturnAsFieldName] || relationField;\n    _.extend(this.fieldsExpression, expandExpression[Constants.FieldsExpressionName]);\n    this.originalFieldsExpression = {};\n    _.extend(this.originalFieldsExpression, this.fieldsExpression);\n    this.singleFieldName = expandExpression[Constants.SingleFieldExpressionName];\n    this.filterExpression = expandExpression[Constants.FilterExpressionName];\n    this.sortExpression = expandExpression[Constants.SortExpressionName];\n    this.skip = expandExpression[Constants.SkipExpressionName];\n    this.take = this._getTakeLimit(expandExpression[Constants.TakeExpressionName], options.maxTakeValue);\n\tthis.returnItemsCount = expandExpression[Constants.ReturnItemsCountFieldName];\n\tthis.aggregateExpression = expandExpression[Constants.AggregateExpressionFieldName];\n}\n\n\n/**\n * Gets the take limit depending on the application and the take value that the user has provided.\n * @param clientTakeValue\n * @param maxTakeValue\n * @returns {number}\n */\nRelationNode.prototype._getTakeLimit = function (clientTakeValue, maxTakeValue) {\n    maxTakeValue = maxTakeValue || Constants.DefaultTakeItemsCount;\n    if (clientTakeValue) {\n        if (clientTakeValue > maxTakeValue) {\n            throw new ExpandError('The maximum allowed take value when expanding relations is ' + maxTakeValue + '!');\n        }\n        return clientTakeValue;\n    } else {\n        return maxTakeValue;\n    }\n};\n\n/**\n * Anyone using the bs-expand-processor module can set whether the relation is a multiple relation in the prepare phase.\n * This will allow for certain restrictions to be enforced directly on the prepare phase instead of the execution phase.\n */\nRelationNode.prototype.setIsArrayFromMetadata = function () {\n    this.isArrayFromMetadata = true;\n};\n\nRelationNode.prototype.isArray = function () {\n    // We can find out if a relation is an array in the following cases:\n    // From metadata in the API Server.\n    // All inverted relations are array.\n    // Once values have been received we can find out. This is used for scenarios where we do not have metadata about the relation (offline storage in SDK).\n    return this.isArrayFromMetadata || this.isInvertedRelation || this.hasArrayValues;\n};\n\n/**\n * Creates a RelationNode object representing an external(inverted) relation.\n * @param relationPath - A path to the external relation field (example: \"Comments.ActivityId\")\n * @param expandExpression - The expand expression that contains all information about the relation\n * @param parentRelationPath - Name of the parent relation.\n * @returns {RelationNode}\n */\nRelationNode.createInverted = function (relationPath, expandExpression, parentRelationPath, maxTakeValue) {\n    var relationNameParts = relationPath.split('.');\n\tvar targetTypeName = relationNameParts[0];\n\tvar relationField = relationNameParts[1];\n\t\n\treturn RelationNode._create(relationPath, targetTypeName, relationField, parentRelationPath, maxTakeValue, expandExpression, true);\n};\n\n/**\n * Creates a RelationNode object representing a regular relation.\n * @param relationField - The field to expand (example: \"Likes\")\n * @param expandExpression - The expand expression that contains all information about the relation\n * @param parentRelationPath - Name of the parent relation.\n * @returns {RelationNode}\n */\nRelationNode.createRegular = function (relationField, expandExpression, parentRelationPath, maxTakeValue) {\n    var options = {};\n\t\n\tvar relationPath = parentRelationPath + '.' + relationField;\n\tvar targetTypeName = expandExpression[Constants.TargetTypeNameFieldName];\n\t\n\treturn RelationNode._create(relationPath, targetTypeName, relationField, parentRelationPath, maxTakeValue, expandExpression, false);\n};\n\nRelationNode._create = function(relationPath, targetTypeName, releationField, parentRelationPath, maxTakeValue, expandExpression, isInvertedRelation) {\n\tvar options = {};\n\t\n\toptions.parent = parentRelationPath;\n    options.path = relationPath;\n    options.maxTakeValue = maxTakeValue;\n    options.validated = false;\n\toptions.expandExpression = expandExpression;\n\toptions.relationField = releationField;\n\toptions.targetTypeName = targetTypeName;\n    options.isInvertedRelation = isInvertedRelation;\n\t\n    return new RelationNode(options);\n};\n\nmodule.exports = RelationNode;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-expand-processor/RelationNode.js\n ** module id = 212\n ** module chunks = 0\n **/","'use strict';\nvar RelationNode = require('./RelationNode');\nvar _ = require('underscore');\nvar Constants = require('./Constants');\nvar ExpandError = require('./ExpandError');\n\n//var relationFieldPropertyName = Constants.RelationExpressionName;\n\nvar possibleExpandOptions = [\n    Constants.ExpandExpressionName,\n    Constants.ReturnAsFieldName,\n    Constants.FieldsExpressionName,\n    Constants.SingleFieldExpressionName,\n    Constants.SortExpressionName,\n    Constants.FilterExpressionName,\n    Constants.SkipExpressionName,\n    Constants.TakeExpressionName,\n    Constants.ParentRelationFieldName,\n    Constants.TargetTypeNameFieldName,\n\tConstants.ReturnItemsCountFieldName,\n\tConstants.AggregateExpressionFieldName\n];\n\n\n/**\n * A class used to parse Expand expression and build a corresponding relation tree.\n * In a process of creating the relation tree are performed several checks in order to force some limitations -\n * 50 items both for master and child queries and entire amount of all queries limited to 20.\n * Checks if the relation field given by the customer is valid (for example: user gives \"Like\" while the relation field is \"Likes\").\n * Checks for possible expand options.\n * @constructor\n */\nvar RelationTreeBuilder = function (expandExpression, mainTypeName, isArray, fieldsExpression, maxTakeValue, metadataProviderFunction, context) {\n    this.maxTakeValue = maxTakeValue;\n    this._metadataProviderFunction = metadataProviderFunction;\n    this.context = context;\n    this.expandExpression = this._processExpandExpression(expandExpression);\n    // mark the main query in order to avoid some duplication issues.\n    this.map = {};\n    this.map[mainTypeName] = new RelationNode({\n        targetTypeName: mainTypeName,\n        isArrayRoot: isArray,\n        fieldsExpression: fieldsExpression,\n        validated: true,\n        path: mainTypeName,\n        maxTakeValue: maxTakeValue\n    });\n    this.map[mainTypeName].originalFieldsExpression = {};\n    _.extend(this.map[mainTypeName].originalFieldsExpression, fieldsExpression);\n    this.map.$root = mainTypeName;\n};\n\n/**\n * Creates fully qualified expand expression from shorthand usages:\n * {\"Likes\": true} -> {\"Likes\": {\"ReturnAs\": \"Likes\"}}\n * {\"Likes\": \"LikesExpanded\"} -> {\"Likes\": {\"ReturnAs\": \"LikesExpanded\"}}\n * @param expandExpression\n * @returns {*}\n */\nRelationTreeBuilder.prototype._processExpandExpression = function (expandExpression) {\n    for (var property in expandExpression) {\n        if (expandExpression.hasOwnProperty(property)) {\n            if (typeof expandExpression[property] === 'boolean') {\n                expandExpression[property] = {};\n                expandExpression[property][Constants.ReturnAsFieldName] = property;\n            }\n            if (typeof expandExpression[property] === 'string') {\n                var relationField = expandExpression[property];\n                expandExpression[property] = {};\n                expandExpression[property][Constants.ReturnAsFieldName] = relationField;\n            }\n        }\n    }\n    return expandExpression;\n};\n\n/**\n * Builds the relation tree.\n * @param done\n */\nRelationTreeBuilder.prototype.build = function (done) {\n    try {\n        this.buildMapInternal(this.expandExpression, this.map.$root);\n    } catch (e) {\n        return done(e);\n    }\n    var self = this;\n    require('async').series([\n        this.configureRelationTree.bind(this),\n        this.validateRelationTree.bind(this)\n    ], function (err) {\n        done(err, self.map);\n    });\n};\n\n/**\n * An internal method which parses the expand expression and produces a basic relation tree (only names and parent relations).\n * @param expandExpression - The expand expression which will be processed.\n * @param rootName - The name of the root relation (master query) usually the name of the requested content type (Activities).\n */\nRelationTreeBuilder.prototype.buildMapInternal = function (expandExpression, rootName) {\n    for (var relationName in expandExpression) {\n        if (expandExpression.hasOwnProperty(relationName)) {\n            var fieldExpression = expandExpression[relationName];\n\t\t\t\n\t\t\t//Check if all options in an expand field definition are recognized\n            for (var option in fieldExpression) {\n                if (fieldExpression.hasOwnProperty(option) && possibleExpandOptions.indexOf(option) === -1) {\n                    throw new ExpandError('\\\"' + option + '\\\"' + ' is not a valid option for Expand expression');\n                }\n            }\n\n            if (relationName.indexOf('.') > -1) { //If the relation is inverted\n                var invertedRelation = RelationNode.createInverted(relationName, fieldExpression, rootName, this.maxTakeValue);\n\t\t\t\t\n                this.map[invertedRelation.path] = invertedRelation;\n                this.map[rootName].children.push(invertedRelation.path);\n\t\t\t\t\n                // adds a field expression in the original fields expression in order to get the result for that field\n                RelationTreeBuilder.addFieldToFieldsExpression(this.map[invertedRelation.parentPath].originalFieldsExpression, invertedRelation.userDefinedName);\n\n                if (expandExpression[relationName][Constants.ExpandExpressionName]) {\n                    var processedExpandExpression = this._processExpandExpression(expandExpression[relationName][Constants.ExpandExpressionName]);\n                    this.buildMapInternal(processedExpandExpression, invertedRelation.path);\n                }\n            } else {\n                var relationNode = RelationNode.createRegular(relationName, fieldExpression, rootName, this.maxTakeValue);\n\t\t\t\t\n                this.map[relationNode.path] = relationNode;\n                this.map[rootName].children.push(relationNode.path);\n\n                if (fieldExpression.hasOwnProperty(Constants.ExpandExpressionName)) {\n                    if (typeof(fieldExpression[Constants.ExpandExpressionName]) === 'object') {\n                        this.buildMapInternal(this._processExpandExpression(fieldExpression.Expand), relationNode.path);\n                    } else {\n                        throw new ExpandError(relationNode.path + '.Expand must be a valid expand expression!');\n                    }\n                }\n            }\n        }\n    }\n};\n\n/**\n * Adds additional metadata which is necessary to execute a query.\n * Name of the content type of the child relation get via relation field.\n * @param done\n */\nRelationTreeBuilder.prototype.configureRelationTree = function (done) {\n    if (this._metadataProviderFunction) {\n        var relationNames = [];\n        var self = this;\n\n        for (var relationPath in this.map) {\n            if (this.map.hasOwnProperty(relationPath)) {\n                if (this.map[relationPath].parentPath !== null) {\n                    relationNames.push(this.map[relationPath].relationField);\n                }\n            }\n        }\n\n        this._metadataProviderFunction(relationNames, this.map, this.context, function (err, result) {\n            done(err);\n        });\n    } else {\n        return done();\n    }\n};\n\n/**\n * Performs several checks like:\n * Validity of the relation field.\n * To not use filter or sorting expression within a \"GetByFilter\" scenario.\n * Does not allow to nest (expand multiple relation field) after a multiple relation.\n * Does not allow to use both \"Fields\" and \"SingleField\" options.\n * @param done\n * @returns {*}\n */\nRelationTreeBuilder.prototype.validateRelationTree = function (done) {\n    var errorMessage = '';\n    var EOL = '\\r\\n';\n    for (var relationPath in this.map) {\n        if (relationPath !== '$root' && this.map.hasOwnProperty(relationPath)) {\n            var relation = this.map[relationPath];\n            errorMessage += RelationTreeBuilder.validateSingleRelation(relation, this);\n            this.configureFieldsExpressionsForRelation(relation);\n        }\n    }\n    if (errorMessage !== '') {\n        var finalErrorMessage = errorMessage.substr(0, errorMessage.lastIndexOf(EOL));\n        var error = new ExpandError(finalErrorMessage);\n        return done(error);\n    } else {\n        done();\n    }\n};\n\n/**\n * Add relation fields to parent relation fields expression if needed (otherwise relation cannot be established).\n * @param relation - A relation which will be configured.\n */\nRelationTreeBuilder.prototype.configureFieldsExpressionsForRelation = function (relation) {\n    if (relation.parentPath) {\n        var parentRelationFieldsExpression = this.map[relation.parentPath].fieldsExpression;\n        if (relation.isInvertedRelation) {\n            RelationTreeBuilder.addFieldToFieldsExpression(parentRelationFieldsExpression, relation.parentRelationField);\n        } else {\n            RelationTreeBuilder.addFieldToFieldsExpression(parentRelationFieldsExpression, relation.relationField);\n        }\n    }\n    if (relation.isInvertedRelation) {\n        RelationTreeBuilder.addFieldToFieldsExpression(relation.fieldsExpression, relation.relationField);\n    } else {\n        RelationTreeBuilder.addFieldToFieldsExpression(relation.fieldsExpression, Constants.IdFieldNameClient);\n    }\n    RelationTreeBuilder.adjustParentRelationFieldsExpression(this.map[relation.parentPath], relation);\n};\n\n\n/**\n * Validates a single relation for all build-in limitations.\n * @param relationNode - A relation which will be validated.\n * @param relationTree - The whole relation tree.\n * @returns {string} - Returns an error message with all errors or empty string if there is no errors.\n */\nRelationTreeBuilder.validateSingleRelation = function (relationNode, relationTree) {\n    var errorMessage = '';\n\tvar relationTreeMap = relationTree.map;\n\tvar rootRelationNode = relationTreeMap[relationTreeMap.$root];\n    var EOL = '\\r\\n';\n    var isGetByFilterQuery = rootRelationNode.isArrayRoot;\n\n    if (relationNode.path === relationNode.parentPath) {\n        errorMessage += relationNode.path + ' has same parent which will cause an infinite loop.' + EOL;\n        return errorMessage;\n    }\n\n    if (relationNode.isArray()) {\n        var multipleQueriesCount = RelationTreeBuilder._getParentMultipleRelationsCount(relationNode, relationTree);\n        if (multipleQueriesCount > 0) {\n            errorMessage += 'Expand expression has multiple relation \\\"' + relationNode.path + '\\\" inside a multiple relation.';\n            errorMessage += EOL;\n        }\n\n        if (relationTreeMap[relationNode.parentPath] === rootRelationNode &&\n            isGetByFilterQuery &&\n            (relationNode.filterExpression || relationNode.sortExpression)) {\n            errorMessage += 'Filter and Sort are not allowed when expanding multiple items.';\n            errorMessage += EOL;\n        }\n\t\t\n\t\tif (relationTreeMap[relationNode.parentPath] === rootRelationNode &&\n            isGetByFilterQuery && relationNode.isInvertedRelation &&\n            relationNode.skip) {\n            errorMessage += 'Skip and Take are not supported when expanding multiple items with external relation.';\n            errorMessage += EOL;\n        }\n\n        //if (isGetByFilterQuery && relationNode.isInvertedRelation) {\n        //    errorMessage += 'Expanding an external content type is not allowed with GetByFilter scenario.';\n        //    errorMessage += EOL;\n        //}\n    }\n\t\n    if (!relationNode.targetTypeName) {\n        errorMessage += 'Expanding relation \\\"' + relationNode.relationField + '\\\" has no target type name specified. You should use \\\"TargetTypeName\\\" to specify it.';\n        errorMessage += EOL;\n    }\n\t\n    if (relationNode.fieldsExpression && Object.keys(relationNode.fieldsExpression).length && relationNode.singleFieldName) {\n        errorMessage += relationNode.path + ' ';\n        errorMessage += 'expand expression contains both \\\"Fields\\\" and \\\"SingleField\\\" expressions.';\n        errorMessage += EOL;\n    }\n\t\n    if (relationNode.singleFieldName) {\n        if (relationNode.children) {\n            if (relationNode.children.length > 1) {\n                errorMessage += relationNode.path + ' has multiple expand expressions with a single field option.' + EOL;\n            }\n            if (relationNode.children.length === 1 && relationTreeMap[relationNode.children[0]].relationField !== relationNode.singleFieldName) {\n                errorMessage += 'Expand expression ' + relationNode.path;\n                errorMessage += ' single field \\\"' + relationNode.singleFieldName + '\\\"';\n                errorMessage += ' does not match child relation field \\\"' + relationTreeMap[relationNode.children[0]].relationField + '\\\".';\n                errorMessage += EOL;\n            }\n        }\n    }\n\n    return errorMessage;\n};\n\n/**\n * Gets the count of parent multiple relations.\n * @param relation - Starting relation.\n * @returns {number} - count of all parent multiple relations\n */\nRelationTreeBuilder._getParentMultipleRelationsCount = function (relationNode, relationTree) {\n    var result = 0;\n    var currentRelation = relationNode;\n    while (currentRelation.parentPath) {\n        var parentRelation = relationTree.map[currentRelation.parentPath];\n        if (parentRelation.isArray() && parentRelation.parentPath) {\n            result += 1;\n        }\n        currentRelation = parentRelation;\n    }\n    return result;\n};\n\n\n\n/**\n * Adjusts fields expression of the parent relation based on paging setting of a relation (skip, take).\n * In that case we put a \"$slice\" option within the parent relation fields expression.\n * @param parentRelation\n * @param relation\n */\nRelationTreeBuilder.adjustParentRelationFieldsExpression = function (parentRelation, relation) {\n    if (!relation.isInvertedRelation && relation.take && typeof relation.take === 'number') {\n        // when relation has filter or sorting skip and take should not be transferred to the parent relation as $slice.\n        var shouldTransferPagingToParentRelation = relation.isArray() && !relation.filterExpression && !relation.sortExpression && parentRelation;\n        if (shouldTransferPagingToParentRelation) {\n            if (parentRelation.fieldsExpression === undefined) {\n                parentRelation.fieldsExpression = {};\n            }\n\n            if (relation.skip && typeof relation.skip === 'number') {\n                parentRelation.fieldsExpression[relation.relationField] = {\n                    '$slice': [relation.skip, relation.take]\n                };\n            } else {\n                parentRelation.fieldsExpression[relation.relationField] = {\n                    '$slice': relation.take\n                };\n            }\n            relation.take = null;\n            relation.skip = null;\n            relation.movedSkipTakeAsSlice = true;\n        }\n    }\n};\n\n/**\n * Adds field to parent relation fields expression. For example if the relation field is excluded from the master request.\n * @param fieldsExpression - Fields expression of the parent relation.\n * @param relationField - Name of the field which should be returned.\n */\nRelationTreeBuilder.addFieldToFieldsExpression = function (fieldsExpression, relationField) {\n    if (fieldsExpression === undefined || Object.keys(fieldsExpression).length === 0) {\n        return;\n    }\n    var isExclusive = RelationTreeBuilder.getIsFieldsExpressionExclusive(fieldsExpression);\n\n    if (isExclusive === undefined) {\n        return;\n    }\n\n    if (isExclusive) {\n        delete fieldsExpression[relationField];\n    } else {\n        fieldsExpression[relationField] = 1;\n    }\n};\n\n/**\n * Gets if the fields expression is exclusive (\"FieldName\" : 0)\n * @param fieldsExpression - Fields expression to check.\n * @returns {*}\n */\nRelationTreeBuilder.getIsFieldsExpressionExclusive = function (fieldsExpression) {\n    var isExclusive;\n    for (var fieldName in fieldsExpression) {\n        if (fieldName !== Constants.IdFieldNameClient && fieldsExpression.hasOwnProperty(fieldName)) {\n            if (isExclusive === undefined) {\n                if (fieldsExpression[fieldName] === 0) {\n                    isExclusive = true;\n                    break;\n                } else {\n                    if (typeof fieldsExpression[fieldName] === 'object') {\n                        continue;\n                    } else {\n                        // fieldsExpression[fieldName] === 1\n                        isExclusive = false;\n                        break;\n                    }\n                }\n            }\n        }\n    }\n    return isExclusive;\n};\n\nmodule.exports = RelationTreeBuilder;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/scripts/bs-expand-processor/RelationTreeBuilder.js\n ** module id = 213\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_214__ === 'undefined') {var e = new Error(\"Cannot find module \\\"application-settings\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_214__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"application-settings\"\n ** module id = 214\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_215__ === 'undefined') {var e = new Error(\"Cannot find module \\\"file-system\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_215__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"file-system\"\n ** module id = 215\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_216__ === 'undefined') {var e = new Error(\"Cannot find module \\\"https\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_216__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"https\"\n ** module id = 216\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_217__ === 'undefined') {var e = new Error(\"Cannot find module \\\"local-settings\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_217__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"local-settings\"\n ** module id = 217\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_218__ === 'undefined') {var e = new Error(\"Cannot find module \\\"nativescript-push-notifications\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_218__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"nativescript-push-notifications\"\n ** module id = 218\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_219__ === 'undefined') {var e = new Error(\"Cannot find module \\\"nativescript-sqlite\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_219__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"nativescript-sqlite\"\n ** module id = 219\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_220__ === 'undefined') {var e = new Error(\"Cannot find module \\\"node-localstorage\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_220__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"node-localstorage\"\n ** module id = 220\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_221__ === 'undefined') {var e = new Error(\"Cannot find module \\\"platform\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_221__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"platform\"\n ** module id = 221\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_222__ === 'undefined') {var e = new Error(\"Cannot find module \\\"url\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_222__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"url\"\n ** module id = 222\n ** module chunks = 0\n **/","if(typeof __WEBPACK_EXTERNAL_MODULE_223__ === 'undefined') {var e = new Error(\"Cannot find module \\\"zlib\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_223__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"zlib\"\n ** module id = 223\n ** module chunks = 0\n **/","/* (ignored) */\n\n\n/*****************\n ** WEBPACK FOOTER\n ** vertx (ignored)\n ** module id = 224\n ** module chunks = 0\n **/"],"sourceRoot":""}