UNPKG

2.03 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://Blockv/webpack/bootstrap","webpack://Blockv/./node_modules/core-js/modules/_export.js","webpack://Blockv/./src/internal/DataPool/DataObject.js","webpack://Blockv/./node_modules/core-js/modules/_global.js","webpack://Blockv/./node_modules/core-js/modules/_fails.js","webpack://Blockv/./node_modules/core-js/modules/_an-object.js","webpack://Blockv/./node_modules/core-js/modules/_is-object.js","webpack://Blockv/./node_modules/core-js/modules/_wks.js","webpack://Blockv/./node_modules/core-js/modules/_to-length.js","webpack://Blockv/./node_modules/core-js/modules/_core.js","webpack://Blockv/./node_modules/core-js/modules/_descriptors.js","webpack://Blockv/./node_modules/core-js/modules/_object-dp.js","webpack://Blockv/./node_modules/console-browserify/index.js","webpack://Blockv/./node_modules/core-js/modules/_to-object.js","webpack://Blockv/./node_modules/events/events.js","webpack://Blockv/./node_modules/core-js/modules/_redefine.js","webpack://Blockv/./node_modules/core-js/modules/_string-html.js","webpack://Blockv/./node_modules/core-js/modules/_has.js","webpack://Blockv/./node_modules/core-js/modules/_hide.js","webpack://Blockv/./node_modules/core-js/modules/_to-iobject.js","webpack://Blockv/./src/internal/DataPool/Delayer.js","webpack://Blockv/./node_modules/pouchdb/node_modules/inherits/inherits_browser.js","webpack://Blockv/./node_modules/core-js/modules/_strict-method.js","webpack://Blockv/./node_modules/immediate/lib/browser.js","webpack://Blockv/./node_modules/core-js/modules/_ctx.js","webpack://Blockv/./node_modules/core-js/modules/_a-function.js","webpack://Blockv/./node_modules/core-js/modules/_to-integer.js","webpack://Blockv/./node_modules/core-js/modules/_object-gopd.js","webpack://Blockv/./node_modules/core-js/modules/_object-sap.js","webpack://Blockv/./node_modules/core-js/modules/_array-methods.js","webpack://Blockv/./node_modules/core-js/modules/_cof.js","webpack://Blockv/./node_modules/core-js/modules/_defined.js","webpack://Blockv/./node_modules/core-js/modules/_typed-array.js","webpack://Blockv/./node_modules/lodash/lodash.js","webpack://Blockv/./src/model/Vatom.js","webpack://Blockv/./node_modules/core-js/modules/_to-primitive.js","webpack://Blockv/./node_modules/core-js/modules/_meta.js","webpack://Blockv/./src/internal/DataPool/plugins/BLOCKvRegion.js","webpack://Blockv/./src/internal/EventEmitter.js","webpack://Blockv/./node_modules/core-js/modules/_property-desc.js","webpack://Blockv/./node_modules/core-js/modules/_uid.js","webpack://Blockv/./node_modules/core-js/modules/_library.js","webpack://Blockv/./node_modules/core-js/modules/_object-keys.js","webpack://Blockv/./node_modules/core-js/modules/_to-absolute-index.js","webpack://Blockv/./node_modules/core-js/modules/_object-create.js","webpack://Blockv/./node_modules/core-js/modules/_object-gopn.js","webpack://Blockv/./node_modules/core-js/modules/_object-gpo.js","webpack://Blockv/./node_modules/core-js/modules/_add-to-unscopables.js","webpack://Blockv/./node_modules/core-js/modules/_validate-collection.js","webpack://Blockv/./node_modules/argsarray/index.js","webpack://Blockv/(webpack)/buildin/global.js","webpack://Blockv/./node_modules/core-js/modules/_set-to-string-tag.js","webpack://Blockv/./node_modules/core-js/modules/_string-trim.js","webpack://Blockv/./node_modules/core-js/modules/_iterators.js","webpack://Blockv/./node_modules/core-js/modules/_set-species.js","webpack://Blockv/./node_modules/core-js/modules/_an-instance.js","webpack://Blockv/./node_modules/core-js/modules/_redefine-all.js","webpack://Blockv/./node_modules/jwt-decode/lib/index.js","webpack://Blockv/./node_modules/process/browser.js","webpack://Blockv/./node_modules/core-js/modules/_iobject.js","webpack://Blockv/./node_modules/core-js/modules/_object-pie.js","webpack://Blockv/./node_modules/core-js/modules/_classof.js","webpack://Blockv/./node_modules/core-js/modules/_species-constructor.js","webpack://Blockv/./src/client/Discover.js","webpack://Blockv/./src/model/User.js","webpack://Blockv/./node_modules/util/util.js","webpack://Blockv/./node_modules/core-js/modules/_shared.js","webpack://Blockv/./node_modules/core-js/modules/_array-includes.js","webpack://Blockv/./node_modules/core-js/modules/_object-gops.js","webpack://Blockv/./node_modules/core-js/modules/_is-array.js","webpack://Blockv/./node_modules/core-js/modules/_iter-detect.js","webpack://Blockv/./node_modules/core-js/modules/_flags.js","webpack://Blockv/./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://Blockv/./node_modules/core-js/modules/_fix-re-wks.js","webpack://Blockv/./node_modules/core-js/modules/_for-of.js","webpack://Blockv/./node_modules/core-js/modules/_user-agent.js","webpack://Blockv/./node_modules/core-js/modules/_collection.js","webpack://Blockv/./node_modules/core-js/modules/_typed.js","webpack://Blockv/./node_modules/@brillout/assert/assert.js","webpack://Blockv/./node_modules/url-parse/index.js","webpack://Blockv/./node_modules/spark-md5/spark-md5.js","webpack://Blockv/./src/internal/DataPool/DataObjectAnimator.js","webpack://Blockv/./node_modules/core-js/modules/_dom-create.js","webpack://Blockv/./node_modules/core-js/modules/_wks-ext.js","webpack://Blockv/./node_modules/core-js/modules/_shared-key.js","webpack://Blockv/./node_modules/core-js/modules/_enum-bug-keys.js","webpack://Blockv/./node_modules/core-js/modules/_html.js","webpack://Blockv/./node_modules/core-js/modules/_set-proto.js","webpack://Blockv/./node_modules/core-js/modules/_string-ws.js","webpack://Blockv/./node_modules/core-js/modules/_inherit-if-required.js","webpack://Blockv/./node_modules/core-js/modules/_string-repeat.js","webpack://Blockv/./node_modules/core-js/modules/_math-sign.js","webpack://Blockv/./node_modules/core-js/modules/_math-expm1.js","webpack://Blockv/./node_modules/core-js/modules/_string-at.js","webpack://Blockv/./node_modules/core-js/modules/_iter-define.js","webpack://Blockv/./node_modules/core-js/modules/_string-context.js","webpack://Blockv/./node_modules/core-js/modules/_is-regexp.js","webpack://Blockv/./node_modules/core-js/modules/_fails-is-regexp.js","webpack://Blockv/./node_modules/core-js/modules/_is-array-iter.js","webpack://Blockv/./node_modules/core-js/modules/_create-property.js","webpack://Blockv/./node_modules/core-js/modules/core.get-iterator-method.js","webpack://Blockv/./node_modules/core-js/modules/_array-fill.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.iterator.js","webpack://Blockv/./node_modules/core-js/modules/_regexp-exec.js","webpack://Blockv/./node_modules/core-js/modules/_advance-string-index.js","webpack://Blockv/./node_modules/core-js/modules/_task.js","webpack://Blockv/./node_modules/core-js/modules/_typed-buffer.js","webpack://Blockv/./node_modules/core-js/library/modules/_global.js","webpack://Blockv/./node_modules/core-js/library/modules/_is-object.js","webpack://Blockv/./node_modules/core-js/library/modules/_descriptors.js","webpack://Blockv/./src/internal/DataPool/EventEmitter.js","webpack://Blockv/./node_modules/uuid/index.js","webpack://Blockv/./node_modules/vuvuzela/index.js","webpack://Blockv/./node_modules/core-js/modules/_ie8-dom-define.js","webpack://Blockv/./node_modules/core-js/modules/_wks-define.js","webpack://Blockv/./node_modules/core-js/modules/_object-keys-internal.js","webpack://Blockv/./node_modules/core-js/modules/_object-dps.js","webpack://Blockv/./node_modules/core-js/modules/_object-gopn-ext.js","webpack://Blockv/./node_modules/core-js/modules/_object-assign.js","webpack://Blockv/./node_modules/core-js/modules/_same-value.js","webpack://Blockv/./node_modules/core-js/modules/_bind.js","webpack://Blockv/./node_modules/core-js/modules/_invoke.js","webpack://Blockv/./node_modules/core-js/modules/_parse-int.js","webpack://Blockv/./node_modules/core-js/modules/_parse-float.js","webpack://Blockv/./node_modules/core-js/modules/_a-number-value.js","webpack://Blockv/./node_modules/core-js/modules/_is-integer.js","webpack://Blockv/./node_modules/core-js/modules/_math-log1p.js","webpack://Blockv/./node_modules/core-js/modules/_iter-create.js","webpack://Blockv/./node_modules/core-js/modules/_iter-call.js","webpack://Blockv/./node_modules/core-js/modules/_array-species-create.js","webpack://Blockv/./node_modules/core-js/modules/_array-reduce.js","webpack://Blockv/./node_modules/core-js/modules/_array-copy-within.js","webpack://Blockv/./node_modules/core-js/modules/_iter-step.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.exec.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.flags.js","webpack://Blockv/./node_modules/core-js/modules/es6.promise.js","webpack://Blockv/./node_modules/core-js/modules/_new-promise-capability.js","webpack://Blockv/./node_modules/core-js/modules/_promise-resolve.js","webpack://Blockv/./node_modules/core-js/modules/_collection-strong.js","webpack://Blockv/./node_modules/core-js/modules/_collection-weak.js","webpack://Blockv/./node_modules/core-js/modules/_to-index.js","webpack://Blockv/./node_modules/core-js/modules/_own-keys.js","webpack://Blockv/./node_modules/core-js/modules/_string-pad.js","webpack://Blockv/./node_modules/core-js/modules/_object-to-array.js","webpack://Blockv/./node_modules/core-js/library/modules/_core.js","webpack://Blockv/./node_modules/core-js/library/modules/_fails.js","webpack://Blockv/./node_modules/uuid/lib/rng-browser.js","webpack://Blockv/./node_modules/uuid/lib/bytesToUuid.js","webpack://Blockv/./node_modules/@brillout/assert/log.js","webpack://Blockv/./node_modules/@brillout/assert/utils/isNodejs.js","webpack://Blockv/./node_modules/@brillout/format-text/index.js","webpack://Blockv/./node_modules/reassert/utils/isNodejs.js","webpack://Blockv/./src/internal/DataPool/Region.js","webpack://Blockv/./src/internal/DataPool/Filter.js","webpack://Blockv/./src/internal/DataPool/DatabaseMap.js","webpack://Blockv/./node_modules/pouchdb/lib/index-browser.es.js","webpack://Blockv/./src/internal/repo/Store.js","webpack://Blockv/./src/internal/net/rest/api/UserApi.js","webpack://Blockv/./src/internal/net/Client.js","webpack://Blockv/./node_modules/@brillout/fetch/index.js","webpack://Blockv/./src/client/manager/WebSockets.js","webpack://Blockv/./node_modules/@babel/polyfill/lib/index.js","webpack://Blockv/./node_modules/util/support/isBufferBrowser.js","webpack://Blockv/./node_modules/util/node_modules/inherits/inherits_browser.js","webpack://Blockv/./node_modules/assert/assert.js","webpack://Blockv/./node_modules/object-assign/index.js","webpack://Blockv/./node_modules/date-now/index.js","webpack://Blockv/./node_modules/@babel/polyfill/lib/noConflict.js","webpack://Blockv/./node_modules/core-js/es6/index.js","webpack://Blockv/./node_modules/core-js/modules/es6.symbol.js","webpack://Blockv/./node_modules/core-js/modules/_function-to-string.js","webpack://Blockv/./node_modules/core-js/modules/_enum-keys.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.create.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.define-property.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.define-properties.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.keys.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.freeze.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.seal.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is-frozen.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is-sealed.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is-extensible.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.assign.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.to-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.function.bind.js","webpack://Blockv/./node_modules/core-js/modules/es6.function.name.js","webpack://Blockv/./node_modules/core-js/modules/es6.function.has-instance.js","webpack://Blockv/./node_modules/core-js/modules/es6.parse-int.js","webpack://Blockv/./node_modules/core-js/modules/es6.parse-float.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.constructor.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.to-fixed.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.to-precision.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.epsilon.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-finite.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-nan.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.parse-float.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.parse-int.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.acosh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.asinh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.atanh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.cbrt.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.clz32.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.cosh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.expm1.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.fround.js","webpack://Blockv/./node_modules/core-js/modules/_math-fround.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.hypot.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.imul.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.log10.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.log1p.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.log2.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.sign.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.sinh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.tanh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.trunc.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.from-code-point.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.raw.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.trim.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.iterator.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.code-point-at.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.ends-with.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.includes.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.repeat.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.starts-with.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.anchor.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.big.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.blink.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.bold.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.fixed.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.fontcolor.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.fontsize.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.italics.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.link.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.small.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.strike.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.sub.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.sup.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.now.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-json.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack://Blockv/./node_modules/core-js/modules/_date-to-iso-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-primitive.js","webpack://Blockv/./node_modules/core-js/modules/_date-to-primitive.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.is-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.from.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.of.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.join.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.slice.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.sort.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.for-each.js","webpack://Blockv/./node_modules/core-js/modules/_array-species-constructor.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.map.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.filter.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.some.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.every.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.reduce.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.reduce-right.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.index-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.last-index-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.copy-within.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.fill.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.find.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.find-index.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.species.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.constructor.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.to-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.match.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.replace.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.search.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.split.js","webpack://Blockv/./node_modules/core-js/modules/_microtask.js","webpack://Blockv/./node_modules/core-js/modules/_perform.js","webpack://Blockv/./node_modules/core-js/modules/es6.map.js","webpack://Blockv/./node_modules/core-js/modules/es6.set.js","webpack://Blockv/./node_modules/core-js/modules/es6.weak-map.js","webpack://Blockv/./node_modules/core-js/modules/es6.weak-set.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.data-view.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.int8-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.int16-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.int32-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.float32-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.float64-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.apply.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.construct.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.define-property.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.get.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.has.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.set.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack://Blockv/./node_modules/core-js/fn/array/includes.js","webpack://Blockv/./node_modules/core-js/modules/es7.array.includes.js","webpack://Blockv/./node_modules/core-js/fn/array/flat-map.js","webpack://Blockv/./node_modules/core-js/modules/es7.array.flat-map.js","webpack://Blockv/./node_modules/core-js/modules/_flatten-into-array.js","webpack://Blockv/./node_modules/core-js/fn/string/pad-start.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.pad-start.js","webpack://Blockv/./node_modules/core-js/fn/string/pad-end.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.pad-end.js","webpack://Blockv/./node_modules/core-js/fn/string/trim-start.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.trim-left.js","webpack://Blockv/./node_modules/core-js/fn/string/trim-end.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.trim-right.js","webpack://Blockv/./node_modules/core-js/fn/symbol/async-iterator.js","webpack://Blockv/./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack://Blockv/./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack://Blockv/./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack://Blockv/./node_modules/core-js/fn/object/values.js","webpack://Blockv/./node_modules/core-js/modules/es7.object.values.js","webpack://Blockv/./node_modules/core-js/fn/object/entries.js","webpack://Blockv/./node_modules/core-js/modules/es7.object.entries.js","webpack://Blockv/./node_modules/core-js/fn/promise/finally.js","webpack://Blockv/./node_modules/core-js/modules/es7.promise.finally.js","webpack://Blockv/./node_modules/core-js/web/index.js","webpack://Blockv/./node_modules/core-js/modules/web.timers.js","webpack://Blockv/./node_modules/core-js/modules/web.immediate.js","webpack://Blockv/./node_modules/core-js/modules/web.dom.iterable.js","webpack://Blockv/./node_modules/regenerator-runtime/runtime.js","webpack://Blockv/./node_modules/core-js/library/fn/global.js","webpack://Blockv/./node_modules/core-js/library/modules/es7.global.js","webpack://Blockv/./node_modules/core-js/library/modules/_export.js","webpack://Blockv/./node_modules/core-js/library/modules/_ctx.js","webpack://Blockv/./node_modules/core-js/library/modules/_a-function.js","webpack://Blockv/./node_modules/core-js/library/modules/_hide.js","webpack://Blockv/./node_modules/core-js/library/modules/_object-dp.js","webpack://Blockv/./node_modules/core-js/library/modules/_an-object.js","webpack://Blockv/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://Blockv/./node_modules/core-js/library/modules/_dom-create.js","webpack://Blockv/./node_modules/core-js/library/modules/_to-primitive.js","webpack://Blockv/./node_modules/core-js/library/modules/_property-desc.js","webpack://Blockv/./node_modules/core-js/library/modules/_has.js","webpack://Blockv/./src/internal/DataPool/plugins/InventoryRegion.js","webpack://Blockv/(webpack)/buildin/module.js","webpack://Blockv/./node_modules/lz-string/libs/lz-string.js","webpack://Blockv/./node_modules/uuid/v1.js","webpack://Blockv/./node_modules/uuid/v4.js","webpack://Blockv/./node_modules/requires-port/index.js","webpack://Blockv/./node_modules/querystringify/index.js","webpack://Blockv/./src/internal/DataPool/plugins/VatomIDRegion.js","webpack://Blockv/./src/internal/DataPool/plugins/VatomChildrenRegion.js","webpack://Blockv/./src/internal/DataPool/plugins/GeoPosRegion.js","webpack://Blockv/./node_modules/jwt-decode/lib/base64_url_decode.js","webpack://Blockv/./node_modules/jwt-decode/lib/atob.js","webpack://Blockv/./node_modules/@brillout/assert/index.js","webpack://Blockv/./node_modules/reassert/warning.js","webpack://Blockv/./node_modules/reassert/assert.js","webpack://Blockv/./node_modules/reassert/log.js","webpack://Blockv/./node_modules/@brillout/format-text/node_modules/string-width/index.js","webpack://Blockv/./node_modules/@brillout/format-text/node_modules/strip-ansi/index.js","webpack://Blockv/./node_modules/@brillout/format-text/node_modules/ansi-regex/index.js","webpack://Blockv/./node_modules/is-fullwidth-code-point/index.js","webpack://Blockv/./node_modules/@brillout/assert/internal.js","webpack://Blockv/./node_modules/@brillout/assert/usage.js","webpack://Blockv/./node_modules/@brillout/assert/warning.js","webpack://Blockv/./src/internal/DataPool/index.js","webpack://Blockv/./src/client/manager/UserManager.js","webpack://Blockv/./src/internal/net/rest/api/VatomApi.js","webpack://Blockv/./src/client/manager/Vatoms.js","webpack://Blockv/./src/client/manager/Activity.js","webpack://Blockv/./src/internal/net/rest/api/ActivityApi.js","webpack://Blockv/./src/client/manager/MultiWebSockets.js","webpack://Blockv/./src/client/Blockv.js","webpack://Blockv/./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","core","hide","redefine","ctx","$export","type","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","target","expProto","undefined","Function","U","W","R","DataObject","id","data","this","rev","cached","window","Math","self","__g","exec","e","isObject","it","TypeError","store","uid","USE_SYMBOL","toInteger","min","version","__e","a","anObject","IE8_DOM_DEFINE","toPrimitive","dP","f","O","Attributes","console","util","assert","now","slice","Array","times","functions","log","apply","arguments","warn","label","time","Error","duration","err","message","format","error","stack","inspect","expression","arr","ok","length","tuple","defined","ReflectOwnKeys","Reflect","ReflectApply","receiver","args","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","EventEmitter","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","that","_addListener","listener","prepend","events","existing","warning","newListener","emit","unshift","push","warned","w","String","emitter","count","onceWrapper","fired","removeListener","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","copy","set","arg","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","handler","len","listeners","addListener","on","prependListener","once","prependOnceListener","list","position","originalListener","shift","index","pop","spliceOne","off","removeAllListeners","keys","rawListeners","eventNames","has","SRC","$toString","TPL","split","inspectSource","val","safe","isFunction","join","fails","quot","createHTML","string","tag","attribute","p1","replace","NAME","test","toLowerCase","createDesc","IObject","pending","timer","executePendingActions","func","setTimeout","actions","action","ctor","superCtor","super_","constructor","writable","configurable","TempCtor","method","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","nextTick","element","document","createTextNode","observe","characterData","setImmediate","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","channel","port1","onmessage","port2","postMessage","queue","oldQueue","task","aFunction","fn","b","ceil","floor","pIE","toIObject","gOPD","getOwnPropertyDescriptor","KEY","toObject","toLength","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","$this","callbackfn","res","result","toString","LIBRARY","$typed","$buffer","anInstance","propertyDesc","redefineAll","toIndex","toAbsoluteIndex","classof","isArrayIter","gOPN","getIterFn","wks","createArrayMethod","createArrayIncludes","speciesConstructor","ArrayIterators","Iterators","$iterDetect","setSpecies","arrayFill","arrayCopyWithin","$DP","$GOPD","Uint8Array","ArrayProto","$ArrayBuffer","ArrayBuffer","$DataView","DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayIndexOf","arrayValues","values","arrayKeys","arrayEntries","entries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","ITERATOR","TAG","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","$map","allocate","LITTLE_ENDIAN","Uint16Array","buffer","FORCED_SET","toOffset","BYTES","offset","validate","C","speciesFromList","fromList","addGetter","internal","_d","$from","step","iterator","aLen","mapfn","mapping","iterFn","next","done","$of","TO_LOCALE_BUG","$toLocaleString","proto","copyWithin","start","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","reverse","middle","some","comparefn","subarray","begin","end","$begin","byteOffset","BYTES_PER_ELEMENT","$slice","$set","arrayLike","src","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","Base","TAC","FORCED","ABV","TypedArrayPrototype","addElement","v","round","setter","$offset","$length","byteLength","klass","$len","iter","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","from","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","freeSelf","root","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","array","iteratee","accumulator","arrayEach","arrayEachRight","resIndex","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","initAccum","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseUnary","baseValues","props","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","transform","replaceHolders","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","match","unicodeToArray","asciiToArray","unescapeHtmlChar","_","runInContext","defaults","pick","Date","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","input","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","resolve","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","WRAP_BIND_FLAG","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","iteratorToArray","remainder","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","after","castArray","chunk","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escape","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","toJSON","Vatom","payload","faces","otherVatom","isFolder","isDefinedFolder","policies","templateVariation","template_variation","maxCount","creation_policy","policy_count_max","enforceMaxCount","enforce_policy_count_max","constraints","platform","view_mode","unpublished","sync","when_created","when_modified","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","meta","NEED","fastKey","getWeak","onFreeze","BLOCKvRegion","dataPool","queuedMessages","socketPaused","socketProcessing","onWebSocketMessage","socket","Blockv","WebSockets","connect","addEventListener","DataObjectAnimator","withBlockv","addRegion","removeEventListener","removeRegion","processNextMessage","msg","processMessage","msg_type","new_object","updateObjects","new_data","objects","parent_id","Delayer","run","nextUpdate","changes","u","oldParent","newParent","keyPath","oldValue","objectOrID","Region","eventName","privateEventListeners","removeAfterCall","when","callbacks","passArguments","otherClass","bitmap","px","$keys","enumBugKeys","dPs","Empty","createDict","iframeDocument","iframe","style","display","contentWindow","open","write","close","Properties","hiddenKeys","ObjectProto","UNSCOPABLES","_t","fun","g","def","stat","spaces","space","ltrim","rtrim","exporter","ALIAS","FORCE","DESCRIPTORS","SPECIES","Constructor","forbiddenField","base64_url_decode","InvalidTokenError","token","pos","header","JSON","parse","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","queueIndex","cleanUpNextTick","drainQueue","timeout","marker","runClearTimeout","Item","title","browser","env","argv","versions","cwd","chdir","umask","cof","ARG","T","tryGet","callee","D","Discover","bv","customPayload","overridePayload","filters","FieldTemplateVariation","scope","auth","setScopeToOwnedVatomsOnly","samples","field","compareOperation","combineOperation","filter_op","FilterOperation","Equal","bool_op","CombineOperation","And","fqdn","FieldPublisherFqdn","FieldOwner","group_by","filter_elems","fields","client","request","getPayload","then","results","actionsArray","facesArray","vatomsArray","aName","aKey","obj","GreaterThan","GreaterOrEqual","LessThan","LessOrEqual","NotEqual","Match","Or","FieldAcquireable","FieldPrivateName","FieldID","FieldTemplate","FieldVisibilityType","FieldParentID","User","user","firstName","first_name","lastName","last_name","namePublic","name_public","avatarUri","avatar_uri","avatarPublic","avatar_public","birthday","language","nonPushNotification","nonpush_notification","guestId","guest_id","isPasswordSet","is_password_set","activated","system_properties","isAdmin","is_admin","isMerchant","is_merchant","lastLogin","last_login","pubFqdn","pub_fqdn","rawPayload","consents","user_consents","createdBy","created_by","dataType","data_type","modifiedBy","modified_by","whenCreated","whenModified","getOwnPropertyDescriptors","descriptors","formatRegExp","str","x","stringify","deprecate","noDeprecation","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","opts","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","styles","recurseTimes","primitive","simple","formatPrimitive","visibleKeys","hash","idx","arrayToHash","formatError","output","base","braces","toUTCString","formatProperty","formatArray","prev","cur","numLinesEst","reduceToSingleString","line","substr","ar","re","debuglog","NODE_DEBUG","pid","isNullOrUndefined","isPrimitive","months","timestamp","getHours","getMinutes","getSeconds","getDate","getMonth","inherits","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","original","promiseResolve","promiseReject","promise","setPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","rej","copyright","IS_INCLUDES","el","SAFE_CLOSING","riter","skipClosing","ignoreCase","multiline","unicode","sticky","builtinExec","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","groups","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","fns","nativeMethod","arg2","forceStringMethod","strfn","rxfn","BREAK","RETURN","navigator","userAgent","forOf","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","ADDER","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","getConstructor","setStrong","Typed","TypedArrayConstructors","logify_input","titleFormat","isNodejs","option_keys","is_warning","is_usage","is_internal","parseArguments","msgs","IS_REASSERT_OPTS","j","getErrorMessage","condition","callStack","getErrorDetailsMessage","is_browser","getStackMessage","getErrorSummaryMessage","throwError","interupt_execution","throw__browser","stackTraceLimit","getCallStack","stackTraceLimit__original","callStackString","lines","lines__filtered","parsed","required","qs","slashes","protocolre","left","trimLeft","rules","address","NaN","ignore","query","lolcation","loc","location","finaldestination","protocol","Url","pathname","href","extractProtocol","parser","relative","extracted","instruction","instructions","url","up","port","host","hostname","username","password","part","char","ins","hex_chr","md5cycle","k","md5blk","md5blks","md5blk_array","md51","tmp","lo","hi","rhex","hex","toUtf8","encodeURIComponent","hexToBinaryString","bytes","fromCharCode","SparkMD5","reset","to","num","targetArray","sourceArray","append","appendBinary","contents","_buff","_length","_hash","raw","buff","_finish","getState","setState","destroy","hashBinary","content","second","returnUInt8Array","utf8Str2ArrayBuffer","md51_array","factory","blockv","regions","updateTimer","timeSkew","animator","action_name","nextPositions","next_positions","updates","geo_pos","earliestTime","clearUpdatesFor","region","isMonitoringID","setInterval","doNextUpdate","afterTime","clearInterval","change","is","shared","check","buggy","__proto__","sign","$expm1","expm1","TO_STRING","$iterCreate","BUGGY","returnThis","DEFAULT","IS_SET","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","searchString","MATCH","$defineProperty","getIteratorMethod","endPos","addToUnscopables","iterated","_i","_k","Arguments","re1","re2","regexpFlags","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","NPCG_INCLUDED","reCopy","html","cel","setTask","clearTask","clearImmediate","Dispatch","counter","event","importScripts","BaseBuffer","abs","pow","LN2","$BUFFER","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","unpackIEEE754","nBits","unpackI32","packI8","packI16","packI32","packF64","packF32","isLittleEndian","intIndex","_b","pack","conversion","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","_eventListeners","onSuccess","onFail","_removeAfterCall","v1","v4","uuid","metaStack","lastMetaElement","lastElementIndex","arrayPrefix","objPrefix","collationIndex","parsedNum","numChar","parsedString","lastCh","numConsecutiveSlashes","ch","arrayElement","objElement","wksExt","$Symbol","names","getKeys","windowNames","getWindowNames","gOPS","$assign","A","K","isEnum","y","factories","construct","partArgs","bound","un","$parseInt","$trim","ws","$parseFloat","log1p","descriptor","memo","inc","forced","flags","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","microtask","newPromiseCapabilityModule","perform","v8","$Promise","isNode","empty","newPromiseCapability","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","notify","isReject","_n","_c","_v","_s","reaction","exited","fail","domain","_h","onHandleUnhandled","enter","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","_a","onrejectionhandled","$reject","_w","$resolve","executor","onFulfilled","onRejected","capability","$$reject","all","$index","alreadyCalled","race","PromiseCapability","$$resolve","promiseCapability","$iterDefine","SIZE","getEntry","_f","_l","$has","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","ufstore","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","isEntries","getRandomValues","crypto","msCrypto","rnds8","rnds","byteToHex","buf","bth","stringify_object","input_str","toStr","get_str","obj_copy","get_prettier_copy","parent_objects","el_copy","thing","node","tableFormat","rows","padding","indent","columnWidths","cells","cell","columnNumber","getStringWidth","colWidth","paddingRight","getBar","assert_warning","titleWidth","barWidth","leftWidth","bar","title_bar","stringWidth","eval","filler","noCache","_syncPromise","synchronize","_synchronize","stateKey","load","loadedIDs","keysToRemove","removeObjects","existingObject","willUpdateFields","willAdd","didUpdate","ids","willRemove","info","waitUntilStable","items","getItem","willUpdateField","addObjects","Filter","_objects","DatabaseMap","Database","noStore","pouch","setupPouchDB","Queue","PouchDB","loaded","allDocs","include_docs","row","doc","thisValue","found","getRevision","revision","put","_id","_rev","status","itm","isRunning","ExportedSet","ExportedMap","mangle","unmangle","Map$1","_store","Set$1","cloneBinaryObject","webkitSlice","mangled","delete","species","supportsMapAndSet","newObject","toISOString","Blob","isBinaryObject","toPromise","usedCB","fulfill","resp","mesg","adapterFun","_closed","_destroyed","logArgs","origCallback","responseArgs","logApiCall","taskqueue","isReady","addTask","failed","hasLocal","identityFunction","formatResultForOpenRevsGet","bulkGet","db","requests","docs","requestsById","numDocs","numDone","perDocResults","checkDone","allRequests","nextBatch","upTo","batch","docId","docIdx","docRequests","docOpts","open_revs","formatResult","param","processBatch","localStorage","setItem","hasLocalStorage","Changes","attachBrowserEvents","guardedConsole","defaultBackOff","maxTimeout","randomNumber","explainError","dbName","inprogress","eventFunction","changesOpts","seq","since","cancelled","onChange","notifyLocalWindows","$inject_Object_assign","nextSource","nextKey","PouchError","MISSING_BULK_DOCS","MISSING_DOC","REV_CONFLICT","INVALID_ID","MISSING_ID","RESERVED_ID","UNKNOWN_ERROR","BAD_ARG","QUERY_PARSE_ERROR","DOC_VALIDATION","BAD_REQUEST","NOT_AN_OBJECT","IDB_ERROR","INVALID_REV","MISSING_STUB","createError","CustomPouchError","generateErrorFromResponse","filterChange","req","hasFilter","query_params","filterReturn","tryFilter","attachments","att","_attachments","stub","arrs","invalidIdError","isRemote","_remote","parseDesignDocFunctionName","parts","normalizeDesignDocFunctionName","normalized","qParser","parseUri","uri","encoded","decodeURIComponent","$0","$1","$2","scopeEval","upsert","diffFun","docRev","newDoc","updated","tryAndPut","thisAtob","atob","thisBtoa","btoa","createBlob","builder","BlobBuilder","MSBlobBuilder","MozBlobBuilder","WebKitBlobBuilder","getBlob","binaryStringToArrayBuffer","bin","binStringToBluffer","binString","b64ToBluffer","b64","readAsBinaryString","blob","reader","FileReader","hasBinaryString","onloadend","binary","arrayBufferToBinaryString","readAsArrayBuffer","blobToBinaryString","blobOrBuffer","blobToBase64","base64","setImmediateShim","appendBlob","sliceBlob","appendString","binaryMd5","inputIsString","chunkSize","chunks","currentChunk","loadNextChunk","rawToBase64","stringMd5","deterministic_revs","clonedDoc","_rev_tree","winningRev","metadata","winningId","winningPos","winningDeleted","toVisit","rev_tree","tree","branches","deleted","traverseRevTree","revs","newCtx","sortByPos","collectLeaves","leaves","isLeaf","acc","collectConflicts","win","conflicts","leaf","rootToLeaf","history","sortByPos$1","insertSorted","item","binarySearch","pathToTree","numStemmed","currentLeaf","compareTree","mergeTree","in_tree1","in_tree2","tree1","tree2","merged","doMerge","dontExpand","restree","branch","t1","t2","diff","candidateParents","trees","parentIdx","elements","elementsLen","newTree","stemmed","stemmedRevs","revHash","stem","getTrees","isDeleted","isLocalId","Changes$1","complete","ee","onDestroy","lastSeq","isCancelled","tryCatchInChangeListener","validateChanges","processChange","changeList","_conflicts","compare","right","yankError","compareByIdThenRev","idCompare","_revisions","AbstractPouchDB","TaskQueue","__opts","auto_compaction","backend","adapter","adapters","preferredAdapters","adapterName","use_prefix","parseAdapter","_adapter","valid","onDestroyed","from_constructor","onClosed","prepareForDestruction","ready","_changesFilterPlugin","doChanges","continuous","live","normalize","shouldFilter","descending","newPromise","_changes","update_seq","post","bulkDocs","_putLocal","_deleted","_removeLocal","oldRevId","newRevNum","newRevId","putDoc","_put","new_edits","force","putAttachment","attachmentId","rev$$1","api","createAttachment","prevrevpos","content_type","revpos","removeAttachment","docOrId","optsOrRev","was_delete","revsDiff","missing","addToMissing","revId","_getRevisionTree","missingForId","processDoc","missingObj","compactDocument","maxHeight","revTree","height","edges","prnt","edge","computeHeight","candidates","_doCompaction","_compactionQueue","doNextCompaction","catch","last_seq","_compact","return_docs","promises","_getLocal","finishOpenRevs","latest","_get","revs_info","splittedRev","revNo","currentPath","hashIndex","indexOfRev","howMany","_revs_info","_getAttachment","getAttachment","start_key","startkey","end_key","endkey","incompatibleOpt","allDocsKeysParse","_allDocs","_close","_info","db_name","_type","attachmentError","attachmentNameError","atts","cleanDocs","_bulkDocs","registerDependentDatabase","dependentDb","depDB","dependentDbs","usePrefix","destroyDb","_destroy","localDoc","deletedMap","trueName","execute","AbortController","abort","f$1","fetch","h","Headers","eventEmitter","Pouch","destructListeners","_destructionListeners","dbList","setUpEventEmitter","addToPreferredAdapters","plugin","__defaults","defaultOpts","PouchAlt","getFieldFromDoc","parsedField","parseField","fieldName","combinationFields","isCombinationalField","getKey","mergeAndedSelectors","selectors","selector","matcher","$eq","fieldMatchers","$gte","$gt","mergeGtGte","$lte","$lt","mergeLtLte","$ne","mergeNe","mergeEq","massageSelector","wasAnded","isAndInSelector","isAnd","mergeAndedSelectorsNested","orOrNor","subSelector","collate","normalizeKey","ai","bi","stringCollate","arrayCollate","ak","bk","objectCollate","origKey","indexify","expFormat","toExponential","magnitude","neg","magString","padWith","upToLength","targetLength","factor","factorStr","toFixed","numToIndexableString","toIndexableString","objKey","parseNumber","originalIdx","numAsString","magAsString","filterInMemoryFields","requestDef","inMemoryFields","rowFilter","fieldSorter","getFieldValuesAsArray","sorting","aRow","bRow","collation","createFieldSorter","docFieldValue","orMatchers","matchCominationalSelector","matchSelector","userOperator","userValue","matchers","fieldExists","fieldIsNotUndefined","arrayContainsValue","mod","modField","neValue","arraySize","arrayContainsAllValues","regexMatch","typeMatch","filterName","changesHandler","doc_ids","viewName","ddoc","mapFun","views","rowsMatched","matchesSelector","filterFun","reservedWords","dataWords","parseRevisionInfo","parseDoc","newEdits","dbOpts","nRevNum","revInfo","revisions","revisionIds","makeRevTreeFromRevisions","specialKey","preprocessString","blobType","asBinary","parseBase64","digest","preprocessAttachment","md5","preprocessBlob","updateDoc","revLimit","docInfo","writeDoc","splitRev","targetPos","targetId","revExists","previousWinningRev","previouslyDeleted","isRoot","newRev","rev_map","winningRev$$1","winningRevIsDeleted","delta","processDocs","docInfos","fetchedDocs","tx","overallCallback","idsToDocs","docsDone","docsToDo","checkAllDocsDone","currentDoc","resultsIdx","docWritten","nextDoc","rootIsMissing","insertDoc","DOC_STORE","META_STORE","safeJsonStringify","json","idbError","evt","encodeMetadata","deletedOrLocal","decodeMetadata","storedObject","safeJsonParse","decodeDoc","_doc_id_rev","readBlobData","body","asBlob","fetchAttachmentsIfNecessary","txn","attObj","objectStore","onsuccess","fetchAttachment","postProcessAttachments","attNames","compactRevs","possiblyOrphanedDigests","seqStore","attStore","attAndSeqStore","IDBKeyRange","deleteOrphanedAttachments","openCursor","only","cursor","digestSeq","primaryKey","continue","openTransactionSafely","idb","stores","transaction","idbBulkDocs","docStore","bySeqStore","attachStore","attachAndSeqStore","metaStore","docInfoError","metaDoc","allDocsProcessed","docCountDelta","preconditionErrored","_meta","blobSupport","onAllDocsProcessed","updateDocCountIfReady","docCount","newRevIsDeleted","isUpdate","collectResults","finishDoc","attachmentSaved","newAtt","saveAttachment","writeAttachments","afterPutDoc","revsToDelete","compactTree","metadataToStore","afterPutMetadata","attsAdded","attsToAdd","onerror","preventDefault","stopPropagation","insertAttachmentMappings","putReq","overallErr","docv","recv","processedAttachment","preprocessAttachments","txnResult","onabort","ontimeout","oncomplete","finish","digests","filename","verifyAttachment","attErr","verifyAttachments","numFetched","revs_limit","readMetadata","fetchExistingDocs","startTransaction","runBatchedCursor","keyRange","batchSize","onBatch","keysBatch","valuesBatch","pseudoCursor","onGetAll","onGetAllKeys","onCursor","getAll","newKeyRange","lastKey","upperOpen","code","lowerBound","idbAllDocs","keyRangeError","inclusiveEnd","inclusive_end","upperBound","createKeyRange","onResultsReady","updateSeq","docIdRevIndex","allDocsInner","fetchDocAsynchronously","batchValues","batchValue","batchKeys","returnVal","total_rows","maxKey","allDocsKeys","running","applyNext","docIds","numResults","docIdsToMetadata","onGetMetadata","docIdRev","objectStores","winningDocs","metadatas","fetchWinningDocAndMetadata","winningDoc","processMetadataAndWinningDoc","onBatchDone","filtered","blobSupportPromise","cachedDBs","openReqList","IdbPouch","tryCode","enqueueTask","thisCallback","addDeletedOrLocalIndex","createIndex","unique","migrateLocalStore","localStore","local","seqCursor","migrateAttsAndSeqs","digestMap","migrateMetadata","onGetMetadataSeq","metadataSeq","fetchMetadataSeq","instanceId","reqOpts","historyNode","attachId","attachment","blobData","doc_count","idb_attachment_format","oldRev","oStore","oldDoc","openReq","indexedDB","deleteDatabase","onupgradeneeded","oldVersion","createObjectStore","autoIncrement","createSchema","currentTarget","createLocalStoreSchema","addAttachAndSeqStore","migrations","migration","onversionchange","storedMetaDoc","completeSetup","storeMetaDocIfReady","instanceKey","countDocs","blob$$1","matchedChrome","matchedEdge","checkBlobSupport","supportsBulkGetMap","readAttachmentsAsBlobOrBuffer","encodeDocId","preprocessAttachments$1","getHost","hasUrlPrefix","genDBUrl","genUrl","pathDel","paramsToStr","params","HttpPouch","dbUrl","setupPromise","ourFetch","headers","credentials","nAuth","ua","isIE","isTrident","isEdge","isGET","shouldCacheBust","adapterFun$$1","setup","fetchJSON","response","skip_setup","encodeAttachmentId","uuid$$1","ping","compact_running","interval","doBulkGet","doBulkGetShim","numBatches","onResult","batchNum","subOpts","supportsBulkGet","fetchAttachments","filenames","promiseFactories","doNext","runNextBatch","onError","thisErr","pool","fetchData","docOrDocs","contentType","paramStr","batch_size","heartbeat","requestTimeout","leftToFetch","feed","seq_interval","param_name","lastFetchedSeq","controller","aborted","fetchOpts","signal","fetched","raw_results_length","finished","QueryParseError","captureStackTrace","NotFoundError","BuiltInError","promisedCallback","sequentialize","promiseFactory","theSet","mapToKeysArray","createBuiltInError","jLen","jNum","evalFunctionWithEval","TaskQueue$1","createView","sourceDB","reduceFun","temporary","localDocName","cachedViews","viewSignature","createViewSignature","_cachedViews","promiseForView","depDbName","fullViewName","depDbs","lastSeqDoc","persistentQueues","tempViewQueue","parseViewName","emitError","builtInReduce","sumsqr","_sumsqr","abstract","mapper","reducer","ddocValidator","tryMap","tryReduce","rereduce","sortByKeyThenValue","keyCompare","sliceResults","rowToDocId","postprocessAttachments","addHttpParam","paramName","asJson","coerceInteger","integerCandidate","asNumber","checkQueryParseError","startkeyName","endkeyName","group_level","optionName","checkPositiveInteger","defaultsTo","getDocsToPersist","docIdsToChangesAndEmits","metaDocId","defaultMetaDoc","docData","indexableKeysToKeyValues","isGenOne","getKeyValueDocs","kvDocsRes","kvDocs","oldKeys","keyValue","newKeys","kvDoc","processKeyValueDocs","getQueue","updateView","mapResults","currentSeq","listOfDocsToPersist","docsToPersist","saveKeyValues","processNextBatch","createIndexableKeysToKeyValues","createDocIdsToChangesAndEmits","emittedKeyValue","complexKey","updateViewInQueue","queryView","totalRows","shouldReduce","fetchFromView","viewOpts","expectedKeys","parsedKeyAndDocId","parsedStr","parseIndexableString","onMapResultsReady","finalResults","shouldGroup","lvl","POSITIVE_INFINITY","groupKey","reduceTry","reduceView","allDocsRes","docIdsToDocs","fetchPromises","keyStart","keyEnd","queryViewInQueue","queryPromised","_query","customQuery","keysAsString","httpQuery","finalPromiseFactory","designDocName","stale","coerceOptions","viewCleanup","_viewCleanup","customViewCleanup","httpViewCleanup","docsToViews","viewsToStatus","ddocName","viewDBNames","statusIsGood","viewDBName","destroyPromises","localViewCleanup","createAbstractMapReduce","origMap","reduceFunString","builtIn","getBuiltIn","mapreduce","isGenOne$1","getDocAttachments","getDocs","diffs","resultDocs","fetchRevisionOneDocs","hasConflicts","bulkGetOpts","missingRev","createBulkGetOpts","bulkGetResponse","bulkGetInfo","remoteDoc","doCheckForLocalAttachments","fileHasChanged","getDocAttachmentsFromTargetOrSource","Boolean","updateCheckpoint","checkpoint","session","returnValue","session_id","replicator","Checkpointer","writeCheckpoint","updateTarget","updateSource","writeTargetCheckpoint","writeSourceCheckpoint","isForbiddenError","comparisons","targetDoc","sourceDoc","srcDoc","tgtDoc","compareReplicationHistory","sourceHistory","targetHistory","sourceRest","targetRest","hasSessionId","compareReplicationLogs","sessionId","getCheckpoint","generateReplicationId","queryParams","filterViewName","sortObjectPropertiesByKey","queryData","md5sum","replicate","currentBatch","repId","checkpointer","batches","pendingBatch","writingCheckpoint","changesCompleted","replicationCompleted","batches_limit","changesPending","changedDocs","start_time","docs_read","docs_written","doc_write_failures","errors","initCheckpointer","checkpointOpts","writeDocs","bulkOpts","completeReplication","errorsById","errorsNo","errorName","finishBatch","outResult","getChanges","onCheckpointError","getBatchDocs","got","startNextBatch","abortReplication","processPendingBatch","immediate$$1","fatalError","end_time","retry","back_off_function","backOffSet","current_back_off","backOff","onChangesComplete","onChangesError","_abortChanges","abortChanges","startChanges","_addedListeners","Replication","toPouch","PouchConstructor","replicateWrapper","replicateRet","Sync","canceled","optsPush","optsPull","pullChange","direction","pushChange","pushDenied","pullDenied","pushPaused","pullPaused","pushActive","pullActive","removed","removeAll","addOneListener","success","_readyCalled","replicateMethods","Store","serverAddress","userid","jwtDecode","refreshToken","user_id","APPID","appid","wssocketAddress","websocAddress","accessToken","refresh","privateRefreshToken","rT","provider","privateAssetProvider","UserApi","registration","access_token","refresh_token","assetProvider","asset_provider","userID","setSessionInfo","tokenType","token_type","auth_data","verification","noRequest","aP","aPlen","urlParse","comparethis","queryString","mapString","tokenId","appID","stateID","redirectURI","newWindow","promiseResolved","promiseSuccess","promiseFail","closeChecker","closed","messageListener","oauthObj","oa","setRefreshToken","getCurrentUser","profile","assetProviders","error_text","ErrorCodes","2","17","401","516","517","521","527","1004","1701","1708","2030","2031","2032","2034","2037","2049","2051","2552","2553","2562","2563","2564","2566","2567","2569","2571","2572","Client","endpoint","checkToken","authRequest","t0","performance","statekey","server","FormData","extraHeaders","milliseconds","dateString","lockedUntil","httpStatus","requestID","request_id","serverMessage","main","Code","Msg","tokenFetchPromise","Authorization","UserManager","logout","decodedToken","expirationTime","isBrowser","usage","delayTime","shouldRetry","retryConnection","WebSocket","handleConnected","handleMessage","handleError","handleClose","cmd","readyState","send","ed","trigger","retryTimer","_global","_babelPolyfill","readUInt8","objectAssign","_isBuffer","hasOwn","pSlice","functionsHaveNames","pToString","isView","arrbuf","regex","getName","something","rawname","actual","expected","stackStartFunction","AssertionError","_deepEqual","strict","memos","getTime","Float32Array","Float64Array","actualIndex","actualVisitedObjects","aIsArgs","bIsArgs","ka","objectKeys","kb","objEquiv","expectedException","isPrototypeOf","_throws","shouldThrow","block","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","getMessage","fn_name","next_line","equal","notEqual","deepEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","$fails","wksDefine","enumKeys","_create","gOPNExt","$GOPS","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","sym","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","$getPrototypeOf","$freeze","$seal","$preventExtensions","$isFrozen","$isSealed","$isExtensible","FProto","nameRE","HAS_INSTANCE","FunctionProto","$Number","BROKEN_COF","TRIM","argument","third","maxCode","digits","aNumberValue","$toFixed","ERROR","c2","numToString","fractionDigits","z","x2","$toPrecision","toPrecision","EPSILON","_isFinite","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","sqrt","$acosh","acosh","MAX_VALUE","$asinh","asinh","$atanh","atanh","cbrt","clz32","LOG2E","cosh","fround","EPSILON32","MAX32","MIN32","$abs","$sign","hypot","value1","value2","div","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$fromCodePoint","fromCodePoint","callSite","tpl","$at","point","codePointAt","$endsWith","endPosition","$startsWith","color","pv","$toISOString","lz","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","DateProto","hint","createProperty","cloned","$sort","$forEach","STRICT","$filter","$some","$every","$reduce","$indexOf","NEGATIVE_ZERO","$find","$flags","$RegExp","CORRECT_NEW","tiRE","piRE","fiU","proxy","define","advanceStringIndex","regExpExec","$match","maybeCallNative","rx","fullUnicode","matchStr","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","$replace","searchValue","replaceValue","functionalReplace","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","capture","sameValue","SEARCH","$search","previousLastIndex","callRegExpExec","$min","$push","SUPPORTS_Y","SPLIT","$split","internalSplit","lastLength","lastLastIndex","splitLimit","separatorCopy","splitter","unicodeMatching","lim","q","macrotask","Observer","standalone","toggle","strong","InternalMap","weak","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","$WeakMap","$isView","fin","viewS","viewT","rApply","fApply","thisArgument","argumentsList","L","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","Enumerate","enumerate","getProto","V","existingDescriptor","ownDesc","setProto","$includes","flattenIntoArray","arraySpeciesCreate","sourceLen","IS_CONCAT_SPREADABLE","spreadable","targetIndex","sourceIndex","mapFn","$pad","WEBKIT_BUG","trimRight","getDesc","$values","onFinally","MSIE","boundArgs","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","displayName","isGeneratorFunction","genFun","mark","awrap","async","skipTempReset","stop","rootRecord","rval","exception","handle","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","IS_WRAP","virtual","InventoryRegion","sessionInfo","currentUserID","pauseMessages","loadNew","loadOld","resumeMessages","disableSyncV2","currentHash","getExtra","serverHashReq","allSyncs","page","nextToken","vatoms","next_token","idsToFetch","syncInfo","vatom","VatomsPerPage","remainingIds","newObjects","setExtra","pageCount","debug","vatomID","old_owner","new_owner","vatomRef","owner","onObjectPreemptivelyChanged","webpackPolyfill","children","LZString","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","compressToBase64","_compress","decompressFromBase64","_decompress","compressToUTF16","decompressFromUTF16","compressed","compressToUint8Array","uncompressed","compress","TotalLen","current_value","decompressFromUint8Array","decompress","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","resetValue","getNextValue","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","decode","VatomIDRegion","VatomChildrenRegion","parentID","setScope","GeoPosRegion","coordinates","top_right","lat","lon","bottom_left","sendRegionCommand","onWebSocketOpen","isOpen","top_left","bottom_right","sendMessage","dropped","publisher_fqdn","op","vatom_id","preemptiveChange","b64DecodeUnicode","InvalidCharacterError","bs","bc","assert_internal","assert_usage","stripAnsi","isFullwidthCodePoint","width","ansiRegex","DataPool","plugins","onSessionInfoChanged","register","login","loginGuest","loginOAuthPopup","getUserTokens","formData","uploadAvatar","updateUser","getAccessToken","encodeAssetProvider","sendTokenVerification","getRefreshToken","verify","verifyUserToken","addUserToken","tokenID","setDefaultToken","deleteUserToken","getGuestToken","resetPassword","getPublicUserProfile","addRedeemable","VatomApi","templateID","template_id","return","Vatoms","vatomApi","getActions","actionName","vatomId","phoneNumber","email","performAction","undos","undo","newParentID","getVatomChildren","child","vatomIds","bottomLeft","topRight","geoDiscover","geoDiscoverGroups","childID","parentPayload","setParent","trashVatom","Activity","activityApi","threads","threadMessages","ActivityApi","MultiWebSockets","sockets","addresses","websocketAddress","triggerEvent","userApi","isLoggedIn","BlockvSDKInfo"],"mappings":"uBACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,kBClFrD,IAAIC,EAAS,EAAQ,GACjBC,EAAO,EAAQ,GACfC,EAAO,EAAQ,IACfC,EAAW,EAAQ,IACnBC,EAAM,EAAQ,IAGdC,EAAU,SAAUC,EAAM/B,EAAMgC,GAClC,IAQIhB,EAAKiB,EAAKC,EAAKC,EARfC,EAAYL,EAAOD,EAAQO,EAC3BC,EAAYP,EAAOD,EAAQS,EAC3BC,EAAYT,EAAOD,EAAQW,EAC3BC,EAAWX,EAAOD,EAAQa,EAC1BC,EAAUb,EAAOD,EAAQe,EACzBC,EAASR,EAAYb,EAASe,EAAYf,EAAOzB,KAAUyB,EAAOzB,GAAQ,KAAOyB,EAAOzB,IAAS,IAAa,UAC9GT,EAAU+C,EAAYZ,EAAOA,EAAK1B,KAAU0B,EAAK1B,GAAQ,IACzD+C,EAAWxD,EAAiB,YAAMA,EAAiB,UAAI,IAG3D,IAAKyB,KADDsB,IAAWN,EAAShC,GACZgC,EAIVE,IAFAD,GAAOG,GAAaU,QAA0BE,IAAhBF,EAAO9B,IAExB8B,EAASd,GAAQhB,GAE9BmB,EAAMS,GAAWX,EAAMJ,EAAIK,EAAKT,GAAUiB,GAA0B,mBAAPR,EAAoBL,EAAIoB,SAASrD,KAAMsC,GAAOA,EAEvGY,GAAQlB,EAASkB,EAAQ9B,EAAKkB,EAAKH,EAAOD,EAAQoB,GAElD3D,EAAQyB,IAAQkB,GAAKP,EAAKpC,EAASyB,EAAKmB,GACxCO,GAAYK,EAAS/B,IAAQkB,IAAKa,EAAS/B,GAAOkB,IAG1DT,EAAOC,KAAOA,EAEdI,EAAQO,EAAI,EACZP,EAAQS,EAAI,EACZT,EAAQW,EAAI,EACZX,EAAQa,EAAI,EACZb,EAAQe,EAAI,GACZf,EAAQqB,EAAI,GACZrB,EAAQoB,EAAI,GACZpB,EAAQsB,EAAI,IACZ5D,EAAOD,QAAUuC,G,mECtCIuB,EAEjB,WAAYtB,EAAMuB,EAAIC,I,4FAAM,SAGxBC,KAAKzB,KAAOA,EAGZyB,KAAKF,GAAKA,EAGVE,KAAKC,IAAM,KAGXD,KAAKD,KAAOA,EAMZC,KAAKE,OAAS,O,cCvBtB,IAAIjC,EAASjC,EAAOD,QAA2B,oBAAVoE,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DZ,SAAS,cAATA,GACc,iBAAPa,MAAiBA,IAAMrC,I,cCLlCjC,EAAOD,QAAU,SAAUwE,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,K,gBCJX,IAAIC,EAAW,EAAQ,GACvBzE,EAAOD,QAAU,SAAU2E,GACzB,IAAKD,EAASC,GAAK,MAAMC,UAAUD,EAAK,sBACxC,OAAOA,I,cCHT1E,EAAOD,QAAU,SAAU2E,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,I,gBCDvD,IAAIE,EAAQ,EAAQ,GAAR,CAAqB,OAC7BC,EAAM,EAAQ,IACd7D,EAAS,EAAQ,GAAaA,OAC9B8D,EAA8B,mBAAV9D,GAEThB,EAAOD,QAAU,SAAUS,GACxC,OAAOoE,EAAMpE,KAAUoE,EAAMpE,GAC3BsE,GAAc9D,EAAOR,KAAUsE,EAAa9D,EAAS6D,GAAK,UAAYrE,MAGjEoE,MAAQA,G,gBCTjB,IAAIG,EAAY,EAAQ,IACpBC,EAAMZ,KAAKY,IACfhF,EAAOD,QAAU,SAAU2E,GACzB,OAAOA,EAAK,EAAIM,EAAID,EAAUL,GAAK,kBAAoB,I,cCJzD,IAAIxC,EAAOlC,EAAOD,QAAU,CAAEkF,QAAS,SACrB,iBAAPC,MAAiBA,IAAMhD,I,gBCAlClC,EAAOD,SAAW,EAAQ,EAAR,EAAoB,WACpC,OAA+E,GAAxEY,OAAOC,eAAe,GAAI,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQqE,M,gBCF5E,IAAIC,EAAW,EAAQ,GACnBC,EAAiB,EAAQ,KACzBC,EAAc,EAAQ,IACtBC,EAAK5E,OAAOC,eAEhBb,EAAQyF,EAAI,EAAQ,GAAoB7E,OAAOC,eAAiB,SAAwB6E,EAAGtC,EAAGuC,GAI5F,GAHAN,EAASK,GACTtC,EAAImC,EAAYnC,GAAG,GACnBiC,EAASM,GACLL,EAAgB,IAClB,OAAOE,EAAGE,EAAGtC,EAAGuC,GAChB,MAAOlB,IACT,GAAI,QAASkB,GAAc,QAASA,EAAY,MAAMf,UAAU,4BAEhE,MADI,UAAWe,IAAYD,EAAEtC,GAAKuC,EAAWxE,OACtCuE,I,iBCdT,YACA,IAKIE,EALAC,EAAO,EAAQ,IACfC,EAAS,EAAQ,KACjBC,EAAM,EAAQ,KAEdC,EAAQC,MAAMnE,UAAUkE,MAExBE,EAAQ,GAGRN,OADkB,IAAX1D,GAA0BA,EAAO0D,QAC9B1D,EAAO0D,QACQ,oBAAXxB,QAA0BA,OAAOwB,QACrCxB,OAAOwB,QAEP,GAed,IAZA,IAAIO,EAAY,CACZ,CAuBJ,aAvBU,OACN,CAwBJ,WACIP,EAAQQ,IAAIC,MAAMT,EAASU,YAzBpB,QACP,CA2BJ,WACIV,EAAQQ,IAAIC,MAAMT,EAASU,YA5BpB,QACP,CA8BJ,WACIV,EAAQW,KAAKF,MAAMT,EAASU,YA/BpB,SACR,CAiCJ,SAAcE,GACVN,EAAMM,GAAST,KAlCR,QACP,CAoCJ,SAAiBS,GACb,IAAIC,EAAOP,EAAMM,GACjB,IAAKC,EACD,MAAM,IAAIC,MAAM,kBAAoBF,GAGxC,IAAIG,EAAWZ,IAAQU,EACvBb,EAAQQ,IAAII,EAAQ,KAAOG,EAAW,OA3C5B,WACV,CA6CJ,WACI,IAAIC,EAAM,IAAIF,MACdE,EAAInG,KAAO,QACXmG,EAAIC,QAAUhB,EAAKiB,OAAOT,MAAM,KAAMC,WACtCV,EAAQmB,MAAMH,EAAII,QAjDV,SACR,CAmDJ,SAAapF,GACTgE,EAAQQ,IAAIP,EAAKoB,QAAQrF,GAAU,OApD7B,OACN,CAsDJ,SAAuBsF,GACnB,IAAKA,EAAY,CACb,IAAIC,EAAMnB,EAAM3F,KAAKiG,UAAW,GAChCR,EAAOsB,IAAG,EAAOvB,EAAKiB,OAAOT,MAAM,KAAMc,MAzD7B,WAGXjH,EAAI,EAAGA,EAAIiG,EAAUkB,OAAQnH,IAAK,CACvC,IAAIoH,EAAQnB,EAAUjG,GAClBuF,EAAI6B,EAAM,GACV7G,EAAO6G,EAAM,GAEZ1B,EAAQnF,KACTmF,EAAQnF,GAAQgF,GAIxBxF,EAAOD,QAAU4F,I,kCCtCjB,IAAI2B,EAAU,EAAQ,IACtBtH,EAAOD,QAAU,SAAU2E,GACzB,OAAO/D,OAAO2G,EAAQ5C,M,8BCHxB,YAuBA,IAOI6C,EAPA3D,EAAuB,iBAAZ4D,QAAuBA,QAAU,KAC5CC,EAAe7D,GAAwB,mBAAZA,EAAEwC,MAC7BxC,EAAEwC,MACF,SAAsB9C,EAAQoE,EAAUC,GACxC,OAAOlE,SAAS5B,UAAUuE,MAAMhG,KAAKkD,EAAQoE,EAAUC,IAKzDJ,EADE3D,GAA0B,mBAAdA,EAAEgE,QACChE,EAAEgE,QACVjH,OAAOkH,sBACC,SAAwBvE,GACvC,OAAO3C,OAAOmH,oBAAoBxE,GAC/ByE,OAAOpH,OAAOkH,sBAAsBvE,KAGxB,SAAwBA,GACvC,OAAO3C,OAAOmH,oBAAoBxE,IAQtC,IAAI0E,EAAcC,OAAOC,OAAS,SAAqBhH,GACrD,OAAOA,GAAUA,GAGnB,SAASiH,IACPA,EAAaC,KAAKhI,KAAK4D,MAEzBhE,EAAOD,QAAUoI,EAGjBA,EAAaA,aAAeA,EAE5BA,EAAatG,UAAUwG,aAAU7E,EACjC2E,EAAatG,UAAUyG,aAAe,EACtCH,EAAatG,UAAU0G,mBAAgB/E,EAIvC,IAAIgF,EAAsB,GAoC1B,SAASC,EAAiBC,GACxB,YAA2BlF,IAAvBkF,EAAKH,cACAJ,EAAaK,oBACfE,EAAKH,cAmDd,SAASI,EAAarF,EAAQf,EAAMqG,EAAUC,GAC5C,IAAIxI,EACAyI,EACAC,EAnHsBC,EAqH1B,GAAwB,mBAAbJ,EACT,MAAM,IAAIjE,UAAU,0EAA4EiE,GAqBlG,QAjBepF,KADfsF,EAASxF,EAAO+E,UAEdS,EAASxF,EAAO+E,QAAU1H,OAAOY,OAAO,MACxC+B,EAAOgF,aAAe,SAIK9E,IAAvBsF,EAAOG,cACT3F,EAAO4F,KAAK,cAAe3G,EACfqG,EAASA,SAAWA,EAASA,SAAWA,GAIpDE,EAASxF,EAAO+E,SAElBU,EAAWD,EAAOvG,SAGHiB,IAAbuF,EAEFA,EAAWD,EAAOvG,GAAQqG,IACxBtF,EAAOgF,kBAeT,GAbwB,mBAAbS,EAETA,EAAWD,EAAOvG,GAChBsG,EAAU,CAACD,EAAUG,GAAY,CAACA,EAAUH,GAErCC,EACTE,EAASI,QAAQP,GAEjBG,EAASK,KAAKR,IAIhBvI,EAAIoI,EAAiBnF,IACb,GAAKyF,EAAS3B,OAAS/G,IAAM0I,EAASM,OAAQ,CACpDN,EAASM,QAAS,EAGlB,IAAIC,EAAI,IAAI7C,MAAM,+CACEsC,EAAS3B,OAAS,IAAMmC,OAAOhH,GAAQ,qEAG3D+G,EAAE9I,KAAO,8BACT8I,EAAEE,QAAUlG,EACZgG,EAAE/G,KAAOA,EACT+G,EAAEG,MAAQV,EAAS3B,OAxKG4B,EAyKHM,EAxKnB3D,GAAWA,EAAQW,MAAMX,EAAQW,KAAK0C,GA4K1C,OAAO1F,EAcT,SAASoG,IAEP,IADA,IAAI/B,EAAO,GACF1H,EAAI,EAAGA,EAAIoG,UAAUe,OAAQnH,IAAK0H,EAAKyB,KAAK/C,UAAUpG,IAC1D+D,KAAK2F,QACR3F,KAAKV,OAAOsG,eAAe5F,KAAKzB,KAAMyB,KAAK6F,QAC3C7F,KAAK2F,OAAQ,EACblC,EAAazD,KAAK4E,SAAU5E,KAAKV,OAAQqE,IAI7C,SAASmC,EAAUxG,EAAQf,EAAMqG,GAC/B,IAAImB,EAAQ,CAAEJ,OAAO,EAAOE,YAAQrG,EAAWF,OAAQA,EAAQf,KAAMA,EAAMqG,SAAUA,GACjFoB,EAAUN,EAAYjI,KAAKsI,GAG/B,OAFAC,EAAQpB,SAAWA,EACnBmB,EAAMF,OAASG,EACRA,EAgIT,SAASC,EAAW3G,EAAQf,EAAM2H,GAChC,IAAIpB,EAASxF,EAAO+E,QAEpB,QAAe7E,IAAXsF,EACF,MAAO,GAET,IAAIqB,EAAarB,EAAOvG,GACxB,YAAmBiB,IAAf2G,EACK,GAEiB,mBAAfA,EACFD,EAAS,CAACC,EAAWvB,UAAYuB,GAAc,CAACA,GAElDD,EAsDT,SAAyBhD,GAEvB,IADA,IAAIkD,EAAM,IAAIpE,MAAMkB,EAAIE,QACfnH,EAAI,EAAGA,EAAImK,EAAIhD,SAAUnH,EAChCmK,EAAInK,GAAKiH,EAAIjH,GAAG2I,UAAY1B,EAAIjH,GAElC,OAAOmK,EA1DLC,CAAgBF,GAAcG,EAAWH,EAAYA,EAAW/C,QAoBpE,SAASmD,EAAchI,GACrB,IAAIuG,EAAS9E,KAAKqE,QAElB,QAAe7E,IAAXsF,EAAsB,CACxB,IAAIqB,EAAarB,EAAOvG,GAExB,GAA0B,mBAAf4H,EACT,OAAO,EACF,QAAmB3G,IAAf2G,EACT,OAAOA,EAAW/C,OAItB,OAAO,EAOT,SAASkD,EAAWpD,EAAKxF,GAEvB,IADA,IAAI8I,EAAO,IAAIxE,MAAMtE,GACZzB,EAAI,EAAGA,EAAIyB,IAAKzB,EACvBuK,EAAKvK,GAAKiH,EAAIjH,GAChB,OAAOuK,EA5WT7J,OAAOC,eAAeuH,EAAc,sBAAuB,CACzDtH,YAAY,EACZC,IAAK,WACH,OAAO0H,GAETiC,IAAK,SAASC,GACZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAK1C,EAAY0C,GACpD,MAAM,IAAIC,WAAW,kGAAoGD,EAAM,KAEjIlC,EAAsBkC,KAI1BvC,EAAaC,KAAO,gBAEG5E,IAAjBQ,KAAKqE,SACLrE,KAAKqE,UAAY1H,OAAOiK,eAAe5G,MAAMqE,UAC/CrE,KAAKqE,QAAU1H,OAAOY,OAAO,MAC7ByC,KAAKsE,aAAe,GAGtBtE,KAAKuE,cAAgBvE,KAAKuE,oBAAiB/E,GAK7C2E,EAAatG,UAAUgJ,gBAAkB,SAAyBnJ,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAKsG,EAAYtG,GAChD,MAAM,IAAIiJ,WAAW,gFAAkFjJ,EAAI,KAG7G,OADAsC,KAAKuE,cAAgB7G,EACdsC,MASTmE,EAAatG,UAAUiJ,gBAAkB,WACvC,OAAOrC,EAAiBzE,OAG1BmE,EAAatG,UAAUqH,KAAO,SAAc3G,GAE1C,IADA,IAAIoF,EAAO,GACF1H,EAAI,EAAGA,EAAIoG,UAAUe,OAAQnH,IAAK0H,EAAKyB,KAAK/C,UAAUpG,IAC/D,IAAI8K,EAAoB,UAATxI,EAEXuG,EAAS9E,KAAKqE,QAClB,QAAe7E,IAAXsF,EACFiC,EAAWA,QAA4BvH,IAAjBsF,EAAOhC,WAC1B,IAAKiE,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIC,EAGJ,GAFIrD,EAAKP,OAAS,IAChB4D,EAAKrD,EAAK,IACRqD,aAAcvE,MAGhB,MAAMuE,EAGR,IAAIrE,EAAM,IAAIF,MAAM,oBAAsBuE,EAAK,KAAOA,EAAGpE,QAAU,IAAM,KAEzE,MADAD,EAAIsE,QAAUD,EACRrE,EAGR,IAAIuE,EAAUpC,EAAOvG,GAErB,QAAgBiB,IAAZ0H,EACF,OAAO,EAET,GAAuB,mBAAZA,EACTzD,EAAayD,EAASlH,KAAM2D,OAE5B,KAAIwD,EAAMD,EAAQ9D,OACdgE,EAAYd,EAAWY,EAASC,GACpC,IAASlL,EAAI,EAAGA,EAAIkL,IAAOlL,EACzBwH,EAAa2D,EAAUnL,GAAI+D,KAAM2D,GAGrC,OAAO,GAmETQ,EAAatG,UAAUwJ,YAAc,SAAqB9I,EAAMqG,GAC9D,OAAOD,EAAa3E,KAAMzB,EAAMqG,GAAU,IAG5CT,EAAatG,UAAUyJ,GAAKnD,EAAatG,UAAUwJ,YAEnDlD,EAAatG,UAAU0J,gBACnB,SAAyBhJ,EAAMqG,GAC7B,OAAOD,EAAa3E,KAAMzB,EAAMqG,GAAU,IAqBhDT,EAAatG,UAAU2J,KAAO,SAAcjJ,EAAMqG,GAChD,GAAwB,mBAAbA,EACT,MAAM,IAAIjE,UAAU,0EAA4EiE,GAGlG,OADA5E,KAAKsH,GAAG/I,EAAMuH,EAAU9F,KAAMzB,EAAMqG,IAC7B5E,MAGTmE,EAAatG,UAAU4J,oBACnB,SAA6BlJ,EAAMqG,GACjC,GAAwB,mBAAbA,EACT,MAAM,IAAIjE,UAAU,0EAA4EiE,GAGlG,OADA5E,KAAKuH,gBAAgBhJ,EAAMuH,EAAU9F,KAAMzB,EAAMqG,IAC1C5E,MAIbmE,EAAatG,UAAU+H,eACnB,SAAwBrH,EAAMqG,GAC5B,IAAI8C,EAAM5C,EAAQ6C,EAAU1L,EAAG2L,EAE/B,GAAwB,mBAAbhD,EACT,MAAM,IAAIjE,UAAU,0EAA4EiE,GAIlG,QAAepF,KADfsF,EAAS9E,KAAKqE,SAEZ,OAAOrE,KAGT,QAAaR,KADbkI,EAAO5C,EAAOvG,IAEZ,OAAOyB,KAET,GAAI0H,IAAS9C,GAAY8C,EAAK9C,WAAaA,EACb,KAAtB5E,KAAKsE,aACTtE,KAAKqE,QAAU1H,OAAOY,OAAO,cAEtBuH,EAAOvG,GACVuG,EAAOc,gBACT5F,KAAKkF,KAAK,iBAAkB3G,EAAMmJ,EAAK9C,UAAYA,SAElD,GAAoB,mBAAT8C,EAAqB,CAGrC,IAFAC,GAAY,EAEP1L,EAAIyL,EAAKtE,OAAS,EAAGnH,GAAK,EAAGA,IAChC,GAAIyL,EAAKzL,KAAO2I,GAAY8C,EAAKzL,GAAG2I,WAAaA,EAAU,CACzDgD,EAAmBF,EAAKzL,GAAG2I,SAC3B+C,EAAW1L,EACX,MAIJ,GAAI0L,EAAW,EACb,OAAO3H,KAEQ,IAAb2H,EACFD,EAAKG,QAiIf,SAAmBH,EAAMI,GACvB,KAAOA,EAAQ,EAAIJ,EAAKtE,OAAQ0E,IAC9BJ,EAAKI,GAASJ,EAAKI,EAAQ,GAC7BJ,EAAKK,MAlIGC,CAAUN,EAAMC,GAGE,IAAhBD,EAAKtE,SACP0B,EAAOvG,GAAQmJ,EAAK,SAEQlI,IAA1BsF,EAAOc,gBACT5F,KAAKkF,KAAK,iBAAkB3G,EAAMqJ,GAAoBhD,GAG1D,OAAO5E,MAGbmE,EAAatG,UAAUoK,IAAM9D,EAAatG,UAAU+H,eAEpDzB,EAAatG,UAAUqK,mBACnB,SAA4B3J,GAC1B,IAAI6I,EAAWtC,EAAQ7I,EAGvB,QAAeuD,KADfsF,EAAS9E,KAAKqE,SAEZ,OAAOrE,KAGT,QAA8BR,IAA1BsF,EAAOc,eAUT,OATyB,IAArBvD,UAAUe,QACZpD,KAAKqE,QAAU1H,OAAOY,OAAO,MAC7ByC,KAAKsE,aAAe,QACM9E,IAAjBsF,EAAOvG,KACY,KAAtByB,KAAKsE,aACTtE,KAAKqE,QAAU1H,OAAOY,OAAO,aAEtBuH,EAAOvG,IAEXyB,KAIT,GAAyB,IAArBqC,UAAUe,OAAc,CAC1B,IACI5F,EADA2K,EAAOxL,OAAOwL,KAAKrD,GAEvB,IAAK7I,EAAI,EAAGA,EAAIkM,EAAK/E,SAAUnH,EAEjB,oBADZuB,EAAM2K,EAAKlM,KAEX+D,KAAKkI,mBAAmB1K,GAK1B,OAHAwC,KAAKkI,mBAAmB,kBACxBlI,KAAKqE,QAAU1H,OAAOY,OAAO,MAC7ByC,KAAKsE,aAAe,EACbtE,KAKT,GAAyB,mBAFzBoH,EAAYtC,EAAOvG,IAGjByB,KAAK4F,eAAerH,EAAM6I,QACrB,QAAkB5H,IAAd4H,EAET,IAAKnL,EAAImL,EAAUhE,OAAS,EAAGnH,GAAK,EAAGA,IACrC+D,KAAK4F,eAAerH,EAAM6I,EAAUnL,IAIxC,OAAO+D,MAoBbmE,EAAatG,UAAUuJ,UAAY,SAAmB7I,GACpD,OAAO0H,EAAWjG,KAAMzB,GAAM,IAGhC4F,EAAatG,UAAUuK,aAAe,SAAsB7J,GAC1D,OAAO0H,EAAWjG,KAAMzB,GAAM,IAGhC4F,EAAaoC,cAAgB,SAASf,EAASjH,GAC7C,MAAqC,mBAA1BiH,EAAQe,cACVf,EAAQe,cAAchI,GAEtBgI,EAAcnK,KAAKoJ,EAASjH,IAIvC4F,EAAatG,UAAU0I,cAAgBA,EAiBvCpC,EAAatG,UAAUwK,WAAa,WAClC,OAAOrI,KAAKsE,aAAe,EAAIf,EAAevD,KAAKqE,SAAW,M,kCCzahE,IAAIpG,EAAS,EAAQ,GACjBE,EAAO,EAAQ,IACfmK,EAAM,EAAQ,IACdC,EAAM,EAAQ,GAAR,CAAkB,OACxBC,EAAY,EAAQ,KAEpBC,GAAO,GAAKD,GAAWE,MADX,YAGhB,EAAQ,GAAWC,cAAgB,SAAUjI,GAC3C,OAAO8H,EAAUpM,KAAKsE,KAGvB1E,EAAOD,QAAU,SAAU0F,EAAGjE,EAAKoL,EAAKC,GACvC,IAAIC,EAA2B,mBAAPF,EACpBE,IAAYR,EAAIM,EAAK,SAAWzK,EAAKyK,EAAK,OAAQpL,IAClDiE,EAAEjE,KAASoL,IACXE,IAAYR,EAAIM,EAAKL,IAAQpK,EAAKyK,EAAKL,EAAK9G,EAAEjE,GAAO,GAAKiE,EAAEjE,GAAOiL,EAAIM,KAAKxD,OAAO/H,MACnFiE,IAAMxD,EACRwD,EAAEjE,GAAOoL,EACCC,EAGDpH,EAAEjE,GACXiE,EAAEjE,GAAOoL,EAETzK,EAAKsD,EAAGjE,EAAKoL,WALNnH,EAAEjE,GACTW,EAAKsD,EAAGjE,EAAKoL,OAOdnJ,SAAS5B,UAvBI,YAuBkB,WAChC,MAAsB,mBAARmC,MAAsBA,KAAKuI,IAAQC,EAAUpM,KAAK4D,U,gBC7BlE,IAAI1B,EAAU,EAAQ,GAClB0K,EAAQ,EAAQ,GAChB1F,EAAU,EAAQ,IAClB2F,EAAO,KAEPC,EAAa,SAAUC,EAAQC,EAAKC,EAAWnM,GACjD,IAAI+B,EAAIsG,OAAOjC,EAAQ6F,IACnBG,EAAK,IAAMF,EAEf,MADkB,KAAdC,IAAkBC,GAAM,IAAMD,EAAY,KAAO9D,OAAOrI,GAAOqM,QAAQN,EAAM,UAAY,KACtFK,EAAK,IAAMrK,EAAI,KAAOmK,EAAM,KAErCpN,EAAOD,QAAU,SAAUyN,EAAMjJ,GAC/B,IAAIkB,EAAI,GACRA,EAAE+H,GAAQjJ,EAAK2I,GACf5K,EAAQA,EAAQa,EAAIb,EAAQO,EAAImK,GAAM,WACpC,IAAIS,EAAO,GAAGD,GAAM,KACpB,OAAOC,IAASA,EAAKC,eAAiBD,EAAKf,MAAM,KAAKtF,OAAS,KAC7D,SAAU3B,K,cCjBhB,IAAI3D,EAAiB,GAAGA,eACxB9B,EAAOD,QAAU,SAAU2E,EAAIlD,GAC7B,OAAOM,EAAe1B,KAAKsE,EAAIlD,K,gBCFjC,IAAI+D,EAAK,EAAQ,IACboI,EAAa,EAAQ,IACzB3N,EAAOD,QAAU,EAAQ,GAAoB,SAAU4B,EAAQH,EAAKN,GAClE,OAAOqE,EAAGC,EAAE7D,EAAQH,EAAKmM,EAAW,EAAGzM,KACrC,SAAUS,EAAQH,EAAKN,GAEzB,OADAS,EAAOH,GAAON,EACPS,I,gBCLT,IAAIiM,EAAU,EAAQ,IAClBtG,EAAU,EAAQ,IACtBtH,EAAOD,QAAU,SAAU2E,GACzB,OAAOkJ,EAAQtG,EAAQ5C,M,gNCCV,mBAEX,c,4FAAc,SAGVV,KAAK6J,QAAU,GAGf7J,KAAK8J,MAAQ,KAGb9J,KAAK+J,sBAAwB/J,KAAK+J,sBAAsBtM,KAAKuC,M,UAXtD,O,EAAA,G,EAAA,2BAgBPgK,GAGAhK,KAAK6J,QAAQzE,KAAK4E,GAGbhK,KAAK8J,QACN9J,KAAK8J,MAAQG,WAAWjK,KAAK+J,sBAAuB,MAvBjD,8CA+BP/J,KAAK8J,MAAQ,KAGb,IAAII,EAAUlK,KAAK6J,QACnB7J,KAAK6J,QAAU,GAPK,2BAQpB,YAAmBK,EAAnB,+CAA4B,KAAnBC,EAAmB,QAGxB,IACIA,IACF,MAAOxH,GACLhB,EAAQmB,MAAM,0BAA2BH,KAd7B,wF,2BA5Bb,Q,gCCLc,mBAAlBhG,OAAOY,OAEhBvB,EAAOD,QAAU,SAAkBqO,EAAMC,GACvCD,EAAKE,OAASD,EACdD,EAAKvM,UAAYlB,OAAOY,OAAO8M,EAAUxM,UAAW,CAClD0M,YAAa,CACXrN,MAAOkN,EACPvN,YAAY,EACZ2N,UAAU,EACVC,cAAc,MAMpBzO,EAAOD,QAAU,SAAkBqO,EAAMC,GACvCD,EAAKE,OAASD,EACd,IAAIK,EAAW,aACfA,EAAS7M,UAAYwM,EAAUxM,UAC/BuM,EAAKvM,UAAY,IAAI6M,EACrBN,EAAKvM,UAAU0M,YAAcH,I,6BCnBjC,IAAIpB,EAAQ,EAAQ,GAEpBhN,EAAOD,QAAU,SAAU4O,EAAQjE,GACjC,QAASiE,GAAU3B,GAAM,WAEvBtC,EAAMiE,EAAOvO,KAAK,MAAM,cAA6B,GAAKuO,EAAOvO,KAAK,W,8BCN1E,YACA,IAEIwO,EAyCAC,EA3CAC,EAAW7M,EAAO8M,kBAAoB9M,EAAO+M,uBAK/C,GAAIF,EAAU,CACZ,IAAIG,EAAS,EACTC,EAAW,IAAIJ,EAASK,GACxBC,EAAUnN,EAAOoN,SAASC,eAAe,IAC7CJ,EAASK,QAAQH,EAAS,CACxBI,eAAe,IAEjBZ,EAAgB,WACdQ,EAAQrL,KAAQkL,IAAWA,EAAS,QAEjC,GAAKhN,EAAOwN,mBAAiD,IAA1BxN,EAAOyN,eAO/Cd,EADS,aAAc3M,GAAU,uBAAwBA,EAAOoN,SAASM,cAAc,UACvE,WAId,IAAIC,EAAW3N,EAAOoN,SAASM,cAAc,UAC7CC,EAASC,mBAAqB,WAC5BV,IAEAS,EAASC,mBAAqB,KAC9BD,EAASE,WAAWC,YAAYH,GAChCA,EAAW,MAEb3N,EAAOoN,SAASW,gBAAgBC,YAAYL,IAG9B,WACd3B,WAAWkB,EAAU,QAvBwD,CAC/E,IAAIe,EAAU,IAAIjO,EAAOyN,eACzBQ,EAAQC,MAAMC,UAAYjB,EAC1BP,EAAgB,WACdsB,EAAQG,MAAMC,YAAY,IAyBhC,IAAIC,EAAQ,GAEZ,SAASpB,IAEP,IAAIlP,EAAGuQ,EADP3B,GAAW,EAGX,IADA,IAAI1D,EAAMoF,EAAMnJ,OACT+D,GAAK,CAIV,IAHAqF,EAAWD,EACXA,EAAQ,GACRtQ,GAAK,IACIA,EAAIkL,GACXqF,EAASvQ,KAEXkL,EAAMoF,EAAMnJ,OAEdyH,GAAW,EAGb7O,EAAOD,QACP,SAAmB0Q,GACQ,IAArBF,EAAMnH,KAAKqH,IAAgB5B,GAC7BD,O,kCCjEJ,IAAI8B,EAAY,EAAQ,IACxB1Q,EAAOD,QAAU,SAAU4Q,EAAIjI,EAAMtB,GAEnC,GADAsJ,EAAUC,QACGnN,IAATkF,EAAoB,OAAOiI,EAC/B,OAAQvJ,GACN,KAAK,EAAG,OAAO,SAAUjC,GACvB,OAAOwL,EAAGvQ,KAAKsI,EAAMvD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGyL,GAC1B,OAAOD,EAAGvQ,KAAKsI,EAAMvD,EAAGyL,IAE1B,KAAK,EAAG,OAAO,SAAUzL,EAAGyL,EAAGtQ,GAC7B,OAAOqQ,EAAGvQ,KAAKsI,EAAMvD,EAAGyL,EAAGtQ,IAG/B,OAAO,WACL,OAAOqQ,EAAGvK,MAAMsC,EAAMrC,c,cCjB1BrG,EAAOD,QAAU,SAAU2E,GACzB,GAAiB,mBAANA,EAAkB,MAAMC,UAAUD,EAAK,uBAClD,OAAOA,I,cCDT,IAAImM,EAAOzM,KAAKyM,KACZC,EAAQ1M,KAAK0M,MACjB9Q,EAAOD,QAAU,SAAU2E,GACzB,OAAOwD,MAAMxD,GAAMA,GAAM,GAAKA,EAAK,EAAIoM,EAAQD,GAAMnM,K,gBCJvD,IAAIqM,EAAM,EAAQ,IACdpD,EAAa,EAAQ,IACrBqD,EAAY,EAAQ,IACpB1L,EAAc,EAAQ,IACtBgH,EAAM,EAAQ,IACdjH,EAAiB,EAAQ,KACzB4L,EAAOtQ,OAAOuQ,yBAElBnR,EAAQyF,EAAI,EAAQ,GAAoByL,EAAO,SAAkCxL,EAAGtC,GAGlF,GAFAsC,EAAIuL,EAAUvL,GACdtC,EAAImC,EAAYnC,GAAG,GACfkC,EAAgB,IAClB,OAAO4L,EAAKxL,EAAGtC,GACf,MAAOqB,IACT,GAAI8H,EAAI7G,EAAGtC,GAAI,OAAOwK,GAAYoD,EAAIvL,EAAEpF,KAAKqF,EAAGtC,GAAIsC,EAAEtC,M,gBCbxD,IAAIb,EAAU,EAAQ,GAClBJ,EAAO,EAAQ,GACf8K,EAAQ,EAAQ,GACpBhN,EAAOD,QAAU,SAAUoR,EAAK5M,GAC9B,IAAIoM,GAAMzO,EAAKvB,QAAU,IAAIwQ,IAAQxQ,OAAOwQ,GACxCxO,EAAM,GACVA,EAAIwO,GAAO5M,EAAKoM,GAChBrO,EAAQA,EAAQW,EAAIX,EAAQO,EAAImK,GAAM,WAAc2D,EAAG,MAAQ,SAAUhO,K,gBCD3E,IAAIN,EAAM,EAAQ,IACduL,EAAU,EAAQ,IAClBwD,EAAW,EAAQ,IACnBC,EAAW,EAAQ,GACnBC,EAAM,EAAQ,KAClBtR,EAAOD,QAAU,SAAUwR,EAAMC,GAC/B,IAAIC,EAAiB,GAARF,EACTG,EAAoB,GAARH,EACZI,EAAkB,GAARJ,EACVK,EAAmB,GAARL,EACXM,EAAwB,GAARN,EAChBO,EAAmB,GAARP,GAAaM,EACxBtQ,EAASiQ,GAAWF,EACxB,OAAO,SAAUS,EAAOC,EAAYtJ,GAQlC,IAPA,IAMIkE,EAAKqF,EANLxM,EAAI2L,EAASW,GACb1N,EAAOuJ,EAAQnI,GACfD,EAAInD,EAAI2P,EAAYtJ,EAAM,GAC1BtB,EAASiK,EAAShN,EAAK+C,QACvB0E,EAAQ,EACRoG,EAAST,EAASlQ,EAAOwQ,EAAO3K,GAAUsK,EAAYnQ,EAAOwQ,EAAO,QAAKvO,EAEvE4D,EAAS0E,EAAOA,IAAS,IAAIgG,GAAYhG,KAASzH,KAEtD4N,EAAMzM,EADNoH,EAAMvI,EAAKyH,GACEA,EAAOrG,GAChB8L,GACF,GAAIE,EAAQS,EAAOpG,GAASmG,OACvB,GAAIA,EAAK,OAAQV,GACpB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO3E,EACf,KAAK,EAAG,OAAOd,EACf,KAAK,EAAGoG,EAAO9I,KAAKwD,QACf,GAAIgF,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWM,K,cCzCjE,IAAIC,EAAW,GAAGA,SAElBnS,EAAOD,QAAU,SAAU2E,GACzB,OAAOyN,EAAS/R,KAAKsE,GAAIqB,MAAM,GAAI,K,cCFrC/F,EAAOD,QAAU,SAAU2E,GACzB,GAAUlB,MAANkB,EAAiB,MAAMC,UAAU,yBAA2BD,GAChE,OAAOA,I,6BCFT,GAAI,EAAQ,GAAmB,CAC7B,IAAI0N,EAAU,EAAQ,IAClBnQ,EAAS,EAAQ,GACjB+K,EAAQ,EAAQ,GAChB1K,EAAU,EAAQ,GAClB+P,EAAS,EAAQ,IACjBC,EAAU,EAAQ,KAClBjQ,EAAM,EAAQ,IACdkQ,EAAa,EAAQ,IACrBC,EAAe,EAAQ,IACvBrQ,EAAO,EAAQ,IACfsQ,EAAc,EAAQ,IACtB1N,EAAY,EAAQ,IACpBsM,EAAW,EAAQ,GACnBqB,EAAU,EAAQ,KAClBC,EAAkB,EAAQ,IAC1BrN,EAAc,EAAQ,IACtBgH,EAAM,EAAQ,IACdsG,EAAU,EAAQ,IAClBnO,EAAW,EAAQ,GACnB2M,EAAW,EAAQ,IACnByB,EAAc,EAAQ,IACtBtR,EAAS,EAAQ,IACjBqJ,EAAiB,EAAQ,IACzBkI,EAAO,EAAQ,IAAkBtN,EACjCuN,EAAY,EAAQ,IACpBlO,EAAM,EAAQ,IACdmO,EAAM,EAAQ,GACdC,EAAoB,EAAQ,IAC5BC,EAAsB,EAAQ,IAC9BC,EAAqB,EAAQ,IAC7BC,EAAiB,EAAQ,KACzBC,EAAY,EAAQ,IACpBC,EAAc,EAAQ,IACtBC,EAAa,EAAQ,IACrBC,EAAY,EAAQ,KACpBC,EAAkB,EAAQ,KAC1BC,EAAM,EAAQ,IACdC,EAAQ,EAAQ,IAChBpO,EAAKmO,EAAIlO,EACTyL,EAAO0C,EAAMnO,EACbmF,EAAa1I,EAAO0I,WACpBhG,EAAY1C,EAAO0C,UACnBiP,EAAa3R,EAAO2R,WAKpBC,EAAa7N,MAAe,UAC5B8N,EAAexB,EAAQyB,YACvBC,EAAY1B,EAAQ2B,SACpBC,EAAejB,EAAkB,GACjCkB,EAAclB,EAAkB,GAChCmB,EAAYnB,EAAkB,GAC9BoB,EAAapB,EAAkB,GAC/BqB,EAAYrB,EAAkB,GAC9BsB,GAAiBtB,EAAkB,GACnCuB,GAAgBtB,GAAoB,GACpCuB,GAAevB,GAAoB,GACnCwB,GAActB,EAAeuB,OAC7BC,GAAYxB,EAAejH,KAC3B0I,GAAezB,EAAe0B,QAC9BC,GAAmBlB,EAAWmB,YAC9BC,GAAcpB,EAAWqB,OACzBC,GAAmBtB,EAAWuB,YAC9BC,GAAYxB,EAAW9G,KACvBuI,GAAYzB,EAAW0B,KACvBC,GAAa3B,EAAW9N,MACxB0P,GAAgB5B,EAAW1B,SAC3BuD,GAAsB7B,EAAW8B,eACjCC,GAAW5C,EAAI,YACf6C,GAAM7C,EAAI,eACV8C,GAAoBjR,EAAI,qBACxBkR,GAAkBlR,EAAI,mBACtBmR,GAAmB3D,EAAO4D,OAC1BC,GAAc7D,EAAO8D,MACrBC,GAAO/D,EAAO+D,KAGdC,GAAOpD,EAAkB,GAAG,SAAUxN,EAAG2B,GAC3C,OAAOkP,GAASnD,EAAmB1N,EAAGA,EAAEsQ,KAAmB3O,MAGzDmP,GAAgBvJ,GAAM,WAExB,OAA0D,IAAnD,IAAI4G,EAAW,IAAI4C,YAAY,CAAC,IAAIC,QAAQ,MAGjDC,KAAe9C,KAAgBA,EAAoB,UAAEnJ,KAAOuC,GAAM,WACpE,IAAI4G,EAAW,GAAGnJ,IAAI,OAGpBkM,GAAW,SAAUjS,EAAIkS,GAC3B,IAAIC,EAAS9R,EAAUL,GACvB,GAAImS,EAAS,GAAKA,EAASD,EAAO,MAAMjM,EAAW,iBACnD,OAAOkM,GAGLC,GAAW,SAAUpS,GACvB,GAAID,EAASC,IAAOwR,MAAexR,EAAI,OAAOA,EAC9C,MAAMC,EAAUD,EAAK,2BAGnB4R,GAAW,SAAUS,EAAG3P,GAC1B,KAAM3C,EAASsS,IAAMjB,MAAqBiB,GACxC,MAAMpS,EAAU,wCAChB,OAAO,IAAIoS,EAAE3P,IAGb4P,GAAkB,SAAUvR,EAAGiG,GACjC,OAAOuL,GAAS9D,EAAmB1N,EAAGA,EAAEsQ,KAAmBrK,IAGzDuL,GAAW,SAAUF,EAAGrL,GAI1B,IAHA,IAAII,EAAQ,EACR1E,EAASsE,EAAKtE,OACd8K,EAASoE,GAASS,EAAG3P,GAClBA,EAAS0E,GAAOoG,EAAOpG,GAASJ,EAAKI,KAC5C,OAAOoG,GAGLgF,GAAY,SAAUxS,EAAIlD,EAAK2V,GACjC5R,EAAGb,EAAIlD,EAAK,CAAEV,IAAK,WAAc,OAAOkD,KAAKoT,GAAGD,OAG9CE,GAAQ,SAAc7U,GACxB,IAKIvC,EAAGmH,EAAQuN,EAAQzC,EAAQoF,EAAMC,EALjC9R,EAAI2L,EAAS5O,GACbgV,EAAOnR,UAAUe,OACjBqQ,EAAQD,EAAO,EAAInR,UAAU,QAAK7C,EAClCkU,OAAoBlU,IAAViU,EACVE,EAAS5E,EAAUtN,GAEvB,GAAcjC,MAAVmU,IAAwB9E,EAAY8E,GAAS,CAC/C,IAAKJ,EAAWI,EAAOvX,KAAKqF,GAAIkP,EAAS,GAAI1U,EAAI,IAAKqX,EAAOC,EAASK,QAAQC,KAAM5X,IAClF0U,EAAOvL,KAAKkO,EAAKpW,OACjBuE,EAAIkP,EAGR,IADI+C,GAAWF,EAAO,IAAGC,EAAQpV,EAAIoV,EAAOpR,UAAU,GAAI,IACrDpG,EAAI,EAAGmH,EAASiK,EAAS5L,EAAE2B,QAAS8K,EAASoE,GAAStS,KAAMoD,GAASA,EAASnH,EAAGA,IACpFiS,EAAOjS,GAAKyX,EAAUD,EAAMhS,EAAExF,GAAIA,GAAKwF,EAAExF,GAE3C,OAAOiS,GAGL4F,GAAM,WAIR,IAHA,IAAIhM,EAAQ,EACR1E,EAASf,UAAUe,OACnB8K,EAASoE,GAAStS,KAAMoD,GACrBA,EAAS0E,GAAOoG,EAAOpG,GAASzF,UAAUyF,KACjD,OAAOoG,GAIL6F,KAAkBnE,GAAc5G,GAAM,WAAc0I,GAAoBtV,KAAK,IAAIwT,EAAW,OAE5FoE,GAAkB,WACpB,OAAOtC,GAAoBtP,MAAM2R,GAAgBvC,GAAWpV,KAAK0W,GAAS9S,OAAS8S,GAAS9S,MAAOqC,YAGjG4R,GAAQ,CACVC,WAAY,SAAoB5U,EAAQ6U,GACtC,OAAO1E,EAAgBrT,KAAK0W,GAAS9S,MAAOV,EAAQ6U,EAAO9R,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAEnG4U,MAAO,SAAepG,GACpB,OAAOqC,EAAWyC,GAAS9S,MAAOgO,EAAY3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAEtF6U,KAAM,SAAcnX,GAClB,OAAOsS,EAAUpN,MAAM0Q,GAAS9S,MAAOqC,YAEzCiS,OAAQ,SAAgBtG,GACtB,OAAOgF,GAAgBhT,KAAMmQ,EAAY2C,GAAS9S,MAAOgO,EACvD3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,KAE1C+U,KAAM,SAAcC,GAClB,OAAOlE,EAAUwC,GAAS9S,MAAOwU,EAAWnS,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAEpFiV,UAAW,SAAmBD,GAC5B,OAAOjE,GAAeuC,GAAS9S,MAAOwU,EAAWnS,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAEzFkV,QAAS,SAAiB1G,GACxBkC,EAAa4C,GAAS9S,MAAOgO,EAAY3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAEjFmV,QAAS,SAAiBC,GACxB,OAAOnE,GAAaqC,GAAS9S,MAAO4U,EAAevS,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAE3FqV,SAAU,SAAkBD,GAC1B,OAAOpE,GAAcsC,GAAS9S,MAAO4U,EAAevS,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAE5FuJ,KAAM,SAAc+L,GAClB,OAAOzD,GAAUjP,MAAM0Q,GAAS9S,MAAOqC,YAEzC2O,YAAa,SAAqB4D,GAChC,OAAO7D,GAAiB3O,MAAM0Q,GAAS9S,MAAOqC,YAEhD0S,IAAK,SAAatB,GAChB,OAAOpB,GAAKS,GAAS9S,MAAOyT,EAAOpR,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAE3E0R,OAAQ,SAAgBlD,GACtB,OAAOiD,GAAY7O,MAAM0Q,GAAS9S,MAAOqC,YAE3C+O,YAAa,SAAqBpD,GAChC,OAAOmD,GAAiB/O,MAAM0Q,GAAS9S,MAAOqC,YAEhD2S,QAAS,WAMP,IALA,IAII9X,EAHAkG,EAAS0P,GADF9S,MACiBoD,OACxB6R,EAAS7U,KAAK0M,MAAM1J,EAAS,GAC7B0E,EAAQ,EAELA,EAAQmN,GACb/X,EANS8C,KAMI8H,GANJ9H,KAOJ8H,KAPI9H,OAOcoD,GAPdpD,KAQJoD,GAAUlG,EACf,OATS8C,MAWbkV,KAAM,SAAclH,GAClB,OAAOoC,EAAU0C,GAAS9S,MAAOgO,EAAY3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,IAErF+R,KAAM,SAAc4D,GAClB,OAAO7D,GAAUlV,KAAK0W,GAAS9S,MAAOmV,IAExCC,SAAU,SAAkBC,EAAOC,GACjC,IAAI7T,EAAIqR,GAAS9S,MACboD,EAAS3B,EAAE2B,OACXmS,EAAS5G,EAAgB0G,EAAOjS,GACpC,OAAO,IAAK+L,EAAmB1N,EAAGA,EAAEsQ,KAA7B,CACLtQ,EAAEgR,OACFhR,EAAE+T,WAAaD,EAAS9T,EAAEgU,kBAC1BpI,QAAkB7N,IAAR8V,EAAoBlS,EAASuL,EAAgB2G,EAAKlS,IAAWmS,MAKzEG,GAAS,SAAevB,EAAOmB,GACjC,OAAOtC,GAAgBhT,KAAMwR,GAAWpV,KAAK0W,GAAS9S,MAAOmU,EAAOmB,KAGlEK,GAAO,SAAaC,GACtB9C,GAAS9S,MACT,IAAI6S,EAASF,GAAStQ,UAAU,GAAI,GAChCe,EAASpD,KAAKoD,OACdyS,EAAMzI,EAASwI,GACfzO,EAAMkG,EAASwI,EAAIzS,QACnB0E,EAAQ,EACZ,GAAIX,EAAM0L,EAASzP,EAAQ,MAAMuD,EAvKhB,iBAwKjB,KAAOmB,EAAQX,GAAKnH,KAAK6S,EAAS/K,GAAS+N,EAAI/N,MAG7CgO,GAAa,CACfhF,QAAS,WACP,OAAOD,GAAazU,KAAK0W,GAAS9S,QAEpCmI,KAAM,WACJ,OAAOyI,GAAUxU,KAAK0W,GAAS9S,QAEjC2Q,OAAQ,WACN,OAAOD,GAAYtU,KAAK0W,GAAS9S,SAIjC+V,GAAY,SAAUzW,EAAQ9B,GAChC,OAAOiD,EAASnB,IACXA,EAAO4S,KACO,iBAAP1U,GACPA,KAAO8B,GACPiG,QAAQ/H,IAAQ+H,OAAO/H,IAE1BwY,GAAW,SAAkC1W,EAAQ9B,GACvD,OAAOuY,GAAUzW,EAAQ9B,EAAM8D,EAAY9D,GAAK,IAC5CgR,EAAa,EAAGlP,EAAO9B,IACvByP,EAAK3N,EAAQ9B,IAEfyY,GAAW,SAAwB3W,EAAQ9B,EAAK0Y,GAClD,QAAIH,GAAUzW,EAAQ9B,EAAM8D,EAAY9D,GAAK,KACxCiD,EAASyV,IACT5N,EAAI4N,EAAM,WACT5N,EAAI4N,EAAM,QACV5N,EAAI4N,EAAM,QAEVA,EAAKzL,cACJnC,EAAI4N,EAAM,cAAeA,EAAK1L,UAC9BlC,EAAI4N,EAAM,gBAAiBA,EAAKrZ,WAI9B0E,EAAGjC,EAAQ9B,EAAK0Y,IAFvB5W,EAAO9B,GAAO0Y,EAAKhZ,MACZoC,IAIN0S,KACHrC,EAAMnO,EAAIwU,GACVtG,EAAIlO,EAAIyU,IAGV3X,EAAQA,EAAQW,EAAIX,EAAQO,GAAKmT,GAAkB,SAAU,CAC3D9E,yBAA0B8I,GAC1BpZ,eAAgBqZ,KAGdjN,GAAM,WAAcyI,GAAcrV,KAAK,SACzCqV,GAAgBC,GAAsB,WACpC,OAAOL,GAAUjV,KAAK4D,QAI1B,IAAImW,GAAwB1H,EAAY,GAAIwF,IAC5CxF,EAAY0H,GAAuBL,IACnC3X,EAAKgY,GAAuBvE,GAAUkE,GAAWnF,QACjDlC,EAAY0H,GAAuB,CACjCpU,MAAO2T,GACPjP,IAAKkP,GACLpL,YAAa,aACb4D,SAAUsD,GACVE,eAAgBqC,KAElBd,GAAUiD,GAAuB,SAAU,KAC3CjD,GAAUiD,GAAuB,aAAc,KAC/CjD,GAAUiD,GAAuB,aAAc,KAC/CjD,GAAUiD,GAAuB,SAAU,KAC3C5U,EAAG4U,GAAuBtE,GAAK,CAC7B/U,IAAK,WAAc,OAAOkD,KAAKkS,OAIjClW,EAAOD,QAAU,SAAUoR,EAAKyF,EAAOwD,EAASC,GAE9C,IAAI7M,EAAO2D,IADXkJ,IAAYA,GACgB,UAAY,IAAM,QAC1CC,EAAS,MAAQnJ,EACjBoJ,EAAS,MAAQpJ,EACjBqJ,EAAavY,EAAOuL,GACpBiN,EAAOD,GAAc,GACrBE,EAAMF,GAAc5P,EAAe4P,GACnCG,GAAUH,IAAenI,EAAOuI,IAChCnV,EAAI,GACJoV,EAAsBL,GAAcA,EAAoB,UAUxDM,EAAa,SAAUpS,EAAMoD,GAC/BvG,EAAGmD,EAAMoD,EAAO,CACdhL,IAAK,WACH,OAZO,SAAU4H,EAAMoD,GAC3B,IAAI/H,EAAO2E,EAAK0O,GAChB,OAAOrT,EAAKgX,EAAET,GAAQxO,EAAQ8K,EAAQ7S,EAAKrD,EAAG6V,IAUnC9V,CAAOuD,KAAM8H,IAEtBrB,IAAK,SAAUvJ,GACb,OAXO,SAAUwH,EAAMoD,EAAO5K,GAClC,IAAI6C,EAAO2E,EAAK0O,GACZiD,IAASnZ,GAASA,EAAQkD,KAAK4W,MAAM9Z,IAAU,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,GACjF6C,EAAKgX,EAAER,GAAQzO,EAAQ8K,EAAQ7S,EAAKrD,EAAGQ,EAAOqV,IAQnC0E,CAAOjX,KAAM8H,EAAO5K,IAE7BL,YAAY,KAGZ8Z,GACFH,EAAaJ,GAAQ,SAAU1R,EAAM3E,EAAMmX,EAASC,GAClD5I,EAAW7J,EAAM8R,EAAYhN,EAAM,MACnC,IAEIiJ,EAAQ2E,EAAYhU,EAAQiU,EAF5BvP,EAAQ,EACR+K,EAAS,EAEb,GAAKpS,EAASV,GAIP,MAAIA,aAAgB+P,GAhUd,gBAgU+BuH,EAAQzI,EAAQ7O,KA/T9C,qBA+TwEsX,GAa/E,OAAInF,MAAenS,EACjBkT,GAASuD,EAAYzW,GAErBsT,GAAMjX,KAAKoa,EAAYzW,GAf9B0S,EAAS1S,EACT8S,EAASF,GAASuE,EAAStE,GAC3B,IAAI0E,EAAOvX,EAAKqX,WAChB,QAAgB5X,IAAZ2X,EAAuB,CACzB,GAAIG,EAAO1E,EAAO,MAAMjM,EApSf,iBAsST,IADAyQ,EAAaE,EAAOzE,GACH,EAAG,MAAMlM,EAtSjB,sBAyST,IADAyQ,EAAa/J,EAAS8J,GAAWvE,GAChBC,EAASyE,EAAM,MAAM3Q,EAzS7B,iBA2SXvD,EAASgU,EAAaxE,OAftBxP,EAASsL,EAAQ3O,GAEjB0S,EAAS,IAAI3C,EADbsH,EAAahU,EAASwP,GA2BxB,IAPAzU,EAAKuG,EAAM,KAAM,CACfkI,EAAG6F,EACH/V,EAAGmW,EACH3W,EAAGkb,EACH5W,EAAG4C,EACH2T,EAAG,IAAI/G,EAAUyC,KAEZ3K,EAAQ1E,GAAQ0T,EAAWpS,EAAMoD,QAE1C+O,EAAsBL,EAAoB,UAAIjZ,EAAO4Y,IACrDhY,EAAK0Y,EAAqB,cAAeL,IAC/BxN,GAAM,WAChBwN,EAAW,OACNxN,GAAM,WACX,IAAIwN,GAAY,OACXlH,GAAY,SAAUiI,GAC3B,IAAIf,EACJ,IAAIA,EAAW,MACf,IAAIA,EAAW,KACf,IAAIA,EAAWe,MACd,KACDf,EAAaJ,GAAQ,SAAU1R,EAAM3E,EAAMmX,EAASC,GAElD,IAAIE,EAGJ,OAJA9I,EAAW7J,EAAM8R,EAAYhN,GAIxB/I,EAASV,GACVA,aAAgB+P,GA7WP,gBA6WwBuH,EAAQzI,EAAQ7O,KA5WvC,qBA4WiEsX,OAC1D7X,IAAZ2X,EACH,IAAIV,EAAK1W,EAAM4S,GAASuE,EAAStE,GAAQuE,QAC7B3X,IAAZ0X,EACE,IAAIT,EAAK1W,EAAM4S,GAASuE,EAAStE,IACjC,IAAI6D,EAAK1W,GAEbmS,MAAenS,EAAakT,GAASuD,EAAYzW,GAC9CsT,GAAMjX,KAAKoa,EAAYzW,GATF,IAAI0W,EAAK/H,EAAQ3O,OAW/CmQ,EAAawG,IAAQjX,SAAS5B,UAAYiR,EAAK2H,GAAM1S,OAAO+K,EAAK4H,IAAQ5H,EAAK2H,IAAO,SAAUjZ,GACvFA,KAAOgZ,GAAarY,EAAKqY,EAAYhZ,EAAKiZ,EAAKjZ,OAEvDgZ,EAAoB,UAAIK,EACnBzI,IAASyI,EAAoBtM,YAAciM,IAElD,IAAIgB,EAAkBX,EAAoBjF,IACtC6F,IAAsBD,IACI,UAAxBA,EAAgBhb,MAA4CgD,MAAxBgY,EAAgBhb,MACtDkb,EAAY5B,GAAWnF,OAC3BxS,EAAKqY,EAAY1E,IAAmB,GACpC3T,EAAK0Y,EAAqB3E,GAAa1I,GACvCrL,EAAK0Y,EAAqBzE,IAAM,GAChCjU,EAAK0Y,EAAqB9E,GAAiByE,IAEvCH,EAAU,IAAIG,EAAW,GAAG3E,KAAQrI,EAASqI,MAAOgF,IACtDtV,EAAGsV,EAAqBhF,GAAK,CAC3B/U,IAAK,WAAc,OAAO0M,KAI9B/H,EAAE+H,GAAQgN,EAEVlY,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAK2X,GAAcC,GAAOhV,GAElEnD,EAAQA,EAAQW,EAAGuK,EAAM,CACvBiM,kBAAmB7C,IAGrBtU,EAAQA,EAAQW,EAAIX,EAAQO,EAAImK,GAAM,WAAcyN,EAAKkB,GAAGvb,KAAKoa,EAAY,MAAQhN,EAAM,CACzFoO,KAAMvE,GACNsE,GAAI7D,KApZgB,sBAuZK+C,GAAsB1Y,EAAK0Y,EAvZhC,oBAuZwEjE,GAE9FtU,EAAQA,EAAQa,EAAGqK,EAAMyK,IAEzB1E,EAAW/F,GAEXlL,EAAQA,EAAQa,EAAIb,EAAQO,EAAI6T,GAAYlJ,EAAM,CAAE/C,IAAKkP,KAEzDrX,EAAQA,EAAQa,EAAIb,EAAQO,GAAK4Y,EAAmBjO,EAAMsM,IAErD1H,GAAWyI,EAAoB1I,UAAYsD,KAAeoF,EAAoB1I,SAAWsD,IAE9FnT,EAAQA,EAAQa,EAAIb,EAAQO,EAAImK,GAAM,WACpC,IAAIwN,EAAW,GAAGzU,WAChByH,EAAM,CAAEzH,MAAO2T,KAEnBpX,EAAQA,EAAQa,EAAIb,EAAQO,GAAKmK,GAAM,WACrC,MAAO,CAAC,EAAG,GAAG2I,kBAAoB,IAAI6E,EAAW,CAAC,EAAG,IAAI7E,sBACpD3I,GAAM,WACX6N,EAAoBlF,eAAevV,KAAK,CAAC,EAAG,QACzCoN,EAAM,CAAEmI,eAAgBqC,KAE7B3E,EAAU7F,GAAQiO,EAAoBD,EAAkBE,EACnDtJ,GAAYqJ,GAAmBtZ,EAAK0Y,EAAqBjF,GAAU8F,SAErE1b,EAAOD,QAAU,c,iBC/dxB;;;;;;;;IAQE,WAGA,IAUI8b,EAAkB,sBASlBC,EAAc,yBAgDdC,EAAY,CACd,CAAC,MA9BiB,KA+BlB,CAAC,OAtCkB,GAuCnB,CAAC,UAtCsB,GAuCvB,CAAC,QArCmB,GAsCpB,CAAC,aArCyB,IAsC1B,CAAC,OAjCkB,KAkCnB,CAAC,UAtCqB,IAuCtB,CAAC,eAtC2B,IAuC5B,CAAC,QArCmB,MAyClBC,EAAU,qBACVC,EAAW,iBAEXC,EAAU,mBACVC,EAAU,gBAEVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBAGZC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAGbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBAEXC,EAAY,uBACZC,EAAY,uBAGZC,EAAuB,iBACvBC,EAAsB,qBACtBC,EAAwB,gCAGxBC,EAAgB,4BAChBC,EAAkB,WAClBC,EAAmBC,OAAOH,EAAcpb,QACxCwb,EAAqBD,OAAOF,EAAgBrb,QAG5Cyb,EAAW,mBACXC,EAAa,kBACbC,EAAgB,mBAGhBC,EAAe,mDACfC,EAAgB,QAChBC,EAAa,mGAMbC,EAAe,sBACfC,EAAkBT,OAAOQ,EAAa/b,QAGtCic,EAAS,aACTC,EAAc,OACdC,EAAY,OAGZC,EAAgB,4CAChBC,EAAgB,oCAChBC,EAAiB,QAGjBC,GAAc,4CAGdC,GAAe,WAMfC,GAAe,kCAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAU,8CAGVC,GAAY,OAGZC,GAAoB,yBAOpBC,GAAeC,gDASfC,GAAeC,8OAIfC,GAAW,oBACXC,GAAU,IAAMH,GAAe,IAC/BI,GAAU,IAAMN,GAAe,IAC/BO,GAAW,OACXC,GAAY,oBACZC,GAAU,8BACVC,GAAS,oBAAuBR,GAAeK,GAlB9B,qEAmBjBI,GAAS,2BAETC,GAAc,qBACdC,GAAa,kCACbC,GAAa,qCACbC,GAAU,8BAIVC,GAAc,MAAQP,GAAU,IAAMC,GAAS,IAC/CO,GAAc,MAAQF,GAAU,IAAML,GAAS,IAG/CQ,GAZa,MAAQZ,GAAU,IAAMK,GAAS,IAYtB,IAKxBQ,GAJW,oBAIQD,IAHP,gBAAwB,CAACN,GAAaC,GAAYC,IAAY1T,KAAK,KAAO,qBAAiB8T,GAAW,MAIlHE,GAAU,MAAQ,CAACZ,GAAWK,GAAYC,IAAY1T,KAAK,KAAO,IAAM+T,GACxEE,GAAW,MAAQ,CAACT,GAAcN,GAAU,IAAKA,GAASO,GAAYC,GAAYV,IAAUhT,KAAK,KAAO,IAGxGkU,GAASlD,OA/BA,OA+Be,KAMxBmD,GAAcnD,OAAOkC,GAAS,KAG9BkB,GAAYpD,OAAOuC,GAAS,MAAQA,GAAS,KAAOU,GAAWF,GAAO,KAGtEM,GAAgBrD,OAAO,CACzB2C,GAAU,IAAMN,GAAU,oCAAgC,CAACJ,GAASU,GAAS,KAAK3T,KAAK,KAAO,IAC9F6T,GAAc,oCAAgC,CAACZ,GAASU,GAAUC,GAAa,KAAK5T,KAAK,KAAO,IAChG2T,GAAU,IAAMC,GAAc,iCAC9BD,GAAU,iCAtBK,mDADA,mDA0BfR,GACAa,IACAhU,KAAK,KAAM,KAGTsU,GAAetD,OAAO,0BAA+B4B,GA3DxC,mBA8Db2B,GAAmB,qEAGnBC,GAAe,CACjB,QAAS,SAAU,WAAY,OAAQ,QAAS,eAAgB,eAChE,WAAY,YAAa,aAAc,aAAc,MAAO,OAAQ,SACpE,UAAW,SAAU,MAAO,SAAU,SAAU,YAAa,aAC7D,oBAAqB,cAAe,cAAe,UACnD,IAAK,eAAgB,WAAY,WAAY,cAI3CC,IAAmB,EAGnBC,GAAiB,GACrBA,GAAexE,GAAcwE,GAAevE,GAC5CuE,GAAetE,GAAWsE,GAAerE,GACzCqE,GAAepE,GAAYoE,GAAenE,GAC1CmE,GA/KsB,8BA+KYA,GAAelE,GACjDkE,GAAejE,IAAa,EAC5BiE,GAAezF,GAAWyF,GAAexF,GACzCwF,GAAe1E,GAAkB0E,GAAevF,GAChDuF,GAAezE,GAAeyE,GAAetF,GAC7CsF,GAAerF,GAAYqF,GAAepF,GAC1CoF,GAAelF,GAAUkF,GAAejF,GACxCiF,GAAehF,GAAagF,GAAe/E,GAC3C+E,GAAe9E,GAAU8E,GAAe7E,GACxC6E,GAAe3E,IAAc,EAG7B,IAAI4E,GAAgB,GACpBA,GAAc1F,GAAW0F,GAAczF,GACvCyF,GAAc3E,GAAkB2E,GAAc1E,GAC9C0E,GAAcxF,GAAWwF,GAAcvF,GACvCuF,GAAczE,GAAcyE,GAAcxE,GAC1CwE,GAAcvE,GAAWuE,GAActE,GACvCsE,GAAcrE,GAAYqE,GAAcnF,GACxCmF,GAAclF,GAAakF,GAAcjF,GACzCiF,GAAchF,GAAagF,GAAc/E,GACzC+E,GAAc9E,GAAa8E,GAAc7E,GACzC6E,GAAcpE,GAAYoE,GArMJ,8BAsMtBA,GAAcnE,GAAamE,GAAclE,IAAa,EACtDkE,GAActF,GAAYsF,GAAcrF,GACxCqF,GAAc5E,IAAc,EAG5B,IA4EI6E,GAAgB,CAClB,KAAM,KACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,SAAU,QACV,SAAU,SAIRC,GAAiBC,WACjBC,GAAeC,SAGfC,GAA8B,iBAAV/f,GAAsBA,GAAUA,EAAOtB,SAAWA,QAAUsB,EAGhFggB,GAA0B,iBAAR5d,MAAoBA,MAAQA,KAAK1D,SAAWA,QAAU0D,KAGxE6d,GAAOF,IAAcC,IAAYxe,SAAS,cAATA,GAGjC0e,GAA4CpiB,IAAYA,EAAQqiB,UAAYriB,EAG5EsiB,GAAaF,IAAgC,iBAAVniB,GAAsBA,IAAWA,EAAOoiB,UAAYpiB,EAGvFsiB,GAAgBD,IAAcA,GAAWtiB,UAAYoiB,GAGrDI,GAAcD,IAAiBN,GAAWQ,QAG1CC,GAAY,WACd,IAEE,IAAIC,EAAQL,IAAcA,GAAWM,SAAWN,GAAWM,QAAQ,QAAQD,MAE3E,OAAIA,GAKGH,IAAeA,GAAYK,SAAWL,GAAYK,QAAQ,QACjE,MAAOpe,KAXI,GAeXqe,GAAoBJ,IAAYA,GAASK,cACzCC,GAAaN,IAAYA,GAASO,OAClCC,GAAYR,IAAYA,GAASS,MACjCC,GAAeV,IAAYA,GAASW,SACpCC,GAAYZ,IAAYA,GAASa,MACjCC,GAAmBd,IAAYA,GAASe,aAc5C,SAASpd,GAAM4H,EAAMyV,EAAS9b,GAC5B,OAAQA,EAAKP,QACX,KAAK,EAAG,OAAO4G,EAAK5N,KAAKqjB,GACzB,KAAK,EAAG,OAAOzV,EAAK5N,KAAKqjB,EAAS9b,EAAK,IACvC,KAAK,EAAG,OAAOqG,EAAK5N,KAAKqjB,EAAS9b,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOqG,EAAK5N,KAAKqjB,EAAS9b,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAOqG,EAAK5H,MAAMqd,EAAS9b,GAa7B,SAAS+b,GAAgBC,EAAO1I,EAAQ2I,EAAUC,GAIhD,IAHA,IAAI/X,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,SAE9B0E,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GAClBmP,EAAO4I,EAAa3iB,EAAO0iB,EAAS1iB,GAAQyiB,GAE9C,OAAOE,EAYT,SAASC,GAAUH,EAAOC,GAIxB,IAHA,IAAI9X,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,SAE9B0E,EAAQ1E,IAC8B,IAAzCwc,EAASD,EAAM7X,GAAQA,EAAO6X,KAIpC,OAAOA,EAYT,SAASI,GAAeJ,EAAOC,GAG7B,IAFA,IAAIxc,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OAEhCA,MAC0C,IAA3Cwc,EAASD,EAAMvc,GAASA,EAAQuc,KAItC,OAAOA,EAaT,SAAStP,GAAWsP,EAAOnL,GAIzB,IAHA,IAAI1M,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,SAE9B0E,EAAQ1E,GACf,IAAKoR,EAAUmL,EAAM7X,GAAQA,EAAO6X,GAClC,OAAO,EAGX,OAAO,EAYT,SAASxP,GAAYwP,EAAOnL,GAM1B,IALA,IAAI1M,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACnC4c,EAAW,EACX9R,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd0M,EAAUtX,EAAO4K,EAAO6X,KAC1BzR,EAAO8R,KAAc9iB,GAGzB,OAAOgR,EAYT,SAASsC,GAAcmP,EAAOziB,GAE5B,SADsB,MAATyiB,EAAgB,EAAIA,EAAMvc,SACpB6c,GAAYN,EAAOziB,EAAO,IAAM,EAYrD,SAASgjB,GAAkBP,EAAOziB,EAAOijB,GAIvC,IAHA,IAAIrY,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,SAE9B0E,EAAQ1E,GACf,GAAI+c,EAAWjjB,EAAOyiB,EAAM7X,IAC1B,OAAO,EAGX,OAAO,EAYT,SAASsY,GAAST,EAAOC,GAKvB,IAJA,IAAI9X,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACnC8K,EAASlM,MAAMoB,KAEV0E,EAAQ1E,GACf8K,EAAOpG,GAAS8X,EAASD,EAAM7X,GAAQA,EAAO6X,GAEhD,OAAOzR,EAWT,SAASmS,GAAUV,EAAOhP,GAKxB,IAJA,IAAI7I,GAAS,EACT1E,EAASuN,EAAOvN,OAChByP,EAAS8M,EAAMvc,SAEV0E,EAAQ1E,GACfuc,EAAM9M,EAAS/K,GAAS6I,EAAO7I,GAEjC,OAAO6X,EAeT,SAAS1O,GAAY0O,EAAOC,EAAUC,EAAaS,GACjD,IAAIxY,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OAKvC,IAHIkd,GAAald,IACfyc,EAAcF,IAAQ7X,MAEfA,EAAQ1E,GACfyc,EAAcD,EAASC,EAAaF,EAAM7X,GAAQA,EAAO6X,GAE3D,OAAOE,EAeT,SAAS1O,GAAiBwO,EAAOC,EAAUC,EAAaS,GACtD,IAAIld,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OAIvC,IAHIkd,GAAald,IACfyc,EAAcF,IAAQvc,IAEjBA,KACLyc,EAAcD,EAASC,EAAaF,EAAMvc,GAASA,EAAQuc,GAE7D,OAAOE,EAaT,SAASzP,GAAUuP,EAAOnL,GAIxB,IAHA,IAAI1M,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,SAE9B0E,EAAQ1E,GACf,GAAIoR,EAAUmL,EAAM7X,GAAQA,EAAO6X,GACjC,OAAO,EAGX,OAAO,EAUT,IAAIY,GAAYC,GAAa,UAmC7B,SAASC,GAAYC,EAAYlM,EAAWmM,GAC1C,IAAIzS,EAOJ,OANAyS,EAASD,GAAY,SAASxjB,EAAOM,EAAKkjB,GACxC,GAAIlM,EAAUtX,EAAOM,EAAKkjB,GAExB,OADAxS,EAAS1Q,GACF,KAGJ0Q,EAcT,SAAS0S,GAAcjB,EAAOnL,EAAWqM,EAAWC,GAIlD,IAHA,IAAI1d,EAASuc,EAAMvc,OACf0E,EAAQ+Y,GAAaC,EAAY,GAAK,GAElCA,EAAYhZ,MAAYA,EAAQ1E,GACtC,GAAIoR,EAAUmL,EAAM7X,GAAQA,EAAO6X,GACjC,OAAO7X,EAGX,OAAQ,EAYV,SAASmY,GAAYN,EAAOziB,EAAO2jB,GACjC,OAAO3jB,GAAUA,EAocnB,SAAuByiB,EAAOziB,EAAO2jB,GACnC,IAAI/Y,EAAQ+Y,EAAY,EACpBzd,EAASuc,EAAMvc,OAEnB,OAAS0E,EAAQ1E,GACf,GAAIuc,EAAM7X,KAAW5K,EACnB,OAAO4K,EAGX,OAAQ,EA5cJiZ,CAAcpB,EAAOziB,EAAO2jB,GAC5BD,GAAcjB,EAAOqB,GAAWH,GAatC,SAASI,GAAgBtB,EAAOziB,EAAO2jB,EAAWV,GAIhD,IAHA,IAAIrY,EAAQ+Y,EAAY,EACpBzd,EAASuc,EAAMvc,SAEV0E,EAAQ1E,GACf,GAAI+c,EAAWR,EAAM7X,GAAQ5K,GAC3B,OAAO4K,EAGX,OAAQ,EAUV,SAASkZ,GAAU9jB,GACjB,OAAOA,GAAUA,EAYnB,SAASgkB,GAASvB,EAAOC,GACvB,IAAIxc,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAOA,EAAU+d,GAAQxB,EAAOC,GAAYxc,EA7xBpC,IAuyBV,SAASod,GAAahjB,GACpB,OAAO,SAASG,GACd,OAAiB,MAAVA,OAp2BP6B,EAo2BoC7B,EAAOH,IAW/C,SAAS4jB,GAAezjB,GACtB,OAAO,SAASH,GACd,OAAiB,MAAVG,OAj3BP6B,EAi3BoC7B,EAAOH,IAiB/C,SAAS6jB,GAAWX,EAAYd,EAAUC,EAAaS,EAAWK,GAMhE,OALAA,EAASD,GAAY,SAASxjB,EAAO4K,EAAO4Y,GAC1Cb,EAAcS,GACTA,GAAY,EAAOpjB,GACpB0iB,EAASC,EAAa3iB,EAAO4K,EAAO4Y,MAEnCb,EAgCT,SAASsB,GAAQxB,EAAOC,GAKtB,IAJA,IAAI1R,EACApG,GAAS,EACT1E,EAASuc,EAAMvc,SAEV0E,EAAQ1E,GAAQ,CACvB,IAAIke,EAAU1B,EAASD,EAAM7X,SA96B7BtI,IA+6BI8hB,IACFpT,OAh7BF1O,IAg7BW0O,EAAuBoT,EAAWpT,EAASoT,GAGxD,OAAOpT,EAYT,SAASqT,GAAU7jB,EAAGkiB,GAIpB,IAHA,IAAI9X,GAAS,EACToG,EAASlM,MAAMtE,KAEVoK,EAAQpK,GACfwQ,EAAOpG,GAAS8X,EAAS9X,GAE3B,OAAOoG,EAyBT,SAASsT,GAAUxX,GACjB,OAAO,SAAS9M,GACd,OAAO8M,EAAK9M,IAchB,SAASukB,GAAW9jB,EAAQ+jB,GAC1B,OAAOtB,GAASsB,GAAO,SAASlkB,GAC9B,OAAOG,EAAOH,MAYlB,SAASmkB,GAASC,EAAOpkB,GACvB,OAAOokB,EAAMtZ,IAAI9K,GAYnB,SAASqkB,GAAgBC,EAAYC,GAInC,IAHA,IAAIja,GAAS,EACT1E,EAAS0e,EAAW1e,SAEf0E,EAAQ1E,GAAU6c,GAAY8B,EAAYD,EAAWha,GAAQ,IAAM,IAC5E,OAAOA,EAYT,SAASka,GAAcF,EAAYC,GAGjC,IAFA,IAAIja,EAAQga,EAAW1e,OAEhB0E,KAAWmY,GAAY8B,EAAYD,EAAWha,GAAQ,IAAM,IACnE,OAAOA,EAWT,SAASma,GAAatC,EAAOuC,GAI3B,IAHA,IAAI9e,EAASuc,EAAMvc,OACf8K,EAAS,EAEN9K,KACDuc,EAAMvc,KAAY8e,KAClBhU,EAGN,OAAOA,EAWT,IAAIiU,GAAef,GApwBG,CAEpB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IACnC,IAAQ,KAAM,IAAQ,KACtB,IAAQ,KAAM,IAAQ,KACtB,IAAQ,KAER,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,KAAM,IAAU,KAC1B,IAAU,KAAM,IAAU,KAC1B,IAAU,KAAM,EAAU,MAutBxBgB,GAAiBhB,GAntBH,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UAutBP,SAASiB,GAAiBC,GACxB,MAAO,KAAO3E,GAAc2E,GAsB9B,SAASC,GAAWpZ,GAClB,OAAOkU,GAAa5T,KAAKN,GAsC3B,SAASqZ,GAAWzN,GAClB,IAAIjN,GAAS,EACToG,EAASlM,MAAM+S,EAAI0N,MAKvB,OAHA1N,EAAIL,SAAQ,SAASxX,EAAOM,GAC1B0Q,IAASpG,GAAS,CAACtK,EAAKN,MAEnBgR,EAWT,SAASwU,GAAQ1Y,EAAM2Y,GACrB,OAAO,SAASjc,GACd,OAAOsD,EAAK2Y,EAAUjc,KAa1B,SAASkc,GAAejD,EAAOuC,GAM7B,IALA,IAAIpa,GAAS,EACT1E,EAASuc,EAAMvc,OACf4c,EAAW,EACX9R,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd5K,IAAUglB,GAAehlB,IAAU4a,IACrC6H,EAAM7X,GAASgQ,EACf5J,EAAO8R,KAAclY,GAGzB,OAAOoG,EAUT,SAAS2U,GAAWpc,GAClB,IAAIqB,GAAS,EACToG,EAASlM,MAAMyE,EAAIgc,MAKvB,OAHAhc,EAAIiO,SAAQ,SAASxX,GACnBgR,IAASpG,GAAS5K,KAEbgR,EAUT,SAAS4U,GAAWrc,GAClB,IAAIqB,GAAS,EACToG,EAASlM,MAAMyE,EAAIgc,MAKvB,OAHAhc,EAAIiO,SAAQ,SAASxX,GACnBgR,IAASpG,GAAS,CAAC5K,EAAOA,MAErBgR,EAoDT,SAAS6U,GAAW5Z,GAClB,OAAOoZ,GAAWpZ,GAkCpB,SAAqBA,GACnB,IAAI+E,EAASiP,GAAU6F,UAAY,EACnC,KAAO7F,GAAU1T,KAAKN,MAClB+E,EAEJ,OAAOA,EAtCH+U,CAAY9Z,GACZoX,GAAUpX,GAUhB,SAAS+Z,GAAc/Z,GACrB,OAAOoZ,GAAWpZ,GAoCpB,SAAwBA,GACtB,OAAOA,EAAOga,MAAMhG,KAAc,GApC9BiG,CAAeja,GAhkBrB,SAAsBA,GACpB,OAAOA,EAAOT,MAAM,IAgkBhB2a,CAAala,GAUnB,IAAIma,GAAmBlC,GA/6BH,CAClB,QAAS,IACT,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,QAAS,MAg/BX,IA+zeImC,GA/zee,SAAUC,EAAavc,GAIxC,IA6BMpG,EA7BFmB,GAHJiF,EAAqB,MAAXA,EAAkBiX,GAAOqF,GAAEE,SAASvF,GAAKvhB,SAAUsK,EAASsc,GAAEG,KAAKxF,GAAMX,MAG/Dvb,MAChB2hB,EAAO1c,EAAQ0c,KACflhB,GAAQwE,EAAQxE,MAChBhD,GAAWwH,EAAQxH,SACnBW,GAAO6G,EAAQ7G,KACfzD,GAASsK,EAAQtK,OACjBod,GAAS9S,EAAQ8S,OACjBxU,GAAS0B,EAAQ1B,OACjB5E,GAAYsG,EAAQtG,UAGpBijB,GAAa5hB,EAAMnE,UACnBgmB,GAAYpkB,GAAS5B,UACrBimB,GAAcnnB,GAAOkB,UAGrBkmB,GAAa9c,EAAQ,sBAGrB+c,GAAeH,GAAU1V,SAGzBrQ,GAAiBgmB,GAAYhmB,eAG7BmmB,GAAY,EAGZC,IACErjB,EAAM,SAASN,KAAKwjB,IAAcA,GAAW5b,MAAQ4b,GAAW5b,KAAKgc,UAAY,KACvE,iBAAmBtjB,EAAO,GAQtCujB,GAAuBN,GAAY3V,SAGnCkW,GAAmBL,GAAa5nB,KAAKO,IAGrC2nB,GAAUpG,GAAKqF,EAGfgB,GAAaxK,GAAO,IACtBiK,GAAa5nB,KAAK0B,IAAgByL,QAAQgR,EAAc,QACvDhR,QAAQ,yDAA0D,SAAW,KAI5Eib,GAASlG,GAAgBrX,EAAQud,YA36CnChlB,EA46CExC,GAASiK,EAAQjK,OACjB4S,GAAa3I,EAAQ2I,WACrB6U,GAAcD,GAASA,GAAOC,iBA96ChCjlB,EA+6CEklB,GAAehC,GAAQ/lB,GAAOiK,eAAgBjK,IAC9CgoB,GAAehoB,GAAOY,OACtBqnB,GAAuBd,GAAYc,qBACnCC,GAASjB,GAAWiB,OACpBC,GAAmB9nB,GAASA,GAAO+nB,wBAn7CrCvlB,EAo7CEwlB,GAAchoB,GAASA,GAAOuW,cAp7ChC/T,EAq7CEylB,GAAiBjoB,GAASA,GAAOC,iBAr7CnCuC,EAu7CE5C,GAAkB,WACpB,IACE,IAAIoN,EAAOkb,GAAUvoB,GAAQ,kBAE7B,OADAqN,EAAK,GAAI,GAAI,IACNA,EACP,MAAOxJ,KALU,GASjB2kB,GAAkBle,EAAQme,eAAiBlH,GAAKkH,cAAgBne,EAAQme,aACxEC,GAAS1B,GAAQA,EAAK7hB,MAAQoc,GAAKyF,KAAK7hB,KAAO6hB,EAAK7hB,IACpDwjB,GAAgBre,EAAQgD,aAAeiU,GAAKjU,YAAchD,EAAQgD,WAGlEsb,GAAanlB,GAAKyM,KAClB2Y,GAAcplB,GAAK0M,MACnB2Y,GAAmB9oB,GAAOkH,sBAC1B6hB,GAAiBlB,GAASA,GAAOmB,cAx8CnCnmB,EAy8CEomB,GAAiB3e,EAAQ4e,SACzBC,GAAalC,GAAW7a,KACxBgd,GAAarD,GAAQ/lB,GAAOwL,KAAMxL,IAClCqpB,GAAY5lB,GAAK6lB,IACjBC,GAAY9lB,GAAKY,IACjBmlB,GAAYxC,EAAK7hB,IACjBskB,GAAiBnf,EAAQ8W,SACzBsI,GAAejmB,GAAKkmB,OACpBC,GAAgB3C,GAAW5O,QAG3B/E,GAAWiV,GAAUje,EAAS,YAC9Buf,GAAMtB,GAAUje,EAAS,OACzBwf,GAAUvB,GAAUje,EAAS,WAC7Byf,GAAMxB,GAAUje,EAAS,OACzB0f,GAAUzB,GAAUje,EAAS,WAC7B2f,GAAe1B,GAAUvoB,GAAQ,UAGjCkqB,GAAUF,IAAW,IAAIA,GAGzBG,GAAY,GAGZC,GAAqBC,GAAS/W,IAC9BgX,GAAgBD,GAASR,IACzBU,GAAoBF,GAASP,IAC7BU,GAAgBH,GAASN,IACzBU,GAAoBJ,GAASL,IAG7BU,GAAcrqB,GAASA,GAAOa,eAz+ChC2B,EA0+CE8nB,GAAgBD,GAAcA,GAAYE,aA1+C5C/nB,EA2+CEgoB,GAAiBH,GAAcA,GAAYlZ,cA3+C7C3O,EAomDF,SAASioB,GAAOvqB,GACd,GAAIwqB,GAAaxqB,KAAWyqB,GAAQzqB,MAAYA,aAAiB0qB,IAAc,CAC7E,GAAI1qB,aAAiB2qB,GACnB,OAAO3qB,EAET,GAAIY,GAAe1B,KAAKc,EAAO,eAC7B,OAAO4qB,GAAa5qB,GAGxB,OAAO,IAAI2qB,GAAc3qB,GAW3B,IAAI6qB,GAAc,WAChB,SAASpqB,KACT,OAAO,SAASsW,GACd,IAAKxT,GAASwT,GACZ,MAAO,GAET,GAAI0Q,GACF,OAAOA,GAAa1Q,GAEtBtW,EAAOE,UAAYoW,EACnB,IAAI/F,EAAS,IAAIvQ,EAEjB,OADAA,EAAOE,eAnoDT2B,EAooDS0O,GAZM,GAqBjB,SAAS8Z,MAWT,SAASH,GAAc3qB,EAAO+qB,GAC5BjoB,KAAKkoB,YAAchrB,EACnB8C,KAAKmoB,YAAc,GACnBnoB,KAAKooB,YAAcH,EACnBjoB,KAAKqoB,UAAY,EACjBroB,KAAKsoB,gBA7pDL9oB,EA6uDF,SAASooB,GAAY1qB,GACnB8C,KAAKkoB,YAAchrB,EACnB8C,KAAKmoB,YAAc,GACnBnoB,KAAKuoB,QAAU,EACfvoB,KAAKwoB,cAAe,EACpBxoB,KAAKyoB,cAAgB,GACrBzoB,KAAK0oB,cArrDc,WAsrDnB1oB,KAAK2oB,UAAY,GAgHnB,SAASC,GAAK9X,GACZ,IAAIhJ,GAAS,EACT1E,EAAoB,MAAX0N,EAAkB,EAAIA,EAAQ1N,OAG3C,IADApD,KAAK6oB,UACI/gB,EAAQ1E,GAAQ,CACvB,IAAI0lB,EAAQhY,EAAQhJ,GACpB9H,KAAKyG,IAAIqiB,EAAM,GAAIA,EAAM,KAiG7B,SAASC,GAAUjY,GACjB,IAAIhJ,GAAS,EACT1E,EAAoB,MAAX0N,EAAkB,EAAIA,EAAQ1N,OAG3C,IADApD,KAAK6oB,UACI/gB,EAAQ1E,GAAQ,CACvB,IAAI0lB,EAAQhY,EAAQhJ,GACpB9H,KAAKyG,IAAIqiB,EAAM,GAAIA,EAAM,KA8G7B,SAASE,GAASlY,GAChB,IAAIhJ,GAAS,EACT1E,EAAoB,MAAX0N,EAAkB,EAAIA,EAAQ1N,OAG3C,IADApD,KAAK6oB,UACI/gB,EAAQ1E,GAAQ,CACvB,IAAI0lB,EAAQhY,EAAQhJ,GACpB9H,KAAKyG,IAAIqiB,EAAM,GAAIA,EAAM,KAiG7B,SAASG,GAAStY,GAChB,IAAI7I,GAAS,EACT1E,EAAmB,MAAVuN,EAAiB,EAAIA,EAAOvN,OAGzC,IADApD,KAAKkpB,SAAW,IAAIF,KACXlhB,EAAQ1E,GACfpD,KAAKmpB,IAAIxY,EAAO7I,IA6CpB,SAASshB,GAAMtY,GACb,IAAI/Q,EAAOC,KAAKkpB,SAAW,IAAIH,GAAUjY,GACzC9Q,KAAKyiB,KAAO1iB,EAAK0iB,KAqGnB,SAAS4G,GAAcnsB,EAAOosB,GAC5B,IAAIC,EAAQ5B,GAAQzqB,GAChBssB,GAASD,GAASE,GAAYvsB,GAC9BwsB,GAAUH,IAAUC,GAAS7D,GAASzoB,GACtCysB,GAAUJ,IAAUC,IAAUE,GAAUlK,GAAatiB,GACrD0sB,EAAcL,GAASC,GAASE,GAAUC,EAC1Czb,EAAS0b,EAAcrI,GAAUrkB,EAAMkG,OAAQmC,IAAU,GACzDnC,EAAS8K,EAAO9K,OAEpB,IAAK,IAAI5F,KAAON,GACTosB,IAAaxrB,GAAe1B,KAAKc,EAAOM,IACvCosB,IAEQ,UAAPpsB,GAECksB,IAAkB,UAAPlsB,GAA0B,UAAPA,IAE9BmsB,IAAkB,UAAPnsB,GAA0B,cAAPA,GAA8B,cAAPA,IAEtDqsB,GAAQrsB,EAAK4F,KAElB8K,EAAO9I,KAAK5H,GAGhB,OAAO0Q,EAUT,SAAS4b,GAAYnK,GACnB,IAAIvc,EAASuc,EAAMvc,OACnB,OAAOA,EAASuc,EAAMoK,GAAW,EAAG3mB,EAAS,SAv2E7C5D,EAk3EF,SAASwqB,GAAgBrK,EAAOjiB,GAC9B,OAAOusB,GAAYC,GAAUvK,GAAQwK,GAAUzsB,EAAG,EAAGiiB,EAAMvc,SAU7D,SAASgnB,GAAazK,GACpB,OAAOsK,GAAYC,GAAUvK,IAY/B,SAAS0K,GAAiB1sB,EAAQH,EAAKN,SA14ErCsC,IA24EKtC,GAAwBotB,GAAG3sB,EAAOH,GAAMN,WA34E7CsC,IA44EKtC,GAAyBM,KAAOG,IACnC4sB,GAAgB5sB,EAAQH,EAAKN,GAcjC,SAASstB,GAAY7sB,EAAQH,EAAKN,GAChC,IAAIutB,EAAW9sB,EAAOH,GAChBM,GAAe1B,KAAKuB,EAAQH,IAAQ8sB,GAAGG,EAAUvtB,UA75EvDsC,IA85EKtC,GAAyBM,KAAOG,IACnC4sB,GAAgB5sB,EAAQH,EAAKN,GAYjC,SAASwtB,GAAa/K,EAAOniB,GAE3B,IADA,IAAI4F,EAASuc,EAAMvc,OACZA,KACL,GAAIknB,GAAG3K,EAAMvc,GAAQ,GAAI5F,GACvB,OAAO4F,EAGX,OAAQ,EAcV,SAASunB,GAAejK,EAAYzJ,EAAQ2I,EAAUC,GAIpD,OAHA+K,GAASlK,GAAY,SAASxjB,EAAOM,EAAKkjB,GACxCzJ,EAAO4I,EAAa3iB,EAAO0iB,EAAS1iB,GAAQwjB,MAEvCb,EAYT,SAASgL,GAAWltB,EAAQa,GAC1B,OAAOb,GAAUmtB,GAAWtsB,EAAQ2J,GAAK3J,GAASb,GAyBpD,SAAS4sB,GAAgB5sB,EAAQH,EAAKN,GACzB,aAAPM,GAAsBZ,GACxBA,GAAee,EAAQH,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAASN,EACT,UAAY,IAGdS,EAAOH,GAAON,EAYlB,SAAS6tB,GAAOptB,EAAQqtB,GAMtB,IALA,IAAIljB,GAAS,EACT1E,EAAS4nB,EAAM5nB,OACf8K,EAASlM,EAAMoB,GACf6nB,EAAiB,MAAVttB,IAEFmK,EAAQ1E,GACf8K,EAAOpG,GAASmjB,OAtgFlBzrB,EAsgFqC1C,GAAIa,EAAQqtB,EAAMljB,IAEvD,OAAOoG,EAYT,SAASic,GAAUe,EAAQC,EAAOC,GAShC,OARIF,GAAWA,SArhFf1rB,IAshFM4rB,IACFF,EAASA,GAAUE,EAAQF,EAASE,QAvhFxC5rB,IAyhFM2rB,IACFD,EAASA,GAAUC,EAAQD,EAASC,IAGjCD,EAmBT,SAASG,GAAUnuB,EAAOouB,EAASC,EAAY/tB,EAAKG,EAAQoF,GAC1D,IAAImL,EACAsd,EA5hFc,EA4hFLF,EACTG,EA5hFc,EA4hFLH,EACTI,EA5hFiB,EA4hFRJ,EAKb,GAHIC,IACFrd,EAASvQ,EAAS4tB,EAAWruB,EAAOM,EAAKG,EAAQoF,GAASwoB,EAAWruB,SAvjFvEsC,IAyjFI0O,EACF,OAAOA,EAET,IAAKzN,GAASvD,GACZ,OAAOA,EAET,IAAIqsB,EAAQ5B,GAAQzqB,GACpB,GAAIqsB,GAEF,GADArb,EAu7GJ,SAAwByR,GACtB,IAAIvc,EAASuc,EAAMvc,OACf8K,EAAS,IAAIyR,EAAMpV,YAAYnH,GAG/BA,GAA6B,iBAAZuc,EAAM,IAAkB7hB,GAAe1B,KAAKujB,EAAO,WACtEzR,EAAOpG,MAAQ6X,EAAM7X,MACrBoG,EAAOyd,MAAQhM,EAAMgM,OAEvB,OAAOzd,EAh8GI0d,CAAe1uB,IACnBsuB,EACH,OAAOtB,GAAUhtB,EAAOgR,OAErB,CACL,IAAI9E,EAAMyiB,GAAO3uB,GACb4uB,EAAS1iB,GAAOiP,GAAWjP,GAAOkP,EAEtC,GAAIqN,GAASzoB,GACX,OAAO6uB,GAAY7uB,EAAOsuB,GAE5B,GAAIpiB,GAAOqP,GAAarP,GAAO4O,GAAY8T,IAAWnuB,GAEpD,GADAuQ,EAAUud,GAAUK,EAAU,GAAKE,GAAgB9uB,IAC9CsuB,EACH,OAAOC,EA2mEf,SAAuBjtB,EAAQb,GAC7B,OAAOmtB,GAAWtsB,EAAQytB,GAAaztB,GAASb,GA3mEtCuuB,CAAchvB,EAnH1B,SAAsBS,EAAQa,GAC5B,OAAOb,GAAUmtB,GAAWtsB,EAAQ2tB,GAAO3tB,GAASb,GAkHrByuB,CAAale,EAAQhR,IA8lEtD,SAAqBsB,EAAQb,GAC3B,OAAOmtB,GAAWtsB,EAAQ6tB,GAAW7tB,GAASb,GA9lEpC2uB,CAAYpvB,EAAO2tB,GAAW3c,EAAQhR,QAEvC,CACL,IAAKwgB,GAActU,GACjB,OAAOzL,EAAST,EAAQ,GAE1BgR,EAs8GN,SAAwBvQ,EAAQyL,EAAKoiB,GACnC,IAAIe,EAAO5uB,EAAO4M,YAClB,OAAQnB,GACN,KAAK2P,EACH,OAAOyT,GAAiB7uB,GAE1B,KAAKua,EACL,KAAKC,EACH,OAAO,IAAIoU,GAAM5uB,GAEnB,KAAKqb,EACH,OA1nDN,SAAuByT,EAAUjB,GAC/B,IAAI/Y,EAAS+Y,EAASgB,GAAiBC,EAASha,QAAUga,EAASha,OACnE,OAAO,IAAIga,EAASliB,YAAYkI,EAAQga,EAASjX,WAAYiX,EAASrV,YAwnD3DsV,CAAc/uB,EAAQ6tB,GAE/B,KAAKvS,EAAY,KAAKC,EACtB,KAAKC,EAAS,KAAKC,EAAU,KAAKC,EAClC,KAAKC,EAAU,IA77LC,6BA67LqB,KAAKC,EAAW,KAAKC,EACxD,OAAOmT,GAAgBhvB,EAAQ6tB,GAEjC,KAAKjT,EACH,OAAO,IAAIgU,EAEb,KAAK/T,EACL,KAAKI,EACH,OAAO,IAAI2T,EAAK5uB,GAElB,KAAK+a,EACH,OA7nDN,SAAqBkU,GACnB,IAAI1e,EAAS,IAAI0e,EAAOriB,YAAYqiB,EAAOpuB,OAAQ0c,GAAQ3a,KAAKqsB,IAEhE,OADA1e,EAAO8U,UAAY4J,EAAO5J,UACnB9U,EA0nDI2e,CAAYlvB,GAErB,KAAKgb,EACH,OAAO,IAAI4T,EAEb,KAAK1T,EACH,OAtnDeiU,EAsnDInvB,EArnDhB2pB,GAAgB3qB,GAAO2qB,GAAclrB,KAAK0wB,IAAW,GAD9D,IAAqBA,EAh3DNC,CAAe7vB,EAAOkM,EAAKoiB,IAIxCzoB,IAAUA,EAAQ,IAAIqmB,IACtB,IAAI4D,EAAUjqB,EAAMjG,IAAII,GACxB,GAAI8vB,EACF,OAAOA,EAETjqB,EAAM0D,IAAIvJ,EAAOgR,GAEboR,GAAMpiB,GACRA,EAAMwX,SAAQ,SAASuY,GACrB/e,EAAOib,IAAIkC,GAAU4B,EAAU3B,EAASC,EAAY0B,EAAU/vB,EAAO6F,OAE9Dmc,GAAMhiB,IACfA,EAAMwX,SAAQ,SAASuY,EAAUzvB,GAC/B0Q,EAAOzH,IAAIjJ,EAAK6tB,GAAU4B,EAAU3B,EAASC,EAAY/tB,EAAKN,EAAO6F,OAIzE,IAII2e,EAAQ6H,OAhnFZ/pB,GA4mFeksB,EACVD,EAASyB,GAAeC,GACxB1B,EAASU,GAAShkB,IAEkBjL,GASzC,OARA4iB,GAAU4B,GAASxkB,GAAO,SAAS+vB,EAAUzvB,GACvCkkB,IAEFuL,EAAW/vB,EADXM,EAAMyvB,IAIRzC,GAAYtc,EAAQ1Q,EAAK6tB,GAAU4B,EAAU3B,EAASC,EAAY/tB,EAAKN,EAAO6F,OAEzEmL,EAyBT,SAASkf,GAAezvB,EAAQa,EAAQkjB,GACtC,IAAIte,EAASse,EAAMte,OACnB,GAAc,MAAVzF,EACF,OAAQyF,EAGV,IADAzF,EAAShB,GAAOgB,GACTyF,KAAU,CACf,IAAI5F,EAAMkkB,EAAMte,GACZoR,EAAYhW,EAAOhB,GACnBN,EAAQS,EAAOH,GAEnB,QA7pFFgC,IA6pFOtC,KAAyBM,KAAOG,KAAa6W,EAAUtX,GAC1D,OAAO,EAGX,OAAO,EAaT,SAASmwB,GAAUrjB,EAAMsjB,EAAM3pB,GAC7B,GAAmB,mBAARqG,EACT,MAAM,IAAIrJ,GAAUkX,GAEtB,OAAO5N,IAAW,WAAaD,EAAK5H,WAlrFpC5C,EAkrFqDmE,KAAU2pB,GAcjE,SAASC,GAAe5N,EAAOhP,EAAQiP,EAAUO,GAC/C,IAAIrY,GAAS,EACT+M,EAAWrE,GACXgd,GAAW,EACXpqB,EAASuc,EAAMvc,OACf8K,EAAS,GACTuf,EAAe9c,EAAOvN,OAE1B,IAAKA,EACH,OAAO8K,EAEL0R,IACFjP,EAASyP,GAASzP,EAAQ6Q,GAAU5B,KAElCO,GACFtL,EAAWqL,GACXsN,GAAW,GAEJ7c,EAAOvN,QA5sFG,MA6sFjByR,EAAW8M,GACX6L,GAAW,EACX7c,EAAS,IAAIsY,GAAStY,IAExB+c,EACA,OAAS5lB,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd6lB,EAAuB,MAAZ/N,EAAmB1iB,EAAQ0iB,EAAS1iB,GAGnD,GADAA,EAASijB,GAAwB,IAAVjjB,EAAeA,EAAQ,EAC1CswB,GAAYG,GAAaA,EAAU,CAErC,IADA,IAAIC,EAAcH,EACXG,KACL,GAAIjd,EAAOid,KAAiBD,EAC1B,SAASD,EAGbxf,EAAO9I,KAAKlI,QAEJ2X,EAASlE,EAAQgd,EAAUxN,IACnCjS,EAAO9I,KAAKlI,GAGhB,OAAOgR,EAjkCTuZ,GAAOoG,iBAAmB,CAQxB,OAAU5T,EAQV,SAAYC,EAQZ,YAAeC,EAQf,SAAY,GAQZ,QAAW,CAQT,EAAKsN,KAKTA,GAAO5pB,UAAYmqB,GAAWnqB,UAC9B4pB,GAAO5pB,UAAU0M,YAAckd,GAE/BI,GAAchqB,UAAYkqB,GAAWC,GAAWnqB,WAChDgqB,GAAchqB,UAAU0M,YAAcsd,GAsHtCD,GAAY/pB,UAAYkqB,GAAWC,GAAWnqB,WAC9C+pB,GAAY/pB,UAAU0M,YAAcqd,GAoGpCgB,GAAK/qB,UAAUgrB,MAvEf,WACE7oB,KAAKkpB,SAAWtC,GAAeA,GAAa,MAAQ,GACpD5mB,KAAKyiB,KAAO,GAsEdmG,GAAK/qB,UAAkB,OAzDvB,SAAoBL,GAClB,IAAI0Q,EAASlO,KAAKsI,IAAI9K,WAAewC,KAAKkpB,SAAS1rB,GAEnD,OADAwC,KAAKyiB,MAAQvU,EAAS,EAAI,EACnBA,GAuDT0a,GAAK/qB,UAAUf,IA3Cf,SAAiBU,GACf,IAAIuC,EAAOC,KAAKkpB,SAChB,GAAItC,GAAc,CAChB,IAAI1Y,EAASnO,EAAKvC,GAClB,MA34De,8BA24DR0Q,OAx5DT1O,EAw5DiD0O,EAEjD,OAAOpQ,GAAe1B,KAAK2D,EAAMvC,GAAOuC,EAAKvC,QA15D7CgC,GAg8DFopB,GAAK/qB,UAAUyK,IA1Bf,SAAiB9K,GACf,IAAIuC,EAAOC,KAAKkpB,SAChB,OAAOtC,QAx6DPpnB,IAw6DuBO,EAAKvC,GAAsBM,GAAe1B,KAAK2D,EAAMvC,IAyB9EorB,GAAK/qB,UAAU4I,IAZf,SAAiBjJ,EAAKN,GACpB,IAAI6C,EAAOC,KAAKkpB,SAGhB,OAFAlpB,KAAKyiB,MAAQziB,KAAKsI,IAAI9K,GAAO,EAAI,EACjCuC,EAAKvC,GAAQopB,SAx7DbpnB,IAw7D6BtC,EA36DZ,4BA26DoDA,EAC9D8C,MAyHT+oB,GAAUlrB,UAAUgrB,MApFpB,WACE7oB,KAAKkpB,SAAW,GAChBlpB,KAAKyiB,KAAO,GAmFdsG,GAAUlrB,UAAkB,OAvE5B,SAAyBL,GACvB,IAAIuC,EAAOC,KAAKkpB,SACZphB,EAAQ4iB,GAAa3qB,EAAMvC,GAE/B,QAAIsK,EAAQ,KAIRA,GADY/H,EAAKqD,OAAS,EAE5BrD,EAAKgI,MAEL8c,GAAOzoB,KAAK2D,EAAM+H,EAAO,KAEzB9H,KAAKyiB,MACA,IA0DTsG,GAAUlrB,UAAUf,IA9CpB,SAAsBU,GACpB,IAAIuC,EAAOC,KAAKkpB,SACZphB,EAAQ4iB,GAAa3qB,EAAMvC,GAE/B,OAAOsK,EAAQ,OA1gEftI,EA0gE+BO,EAAK+H,GAAO,IA2C7CihB,GAAUlrB,UAAUyK,IA/BpB,SAAsB9K,GACpB,OAAOktB,GAAa1qB,KAAKkpB,SAAU1rB,IAAQ,GA+B7CurB,GAAUlrB,UAAU4I,IAlBpB,SAAsBjJ,EAAKN,GACzB,IAAI6C,EAAOC,KAAKkpB,SACZphB,EAAQ4iB,GAAa3qB,EAAMvC,GAQ/B,OANIsK,EAAQ,KACR9H,KAAKyiB,KACP1iB,EAAKqF,KAAK,CAAC5H,EAAKN,KAEhB6C,EAAK+H,GAAO,GAAK5K,EAEZ8C,MA2GTgpB,GAASnrB,UAAUgrB,MAtEnB,WACE7oB,KAAKyiB,KAAO,EACZziB,KAAKkpB,SAAW,CACd,KAAQ,IAAIN,GACZ,IAAO,IAAKpC,IAAOuC,IACnB,OAAU,IAAIH,KAkElBI,GAASnrB,UAAkB,OArD3B,SAAwBL,GACtB,IAAI0Q,EAAS4f,GAAW9tB,KAAMxC,GAAa,OAAEA,GAE7C,OADAwC,KAAKyiB,MAAQvU,EAAS,EAAI,EACnBA,GAmDT8a,GAASnrB,UAAUf,IAvCnB,SAAqBU,GACnB,OAAOswB,GAAW9tB,KAAMxC,GAAKV,IAAIU,IAuCnCwrB,GAASnrB,UAAUyK,IA3BnB,SAAqB9K,GACnB,OAAOswB,GAAW9tB,KAAMxC,GAAK8K,IAAI9K,IA2BnCwrB,GAASnrB,UAAU4I,IAdnB,SAAqBjJ,EAAKN,GACxB,IAAI6C,EAAO+tB,GAAW9tB,KAAMxC,GACxBilB,EAAO1iB,EAAK0iB,KAIhB,OAFA1iB,EAAK0G,IAAIjJ,EAAKN,GACd8C,KAAKyiB,MAAQ1iB,EAAK0iB,MAAQA,EAAO,EAAI,EAC9BziB,MA2DTipB,GAASprB,UAAUsrB,IAAMF,GAASprB,UAAUuH,KAnB5C,SAAqBlI,GAEnB,OADA8C,KAAKkpB,SAASziB,IAAIvJ,EAjrED,6BAkrEV8C,MAkBTipB,GAASprB,UAAUyK,IANnB,SAAqBpL,GACnB,OAAO8C,KAAKkpB,SAAS5gB,IAAIpL,IAuG3BksB,GAAMvrB,UAAUgrB,MA3EhB,WACE7oB,KAAKkpB,SAAW,IAAIH,GACpB/oB,KAAKyiB,KAAO,GA0Ed2G,GAAMvrB,UAAkB,OA9DxB,SAAqBL,GACnB,IAAIuC,EAAOC,KAAKkpB,SACZhb,EAASnO,EAAa,OAAEvC,GAG5B,OADAwC,KAAKyiB,KAAO1iB,EAAK0iB,KACVvU,GA0DTkb,GAAMvrB,UAAUf,IA9ChB,SAAkBU,GAChB,OAAOwC,KAAKkpB,SAASpsB,IAAIU,IA8C3B4rB,GAAMvrB,UAAUyK,IAlChB,SAAkB9K,GAChB,OAAOwC,KAAKkpB,SAAS5gB,IAAI9K,IAkC3B4rB,GAAMvrB,UAAU4I,IArBhB,SAAkBjJ,EAAKN,GACrB,IAAI6C,EAAOC,KAAKkpB,SAChB,GAAInpB,aAAgBgpB,GAAW,CAC7B,IAAIgF,EAAQhuB,EAAKmpB,SACjB,IAAK1C,IAAQuH,EAAM3qB,OAAS4qB,IAG1B,OAFAD,EAAM3oB,KAAK,CAAC5H,EAAKN,IACjB8C,KAAKyiB,OAAS1iB,EAAK0iB,KACZziB,KAETD,EAAOC,KAAKkpB,SAAW,IAAIF,GAAS+E,GAItC,OAFAhuB,EAAK0G,IAAIjJ,EAAKN,GACd8C,KAAKyiB,KAAO1iB,EAAK0iB,KACVziB,MAscT,IAAI4qB,GAAWqD,GAAeC,IAU1BC,GAAgBF,GAAeG,IAAiB,GAWpD,SAASC,GAAU3N,EAAYlM,GAC7B,IAAItG,GAAS,EAKb,OAJA0c,GAASlK,GAAY,SAASxjB,EAAO4K,EAAO4Y,GAE1C,OADAxS,IAAWsG,EAAUtX,EAAO4K,EAAO4Y,MAG9BxS,EAaT,SAASogB,GAAa3O,EAAOC,EAAUO,GAIrC,IAHA,IAAIrY,GAAS,EACT1E,EAASuc,EAAMvc,SAEV0E,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACdwZ,EAAU1B,EAAS1iB,GAEvB,GAAe,MAAXokB,SAryFN9hB,IAqyF0BmuB,EACfrM,GAAYA,IAAYiN,GAASjN,GAClCnB,EAAWmB,EAASqM,IAE1B,IAAIA,EAAWrM,EACXpT,EAAShR,EAGjB,OAAOgR,EAuCT,SAASsgB,GAAW9N,EAAYlM,GAC9B,IAAItG,EAAS,GAMb,OALA0c,GAASlK,GAAY,SAASxjB,EAAO4K,EAAO4Y,GACtClM,EAAUtX,EAAO4K,EAAO4Y,IAC1BxS,EAAO9I,KAAKlI,MAGTgR,EAcT,SAASugB,GAAY9O,EAAO+O,EAAOla,EAAWma,EAAUzgB,GACtD,IAAIpG,GAAS,EACT1E,EAASuc,EAAMvc,OAKnB,IAHAoR,IAAcA,EAAYoa,IAC1B1gB,IAAWA,EAAS,MAEXpG,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd4mB,EAAQ,GAAKla,EAAUtX,GACrBwxB,EAAQ,EAEVD,GAAYvxB,EAAOwxB,EAAQ,EAAGla,EAAWma,EAAUzgB,GAEnDmS,GAAUnS,EAAQhR,GAEVyxB,IACVzgB,EAAOA,EAAO9K,QAAUlG,GAG5B,OAAOgR,EAcT,IAAI2gB,GAAUC,KAYVC,GAAeD,IAAc,GAUjC,SAASZ,GAAWvwB,EAAQiiB,GAC1B,OAAOjiB,GAAUkxB,GAAQlxB,EAAQiiB,EAAUzX,IAW7C,SAASimB,GAAgBzwB,EAAQiiB,GAC/B,OAAOjiB,GAAUoxB,GAAapxB,EAAQiiB,EAAUzX,IAYlD,SAAS6mB,GAAcrxB,EAAQ+jB,GAC7B,OAAOvR,GAAYuR,GAAO,SAASlkB,GACjC,OAAOsL,GAAWnL,EAAOH,OAY7B,SAASyxB,GAAQtxB,EAAQuxB,GAMvB,IAHA,IAAIpnB,EAAQ,EACR1E,GAHJ8rB,EAAOC,GAASD,EAAMvxB,IAGJyF,OAED,MAAVzF,GAAkBmK,EAAQ1E,GAC/BzF,EAASA,EAAOyxB,GAAMF,EAAKpnB,OAE7B,OAAQA,GAASA,GAAS1E,EAAUzF,OAj9FpC6B,EA+9FF,SAAS6vB,GAAe1xB,EAAQ2xB,EAAUC,GACxC,IAAIrhB,EAASohB,EAAS3xB,GACtB,OAAOgqB,GAAQhqB,GAAUuQ,EAASmS,GAAUnS,EAAQqhB,EAAY5xB,IAUlE,SAAS6xB,GAAWtyB,GAClB,OAAa,MAATA,OA5+FJsC,IA6+FStC,EA14FM,qBARL,gBAo5FF+nB,IAAkBA,MAAkBtoB,GAAOO,GAq2FrD,SAAmBA,GACjB,IAAIuyB,EAAQ3xB,GAAe1B,KAAKc,EAAO+nB,IACnC7b,EAAMlM,EAAM+nB,IAEhB,IACE/nB,EAAM+nB,SAz1LRzlB,EA01LE,IAAIkwB,GAAW,EACf,MAAOlvB,IAET,IAAI0N,EAASkW,GAAqBhoB,KAAKc,GACnCwyB,IACED,EACFvyB,EAAM+nB,IAAkB7b,SAEjBlM,EAAM+nB,KAGjB,OAAO/W,EAr3FHyhB,CAAUzyB,GAy4GhB,SAAwBA,GACtB,OAAOknB,GAAqBhoB,KAAKc,GAz4G7B0yB,CAAe1yB,GAYrB,SAAS2yB,GAAO3yB,EAAO4yB,GACrB,OAAO5yB,EAAQ4yB,EAWjB,SAASC,GAAQpyB,EAAQH,GACvB,OAAiB,MAAVG,GAAkBG,GAAe1B,KAAKuB,EAAQH,GAWvD,SAASwyB,GAAUryB,EAAQH,GACzB,OAAiB,MAAVG,GAAkBH,KAAOb,GAAOgB,GA0BzC,SAASsyB,GAAiBC,EAAQtQ,EAAUO,GAS1C,IARA,IAAItL,EAAWsL,EAAaD,GAAoB1P,GAC5CpN,EAAS8sB,EAAO,GAAG9sB,OACnB+sB,EAAYD,EAAO9sB,OACnBgtB,EAAWD,EACXE,EAASruB,EAAMmuB,GACfG,EAAYC,IACZriB,EAAS,GAENkiB,KAAY,CACjB,IAAIzQ,EAAQuQ,EAAOE,GACfA,GAAYxQ,IACdD,EAAQS,GAAST,EAAO6B,GAAU5B,KAEpC0Q,EAAYpK,GAAUvG,EAAMvc,OAAQktB,GACpCD,EAAOD,IAAajQ,IAAeP,GAAaxc,GAAU,KAAOuc,EAAMvc,QAAU,KAC7E,IAAI6lB,GAASmH,GAAYzQ,QAhkG/BngB,EAmkGAmgB,EAAQuQ,EAAO,GAEf,IAAIpoB,GAAS,EACT0oB,EAAOH,EAAO,GAElB3C,EACA,OAAS5lB,EAAQ1E,GAAU8K,EAAO9K,OAASktB,GAAW,CACpD,IAAIpzB,EAAQyiB,EAAM7X,GACd6lB,EAAW/N,EAAWA,EAAS1iB,GAASA,EAG5C,GADAA,EAASijB,GAAwB,IAAVjjB,EAAeA,EAAQ,IACxCszB,EACE7O,GAAS6O,EAAM7C,GACf9Y,EAAS3G,EAAQyf,EAAUxN,IAC5B,CAEL,IADAiQ,EAAWD,IACFC,GAAU,CACjB,IAAIxO,EAAQyO,EAAOD,GACnB,KAAMxO,EACED,GAASC,EAAO+L,GAChB9Y,EAASqb,EAAOE,GAAWzC,EAAUxN,IAE3C,SAASuN,EAGT8C,GACFA,EAAKprB,KAAKuoB,GAEZzf,EAAO9I,KAAKlI,IAGhB,OAAOgR,EA+BT,SAASuiB,GAAW9yB,EAAQuxB,EAAMvrB,GAGhC,IAAIqG,EAAiB,OADrBrM,EAAS+yB,GAAO/yB,EADhBuxB,EAAOC,GAASD,EAAMvxB,KAEMA,EAASA,EAAOyxB,GAAMuB,GAAKzB,KACvD,OAAe,MAARllB,OAroGPxK,EAqoGkC4C,GAAM4H,EAAMrM,EAAQgG,GAUxD,SAASitB,GAAgB1zB,GACvB,OAAOwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAU8a,EAuCrD,SAAS6Y,GAAY3zB,EAAO4yB,EAAOxE,EAASC,EAAYxoB,GACtD,OAAI7F,IAAU4yB,IAGD,MAAT5yB,GAA0B,MAAT4yB,IAAmBpI,GAAaxqB,KAAWwqB,GAAaoI,GACpE5yB,GAAUA,GAAS4yB,GAAUA,EAmBxC,SAAyBnyB,EAAQmyB,EAAOxE,EAASC,EAAYuF,EAAW/tB,GACtE,IAAIguB,EAAWpJ,GAAQhqB,GACnBqzB,EAAWrJ,GAAQmI,GACnBmB,EAASF,EAAW9Y,EAAW4T,GAAOluB,GACtCuzB,EAASF,EAAW/Y,EAAW4T,GAAOiE,GAKtCqB,GAHJF,EAASA,GAAUjZ,EAAUS,EAAYwY,IAGhBxY,EACrB2Y,GAHJF,EAASA,GAAUlZ,EAAUS,EAAYyY,IAGhBzY,EACrB4Y,EAAYJ,GAAUC,EAE1B,GAAIG,GAAa1L,GAAShoB,GAAS,CACjC,IAAKgoB,GAASmK,GACZ,OAAO,EAETiB,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADApuB,IAAUA,EAAQ,IAAIqmB,IACd2H,GAAYvR,GAAa7hB,GAC7B2zB,GAAY3zB,EAAQmyB,EAAOxE,EAASC,EAAYuF,EAAW/tB,GAy0EnE,SAAoBpF,EAAQmyB,EAAO1mB,EAAKkiB,EAASC,EAAYuF,EAAW/tB,GACtE,OAAQqG,GACN,KAAK4P,EACH,GAAKrb,EAAOyZ,YAAc0Y,EAAM1Y,YAC3BzZ,EAAO6X,YAAcsa,EAAMta,WAC9B,OAAO,EAET7X,EAASA,EAAO8U,OAChBqd,EAAQA,EAAMrd,OAEhB,KAAKsG,EACH,QAAKpb,EAAOyZ,YAAc0Y,EAAM1Y,aAC3B0Z,EAAU,IAAIlhB,GAAWjS,GAAS,IAAIiS,GAAWkgB,KAKxD,KAAK5X,EACL,KAAKC,EACL,KAAKK,EAGH,OAAO8R,IAAI3sB,GAASmyB,GAEtB,KAAK1X,EACH,OAAOza,EAAOnB,MAAQszB,EAAMtzB,MAAQmB,EAAOiF,SAAWktB,EAAMltB,QAE9D,KAAK8V,EACL,KAAKE,EAIH,OAAOjb,GAAWmyB,EAAQ,GAE5B,KAAKvX,EACH,IAAIgZ,EAAU/O,GAEhB,KAAK7J,EACH,IAAI6Y,EA1jLe,EA0jLHlG,EAGhB,GAFAiG,IAAYA,EAAU1O,IAElBllB,EAAO8kB,MAAQqN,EAAMrN,OAAS+O,EAChC,OAAO,EAGT,IAAIxE,EAAUjqB,EAAMjG,IAAIa,GACxB,GAAIqvB,EACF,OAAOA,GAAW8C,EAEpBxE,GApkLqB,EAukLrBvoB,EAAM0D,IAAI9I,EAAQmyB,GAClB,IAAI5hB,EAASojB,GAAYC,EAAQ5zB,GAAS4zB,EAAQzB,GAAQxE,EAASC,EAAYuF,EAAW/tB,GAE1F,OADAA,EAAc,OAAEpF,GACTuQ,EAET,KAAK2K,EACH,GAAIyO,GACF,OAAOA,GAAclrB,KAAKuB,IAAW2pB,GAAclrB,KAAK0zB,GAG9D,OAAO,EAt4ED2B,CAAW9zB,EAAQmyB,EAAOmB,EAAQ3F,EAASC,EAAYuF,EAAW/tB,GAExE,KA9sGuB,EA8sGjBuoB,GAAiC,CACrC,IAAIoG,EAAeP,GAAYrzB,GAAe1B,KAAKuB,EAAQ,eACvDg0B,EAAeP,GAAYtzB,GAAe1B,KAAK0zB,EAAO,eAE1D,GAAI4B,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAe/zB,EAAOT,QAAUS,EAC/Ck0B,EAAeF,EAAe7B,EAAM5yB,QAAU4yB,EAGlD,OADA/sB,IAAUA,EAAQ,IAAIqmB,IACf0H,EAAUc,EAAcC,EAAcvG,EAASC,EAAYxoB,IAGtE,IAAKsuB,EACH,OAAO,EAGT,OADAtuB,IAAUA,EAAQ,IAAIqmB,IAq4ExB,SAAsBzrB,EAAQmyB,EAAOxE,EAASC,EAAYuF,EAAW/tB,GACnE,IAAIyuB,EAnmLmB,EAmmLPlG,EACZwG,EAAW3E,GAAWxvB,GACtBo0B,EAAYD,EAAS1uB,OAErB+sB,EADWhD,GAAW2C,GACD1sB,OAEzB,GAAI2uB,GAAa5B,IAAcqB,EAC7B,OAAO,EAET,IAAI1pB,EAAQiqB,EACZ,KAAOjqB,KAAS,CACd,IAAItK,EAAMs0B,EAAShqB,GACnB,KAAM0pB,EAAYh0B,KAAOsyB,EAAQhyB,GAAe1B,KAAK0zB,EAAOtyB,IAC1D,OAAO,EAIX,IAAIwvB,EAAUjqB,EAAMjG,IAAIa,GACxB,GAAIqvB,GAAWjqB,EAAMjG,IAAIgzB,GACvB,OAAO9C,GAAW8C,EAEpB,IAAI5hB,GAAS,EACbnL,EAAM0D,IAAI9I,EAAQmyB,GAClB/sB,EAAM0D,IAAIqpB,EAAOnyB,GAEjB,IAAIq0B,EAAWR,EACf,OAAS1pB,EAAQiqB,GAAW,CAC1Bv0B,EAAMs0B,EAAShqB,GACf,IAAI2iB,EAAW9sB,EAAOH,GAClBy0B,EAAWnC,EAAMtyB,GAErB,GAAI+tB,EACF,IAAI2G,EAAWV,EACXjG,EAAW0G,EAAUxH,EAAUjtB,EAAKsyB,EAAOnyB,EAAQoF,GACnDwoB,EAAWd,EAAUwH,EAAUz0B,EAAKG,EAAQmyB,EAAO/sB,GAGzD,UAnqLFvD,IAmqLQ0yB,EACGzH,IAAawH,GAAYnB,EAAUrG,EAAUwH,EAAU3G,EAASC,EAAYxoB,GAC7EmvB,GACD,CACLhkB,GAAS,EACT,MAEF8jB,IAAaA,EAAkB,eAAPx0B,GAE1B,GAAI0Q,IAAW8jB,EAAU,CACvB,IAAIG,EAAUx0B,EAAO4M,YACjB6nB,EAAUtC,EAAMvlB,YAGhB4nB,GAAWC,GACV,gBAAiBz0B,GAAU,gBAAiBmyB,KACzB,mBAAXqC,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,KACvDlkB,GAAS,GAKb,OAFAnL,EAAc,OAAEpF,GAChBoF,EAAc,OAAE+sB,GACT5hB,EAj8EAmkB,CAAa10B,EAAQmyB,EAAOxE,EAASC,EAAYuF,EAAW/tB,GA3D5DuvB,CAAgBp1B,EAAO4yB,EAAOxE,EAASC,EAAYsF,GAAa9tB,IAmFzE,SAASwvB,GAAY50B,EAAQa,EAAQg0B,EAAWjH,GAC9C,IAAIzjB,EAAQ0qB,EAAUpvB,OAClBA,EAAS0E,EACT2qB,GAAgBlH,EAEpB,GAAc,MAAV5tB,EACF,OAAQyF,EAGV,IADAzF,EAAShB,GAAOgB,GACTmK,KAAS,CACd,IAAI/H,EAAOyyB,EAAU1qB,GACrB,GAAK2qB,GAAgB1yB,EAAK,GAClBA,EAAK,KAAOpC,EAAOoC,EAAK,MACtBA,EAAK,KAAMpC,GAEnB,OAAO,EAGX,OAASmK,EAAQ1E,GAAQ,CAEvB,IAAI5F,GADJuC,EAAOyyB,EAAU1qB,IACF,GACX2iB,EAAW9sB,EAAOH,GAClBk1B,EAAW3yB,EAAK,GAEpB,GAAI0yB,GAAgB1yB,EAAK,IACvB,QA1yGJP,IA0yGQirB,KAA4BjtB,KAAOG,GACrC,OAAO,MAEJ,CACL,IAAIoF,EAAQ,IAAIqmB,GAChB,GAAImC,EACF,IAAIrd,EAASqd,EAAWd,EAAUiI,EAAUl1B,EAAKG,EAAQa,EAAQuE,GAEnE,UAlzGJvD,IAkzGU0O,EACE2iB,GAAY6B,EAAUjI,EAAUkI,EAA+CpH,EAAYxoB,GAC3FmL,GAEN,OAAO,GAIb,OAAO,EAWT,SAAS0kB,GAAa11B,GACpB,SAAKuD,GAASvD,KAo4FE8M,EAp4FiB9M,EAq4FxBgnB,IAAeA,MAAcla,MAl4FxBlB,GAAW5L,GAASqnB,GAAalJ,IAChC5R,KAAKud,GAAS9pB,IAg4F/B,IAAkB8M,EAp1FlB,SAAS6oB,GAAa31B,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACK41B,GAEW,iBAAT51B,EACFyqB,GAAQzqB,GACX61B,GAAoB71B,EAAM,GAAIA,EAAM,IACpC81B,GAAY91B,GAEXU,GAASV,GAUlB,SAAS+1B,GAASt1B,GAChB,IAAKu1B,GAAYv1B,GACf,OAAOooB,GAAWpoB,GAEpB,IAAIuQ,EAAS,GACb,IAAK,IAAI1Q,KAAOb,GAAOgB,GACjBG,GAAe1B,KAAKuB,EAAQH,IAAe,eAAPA,GACtC0Q,EAAO9I,KAAK5H,GAGhB,OAAO0Q,EAUT,SAASilB,GAAWx1B,GAClB,IAAK8C,GAAS9C,GACZ,OAo8FJ,SAAsBA,GACpB,IAAIuQ,EAAS,GACb,GAAc,MAAVvQ,EACF,IAAK,IAAIH,KAAOb,GAAOgB,GACrBuQ,EAAO9I,KAAK5H,GAGhB,OAAO0Q,EA38FEklB,CAAaz1B,GAEtB,IAAI01B,EAAUH,GAAYv1B,GACtBuQ,EAAS,GAEb,IAAK,IAAI1Q,KAAOG,GACD,eAAPH,IAAyB61B,GAAYv1B,GAAe1B,KAAKuB,EAAQH,KACrE0Q,EAAO9I,KAAK5H,GAGhB,OAAO0Q,EAYT,SAASolB,GAAOp2B,EAAO4yB,GACrB,OAAO5yB,EAAQ4yB,EAWjB,SAASyD,GAAQ7S,EAAYd,GAC3B,IAAI9X,GAAS,EACToG,EAASslB,GAAY9S,GAAc1e,EAAM0e,EAAWtd,QAAU,GAKlE,OAHAwnB,GAASlK,GAAY,SAASxjB,EAAOM,EAAKkjB,GACxCxS,IAASpG,GAAS8X,EAAS1iB,EAAOM,EAAKkjB,MAElCxS,EAUT,SAAS8kB,GAAYx0B,GACnB,IAAIg0B,EAAYiB,GAAaj1B,GAC7B,OAAwB,GAApBg0B,EAAUpvB,QAAeovB,EAAU,GAAG,GACjCkB,GAAwBlB,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAAS70B,GACd,OAAOA,IAAWa,GAAU+zB,GAAY50B,EAAQa,EAAQg0B,IAY5D,SAASO,GAAoB7D,EAAMwD,GACjC,OAAIiB,GAAMzE,IAAS0E,GAAmBlB,GAC7BgB,GAAwBtE,GAAMF,GAAOwD,GAEvC,SAAS/0B,GACd,IAAI8sB,EAAW3tB,GAAIa,EAAQuxB,GAC3B,YA/+GF1vB,IA++GUirB,GAA0BA,IAAaiI,EAC3CmB,GAAMl2B,EAAQuxB,GACd2B,GAAY6B,EAAUjI,EAAUkI,IAexC,SAASmB,GAAUn2B,EAAQa,EAAQu1B,EAAUxI,EAAYxoB,GACnDpF,IAAWa,GAGfqwB,GAAQrwB,GAAQ,SAASk0B,EAAUl1B,GAEjC,GADAuF,IAAUA,EAAQ,IAAIqmB,IAClB3oB,GAASiyB,IA+BjB,SAAuB/0B,EAAQa,EAAQhB,EAAKu2B,EAAUC,EAAWzI,EAAYxoB,GAC3E,IAAI0nB,EAAWwJ,GAAQt2B,EAAQH,GAC3Bk1B,EAAWuB,GAAQz1B,EAAQhB,GAC3BwvB,EAAUjqB,EAAMjG,IAAI41B,GAExB,GAAI1F,EAEF,YADA3C,GAAiB1sB,EAAQH,EAAKwvB,GAGhC,IAAIkH,EAAW3I,EACXA,EAAWd,EAAUiI,EAAWl1B,EAAM,GAAKG,EAAQa,EAAQuE,QA/iH/DvD,EAkjHIguB,OAljHJhuB,IAkjHe00B,EAEf,GAAI1G,EAAU,CACZ,IAAIjE,EAAQ5B,GAAQ+K,GAChBhJ,GAAUH,GAAS5D,GAAS+M,GAC5ByB,GAAW5K,IAAUG,GAAUlK,GAAakT,GAEhDwB,EAAWxB,EACPnJ,GAASG,GAAUyK,EACjBxM,GAAQ8C,GACVyJ,EAAWzJ,EAEJ2J,GAAkB3J,GACzByJ,EAAWhK,GAAUO,GAEdf,GACP8D,GAAW,EACX0G,EAAWnI,GAAY2G,GAAU,IAE1ByB,GACP3G,GAAW,EACX0G,EAAWvH,GAAgB+F,GAAU,IAGrCwB,EAAW,GAGNG,GAAc3B,IAAajJ,GAAYiJ,IAC9CwB,EAAWzJ,EACPhB,GAAYgB,GACdyJ,EAAWI,GAAc7J,GAEjBhqB,GAASgqB,KAAa3hB,GAAW2hB,KACzCyJ,EAAWlI,GAAgB0G,KAI7BlF,GAAW,EAGXA,IAEFzqB,EAAM0D,IAAIisB,EAAUwB,GACpBF,EAAUE,EAAUxB,EAAUqB,EAAUxI,EAAYxoB,GACpDA,EAAc,OAAE2vB,IAElBrI,GAAiB1sB,EAAQH,EAAK02B,GAzF1BK,CAAc52B,EAAQa,EAAQhB,EAAKu2B,EAAUD,GAAWvI,EAAYxoB,OAEjE,CACH,IAAImxB,EAAW3I,EACXA,EAAW0I,GAAQt2B,EAAQH,GAAMk1B,EAAWl1B,EAAM,GAAKG,EAAQa,EAAQuE,QA3gH/EvD,WA8gHQ00B,IACFA,EAAWxB,GAEbrI,GAAiB1sB,EAAQH,EAAK02B,MAE/B/H,IAwFL,SAASqI,GAAQ7U,EAAOjiB,GACtB,IAAI0F,EAASuc,EAAMvc,OACnB,GAAKA,EAIL,OAAOymB,GADPnsB,GAAKA,EAAI,EAAI0F,EAAS,EACJA,GAAUuc,EAAMjiB,QAjnHlC8B,EA6nHF,SAASi1B,GAAY/T,EAAYgU,EAAWC,GAC1C,IAAI7sB,GAAS,EAUb,OATA4sB,EAAYtU,GAASsU,EAAUtxB,OAASsxB,EAAY,CAAC5B,IAAWtR,GAAUoT,OA1uF9E,SAAoBjV,EAAOkV,GACzB,IAAIzxB,EAASuc,EAAMvc,OAGnB,IADAuc,EAAMpO,KAAKsjB,GACJzxB,KACLuc,EAAMvc,GAAUuc,EAAMvc,GAAQlG,MAEhC,OAAOyiB,EA4uFEmV,CAPMvB,GAAQ7S,GAAY,SAASxjB,EAAOM,EAAKkjB,GAIpD,MAAO,CAAE,SAHMN,GAASsU,GAAW,SAAS9U,GAC1C,OAAOA,EAAS1iB,MAEa,QAAW4K,EAAO,MAAS5K,OAGlC,SAASS,EAAQmyB,GACzC,OAm4BJ,SAAyBnyB,EAAQmyB,EAAO6E,GACtC,IAAI7sB,GAAS,EACTitB,EAAcp3B,EAAOq3B,SACrBC,EAAcnF,EAAMkF,SACpB5xB,EAAS2xB,EAAY3xB,OACrB8xB,EAAeP,EAAOvxB,OAE1B,OAAS0E,EAAQ1E,GAAQ,CACvB,IAAI8K,EAASinB,GAAiBJ,EAAYjtB,GAAQmtB,EAAYntB,IAC9D,GAAIoG,EAAQ,CACV,GAAIpG,GAASotB,EACX,OAAOhnB,EAET,IAAIknB,EAAQT,EAAO7sB,GACnB,OAAOoG,GAAmB,QAATknB,GAAmB,EAAI,IAU5C,OAAOz3B,EAAOmK,MAAQgoB,EAAMhoB,MA35BnButB,CAAgB13B,EAAQmyB,EAAO6E,MA4B1C,SAASW,GAAW33B,EAAQqtB,EAAOxW,GAKjC,IAJA,IAAI1M,GAAS,EACT1E,EAAS4nB,EAAM5nB,OACf8K,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAI8rB,EAAOlE,EAAMljB,GACb5K,EAAQ+xB,GAAQtxB,EAAQuxB,GAExB1a,EAAUtX,EAAOgyB,IACnBqG,GAAQrnB,EAAQihB,GAASD,EAAMvxB,GAAST,GAG5C,OAAOgR,EA2BT,SAASsnB,GAAY7V,EAAOhP,EAAQiP,EAAUO,GAC5C,IAAIxL,EAAUwL,EAAac,GAAkBhB,GACzCnY,GAAS,EACT1E,EAASuN,EAAOvN,OAChBotB,EAAO7Q,EAQX,IANIA,IAAUhP,IACZA,EAASuZ,GAAUvZ,IAEjBiP,IACF4Q,EAAOpQ,GAAST,EAAO6B,GAAU5B,OAE1B9X,EAAQ1E,GAKf,IAJA,IAAIyd,EAAY,EACZ3jB,EAAQyT,EAAO7I,GACf6lB,EAAW/N,EAAWA,EAAS1iB,GAASA,GAEpC2jB,EAAYlM,EAAQ6b,EAAM7C,EAAU9M,EAAWV,KAAgB,GACjEqQ,IAAS7Q,GACXkF,GAAOzoB,KAAKo0B,EAAM3P,EAAW,GAE/BgE,GAAOzoB,KAAKujB,EAAOkB,EAAW,GAGlC,OAAOlB,EAYT,SAAS8V,GAAW9V,EAAO+V,GAIzB,IAHA,IAAItyB,EAASuc,EAAQ+V,EAAQtyB,OAAS,EAClC4f,EAAY5f,EAAS,EAElBA,KAAU,CACf,IAAI0E,EAAQ4tB,EAAQtyB,GACpB,GAAIA,GAAU4f,GAAalb,IAAU6tB,EAAU,CAC7C,IAAIA,EAAW7tB,EACX+hB,GAAQ/hB,GACV+c,GAAOzoB,KAAKujB,EAAO7X,EAAO,GAE1B8tB,GAAUjW,EAAO7X,IAIvB,OAAO6X,EAYT,SAASoK,GAAWoB,EAAOC,GACzB,OAAOD,EAAQ3F,GAAYa,MAAkB+E,EAAQD,EAAQ,IAkC/D,SAAS0K,GAAW1sB,EAAQzL,GAC1B,IAAIwQ,EAAS,GACb,IAAK/E,GAAUzL,EAAI,GAAKA,EAxvHL,iBAyvHjB,OAAOwQ,EAIT,GACMxQ,EAAI,IACNwQ,GAAU/E,IAEZzL,EAAI8nB,GAAY9nB,EAAI,MAElByL,GAAUA,SAELzL,GAET,OAAOwQ,EAWT,SAAS4nB,GAAS9rB,EAAMmK,GACtB,OAAO4hB,GAAYC,GAAShsB,EAAMmK,EAAO2e,IAAW9oB,EAAO,IAU7D,SAASisB,GAAWvV,GAClB,OAAOoJ,GAAYnZ,GAAO+P,IAW5B,SAASwV,GAAexV,EAAYhjB,GAClC,IAAIiiB,EAAQhP,GAAO+P,GACnB,OAAOuJ,GAAYtK,EAAOwK,GAAUzsB,EAAG,EAAGiiB,EAAMvc,SAalD,SAASmyB,GAAQ53B,EAAQuxB,EAAMhyB,EAAOquB,GACpC,IAAK9qB,GAAS9C,GACZ,OAAOA,EAST,IALA,IAAImK,GAAS,EACT1E,GAHJ8rB,EAAOC,GAASD,EAAMvxB,IAGJyF,OACd4f,EAAY5f,EAAS,EACrB+yB,EAASx4B,EAEI,MAAVw4B,KAAoBruB,EAAQ1E,GAAQ,CACzC,IAAI5F,EAAM4xB,GAAMF,EAAKpnB,IACjBosB,EAAWh3B,EAEf,GAAI4K,GAASkb,EAAW,CACtB,IAAIyH,EAAW0L,EAAO34B,QAj4H1BgC,KAk4HI00B,EAAW3I,EAAaA,EAAWd,EAAUjtB,EAAK24B,QAl4HtD32B,KAo4HM00B,EAAWzzB,GAASgqB,GAChBA,EACCZ,GAAQqF,EAAKpnB,EAAQ,IAAM,GAAK,IAGzC0iB,GAAY2L,EAAQ34B,EAAK02B,GACzBiC,EAASA,EAAO34B,GAElB,OAAOG,EAWT,IAAIy4B,GAAevP,GAAqB,SAAS7c,EAAMjK,GAErD,OADA8mB,GAAQpgB,IAAIuD,EAAMjK,GACXiK,GAFoB8oB,GAazBuD,GAAmBz5B,GAA4B,SAASoN,EAAMb,GAChE,OAAOvM,GAAeoN,EAAM,WAAY,CACtC,cAAgB,EAChB,YAAc,EACd,MAASssB,GAASntB,GAClB,UAAY,KALwB2pB,GAgBxC,SAASyD,GAAY7V,GACnB,OAAOuJ,GAAYtZ,GAAO+P,IAY5B,SAAS8V,GAAU7W,EAAOxL,EAAOmB,GAC/B,IAAIxN,GAAS,EACT1E,EAASuc,EAAMvc,OAEf+Q,EAAQ,IACVA,GAASA,EAAQ/Q,EAAS,EAAKA,EAAS+Q,IAE1CmB,EAAMA,EAAMlS,EAASA,EAASkS,GACpB,IACRA,GAAOlS,GAETA,EAAS+Q,EAAQmB,EAAM,EAAMA,EAAMnB,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAIjG,EAASlM,EAAMoB,KACV0E,EAAQ1E,GACf8K,EAAOpG,GAAS6X,EAAM7X,EAAQqM,GAEhC,OAAOjG,EAYT,SAASuoB,GAAS/V,EAAYlM,GAC5B,IAAItG,EAMJ,OAJA0c,GAASlK,GAAY,SAASxjB,EAAO4K,EAAO4Y,GAE1C,QADAxS,EAASsG,EAAUtX,EAAO4K,EAAO4Y,SAG1BxS,EAeX,SAASwoB,GAAgB/W,EAAOziB,EAAOy5B,GACrC,IAAIC,EAAM,EACNC,EAAgB,MAATlX,EAAgBiX,EAAMjX,EAAMvc,OAEvC,GAAoB,iBAATlG,GAAqBA,GAAUA,GAAS25B,GAz7H3BC,WAy7H0D,CAChF,KAAOF,EAAMC,GAAM,CACjB,IAAIE,EAAOH,EAAMC,IAAU,EACvBlJ,EAAWhO,EAAMoX,GAEJ,OAAbpJ,IAAsBY,GAASZ,KAC9BgJ,EAAchJ,GAAYzwB,EAAUywB,EAAWzwB,GAClD05B,EAAMG,EAAM,EAEZF,EAAOE,EAGX,OAAOF,EAET,OAAOG,GAAkBrX,EAAOziB,EAAO41B,GAAU6D,GAgBnD,SAASK,GAAkBrX,EAAOziB,EAAO0iB,EAAU+W,GACjDz5B,EAAQ0iB,EAAS1iB,GASjB,IAPA,IAAI05B,EAAM,EACNC,EAAgB,MAATlX,EAAgB,EAAIA,EAAMvc,OACjC6zB,EAAW/5B,GAAUA,EACrBg6B,EAAsB,OAAVh6B,EACZi6B,EAAc5I,GAASrxB,GACvBk6B,OA/hIJ53B,IA+hIqBtC,EAEd05B,EAAMC,GAAM,CACjB,IAAIE,EAAMvR,IAAaoR,EAAMC,GAAQ,GACjClJ,EAAW/N,EAASD,EAAMoX,IAC1BM,OApiIN73B,IAoiIqBmuB,EACf2J,EAAyB,OAAb3J,EACZ4J,EAAiB5J,GAAaA,EAC9B6J,EAAcjJ,GAASZ,GAE3B,GAAIsJ,EACF,IAAIQ,EAASd,GAAcY,OAE3BE,EADSL,EACAG,IAAmBZ,GAAcU,GACjCH,EACAK,GAAkBF,IAAiBV,IAAeW,GAClDH,EACAI,GAAkBF,IAAiBC,IAAcX,IAAea,IAChEF,IAAaE,IAGbb,EAAchJ,GAAYzwB,EAAUywB,EAAWzwB,GAEtDu6B,EACFb,EAAMG,EAAM,EAEZF,EAAOE,EAGX,OAAO7Q,GAAU2Q,EA7/HCC,YAygIpB,SAASY,GAAe/X,EAAOC,GAM7B,IALA,IAAI9X,GAAS,EACT1E,EAASuc,EAAMvc,OACf4c,EAAW,EACX9R,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd6lB,EAAW/N,EAAWA,EAAS1iB,GAASA,EAE5C,IAAK4K,IAAUwiB,GAAGqD,EAAU6C,GAAO,CACjC,IAAIA,EAAO7C,EACXzf,EAAO8R,KAAwB,IAAV9iB,EAAc,EAAIA,GAG3C,OAAOgR,EAWT,SAASypB,GAAaz6B,GACpB,MAAoB,iBAATA,EACFA,EAELqxB,GAASrxB,GA3iIP,KA8iIEA,EAWV,SAAS06B,GAAa16B,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIyqB,GAAQzqB,GAEV,OAAOkjB,GAASljB,EAAO06B,IAAgB,GAEzC,GAAIrJ,GAASrxB,GACX,OAAOsqB,GAAiBA,GAAeprB,KAAKc,GAAS,GAEvD,IAAIgR,EAAUhR,EAAQ,GACtB,MAAkB,KAAVgR,GAAkB,EAAIhR,IAzkInB,IAykI0C,KAAOgR,EAY9D,SAAS2pB,GAASlY,EAAOC,EAAUO,GACjC,IAAIrY,GAAS,EACT+M,EAAWrE,GACXpN,EAASuc,EAAMvc,OACfoqB,GAAW,EACXtf,EAAS,GACTsiB,EAAOtiB,EAEX,GAAIiS,EACFqN,GAAW,EACX3Y,EAAWqL,QAER,GAAI9c,GAnpIU,IAmpIkB,CACnC,IAAIqD,EAAMmZ,EAAW,KAAOkY,GAAUnY,GACtC,GAAIlZ,EACF,OAAOoc,GAAWpc,GAEpB+mB,GAAW,EACX3Y,EAAW8M,GACX6O,EAAO,IAAIvH,QAGXuH,EAAO5Q,EAAW,GAAK1R,EAEzBwf,EACA,OAAS5lB,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd6lB,EAAW/N,EAAWA,EAAS1iB,GAASA,EAG5C,GADAA,EAASijB,GAAwB,IAAVjjB,EAAeA,EAAQ,EAC1CswB,GAAYG,GAAaA,EAAU,CAErC,IADA,IAAIoK,EAAYvH,EAAKptB,OACd20B,KACL,GAAIvH,EAAKuH,KAAepK,EACtB,SAASD,EAGT9N,GACF4Q,EAAKprB,KAAKuoB,GAEZzf,EAAO9I,KAAKlI,QAEJ2X,EAAS2b,EAAM7C,EAAUxN,KAC7BqQ,IAAStiB,GACXsiB,EAAKprB,KAAKuoB,GAEZzf,EAAO9I,KAAKlI,IAGhB,OAAOgR,EAWT,SAAS0nB,GAAUj4B,EAAQuxB,GAGzB,OAAiB,OADjBvxB,EAAS+yB,GAAO/yB,EADhBuxB,EAAOC,GAASD,EAAMvxB,aAEUA,EAAOyxB,GAAMuB,GAAKzB,KAapD,SAAS8I,GAAWr6B,EAAQuxB,EAAM+I,EAAS1M,GACzC,OAAOgK,GAAQ53B,EAAQuxB,EAAM+I,EAAQhJ,GAAQtxB,EAAQuxB,IAAQ3D,GAc/D,SAAS2M,GAAUvY,EAAOnL,EAAW2jB,EAAQrX,GAI3C,IAHA,IAAI1d,EAASuc,EAAMvc,OACf0E,EAAQgZ,EAAY1d,GAAU,GAE1B0d,EAAYhZ,MAAYA,EAAQ1E,IACtCoR,EAAUmL,EAAM7X,GAAQA,EAAO6X,KAEjC,OAAOwY,EACH3B,GAAU7W,EAAQmB,EAAY,EAAIhZ,EAASgZ,EAAYhZ,EAAQ,EAAI1E,GACnEozB,GAAU7W,EAAQmB,EAAYhZ,EAAQ,EAAI,EAAKgZ,EAAY1d,EAAS0E,GAa1E,SAASswB,GAAiBl7B,EAAOgN,GAC/B,IAAIgE,EAAShR,EAIb,OAHIgR,aAAkB0Z,KACpB1Z,EAASA,EAAOhR,SAEX+T,GAAY/G,GAAS,SAASgE,EAAQ/D,GAC3C,OAAOA,EAAOH,KAAK5H,MAAM+H,EAAOsV,QAASY,GAAU,CAACnS,GAAS/D,EAAOxG,SACnEuK,GAaL,SAASmqB,GAAQnI,EAAQtQ,EAAUO,GACjC,IAAI/c,EAAS8sB,EAAO9sB,OACpB,GAAIA,EAAS,EACX,OAAOA,EAASy0B,GAAS3H,EAAO,IAAM,GAKxC,IAHA,IAAIpoB,GAAS,EACToG,EAASlM,EAAMoB,KAEV0E,EAAQ1E,GAIf,IAHA,IAAIuc,EAAQuQ,EAAOpoB,GACfsoB,GAAY,IAEPA,EAAWhtB,GACdgtB,GAAYtoB,IACdoG,EAAOpG,GAASylB,GAAerf,EAAOpG,IAAU6X,EAAOuQ,EAAOE,GAAWxQ,EAAUO,IAIzF,OAAO0X,GAASpJ,GAAYvgB,EAAQ,GAAI0R,EAAUO,GAYpD,SAASmY,GAAc5W,EAAO/Q,EAAQ4nB,GAMpC,IALA,IAAIzwB,GAAS,EACT1E,EAASse,EAAMte,OACfo1B,EAAa7nB,EAAOvN,OACpB8K,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQ4K,EAAQ0wB,EAAa7nB,EAAO7I,QAvzI1CtI,EAwzIE+4B,EAAWrqB,EAAQwT,EAAM5Z,GAAQ5K,GAEnC,OAAOgR,EAUT,SAASuqB,GAAoBv7B,GAC3B,OAAOk3B,GAAkBl3B,GAASA,EAAQ,GAU5C,SAASw7B,GAAax7B,GACpB,MAAuB,mBAATA,EAAsBA,EAAQ41B,GAW9C,SAAS3D,GAASjyB,EAAOS,GACvB,OAAIgqB,GAAQzqB,GACHA,EAEFy2B,GAAMz2B,EAAOS,GAAU,CAACT,GAASy7B,GAAaxqB,GAASjR,IAYhE,IAAI07B,GAAW9C,GAWf,SAAS+C,GAAUlZ,EAAOxL,EAAOmB,GAC/B,IAAIlS,EAASuc,EAAMvc,OAEnB,OADAkS,OAx3IA9V,IAw3IM8V,EAAoBlS,EAASkS,GAC1BnB,GAASmB,GAAOlS,EAAUuc,EAAQ6W,GAAU7W,EAAOxL,EAAOmB,GASrE,IAAI8P,GAAeD,IAAmB,SAASrlB,GAC7C,OAAOoe,GAAKkH,aAAatlB,IAW3B,SAASisB,GAAYtZ,EAAQ+Y,GAC3B,GAAIA,EACF,OAAO/Y,EAAO1Q,QAEhB,IAAIqB,EAASqP,EAAOrP,OAChB8K,EAASuW,GAAcA,GAAYrhB,GAAU,IAAIqP,EAAOlI,YAAYnH,GAGxE,OADAqP,EAAOjM,KAAK0H,GACLA,EAUT,SAASse,GAAiBsM,GACxB,IAAI5qB,EAAS,IAAI4qB,EAAYvuB,YAAYuuB,EAAY1hB,YAErD,OADA,IAAIxH,GAAW1B,GAAQzH,IAAI,IAAImJ,GAAWkpB,IACnC5qB,EAgDT,SAASye,GAAgBoM,EAAYvN,GACnC,IAAI/Y,EAAS+Y,EAASgB,GAAiBuM,EAAWtmB,QAAUsmB,EAAWtmB,OACvE,OAAO,IAAIsmB,EAAWxuB,YAAYkI,EAAQsmB,EAAWvjB,WAAYujB,EAAW31B,QAW9E,SAAS+xB,GAAiBj4B,EAAO4yB,GAC/B,GAAI5yB,IAAU4yB,EAAO,CACnB,IAAIkJ,OAl+INx5B,IAk+IqBtC,EACfg6B,EAAsB,OAAVh6B,EACZ+7B,EAAiB/7B,GAAUA,EAC3Bi6B,EAAc5I,GAASrxB,GAEvBm6B,OAv+IN73B,IAu+IqBswB,EACfwH,EAAsB,OAAVxH,EACZyH,EAAiBzH,GAAUA,EAC3B0H,EAAcjJ,GAASuB,GAE3B,IAAMwH,IAAcE,IAAgBL,GAAej6B,EAAQ4yB,GACtDqH,GAAeE,GAAgBE,IAAmBD,IAAcE,GAChEN,GAAaG,GAAgBE,IAC5ByB,GAAgBzB,IACjB0B,EACH,OAAO,EAET,IAAM/B,IAAcC,IAAgBK,GAAet6B,EAAQ4yB,GACtD0H,GAAewB,GAAgBC,IAAmB/B,IAAcC,GAChEG,GAAa0B,GAAgBC,IAC5B5B,GAAgB4B,IACjB1B,EACH,OAAQ,EAGZ,OAAO,EAuDT,SAAS2B,GAAYv1B,EAAMw1B,EAAUC,EAASC,GAU5C,IATA,IAAIC,GAAa,EACbC,EAAa51B,EAAKP,OAClBo2B,EAAgBJ,EAAQh2B,OACxBq2B,GAAa,EACbC,EAAaP,EAAS/1B,OACtBu2B,EAAc3T,GAAUuT,EAAaC,EAAe,GACpDtrB,EAASlM,EAAM03B,EAAaC,GAC5BC,GAAeP,IAEVI,EAAYC,GACnBxrB,EAAOurB,GAAaN,EAASM,GAE/B,OAASH,EAAYE,IACfI,GAAeN,EAAYC,KAC7BrrB,EAAOkrB,EAAQE,IAAc31B,EAAK21B,IAGtC,KAAOK,KACLzrB,EAAOurB,KAAe91B,EAAK21B,KAE7B,OAAOprB,EAcT,SAAS2rB,GAAiBl2B,EAAMw1B,EAAUC,EAASC,GAWjD,IAVA,IAAIC,GAAa,EACbC,EAAa51B,EAAKP,OAClB02B,GAAgB,EAChBN,EAAgBJ,EAAQh2B,OACxB22B,GAAc,EACdC,EAAcb,EAAS/1B,OACvBu2B,EAAc3T,GAAUuT,EAAaC,EAAe,GACpDtrB,EAASlM,EAAM23B,EAAcK,GAC7BJ,GAAeP,IAEVC,EAAYK,GACnBzrB,EAAOorB,GAAa31B,EAAK21B,GAG3B,IADA,IAAIzmB,EAASymB,IACJS,EAAaC,GACpB9rB,EAAO2E,EAASknB,GAAcZ,EAASY,GAEzC,OAASD,EAAeN,IAClBI,GAAeN,EAAYC,KAC7BrrB,EAAO2E,EAASumB,EAAQU,IAAiBn2B,EAAK21B,MAGlD,OAAOprB,EAWT,SAASgc,GAAU1rB,EAAQmhB,GACzB,IAAI7X,GAAS,EACT1E,EAAS5E,EAAO4E,OAGpB,IADAuc,IAAUA,EAAQ3d,EAAMoB,MACf0E,EAAQ1E,GACfuc,EAAM7X,GAAStJ,EAAOsJ,GAExB,OAAO6X,EAaT,SAASmL,GAAWtsB,EAAQkjB,EAAO/jB,EAAQ4tB,GACzC,IAAI0O,GAASt8B,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAImK,GAAS,EACT1E,EAASse,EAAMte,SAEV0E,EAAQ1E,GAAQ,CACvB,IAAI5F,EAAMkkB,EAAM5Z,GAEZosB,EAAW3I,EACXA,EAAW5tB,EAAOH,GAAMgB,EAAOhB,GAAMA,EAAKG,EAAQa,QAvpJxDgB,WA0pJM00B,IACFA,EAAW11B,EAAOhB,IAEhBy8B,EACF1P,GAAgB5sB,EAAQH,EAAK02B,GAE7B1J,GAAY7sB,EAAQH,EAAK02B,GAG7B,OAAOv2B,EAmCT,SAASu8B,GAAiBjjB,EAAQkjB,GAChC,OAAO,SAASzZ,EAAYd,GAC1B,IAAI5V,EAAO2d,GAAQjH,GAAchB,GAAkBiL,GAC/C9K,EAAcsa,EAAcA,IAAgB,GAEhD,OAAOnwB,EAAK0W,EAAYzJ,EAAQ2d,GAAYhV,EAAU,GAAIC,IAW9D,SAASua,GAAeC,GACtB,OAAOvE,IAAS,SAASn4B,EAAQ28B,GAC/B,IAAIxyB,GAAS,EACT1E,EAASk3B,EAAQl3B,OACjBmoB,EAAanoB,EAAS,EAAIk3B,EAAQl3B,EAAS,QA1tJjD5D,EA2tJM+6B,EAAQn3B,EAAS,EAAIk3B,EAAQ,QA3tJnC96B,EAsuJE,IATA+rB,EAAc8O,EAASj3B,OAAS,GAA0B,mBAAdmoB,GACvCnoB,IAAUmoB,QA9tJjB/rB,EAiuJM+6B,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClDhP,EAAanoB,EAAS,OAluJ1B5D,EAkuJ0C+rB,EACtCnoB,EAAS,GAEXzF,EAAShB,GAAOgB,KACPmK,EAAQ1E,GAAQ,CACvB,IAAI5E,EAAS87B,EAAQxyB,GACjBtJ,GACF67B,EAAS18B,EAAQa,EAAQsJ,EAAOyjB,GAGpC,OAAO5tB,KAYX,SAASswB,GAAetN,EAAUG,GAChC,OAAO,SAASJ,EAAYd,GAC1B,GAAkB,MAAdc,EACF,OAAOA,EAET,IAAK8S,GAAY9S,GACf,OAAOC,EAASD,EAAYd,GAM9B,IAJA,IAAIxc,EAASsd,EAAWtd,OACpB0E,EAAQgZ,EAAY1d,GAAU,EAC9Bq3B,EAAW99B,GAAO+jB,IAEdI,EAAYhZ,MAAYA,EAAQ1E,KACa,IAA/Cwc,EAAS6a,EAAS3yB,GAAQA,EAAO2yB,KAIvC,OAAO/Z,GAWX,SAASoO,GAAchO,GACrB,OAAO,SAASnjB,EAAQiiB,EAAU0P,GAMhC,IALA,IAAIxnB,GAAS,EACT2yB,EAAW99B,GAAOgB,GAClB+jB,EAAQ4N,EAAS3xB,GACjByF,EAASse,EAAMte,OAEZA,KAAU,CACf,IAAI5F,EAAMkkB,EAAMZ,EAAY1d,IAAW0E,GACvC,IAA+C,IAA3C8X,EAAS6a,EAASj9B,GAAMA,EAAKi9B,GAC/B,MAGJ,OAAO98B,GAgCX,SAAS+8B,GAAgBC,GACvB,OAAO,SAASxxB,GAGd,IAAI2Y,EAAaS,GAFjBpZ,EAASgF,GAAShF,IAGd+Z,GAAc/Z,QAt0JpB3J,EAy0JM8iB,EAAMR,EACNA,EAAW,GACX3Y,EAAOyxB,OAAO,GAEdC,EAAW/Y,EACX+W,GAAU/W,EAAY,GAAG/Y,KAAK,IAC9BI,EAAOpH,MAAM,GAEjB,OAAOugB,EAAIqY,KAAgBE,GAW/B,SAASC,GAAiBC,GACxB,OAAO,SAAS5xB,GACd,OAAO8H,GAAY+pB,GAAMC,GAAO9xB,GAAQI,QAAQ0T,GAAQ,KAAM8d,EAAU,KAY5E,SAASG,GAAW3O,GAClB,OAAO,WAIL,IAAI5oB,EAAOtB,UACX,OAAQsB,EAAKP,QACX,KAAK,EAAG,OAAO,IAAImpB,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAK5oB,EAAK,IAC7B,KAAK,EAAG,OAAO,IAAI4oB,EAAK5oB,EAAK,GAAIA,EAAK,IACtC,KAAK,EAAG,OAAO,IAAI4oB,EAAK5oB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/C,KAAK,EAAG,OAAO,IAAI4oB,EAAK5oB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACxD,KAAK,EAAG,OAAO,IAAI4oB,EAAK5oB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,KAAK,EAAG,OAAO,IAAI4oB,EAAK5oB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1E,KAAK,EAAG,OAAO,IAAI4oB,EAAK5oB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAErF,IAAIw3B,EAAcpT,GAAWwE,EAAK1uB,WAC9BqQ,EAASqe,EAAKnqB,MAAM+4B,EAAax3B,GAIrC,OAAOlD,GAASyN,GAAUA,EAASitB,GAgDvC,SAASC,GAAWC,GAClB,OAAO,SAAS3a,EAAYlM,EAAWqM,GACrC,IAAI4Z,EAAW99B,GAAO+jB,GACtB,IAAK8S,GAAY9S,GAAa,CAC5B,IAAId,EAAWgV,GAAYpgB,EAAW,GACtCkM,EAAavY,GAAKuY,GAClBlM,EAAY,SAAShX,GAAO,OAAOoiB,EAAS6a,EAASj9B,GAAMA,EAAKi9B,IAElE,IAAI3yB,EAAQuzB,EAAc3a,EAAYlM,EAAWqM,GACjD,OAAO/Y,GAAS,EAAI2yB,EAAS7a,EAAWc,EAAW5Y,GAASA,QAx7J9DtI,GAm8JF,SAAS87B,GAAWxa,GAClB,OAAOya,IAAS,SAASC,GACvB,IAAIp4B,EAASo4B,EAAMp4B,OACf0E,EAAQ1E,EACRq4B,EAAS5T,GAAchqB,UAAU69B,KAKrC,IAHI5a,GACF0a,EAAMxmB,UAEDlN,KAAS,CACd,IAAIkC,EAAOwxB,EAAM1zB,GACjB,GAAmB,mBAARkC,EACT,MAAM,IAAIrJ,GAAUkX,GAEtB,GAAI4jB,IAAWrlB,GAAgC,WAArBulB,GAAY3xB,GACpC,IAAIoM,EAAU,IAAIyR,GAAc,IAAI,GAIxC,IADA/f,EAAQsO,EAAUtO,EAAQ1E,IACjB0E,EAAQ1E,GAAQ,CAGvB,IAAIw4B,EAAWD,GAFf3xB,EAAOwxB,EAAM1zB,IAGT/H,EAAmB,WAAZ67B,EAAwBC,GAAQ7xB,QA19J/CxK,EAg+JM4W,EAJErW,GAAQ+7B,GAAW/7B,EAAK,KACX,KAAXA,EAAK,KACJA,EAAK,GAAGqD,QAAqB,GAAXrD,EAAK,GAElBqW,EAAQulB,GAAY57B,EAAK,KAAKqC,MAAMgU,EAASrW,EAAK,IAElC,GAAfiK,EAAK5G,QAAe04B,GAAW9xB,GACtCoM,EAAQwlB,KACRxlB,EAAQslB,KAAK1xB,GAGrB,OAAO,WACL,IAAIrG,EAAOtB,UACPnF,EAAQyG,EAAK,GAEjB,GAAIyS,GAA0B,GAAfzS,EAAKP,QAAeukB,GAAQzqB,GACzC,OAAOkZ,EAAQ2lB,MAAM7+B,GAAOA,QAK9B,IAHA,IAAI4K,EAAQ,EACRoG,EAAS9K,EAASo4B,EAAM1zB,GAAO1F,MAAMpC,KAAM2D,GAAQzG,IAE9C4K,EAAQ1E,GACf8K,EAASstB,EAAM1zB,GAAO1L,KAAK4D,KAAMkO,GAEnC,OAAOA,MAwBb,SAAS8tB,GAAahyB,EAAMshB,EAAS7L,EAAS0Z,EAAUC,EAAS6C,EAAeC,EAAcC,EAAQC,EAAKC,GACzG,IAAIC,EAv+JY,IAu+JJhR,EACRiR,EA/+Ja,EA++JJjR,EACTkR,EA/+JiB,EA++JLlR,EACZ+N,EAAsB,GAAV/N,EACZmR,EAz+Ja,IAy+JJnR,EACTiB,EAAOiQ,OAlhKXh9B,EAkhKmC07B,GAAWlxB,GA6C9C,OA3CA,SAASoM,IAKP,IAJA,IAAIhT,EAASf,UAAUe,OACnBO,EAAO3B,EAAMoB,GACb0E,EAAQ1E,EAEL0E,KACLnE,EAAKmE,GAASzF,UAAUyF,GAE1B,GAAIuxB,EACF,IAAInX,EAAcwa,GAAUtmB,GACxBumB,EAAe1a,GAAate,EAAMue,GASxC,GAPIiX,IACFx1B,EAAOu1B,GAAYv1B,EAAMw1B,EAAUC,EAASC,IAE1C4C,IACFt4B,EAAOk2B,GAAiBl2B,EAAMs4B,EAAeC,EAAc7C,IAE7Dj2B,GAAUu5B,EACNtD,GAAaj2B,EAASi5B,EAAO,CAC/B,IAAIO,EAAaha,GAAejf,EAAMue,GACtC,OAAO2a,GACL7yB,EAAMshB,EAAS0Q,GAAc5lB,EAAQ8L,YAAazC,EAClD9b,EAAMi5B,EAAYT,EAAQC,EAAKC,EAAQj5B,GAG3C,IAAI+3B,EAAcoB,EAAS9c,EAAUzf,KACjC2M,EAAK6vB,EAAYrB,EAAYnxB,GAAQA,EAczC,OAZA5G,EAASO,EAAKP,OACV+4B,EACFx4B,EAAOm5B,GAAQn5B,EAAMw4B,GACZM,GAAUr5B,EAAS,GAC5BO,EAAKqR,UAEHsnB,GAASF,EAAMh5B,IACjBO,EAAKP,OAASg5B,GAEZp8B,MAAQA,OAASke,IAAQle,gBAAgBoW,IAC3CzJ,EAAK4f,GAAQ2O,GAAWvuB,IAEnBA,EAAGvK,MAAM+4B,EAAax3B,IAajC,SAASo5B,GAAe9lB,EAAQ+lB,GAC9B,OAAO,SAASr/B,EAAQiiB,GACtB,OA59DJ,SAAsBjiB,EAAQsZ,EAAQ2I,EAAUC,GAI9C,OAHAqO,GAAWvwB,GAAQ,SAAST,EAAOM,EAAKG,GACtCsZ,EAAO4I,EAAaD,EAAS1iB,GAAQM,EAAKG,MAErCkiB,EAw9DEod,CAAat/B,EAAQsZ,EAAQ+lB,EAAWpd,GAAW,KAY9D,SAASsd,GAAoBC,EAAUC,GACrC,OAAO,SAASlgC,EAAO4yB,GACrB,IAAI5hB,EACJ,QA3lKF1O,IA2lKMtC,QA3lKNsC,IA2lK6BswB,EACzB,OAAOsN,EAKT,QAjmKF59B,IA8lKMtC,IACFgR,EAAShR,QA/lKbsC,IAimKMswB,EAAqB,CACvB,QAlmKJtwB,IAkmKQ0O,EACF,OAAO4hB,EAEW,iBAAT5yB,GAAqC,iBAAT4yB,GACrC5yB,EAAQ06B,GAAa16B,GACrB4yB,EAAQ8H,GAAa9H,KAErB5yB,EAAQy6B,GAAaz6B,GACrB4yB,EAAQ6H,GAAa7H,IAEvB5hB,EAASivB,EAASjgC,EAAO4yB,GAE3B,OAAO5hB,GAWX,SAASmvB,GAAWC,GAClB,OAAO/B,IAAS,SAAS7G,GAEvB,OADAA,EAAYtU,GAASsU,EAAWlT,GAAUoT,OACnCkB,IAAS,SAASnyB,GACvB,IAAI8b,EAAUzf,KACd,OAAOs9B,EAAU5I,GAAW,SAAS9U,GACnC,OAAOxd,GAAMwd,EAAUH,EAAS9b,YAexC,SAAS45B,GAAcn6B,EAAQo6B,GAG7B,IAAIC,GAFJD,OA/oKAh+B,IA+oKQg+B,EAAsB,IAAM5F,GAAa4F,IAEzBp6B,OACxB,GAAIq6B,EAAc,EAChB,OAAOA,EAAc5H,GAAW2H,EAAOp6B,GAAUo6B,EAEnD,IAAItvB,EAAS2nB,GAAW2H,EAAOjY,GAAWniB,EAAS2f,GAAWya,KAC9D,OAAOjb,GAAWib,GACd3E,GAAU3V,GAAchV,GAAS,EAAG9K,GAAQ2F,KAAK,IACjDmF,EAAOnM,MAAM,EAAGqB,GA6CtB,SAASs6B,GAAY5c,GACnB,OAAO,SAAS3M,EAAOmB,EAAKhC,GAa1B,OAZIA,GAAuB,iBAARA,GAAoBknB,GAAermB,EAAOmB,EAAKhC,KAChEgC,EAAMhC,OAxsKV9T,GA2sKE2U,EAAQwpB,GAASxpB,QA3sKnB3U,IA4sKM8V,GACFA,EAAMnB,EACNA,EAAQ,GAERmB,EAAMqoB,GAASroB,GAr7CrB,SAAmBnB,EAAOmB,EAAKhC,EAAMwN,GAKnC,IAJA,IAAIhZ,GAAS,EACT1E,EAAS4iB,GAAUT,IAAYjQ,EAAMnB,IAAUb,GAAQ,IAAK,GAC5DpF,EAASlM,EAAMoB,GAEZA,KACL8K,EAAO4S,EAAY1d,IAAW0E,GAASqM,EACvCA,GAASb,EAEX,OAAOpF,EA+6CE0vB,CAAUzpB,EAAOmB,EADxBhC,OAltKF9T,IAktKS8T,EAAsBa,EAAQmB,EAAM,GAAK,EAAKqoB,GAASrqB,GAC3BwN,IAWvC,SAAS+c,GAA0BV,GACjC,OAAO,SAASjgC,EAAO4yB,GAKrB,MAJsB,iBAAT5yB,GAAqC,iBAAT4yB,IACvC5yB,EAAQ4gC,GAAS5gC,GACjB4yB,EAAQgO,GAAShO,IAEZqN,EAASjgC,EAAO4yB,IAqB3B,SAAS+M,GAAc7yB,EAAMshB,EAASyS,EAAU7b,EAAazC,EAAS0Z,EAAUC,EAAS+C,EAAQC,EAAKC,GACpG,IAAI2B,EAxtKc,EAwtKJ1S,EAMdA,GAAY0S,EA5tKQ,GACM,GAJF,GAguKxB1S,KAAa0S,EA5tKa,GADN,OAguKlB1S,IAAW,GAEb,IAAI2S,EAAU,CACZj0B,EAAMshB,EAAS7L,EAVCue,EAAU7E,OA7vK5B35B,EA2vKiBw+B,EAAU5E,OA3vK3B55B,EA8vKuBw+B,OA9vKvBx+B,EA8vK6C25B,EAFvB6E,OA5vKtBx+B,EA4vK4C45B,EAYzB+C,EAAQC,EAAKC,GAG5BnuB,EAAS6vB,EAAS37B,WA3wKtB5C,EA2wKuCy+B,GAKvC,OAJInC,GAAW9xB,IACbk0B,GAAQhwB,EAAQ+vB,GAElB/vB,EAAOgU,YAAcA,EACdic,GAAgBjwB,EAAQlE,EAAMshB,GAUvC,SAAS8S,GAAYzD,GACnB,IAAI3wB,EAAO5J,GAAKu6B,GAChB,OAAO,SAASzP,EAAQmT,GAGtB,GAFAnT,EAAS4S,GAAS5S,IAClBmT,EAAyB,MAAbA,EAAoB,EAAInY,GAAUnlB,GAAUs9B,GAAY,OACnDzY,GAAesF,GAAS,CAGvC,IAAIoT,GAAQnwB,GAAS+c,GAAU,KAAKxiB,MAAM,KAI1C,SADA41B,GAAQnwB,GAFInE,EAAKs0B,EAAK,GAAK,MAAQA,EAAK,GAAKD,KAEnB,KAAK31B,MAAM,MACvB,GAAK,MAAQ41B,EAAK,GAAKD,IAEvC,OAAOr0B,EAAKkhB,IAWhB,IAAI4M,GAAcpR,IAAQ,EAAI7D,GAAW,IAAI6D,GAAI,CAAC,EAAE,KAAK,IA3vK5C,IA2vKsE,SAAS/V,GAC1F,OAAO,IAAI+V,GAAI/V,IAD2D4tB,GAW5E,SAASC,GAAclP,GACrB,OAAO,SAAS3xB,GACd,IAAIyL,EAAMyiB,GAAOluB,GACjB,OAAIyL,GAAOmP,EACFiK,GAAW7kB,GAEhByL,GAAOuP,EACFmK,GAAWnlB,GAn3I1B,SAAqBA,EAAQ+jB,GAC3B,OAAOtB,GAASsB,GAAO,SAASlkB,GAC9B,MAAO,CAACA,EAAKG,EAAOH,OAm3IXihC,CAAY9gC,EAAQ2xB,EAAS3xB,KA6BxC,SAAS+gC,GAAW10B,EAAMshB,EAAS7L,EAAS0Z,EAAUC,EAAS+C,EAAQC,EAAKC,GAC1E,IAAIG,EAr0KiB,EAq0KLlR,EAChB,IAAKkR,GAA4B,mBAARxyB,EACvB,MAAM,IAAIrJ,GAAUkX,GAEtB,IAAIzU,EAAS+1B,EAAWA,EAAS/1B,OAAS,EAS1C,GARKA,IACHkoB,IAAW,GACX6N,EAAWC,OA52Kb55B,GA82KA48B,OA92KA58B,IA82KM48B,EAAoBA,EAAMpW,GAAUjlB,GAAUq7B,GAAM,GAC1DC,OA/2KA78B,IA+2KQ68B,EAAsBA,EAAQt7B,GAAUs7B,GAChDj5B,GAAUg2B,EAAUA,EAAQh2B,OAAS,EA30KX,GA60KtBkoB,EAAmC,CACrC,IAAI2Q,EAAgB9C,EAChB+C,EAAe9C,EAEnBD,EAAWC,OAt3Kb55B,EAw3KA,IAAIO,EAAOy8B,OAx3KXh9B,EAw3KmCq8B,GAAQ7xB,GAEvCi0B,EAAU,CACZj0B,EAAMshB,EAAS7L,EAAS0Z,EAAUC,EAAS6C,EAAeC,EAC1DC,EAAQC,EAAKC,GAkBf,GAfIt8B,GAy6BN,SAAmBA,EAAMvB,GACvB,IAAI8sB,EAAUvrB,EAAK,GACf4+B,EAAangC,EAAO,GACpBogC,EAAatT,EAAUqT,EACvBnR,EAAWoR,EAAa,IAExBC,EAxwMY,KAywMZF,GA7wMc,GA6wMmBrT,GAzwMrB,KA0wMZqT,GAzwMc,KAywMmBrT,GAAgCvrB,EAAK,GAAGqD,QAAU5E,EAAO,IAC5E,KAAdmgC,GAAqDngC,EAAO,GAAG4E,QAAU5E,EAAO,IA/wMlE,GA+wM0E8sB,EAG5F,IAAMkC,IAAYqR,EAChB,OAAO9+B,EAtxMQ,EAyxMb4+B,IACF5+B,EAAK,GAAKvB,EAAO,GAEjBogC,GA5xMe,EA4xMDtT,EAA2B,EA1xMnB,GA6xMxB,IAAIpuB,EAAQsB,EAAO,GACnB,GAAItB,EAAO,CACT,IAAIi8B,EAAWp5B,EAAK,GACpBA,EAAK,GAAKo5B,EAAWD,GAAYC,EAAUj8B,EAAOsB,EAAO,IAAMtB,EAC/D6C,EAAK,GAAKo5B,EAAWvW,GAAe7iB,EAAK,GAAI+X,GAAetZ,EAAO,IAGrEtB,EAAQsB,EAAO,MAEb26B,EAAWp5B,EAAK,GAChBA,EAAK,GAAKo5B,EAAWU,GAAiBV,EAAUj8B,EAAOsB,EAAO,IAAMtB,EACpE6C,EAAK,GAAKo5B,EAAWvW,GAAe7iB,EAAK,GAAI+X,GAAetZ,EAAO,KAGrEtB,EAAQsB,EAAO,MAEbuB,EAAK,GAAK7C,GAxyMI,IA2yMZyhC,IACF5+B,EAAK,GAAgB,MAAXA,EAAK,GAAavB,EAAO,GAAK0nB,GAAUnmB,EAAK,GAAIvB,EAAO,KAGrD,MAAXuB,EAAK,KACPA,EAAK,GAAKvB,EAAO,IAGnBuB,EAAK,GAAKvB,EAAO,GACjBuB,EAAK,GAAK6+B,EA19BRE,CAAUb,EAASl+B,GAErBiK,EAAOi0B,EAAQ,GACf3S,EAAU2S,EAAQ,GAClBxe,EAAUwe,EAAQ,GAClB9E,EAAW8E,EAAQ,GACnB7E,EAAU6E,EAAQ,KAClB5B,EAAQ4B,EAAQ,QAv4KhBz+B,IAu4KqBy+B,EAAQ,GACxBzB,EAAY,EAAIxyB,EAAK5G,OACtB4iB,GAAUiY,EAAQ,GAAK76B,EAAQ,KAEX,GAAVkoB,IACZA,IAAW,IAERA,GA/2KY,GA+2KDA,EAGdpd,EA/2KgB,GA82KPod,GA72Ka,IA62KiBA,EApgB3C,SAAqBthB,EAAMshB,EAAS+Q,GAClC,IAAI9P,EAAO2O,GAAWlxB,GAwBtB,OAtBA,SAASoM,IAMP,IALA,IAAIhT,EAASf,UAAUe,OACnBO,EAAO3B,EAAMoB,GACb0E,EAAQ1E,EACR8e,EAAcwa,GAAUtmB,GAErBtO,KACLnE,EAAKmE,GAASzF,UAAUyF,GAE1B,IAAIsxB,EAAWh2B,EAAS,GAAKO,EAAK,KAAOue,GAAeve,EAAKP,EAAS,KAAO8e,EACzE,GACAU,GAAejf,EAAMue,GAGzB,IADA9e,GAAUg2B,EAAQh2B,QACLi5B,EACX,OAAOQ,GACL7yB,EAAMshB,EAAS0Q,GAAc5lB,EAAQ8L,iBA/5J3C1iB,EAg6JMmE,EAAMy1B,OAh6JZ55B,SAg6J2C68B,EAAQj5B,GAEjD,IAAIuJ,EAAM3M,MAAQA,OAASke,IAAQle,gBAAgBoW,EAAWmW,EAAOviB,EACrE,OAAO5H,GAAMuK,EAAI3M,KAAM2D,IA8edo7B,CAAY/0B,EAAMshB,EAAS+Q,GA72KlB,IA82KR/Q,GAA2C,IAAXA,GAAqD8N,EAAQh2B,OAG9F44B,GAAa55B,WAr5KxB5C,EAq5KyCy+B,GA9O3C,SAAuBj0B,EAAMshB,EAAS7L,EAAS0Z,GAC7C,IAAIoD,EAzoKa,EAyoKJjR,EACTiB,EAAO2O,GAAWlxB,GAkBtB,OAhBA,SAASoM,IAQP,IAPA,IAAIkjB,GAAa,EACbC,EAAal3B,UAAUe,OACvBq2B,GAAa,EACbC,EAAaP,EAAS/1B,OACtBO,EAAO3B,EAAM03B,EAAaH,GAC1B5sB,EAAM3M,MAAQA,OAASke,IAAQle,gBAAgBoW,EAAWmW,EAAOviB,IAE5DyvB,EAAYC,GACnB/1B,EAAK81B,GAAaN,EAASM,GAE7B,KAAOF,KACL51B,EAAK81B,KAAep3B,YAAYi3B,GAElC,OAAOl3B,GAAMuK,EAAI4vB,EAAS9c,EAAUzf,KAAM2D,IA0NjCq7B,CAAch1B,EAAMshB,EAAS7L,EAAS0Z,QAJ/C,IAAIjrB,EAhmBR,SAAoBlE,EAAMshB,EAAS7L,GACjC,IAAI8c,EAjxJa,EAixJJjR,EACTiB,EAAO2O,GAAWlxB,GAMtB,OAJA,SAASoM,IACP,IAAIzJ,EAAM3M,MAAQA,OAASke,IAAQle,gBAAgBoW,EAAWmW,EAAOviB,EACrE,OAAO2C,EAAGvK,MAAMm6B,EAAS9c,EAAUzf,KAAMqC,YA0lB5B48B,CAAWj1B,EAAMshB,EAAS7L,GASzC,OAAO0e,IADMp+B,EAAOq2B,GAAc8H,IACJhwB,EAAQ+vB,GAAUj0B,EAAMshB,GAexD,SAAS4T,GAAuBzU,EAAUiI,EAAUl1B,EAAKG,GACvD,YAx6KA6B,IAw6KIirB,GACCH,GAAGG,EAAU3G,GAAYtmB,MAAUM,GAAe1B,KAAKuB,EAAQH,GAC3Dk1B,EAEFjI,EAiBT,SAAS0U,GAAoB1U,EAAUiI,EAAUl1B,EAAKG,EAAQa,EAAQuE,GAOpE,OANItC,GAASgqB,IAAahqB,GAASiyB,KAEjC3vB,EAAM0D,IAAIisB,EAAUjI,GACpBqJ,GAAUrJ,EAAUiI,OAj8KtBlzB,EAi8K2C2/B,GAAqBp8B,GAC9DA,EAAc,OAAE2vB,IAEXjI,EAYT,SAAS2U,GAAgBliC,GACvB,OAAOm3B,GAAcn3B,QAj9KrBsC,EAi9K0CtC,EAgB5C,SAASo0B,GAAY3R,EAAOmQ,EAAOxE,EAASC,EAAYuF,EAAW/tB,GACjE,IAAIyuB,EAv8KmB,EAu8KPlG,EACZ+T,EAAY1f,EAAMvc,OAClB+sB,EAAYL,EAAM1sB,OAEtB,GAAIi8B,GAAalP,KAAeqB,GAAarB,EAAYkP,GACvD,OAAO,EAGT,IAAIrS,EAAUjqB,EAAMjG,IAAI6iB,GACxB,GAAIqN,GAAWjqB,EAAMjG,IAAIgzB,GACvB,OAAO9C,GAAW8C,EAEpB,IAAIhoB,GAAS,EACToG,GAAS,EACTsiB,EAp9KqB,EAo9KblF,EAAoC,IAAIrC,QAh/KpDzpB,EAs/KA,IAJAuD,EAAM0D,IAAIkZ,EAAOmQ,GACjB/sB,EAAM0D,IAAIqpB,EAAOnQ,KAGR7X,EAAQu3B,GAAW,CAC1B,IAAIC,EAAW3f,EAAM7X,GACjBmqB,EAAWnC,EAAMhoB,GAErB,GAAIyjB,EACF,IAAI2G,EAAWV,EACXjG,EAAW0G,EAAUqN,EAAUx3B,EAAOgoB,EAAOnQ,EAAO5c,GACpDwoB,EAAW+T,EAAUrN,EAAUnqB,EAAO6X,EAAOmQ,EAAO/sB,GAE1D,QA//KFvD,IA+/KM0yB,EAAwB,CAC1B,GAAIA,EACF,SAEFhkB,GAAS,EACT,MAGF,GAAIsiB,GACF,IAAKpgB,GAAU0f,GAAO,SAASmC,EAAU7B,GACnC,IAAKzO,GAAS6O,EAAMJ,KACfkP,IAAarN,GAAYnB,EAAUwO,EAAUrN,EAAU3G,EAASC,EAAYxoB,IAC/E,OAAOytB,EAAKprB,KAAKgrB,MAEjB,CACNliB,GAAS,EACT,YAEG,GACDoxB,IAAarN,IACXnB,EAAUwO,EAAUrN,EAAU3G,EAASC,EAAYxoB,GACpD,CACLmL,GAAS,EACT,OAKJ,OAFAnL,EAAc,OAAE4c,GAChB5c,EAAc,OAAE+sB,GACT5hB,EAyKT,SAASqtB,GAASvxB,GAChB,OAAO+rB,GAAYC,GAAShsB,OArsL5BxK,EAqsL6C+/B,IAAUv1B,EAAO,IAUhE,SAASmjB,GAAWxvB,GAClB,OAAO0xB,GAAe1xB,EAAQwK,GAAMkkB,IAWtC,SAASa,GAAavvB,GACpB,OAAO0xB,GAAe1xB,EAAQwuB,GAAQF,IAUxC,IAAI4P,GAAWhV,GAAiB,SAAS7c,GACvC,OAAO6c,GAAQ/pB,IAAIkN,IADIu0B,GAWzB,SAAS5C,GAAY3xB,GAKnB,IAJA,IAAIkE,EAAUlE,EAAKxN,KAAO,GACtBmjB,EAAQmH,GAAU5Y,GAClB9K,EAAStF,GAAe1B,KAAK0qB,GAAW5Y,GAAUyR,EAAMvc,OAAS,EAE9DA,KAAU,CACf,IAAIrD,EAAO4f,EAAMvc,GACbo8B,EAAYz/B,EAAKiK,KACrB,GAAiB,MAAbw1B,GAAqBA,GAAax1B,EACpC,OAAOjK,EAAKvD,KAGhB,OAAO0R,EAUT,SAASwuB,GAAU1yB,GAEjB,OADalM,GAAe1B,KAAKqrB,GAAQ,eAAiBA,GAASzd,GACrDkY,YAchB,SAAS0S,KACP,IAAI1mB,EAASuZ,GAAO7H,UAAYA,GAEhC,OADA1R,EAASA,IAAW0R,GAAWiT,GAAe3kB,EACvC7L,UAAUe,OAAS8K,EAAO7L,UAAU,GAAIA,UAAU,IAAM6L,EAWjE,SAAS4f,GAAW/Y,EAAKvX,GACvB,IAgYiBN,EACbqB,EAjYAwB,EAAOgV,EAAImU,SACf,OAiYgB,WADZ3qB,SADarB,EA/XAM,KAiYmB,UAARe,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAVrB,EACU,OAAVA,GAlYD6C,EAAmB,iBAAPvC,EAAkB,SAAW,QACzCuC,EAAKgV,IAUX,SAAS0e,GAAa91B,GAIpB,IAHA,IAAIuQ,EAAS/F,GAAKxK,GACdyF,EAAS8K,EAAO9K,OAEbA,KAAU,CACf,IAAI5F,EAAM0Q,EAAO9K,GACblG,EAAQS,EAAOH,GAEnB0Q,EAAO9K,GAAU,CAAC5F,EAAKN,EAAO02B,GAAmB12B,IAEnD,OAAOgR,EAWT,SAASgX,GAAUvnB,EAAQH,GACzB,IAAIN,EA7uJR,SAAkBS,EAAQH,GACxB,OAAiB,MAAVG,OA7lCL6B,EA6lCkC7B,EAAOH,GA4uJ7BiiC,CAAS9hC,EAAQH,GAC7B,OAAOo1B,GAAa11B,GAASA,OA10L7BsC,EA+2LF,IAAI6sB,GAAc5G,GAA+B,SAAS9nB,GACxD,OAAc,MAAVA,EACK,IAETA,EAAShB,GAAOgB,GACTwS,GAAYsV,GAAiB9nB,IAAS,SAASmvB,GACpD,OAAOlI,GAAqBxoB,KAAKuB,EAAQmvB,QANR4S,GAiBjCzT,GAAgBxG,GAA+B,SAAS9nB,GAE1D,IADA,IAAIuQ,EAAS,GACNvQ,GACL0iB,GAAUnS,EAAQme,GAAW1uB,IAC7BA,EAAS+mB,GAAa/mB,GAExB,OAAOuQ,GAN8BwxB,GAgBnC7T,GAAS2D,GA2Eb,SAASmQ,GAAQhiC,EAAQuxB,EAAM0Q,GAO7B,IAJA,IAAI93B,GAAS,EACT1E,GAHJ8rB,EAAOC,GAASD,EAAMvxB,IAGJyF,OACd8K,GAAS,IAEJpG,EAAQ1E,GAAQ,CACvB,IAAI5F,EAAM4xB,GAAMF,EAAKpnB,IACrB,KAAMoG,EAAmB,MAAVvQ,GAAkBiiC,EAAQjiC,EAAQH,IAC/C,MAEFG,EAASA,EAAOH,GAElB,OAAI0Q,KAAYpG,GAAS1E,EAChB8K,KAET9K,EAAmB,MAAVzF,EAAiB,EAAIA,EAAOyF,SAClBy8B,GAASz8B,IAAWymB,GAAQrsB,EAAK4F,KACjDukB,GAAQhqB,IAAW8rB,GAAY9rB,IA6BpC,SAASquB,GAAgBruB,GACvB,MAAqC,mBAAtBA,EAAO4M,aAA8B2oB,GAAYv1B,GAE5D,GADAoqB,GAAWrD,GAAa/mB,IA8E9B,SAASixB,GAAc1xB,GACrB,OAAOyqB,GAAQzqB,IAAUusB,GAAYvsB,OAChC4nB,IAAoB5nB,GAASA,EAAM4nB,KAW1C,SAAS+E,GAAQ3sB,EAAOkG,GACtB,IAAI7E,SAAcrB,EAGlB,SAFAkG,EAAmB,MAAVA,EAjjMU,iBAijM0BA,KAGlC,UAAR7E,GACU,UAARA,GAAoBgd,GAAS9R,KAAKvM,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQkG,EAajD,SAASo3B,GAAet9B,EAAO4K,EAAOnK,GACpC,IAAK8C,GAAS9C,GACZ,OAAO,EAET,IAAIY,SAAcuJ,EAClB,SAAY,UAARvJ,EACKi1B,GAAY71B,IAAWksB,GAAQ/hB,EAAOnK,EAAOyF,QACrC,UAAR7E,GAAoBuJ,KAASnK,IAE7B2sB,GAAG3sB,EAAOmK,GAAQ5K,GAa7B,SAASy2B,GAAMz2B,EAAOS,GACpB,GAAIgqB,GAAQzqB,GACV,OAAO,EAET,IAAIqB,SAAcrB,EAClB,QAAY,UAARqB,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAATrB,IAAiBqxB,GAASrxB,MAGvBmd,EAAc5Q,KAAKvM,KAAWkd,EAAa3Q,KAAKvM,IAC1C,MAAVS,GAAkBT,KAASP,GAAOgB,IAyBvC,SAASm+B,GAAW9xB,GAClB,IAAI4xB,EAAWD,GAAY3xB,GACvB8lB,EAAQrI,GAAOmU,GAEnB,GAAoB,mBAAT9L,KAAyB8L,KAAYhU,GAAY/pB,WAC1D,OAAO,EAET,GAAImM,IAAS8lB,EACX,OAAO,EAET,IAAI/vB,EAAO87B,GAAQ/L,GACnB,QAAS/vB,GAAQiK,IAASjK,EAAK,IA7S5BkQ,IAAY4b,GAAO,IAAI5b,GAAS,IAAIF,YAAY,MAAQiJ,GACxDwN,IAAOqF,GAAO,IAAIrF,KAAQjO,GAC1BkO,IAxzLU,oBAwzLCoF,GAAOpF,GAAQqZ,YAC1BpZ,IAAOmF,GAAO,IAAInF,KAAQ/N,GAC1BgO,IAAWkF,GAAO,IAAIlF,KAAY7N,KACrC+S,GAAS,SAAS3uB,GAChB,IAAIgR,EAASshB,GAAWtyB,GACpBqvB,EAAOre,GAAUuK,EAAYvb,EAAMqN,iBA15LzC/K,EA25LMugC,EAAaxT,EAAOvF,GAASuF,GAAQ,GAEzC,GAAIwT,EACF,OAAQA,GACN,KAAKhZ,GAAoB,OAAO/N,EAChC,KAAKiO,GAAe,OAAO1O,EAC3B,KAAK2O,GAAmB,MAp0LjB,mBAq0LP,KAAKC,GAAe,OAAOxO,EAC3B,KAAKyO,GAAmB,OAAOtO,EAGnC,OAAO5K,IA+SX,IAAI8xB,GAAajc,GAAajb,GAAam3B,GAS3C,SAAS/M,GAAYh2B,GACnB,IAAIqvB,EAAOrvB,GAASA,EAAMqN,YAG1B,OAAOrN,KAFqB,mBAARqvB,GAAsBA,EAAK1uB,WAAcimB,IAa/D,SAAS8P,GAAmB12B,GAC1B,OAAOA,GAAUA,IAAUuD,GAASvD,GAYtC,SAASw2B,GAAwBl2B,EAAKk1B,GACpC,OAAO,SAAS/0B,GACd,OAAc,MAAVA,IAGGA,EAAOH,KAASk1B,SA/vMzBlzB,IAgwMKkzB,GAA2Bl1B,KAAOb,GAAOgB,MAsIhD,SAASq4B,GAAShsB,EAAMmK,EAAOwO,GAE7B,OADAxO,EAAQ6R,QAv4MRxmB,IAu4MkB2U,EAAuBnK,EAAK5G,OAAS,EAAK+Q,EAAO,GAC5D,WAML,IALA,IAAIxQ,EAAOtB,UACPyF,GAAS,EACT1E,EAAS4iB,GAAUriB,EAAKP,OAAS+Q,EAAO,GACxCwL,EAAQ3d,EAAMoB,KAET0E,EAAQ1E,GACfuc,EAAM7X,GAASnE,EAAKwQ,EAAQrM,GAE9BA,GAAS,EAET,IADA,IAAIo4B,EAAYl+B,EAAMmS,EAAQ,KACrBrM,EAAQqM,GACf+rB,EAAUp4B,GAASnE,EAAKmE,GAG1B,OADAo4B,EAAU/rB,GAASwO,EAAUhD,GACtBvd,GAAM4H,EAAMhK,KAAMkgC,IAY7B,SAASxP,GAAO/yB,EAAQuxB,GACtB,OAAOA,EAAK9rB,OAAS,EAAIzF,EAASsxB,GAAQtxB,EAAQ64B,GAAUtH,EAAM,GAAI,IAaxE,SAAS4N,GAAQnd,EAAO+V,GAKtB,IAJA,IAAI2J,EAAY1f,EAAMvc,OAClBA,EAAS8iB,GAAUwP,EAAQtyB,OAAQi8B,GACnCc,EAAWjW,GAAUvK,GAElBvc,KAAU,CACf,IAAI0E,EAAQ4tB,EAAQtyB,GACpBuc,EAAMvc,GAAUymB,GAAQ/hB,EAAOu3B,GAAac,EAASr4B,QAx7MvDtI,EA07MA,OAAOmgB,EAWT,SAASsU,GAAQt2B,EAAQH,GACvB,IAAY,gBAARA,GAAgD,mBAAhBG,EAAOH,KAIhC,aAAPA,EAIJ,OAAOG,EAAOH,GAiBhB,IAAI0gC,GAAUkC,GAAShK,IAUnBnsB,GAAaqb,IAAiB,SAAStb,EAAMsjB,GAC/C,OAAOpP,GAAKjU,WAAWD,EAAMsjB,IAW3ByI,GAAcqK,GAAS/J,IAY3B,SAAS8H,GAAgB/nB,EAASiqB,EAAW/U,GAC3C,IAAI9sB,EAAU6hC,EAAY,GAC1B,OAAOtK,GAAY3f,EA1brB,SAA2B5X,EAAQ8hC,GACjC,IAAIl9B,EAASk9B,EAAQl9B,OACrB,IAAKA,EACH,OAAO5E,EAET,IAAIwkB,EAAY5f,EAAS,EAGzB,OAFAk9B,EAAQtd,IAAc5f,EAAS,EAAI,KAAO,IAAMk9B,EAAQtd,GACxDsd,EAAUA,EAAQv3B,KAAK3F,EAAS,EAAI,KAAO,KACpC5E,EAAO+K,QAAQqR,EAAe,uBAAyB0lB,EAAU,UAkb5CC,CAAkB/hC,EAqHhD,SAA2B8hC,EAAShV,GAOlC,OANAxL,GAAU/H,GAAW,SAASumB,GAC5B,IAAIphC,EAAQ,KAAOohC,EAAK,GACnBhT,EAAUgT,EAAK,KAAQ9tB,GAAc8vB,EAASpjC,IACjDojC,EAAQl7B,KAAKlI,MAGVojC,EAAQ/uB,OA5HuCivB,CAtjBxD,SAAwBhiC,GACtB,IAAI2kB,EAAQ3kB,EAAO2kB,MAAMtI,GACzB,OAAOsI,EAAQA,EAAM,GAAGza,MAAMoS,GAAkB,GAojBwB2lB,CAAejiC,GAAS8sB,KAYlG,SAAS8U,GAASp2B,GAChB,IAAIvE,EAAQ,EACRi7B,EAAa,EAEjB,OAAO,WACL,IAAIC,EAAQxa,KACRya,EAr+MK,IAq+MmBD,EAAQD,GAGpC,GADAA,EAAaC,EACTC,EAAY,GACd,KAAMn7B,GA1+ME,IA2+MN,OAAOpD,UAAU,QAGnBoD,EAAQ,EAEV,OAAOuE,EAAK5H,WA/hNd5C,EA+hN+B6C,YAYjC,SAAS4nB,GAAYtK,EAAO8C,GAC1B,IAAI3a,GAAS,EACT1E,EAASuc,EAAMvc,OACf4f,EAAY5f,EAAS,EAGzB,IADAqf,OAhjNAjjB,IAgjNOijB,EAAqBrf,EAASqf,IAC5B3a,EAAQ2a,GAAM,CACrB,IAAIoe,EAAO9W,GAAWjiB,EAAOkb,GACzB9lB,EAAQyiB,EAAMkhB,GAElBlhB,EAAMkhB,GAAQlhB,EAAM7X,GACpB6X,EAAM7X,GAAS5K,EAGjB,OADAyiB,EAAMvc,OAASqf,EACR9C,EAUT,IAAIgZ,GAvTJ,SAAuB3uB,GACrB,IAAIkE,EAAS4yB,GAAQ92B,GAAM,SAASxM,GAIlC,OAjwMiB,MA8vMbokB,EAAMa,MACRb,EAAMiH,QAEDrrB,KAGLokB,EAAQ1T,EAAO0T,MACnB,OAAO1T,EA8SU6yB,EAAc,SAAS53B,GACxC,IAAI+E,EAAS,GAOb,OAN6B,KAAzB/E,EAAO63B,WAAW,IACpB9yB,EAAO9I,KAAK,IAEd+D,EAAOI,QAAQ+Q,GAAY,SAAS6I,EAAO+H,EAAQ+V,EAAOC,GACxDhzB,EAAO9I,KAAK67B,EAAQC,EAAU33B,QAAQyR,GAAc,MAASkQ,GAAU/H,MAElEjV,KAUT,SAASkhB,GAAMlyB,GACb,GAAoB,iBAATA,GAAqBqxB,GAASrxB,GACvC,OAAOA,EAET,IAAIgR,EAAUhR,EAAQ,GACtB,MAAkB,KAAVgR,GAAkB,EAAIhR,IAliNnB,IAkiN0C,KAAOgR,EAU9D,SAAS8Y,GAAShd,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOga,GAAa5nB,KAAK4N,GACzB,MAAOxJ,IACT,IACE,OAAQwJ,EAAO,GACf,MAAOxJ,KAEX,MAAO,GA4BT,SAASsnB,GAAa1R,GACpB,GAAIA,aAAmBwR,GACrB,OAAOxR,EAAQ+qB,QAEjB,IAAIjzB,EAAS,IAAI2Z,GAAczR,EAAQ8R,YAAa9R,EAAQgS,WAI5D,OAHAla,EAAOia,YAAc+B,GAAU9T,EAAQ+R,aACvCja,EAAOma,UAAajS,EAAQiS,UAC5Bna,EAAOoa,WAAalS,EAAQkS,WACrBpa,EAsIT,IAAIkzB,GAAatL,IAAS,SAASnW,EAAOhP,GACxC,OAAOyjB,GAAkBzU,GACrB4N,GAAe5N,EAAO8O,GAAY9d,EAAQ,EAAGyjB,IAAmB,IAChE,MA6BFiN,GAAevL,IAAS,SAASnW,EAAOhP,GAC1C,IAAIiP,EAAW+Q,GAAKhgB,GAIpB,OAHIyjB,GAAkBxU,KACpBA,OA1zNFpgB,GA4zNO40B,GAAkBzU,GACrB4N,GAAe5N,EAAO8O,GAAY9d,EAAQ,EAAGyjB,IAAmB,GAAOQ,GAAYhV,EAAU,IAC7F,MA0BF0hB,GAAiBxL,IAAS,SAASnW,EAAOhP,GAC5C,IAAIwP,EAAawQ,GAAKhgB,GAItB,OAHIyjB,GAAkBjU,KACpBA,OA31NF3gB,GA61NO40B,GAAkBzU,GACrB4N,GAAe5N,EAAO8O,GAAY9d,EAAQ,EAAGyjB,IAAmB,QA91NpE50B,EA81NsF2gB,GAClF,MAsON,SAAS1L,GAAUkL,EAAOnL,EAAWqM,GACnC,IAAIzd,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI0E,EAAqB,MAAb+Y,EAAoB,EAAI9f,GAAU8f,GAI9C,OAHI/Y,EAAQ,IACVA,EAAQke,GAAU5iB,EAAS0E,EAAO,IAE7B8Y,GAAcjB,EAAOiV,GAAYpgB,EAAW,GAAI1M,GAsCzD,SAASy5B,GAAc5hB,EAAOnL,EAAWqM,GACvC,IAAIzd,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI0E,EAAQ1E,EAAS,EAOrB,YAhoOA5D,IA0nOIqhB,IACF/Y,EAAQ/G,GAAU8f,GAClB/Y,EAAQ+Y,EAAY,EAChBmF,GAAU5iB,EAAS0E,EAAO,GAC1Boe,GAAUpe,EAAO1E,EAAS,IAEzBwd,GAAcjB,EAAOiV,GAAYpgB,EAAW,GAAI1M,GAAO,GAiBhE,SAASy3B,GAAQ5f,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAMvc,QACvBqrB,GAAY9O,EAAO,GAAK,GAgG1C,SAAS6hB,GAAK7hB,GACZ,OAAQA,GAASA,EAAMvc,OAAUuc,EAAM,QApvOvCngB,EA8zOF,IAAIiiC,GAAe3L,IAAS,SAAS5F,GACnC,IAAIwR,EAASthB,GAAS8P,EAAQuI,IAC9B,OAAQiJ,EAAOt+B,QAAUs+B,EAAO,KAAOxR,EAAO,GAC1CD,GAAiByR,GACjB,MA0BFC,GAAiB7L,IAAS,SAAS5F,GACrC,IAAItQ,EAAW+Q,GAAKT,GAChBwR,EAASthB,GAAS8P,EAAQuI,IAO9B,OALI7Y,IAAa+Q,GAAK+Q,GACpB9hB,OAj2OFpgB,EAm2OEkiC,EAAO35B,MAED25B,EAAOt+B,QAAUs+B,EAAO,KAAOxR,EAAO,GAC1CD,GAAiByR,EAAQ9M,GAAYhV,EAAU,IAC/C,MAwBFgiB,GAAmB9L,IAAS,SAAS5F,GACvC,IAAI/P,EAAawQ,GAAKT,GAClBwR,EAASthB,GAAS8P,EAAQuI,IAM9B,OAJAtY,EAAkC,mBAAdA,EAA2BA,OAn4O/C3gB,IAq4OEkiC,EAAO35B,MAED25B,EAAOt+B,QAAUs+B,EAAO,KAAOxR,EAAO,GAC1CD,GAAiByR,OAx4OrBliC,EAw4OwC2gB,GACpC,MAoCN,SAASwQ,GAAKhR,GACZ,IAAIvc,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAOA,EAASuc,EAAMvc,EAAS,QA/6O/B5D,EAsgPF,IAAIqiC,GAAO/L,GAASgM,IAsBpB,SAASA,GAAQniB,EAAOhP,GACtB,OAAQgP,GAASA,EAAMvc,QAAUuN,GAAUA,EAAOvN,OAC9CoyB,GAAY7V,EAAOhP,GACnBgP,EAqFN,IAAIoiB,GAASxG,IAAS,SAAS5b,EAAO+V,GACpC,IAAItyB,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACnC8K,EAAS6c,GAAOpL,EAAO+V,GAM3B,OAJAD,GAAW9V,EAAOS,GAASsV,GAAS,SAAS5tB,GAC3C,OAAO+hB,GAAQ/hB,EAAO1E,IAAW0E,EAAQA,KACxCyJ,KAAK4jB,KAEDjnB,KA2ET,SAAS8G,GAAQ2K,GACf,OAAgB,MAATA,EAAgBA,EAAQ4G,GAAcnqB,KAAKujB,GAkapD,IAAIqiB,GAAQlM,IAAS,SAAS5F,GAC5B,OAAO2H,GAASpJ,GAAYyB,EAAQ,EAAGkE,IAAmB,OA0BxD6N,GAAUnM,IAAS,SAAS5F,GAC9B,IAAItQ,EAAW+Q,GAAKT,GAIpB,OAHIkE,GAAkBxU,KACpBA,OAxoQFpgB,GA0oQOq4B,GAASpJ,GAAYyB,EAAQ,EAAGkE,IAAmB,GAAOQ,GAAYhV,EAAU,OAwBrFsiB,GAAYpM,IAAS,SAAS5F,GAChC,IAAI/P,EAAawQ,GAAKT,GAEtB,OADA/P,EAAkC,mBAAdA,EAA2BA,OApqQ/C3gB,EAqqQOq4B,GAASpJ,GAAYyB,EAAQ,EAAGkE,IAAmB,QArqQ1D50B,EAqqQ4E2gB,MAgG9E,SAASgiB,GAAMxiB,GACb,IAAMA,IAASA,EAAMvc,OACnB,MAAO,GAET,IAAIA,EAAS,EAOb,OANAuc,EAAQxP,GAAYwP,GAAO,SAASyiB,GAClC,GAAIhO,GAAkBgO,GAEpB,OADAh/B,EAAS4iB,GAAUoc,EAAMh/B,OAAQA,IAC1B,KAGJme,GAAUne,GAAQ,SAAS0E,GAChC,OAAOsY,GAAST,EAAOa,GAAa1Y,OAyBxC,SAASu6B,GAAU1iB,EAAOC,GACxB,IAAMD,IAASA,EAAMvc,OACnB,MAAO,GAET,IAAI8K,EAASi0B,GAAMxiB,GACnB,OAAgB,MAAZC,EACK1R,EAEFkS,GAASlS,GAAQ,SAASk0B,GAC/B,OAAOhgC,GAAMwd,OAnzQfpgB,EAmzQoC4iC,MAwBtC,IAAIE,GAAUxM,IAAS,SAASnW,EAAOhP,GACrC,OAAOyjB,GAAkBzU,GACrB4N,GAAe5N,EAAOhP,GACtB,MAqBF4xB,GAAMzM,IAAS,SAAS5F,GAC1B,OAAOmI,GAAQloB,GAAY+f,EAAQkE,QA0BjCoO,GAAQ1M,IAAS,SAAS5F,GAC5B,IAAItQ,EAAW+Q,GAAKT,GAIpB,OAHIkE,GAAkBxU,KACpBA,OAj4QFpgB,GAm4QO64B,GAAQloB,GAAY+f,EAAQkE,IAAoBQ,GAAYhV,EAAU,OAwB3E6iB,GAAU3M,IAAS,SAAS5F,GAC9B,IAAI/P,EAAawQ,GAAKT,GAEtB,OADA/P,EAAkC,mBAAdA,EAA2BA,OA75Q/C3gB,EA85QO64B,GAAQloB,GAAY+f,EAAQkE,SA95QnC50B,EA85QkE2gB,MAmBhEuiB,GAAM5M,GAASqM,IA6DnB,IAAIQ,GAAU7M,IAAS,SAAS5F,GAC9B,IAAI9sB,EAAS8sB,EAAO9sB,OAChBwc,EAAWxc,EAAS,EAAI8sB,EAAO9sB,EAAS,QAh/Q5C5D,EAm/QA,OADAogB,EAA8B,mBAAZA,GAA0BsQ,EAAOnoB,MAAO6X,QAl/Q1DpgB,EAm/QO6iC,GAAUnS,EAAQtQ,MAkC3B,SAASgjB,GAAM1lC,GACb,IAAIgR,EAASuZ,GAAOvqB,GAEpB,OADAgR,EAAOka,WAAY,EACZla,EAsDT,SAASwtB,GAAKx+B,EAAO2lC,GACnB,OAAOA,EAAY3lC,GAmBrB,IAAI4lC,GAAYvH,IAAS,SAASvQ,GAChC,IAAI5nB,EAAS4nB,EAAM5nB,OACf+Q,EAAQ/Q,EAAS4nB,EAAM,GAAK,EAC5B9tB,EAAQ8C,KAAKkoB,YACb2a,EAAc,SAASllC,GAAU,OAAOotB,GAAOptB,EAAQqtB,IAE3D,QAAI5nB,EAAS,GAAKpD,KAAKmoB,YAAY/kB,SAC7BlG,aAAiB0qB,IAAiBiC,GAAQ1V,KAGhDjX,EAAQA,EAAM6E,MAAMoS,GAAQA,GAAS/Q,EAAS,EAAI,KAC5C+kB,YAAY/iB,KAAK,CACrB,KAAQs2B,GACR,KAAQ,CAACmH,GACT,aAhnRFrjC,IAknRO,IAAIqoB,GAAc3qB,EAAO8C,KAAKooB,WAAWsT,MAAK,SAAS/b,GAI5D,OAHIvc,IAAWuc,EAAMvc,QACnBuc,EAAMva,UApnRV5F,GAsnRSmgB,MAZA3f,KAAK07B,KAAKmH,MA+PrB,IAAIE,GAAU7I,IAAiB,SAAShsB,EAAQhR,EAAOM,GACjDM,GAAe1B,KAAK8R,EAAQ1Q,KAC5B0Q,EAAO1Q,GAET+sB,GAAgBrc,EAAQ1Q,EAAK,MAmIjC,IAAI+W,GAAO6mB,GAAW3mB,IAqBlBuuB,GAAW5H,GAAWmG,IA2G1B,SAAS7sB,GAAQgM,EAAYd,GAE3B,OADW+H,GAAQjH,GAAcZ,GAAY8K,IACjClK,EAAYkU,GAAYhV,EAAU,IAuBhD,SAASqjB,GAAaviB,EAAYd,GAEhC,OADW+H,GAAQjH,GAAcX,GAAiBoO,IACtCzN,EAAYkU,GAAYhV,EAAU,IA0BhD,IAAIsjB,GAAUhJ,IAAiB,SAAShsB,EAAQhR,EAAOM,GACjDM,GAAe1B,KAAK8R,EAAQ1Q,GAC9B0Q,EAAO1Q,GAAK4H,KAAKlI,GAEjBqtB,GAAgBrc,EAAQ1Q,EAAK,CAACN,OAsElC,IAAIimC,GAAYrN,IAAS,SAASpV,EAAYwO,EAAMvrB,GAClD,IAAImE,GAAS,EACTgkB,EAAwB,mBAARoD,EAChBhhB,EAASslB,GAAY9S,GAAc1e,EAAM0e,EAAWtd,QAAU,GAKlE,OAHAwnB,GAASlK,GAAY,SAASxjB,GAC5BgR,IAASpG,GAASgkB,EAAS1pB,GAAM8sB,EAAMhyB,EAAOyG,GAAQ8sB,GAAWvzB,EAAOgyB,EAAMvrB,MAEzEuK,KA+BLk1B,GAAQlJ,IAAiB,SAAShsB,EAAQhR,EAAOM,GACnD+sB,GAAgBrc,EAAQ1Q,EAAKN,MA6C/B,SAAS6X,GAAI2L,EAAYd,GAEvB,OADW+H,GAAQjH,GAAcN,GAAWmT,IAChC7S,EAAYkU,GAAYhV,EAAU,IAkFhD,IAAIyjB,GAAYnJ,IAAiB,SAAShsB,EAAQhR,EAAOM,GACvD0Q,EAAO1Q,EAAM,EAAI,GAAG4H,KAAKlI,MACxB,WAAa,MAAO,CAAC,GAAI,OAmS5B,IAAIomC,GAASxN,IAAS,SAASpV,EAAYgU,GACzC,GAAkB,MAAdhU,EACF,MAAO,GAET,IAAItd,EAASsxB,EAAUtxB,OAMvB,OALIA,EAAS,GAAKo3B,GAAe9Z,EAAYgU,EAAU,GAAIA,EAAU,IACnEA,EAAY,GACHtxB,EAAS,GAAKo3B,GAAe9F,EAAU,GAAIA,EAAU,GAAIA,EAAU,MAC5EA,EAAY,CAACA,EAAU,KAElBD,GAAY/T,EAAY+N,GAAYiG,EAAW,GAAI,OAqBxD5yB,GAAMujB,IAAU,WAClB,OAAOnH,GAAKyF,KAAK7hB,OA0DnB,SAASs6B,GAAIpyB,EAAMtM,EAAG68B,GAGpB,OAFA78B,EAAI68B,OAxxTJ/6B,EAwxTwB9B,EAEjBghC,GAAW10B,EApvTF,SAtChBxK,uBAyxTA9B,EAAKsM,GAAa,MAALtM,EAAasM,EAAK5G,OAAS1F,GAqB1C,SAAS6lC,GAAO7lC,EAAGsM,GACjB,IAAIkE,EACJ,GAAmB,mBAARlE,EACT,MAAM,IAAIrJ,GAAUkX,GAGtB,OADAna,EAAIqD,GAAUrD,GACP,WAOL,QANMA,EAAI,IACRwQ,EAASlE,EAAK5H,MAAMpC,KAAMqC,YAExB3E,GAAK,IACPsM,OAzzTJxK,GA2zTS0O,GAuCX,IAAIzQ,GAAOq4B,IAAS,SAAS9rB,EAAMyV,EAAS0Z,GAC1C,IAAI7N,EAp0Ta,EAq0TjB,GAAI6N,EAAS/1B,OAAQ,CACnB,IAAIg2B,EAAUxW,GAAeuW,EAAUuD,GAAUj/B,KACjD6tB,GAl0TkB,GAo0TpB,OAAOoT,GAAW10B,EAAMshB,EAAS7L,EAAS0Z,EAAUC,MAgDlDoK,GAAU1N,IAAS,SAASn4B,EAAQH,EAAK27B,GAC3C,IAAI7N,EAAUmY,EACd,GAAItK,EAAS/1B,OAAQ,CACnB,IAAIg2B,EAAUxW,GAAeuW,EAAUuD,GAAU8G,KACjDlY,GAx3TkB,GA03TpB,OAAOoT,GAAWlhC,EAAK8tB,EAAS3tB,EAAQw7B,EAAUC,MAsJpD,SAASsK,GAAS15B,EAAMsjB,EAAMqW,GAC5B,IAAIC,EACAC,EACAC,EACA51B,EACA61B,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTtJ,GAAW,EAEf,GAAmB,mBAAR7wB,EACT,MAAM,IAAIrJ,GAAUkX,GAUtB,SAASusB,EAAW5hC,GAClB,IAAImB,EAAOigC,EACPnkB,EAAUokB,EAKd,OAHAD,EAAWC,OA/kUbrkC,EAglUEykC,EAAiBzhC,EACjB0L,EAASlE,EAAK5H,MAAMqd,EAAS9b,GAI/B,SAAS0gC,EAAY7hC,GAMnB,OAJAyhC,EAAiBzhC,EAEjBuhC,EAAU95B,GAAWq6B,EAAchX,GAE5B4W,EAAUE,EAAW5hC,GAAQ0L,EAatC,SAASq2B,EAAa/hC,GACpB,IAAIgiC,EAAoBhiC,EAAOwhC,EAM/B,YA/mUFxkC,IA+mUUwkC,GAA+BQ,GAAqBlX,GACzDkX,EAAoB,GAAOL,GANJ3hC,EAAOyhC,GAM8BH,EAGjE,SAASQ,IACP,IAAI9hC,EAAOV,KACX,GAAIyiC,EAAa/hC,GACf,OAAOiiC,EAAajiC,GAGtBuhC,EAAU95B,GAAWq6B,EA3BvB,SAAuB9hC,GACrB,IAEIkiC,EAAcpX,GAFM9qB,EAAOwhC,GAI/B,OAAOG,EACHje,GAAUwe,EAAaZ,GAJDthC,EAAOyhC,IAK7BS,EAoB+BC,CAAcniC,IAGnD,SAASiiC,EAAajiC,GAKpB,OAJAuhC,OA7nUFvkC,EAioUMq7B,GAAY+I,EACPQ,EAAW5hC,IAEpBohC,EAAWC,OApoUbrkC,EAqoUS0O,GAeT,SAAS02B,IACP,IAAIpiC,EAAOV,KACP+iC,EAAaN,EAAa/hC,GAM9B,GAJAohC,EAAWvhC,UACXwhC,EAAW7jC,KACXgkC,EAAexhC,EAEXqiC,EAAY,CACd,QA7pUJrlC,IA6pUQukC,EACF,OAAOM,EAAYL,GAErB,GAAIG,EAIF,OAFA/e,GAAa2e,GACbA,EAAU95B,GAAWq6B,EAAchX,GAC5B8W,EAAWJ,GAMtB,YA1qUFxkC,IAuqUMukC,IACFA,EAAU95B,GAAWq6B,EAAchX,IAE9Bpf,EAIT,OA3GAof,EAAOwQ,GAASxQ,IAAS,EACrB7sB,GAASkjC,KACXO,IAAYP,EAAQO,QAEpBJ,GADAK,EAAS,YAAaR,GACH3d,GAAU8X,GAAS6F,EAAQG,UAAY,EAAGxW,GAAQwW,EACrEjJ,EAAW,aAAc8I,IAAYA,EAAQ9I,SAAWA,GAoG1D+J,EAAUE,OApCV,gBAxoUAtlC,IAyoUMukC,GACF3e,GAAa2e,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OA7oUvCvkC,GA6qUAolC,EAAUG,MA7BV,WACE,YAjpUFvlC,IAipUSukC,EAAwB71B,EAASu2B,EAAa3iC,OA6BhD8iC,EAqBT,IAAII,GAAQlP,IAAS,SAAS9rB,EAAMrG,GAClC,OAAO0pB,GAAUrjB,EAAM,EAAGrG,MAsBxBshC,GAAQnP,IAAS,SAAS9rB,EAAMsjB,EAAM3pB,GACxC,OAAO0pB,GAAUrjB,EAAM8zB,GAASxQ,IAAS,EAAG3pB,MAqE9C,SAASm9B,GAAQ92B,EAAMk7B,GACrB,GAAmB,mBAARl7B,GAAmC,MAAZk7B,GAAuC,mBAAZA,EAC3D,MAAM,IAAIvkC,GAAUkX,GAEtB,IAAIstB,EAAW,WACb,IAAIxhC,EAAOtB,UACP7E,EAAM0nC,EAAWA,EAAS9iC,MAAMpC,KAAM2D,GAAQA,EAAK,GACnDie,EAAQujB,EAASvjB,MAErB,GAAIA,EAAMtZ,IAAI9K,GACZ,OAAOokB,EAAM9kB,IAAIU,GAEnB,IAAI0Q,EAASlE,EAAK5H,MAAMpC,KAAM2D,GAE9B,OADAwhC,EAASvjB,MAAQA,EAAMnb,IAAIjJ,EAAK0Q,IAAW0T,EACpC1T,GAGT,OADAi3B,EAASvjB,MAAQ,IAAKkf,GAAQsE,OAASpc,IAChCmc,EA0BT,SAASE,GAAO7wB,GACd,GAAwB,mBAAbA,EACT,MAAM,IAAI7T,GAAUkX,GAEtB,OAAO,WACL,IAAIlU,EAAOtB,UACX,OAAQsB,EAAKP,QACX,KAAK,EAAG,OAAQoR,EAAUpY,KAAK4D,MAC/B,KAAK,EAAG,OAAQwU,EAAUpY,KAAK4D,KAAM2D,EAAK,IAC1C,KAAK,EAAG,OAAQ6Q,EAAUpY,KAAK4D,KAAM2D,EAAK,GAAIA,EAAK,IACnD,KAAK,EAAG,OAAQ6Q,EAAUpY,KAAK4D,KAAM2D,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE9D,OAAQ6Q,EAAUpS,MAAMpC,KAAM2D,IAlClCm9B,GAAQsE,MAAQpc,GA2FhB,IAAIsc,GAAW1M,IAAS,SAAS5uB,EAAMu7B,GAKrC,IAAIC,GAJJD,EAAmC,GAArBA,EAAWniC,QAAeukB,GAAQ4d,EAAW,IACvDnlB,GAASmlB,EAAW,GAAI/jB,GAAUoT,OAClCxU,GAASqO,GAAY8W,EAAY,GAAI/jB,GAAUoT,QAEtBxxB,OAC7B,OAAO0yB,IAAS,SAASnyB,GAIvB,IAHA,IAAImE,GAAS,EACT1E,EAAS8iB,GAAUviB,EAAKP,OAAQoiC,KAE3B19B,EAAQ1E,GACfO,EAAKmE,GAASy9B,EAAWz9B,GAAO1L,KAAK4D,KAAM2D,EAAKmE,IAElD,OAAO1F,GAAM4H,EAAMhK,KAAM2D,SAqCzB8hC,GAAU3P,IAAS,SAAS9rB,EAAMmvB,GAEpC,OAAOuF,GAAW10B,EAh6UE,QApCpBxK,EAo8UsD25B,EADxCvW,GAAeuW,EAAUuD,GAAU+I,SAoC/CC,GAAe5P,IAAS,SAAS9rB,EAAMmvB,GAEzC,OAAOuF,GAAW10B,EAp8UQ,QArC1BxK,EAy+U4D25B,EAD9CvW,GAAeuW,EAAUuD,GAAUgJ,SA0B/CC,GAAQpK,IAAS,SAASvxB,EAAM0rB,GAClC,OAAOgJ,GAAW10B,EA59UA,SAvClBxK,gBAmgV0Ek2B,MAia5E,SAASpL,GAAGptB,EAAO4yB,GACjB,OAAO5yB,IAAU4yB,GAAU5yB,GAAUA,GAAS4yB,GAAUA,EA0B1D,IAAI8V,GAAK/H,GAA0BhO,IAyB/BgW,GAAMhI,IAA0B,SAAS3gC,EAAO4yB,GAClD,OAAO5yB,GAAS4yB,KAqBdrG,GAAcmH,GAAgB,WAAa,OAAOvuB,UAApB,IAAsCuuB,GAAkB,SAAS1zB,GACjG,OAAOwqB,GAAaxqB,IAAUY,GAAe1B,KAAKc,EAAO,YACtD0nB,GAAqBxoB,KAAKc,EAAO,WA0BlCyqB,GAAU3lB,EAAM2lB,QAmBhB7I,GAAgBD,GAAoB2C,GAAU3C,IAn4PlD,SAA2B3hB,GACzB,OAAOwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAU6b,GA65PrD,SAASya,GAAYt2B,GACnB,OAAgB,MAATA,GAAiB2iC,GAAS3iC,EAAMkG,UAAY0F,GAAW5L,GA4BhE,SAASk3B,GAAkBl3B,GACzB,OAAOwqB,GAAaxqB,IAAUs2B,GAAYt2B,GA0C5C,IAAIyoB,GAAWD,IAAkBua,GAmB7BjhB,GAASD,GAAayC,GAAUzC,IA9+PpC,SAAoB7hB,GAClB,OAAOwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAUib,GAqpQrD,SAAS2tB,GAAQ5oC,GACf,IAAKwqB,GAAaxqB,GAChB,OAAO,EAET,IAAIkM,EAAMomB,GAAWtyB,GACrB,OAAOkM,GAAOgP,GA3uWF,yBA2uWchP,GACC,iBAAjBlM,EAAM0F,SAA4C,iBAAd1F,EAAMV,OAAqB63B,GAAcn3B,GAkDzF,SAAS4L,GAAW5L,GAClB,IAAKuD,GAASvD,GACZ,OAAO,EAIT,IAAIkM,EAAMomB,GAAWtyB,GACrB,OAAOkM,GAAOiP,GAAWjP,GAAOkP,GAxyWrB,0BAwyW+BlP,GA5xW/B,kBA4xWkDA,EA6B/D,SAAS28B,GAAU7oC,GACjB,MAAuB,iBAATA,GAAqBA,GAAS6D,GAAU7D,GA6BxD,SAAS2iC,GAAS3iC,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA93Wf,iBA05WrB,SAASuD,GAASvD,GAChB,IAAIqB,SAAcrB,EAClB,OAAgB,MAATA,IAA0B,UAARqB,GAA4B,YAARA,GA2B/C,SAASmpB,GAAaxqB,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAoBjC,IAAIgiB,GAAQD,GAAYuC,GAAUvC,IAlwQlC,SAAmB/hB,GACjB,OAAOwqB,GAAaxqB,IAAU2uB,GAAO3uB,IAAUqb,GAm9QjD,SAASytB,GAAS9oC,GAChB,MAAuB,iBAATA,GACXwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAUsb,EA+BjD,SAAS6b,GAAcn3B,GACrB,IAAKwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAUub,EAC/C,OAAO,EAET,IAAIxE,EAAQyQ,GAAaxnB,GACzB,GAAc,OAAV+W,EACF,OAAO,EAET,IAAIsY,EAAOzuB,GAAe1B,KAAK6X,EAAO,gBAAkBA,EAAM1J,YAC9D,MAAsB,mBAARgiB,GAAsBA,aAAgBA,GAClDvI,GAAa5nB,KAAKmwB,IAASlI,GAoB/B,IAAIjF,GAAWD,GAAeqC,GAAUrC,IAl8QxC,SAAsBjiB,GACpB,OAAOwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAUwb,GAm/QrD,IAAI4G,GAAQD,GAAYmC,GAAUnC,IAz+QlC,SAAmBniB,GACjB,OAAOwqB,GAAaxqB,IAAU2uB,GAAO3uB,IAAUyb,GA2/QjD,SAASstB,GAAS/oC,GAChB,MAAuB,iBAATA,IACVyqB,GAAQzqB,IAAUwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAU0b,EAoBpE,SAAS2V,GAASrxB,GAChB,MAAuB,iBAATA,GACXwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAU2b,EAoBjD,IAAI2G,GAAeD,GAAmBiC,GAAUjC,IA7hRhD,SAA0BriB,GACxB,OAAOwqB,GAAaxqB,IAClB2iC,GAAS3iC,EAAMkG,WAAaqa,GAAe+R,GAAWtyB,KAmnR1D,IAAIgpC,GAAKrI,GAA0BvK,IAyB/B6S,GAAMtI,IAA0B,SAAS3gC,EAAO4yB,GAClD,OAAO5yB,GAAS4yB,KA0BlB,SAASsW,GAAQlpC,GACf,IAAKA,EACH,MAAO,GAET,GAAIs2B,GAAYt2B,GACd,OAAO+oC,GAAS/oC,GAASgmB,GAAchmB,GAASgtB,GAAUhtB,GAE5D,GAAI8nB,IAAe9nB,EAAM8nB,IACvB,OA95VN,SAAyBzR,GAIvB,IAHA,IAAIxT,EACAmO,EAAS,KAEJnO,EAAOwT,EAASK,QAAQC,MAC/B3F,EAAO9I,KAAKrF,EAAK7C,OAEnB,OAAOgR,EAu5VIm4B,CAAgBnpC,EAAM8nB,OAE/B,IAAI5b,EAAMyiB,GAAO3uB,GAGjB,OAFWkM,GAAOmP,EAASiK,GAAcpZ,GAAOuP,EAASkK,GAAalS,IAE1DzT,GA0Bd,SAASygC,GAASzgC,GAChB,OAAKA,GAGLA,EAAQ4gC,GAAS5gC,MAtgYN,KAugYeA,KAvgYf,IAEG,uBAsgYAA,EAAQ,GAAK,EAAI,GAGxBA,GAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,EAoCjC,SAAS6D,GAAU7D,GACjB,IAAIgR,EAASyvB,GAASzgC,GAClBopC,EAAYp4B,EAAS,EAEzB,OAAOA,GAAWA,EAAUo4B,EAAYp4B,EAASo4B,EAAYp4B,EAAU,EA8BzE,SAASb,GAASnQ,GAChB,OAAOA,EAAQitB,GAAUppB,GAAU7D,GAAQ,EArkYxB,YAqkY+C,EA0BpE,SAAS4gC,GAAS5gC,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIqxB,GAASrxB,GACX,OAvmYI,IAymYN,GAAIuD,GAASvD,GAAQ,CACnB,IAAI4yB,EAAgC,mBAAjB5yB,EAAMqqB,QAAwBrqB,EAAMqqB,UAAYrqB,EACnEA,EAAQuD,GAASqvB,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAAT5yB,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMqM,QAAQkR,EAAQ,IAC9B,IAAI8rB,EAAWnrB,GAAW3R,KAAKvM,GAC/B,OAAQqpC,GAAYjrB,GAAU7R,KAAKvM,GAC/B4gB,GAAa5gB,EAAM6E,MAAM,GAAIwkC,EAAW,EAAI,GAC3CprB,GAAW1R,KAAKvM,GApnYf,KAonY+BA,EA2BvC,SAASo3B,GAAcp3B,GACrB,OAAO4tB,GAAW5tB,EAAOivB,GAAOjvB,IAsDlC,SAASiR,GAASjR,GAChB,OAAgB,MAATA,EAAgB,GAAK06B,GAAa16B,GAqC3C,IAAIspC,GAASpM,IAAe,SAASz8B,EAAQa,GAC3C,GAAI00B,GAAY10B,IAAWg1B,GAAYh1B,GACrCssB,GAAWtsB,EAAQ2J,GAAK3J,GAASb,QAGnC,IAAK,IAAIH,KAAOgB,EACVV,GAAe1B,KAAKoC,EAAQhB,IAC9BgtB,GAAY7sB,EAAQH,EAAKgB,EAAOhB,OAoClCipC,GAAWrM,IAAe,SAASz8B,EAAQa,GAC7CssB,GAAWtsB,EAAQ2tB,GAAO3tB,GAASb,MAgCjC+oC,GAAetM,IAAe,SAASz8B,EAAQa,EAAQu1B,EAAUxI,GACnET,GAAWtsB,EAAQ2tB,GAAO3tB,GAASb,EAAQ4tB,MA+BzCob,GAAavM,IAAe,SAASz8B,EAAQa,EAAQu1B,EAAUxI,GACjET,GAAWtsB,EAAQ2J,GAAK3J,GAASb,EAAQ4tB,MAoBvCqb,GAAKrL,GAASxQ,IA8DlB,IAAItH,GAAWqS,IAAS,SAASn4B,EAAQ28B,GACvC38B,EAAShB,GAAOgB,GAEhB,IAAImK,GAAS,EACT1E,EAASk3B,EAAQl3B,OACjBm3B,EAAQn3B,EAAS,EAAIk3B,EAAQ,QA3+YjC96B,EAi/YA,IAJI+6B,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClDn3B,EAAS,KAGF0E,EAAQ1E,GAMf,IALA,IAAI5E,EAAS87B,EAAQxyB,GACjB4Z,EAAQyK,GAAO3tB,GACfqoC,GAAc,EACdC,EAAcplB,EAAMte,SAEfyjC,EAAaC,GAAa,CACjC,IAAItpC,EAAMkkB,EAAMmlB,GACZ3pC,EAAQS,EAAOH,SAz/YvBgC,IA2/YQtC,GACCotB,GAAGptB,EAAO4mB,GAAYtmB,MAAUM,GAAe1B,KAAKuB,EAAQH,MAC/DG,EAAOH,GAAOgB,EAAOhB,IAK3B,OAAOG,KAsBLopC,GAAejR,IAAS,SAASnyB,GAEnC,OADAA,EAAKyB,UAzhZL5F,EAyhZqB2/B,IACd/8B,GAAM4kC,QA1hZbxnC,EA0hZmCmE,MAgSrC,SAAS7G,GAAIa,EAAQuxB,EAAMkO,GACzB,IAAIlvB,EAAmB,MAAVvQ,OA3zZb6B,EA2zZ0CyvB,GAAQtxB,EAAQuxB,GAC1D,YA5zZA1vB,IA4zZO0O,EAAuBkvB,EAAelvB,EA4D/C,SAAS2lB,GAAMl2B,EAAQuxB,GACrB,OAAiB,MAAVvxB,GAAkBgiC,GAAQhiC,EAAQuxB,EAAMc,IAqBjD,IAAIiX,GAASlK,IAAe,SAAS7uB,EAAQhR,EAAOM,GACrC,MAATN,GACyB,mBAAlBA,EAAMiR,WACfjR,EAAQknB,GAAqBhoB,KAAKc,IAGpCgR,EAAOhR,GAASM,IACf84B,GAASxD,KA4BRoU,GAAWnK,IAAe,SAAS7uB,EAAQhR,EAAOM,GACvC,MAATN,GACyB,mBAAlBA,EAAMiR,WACfjR,EAAQknB,GAAqBhoB,KAAKc,IAGhCY,GAAe1B,KAAK8R,EAAQhR,GAC9BgR,EAAOhR,GAAOkI,KAAK5H,GAEnB0Q,EAAOhR,GAAS,CAACM,KAElBo3B,IAoBCuS,GAASrR,GAASrF,IA8BtB,SAAStoB,GAAKxK,GACZ,OAAO61B,GAAY71B,GAAU0rB,GAAc1rB,GAAUs1B,GAASt1B,GA0BhE,SAASwuB,GAAOxuB,GACd,OAAO61B,GAAY71B,GAAU0rB,GAAc1rB,GAAQ,GAAQw1B,GAAWx1B,GAuGxE,IAAIypC,GAAQhN,IAAe,SAASz8B,EAAQa,EAAQu1B,GAClDD,GAAUn2B,EAAQa,EAAQu1B,MAkCxBiT,GAAY5M,IAAe,SAASz8B,EAAQa,EAAQu1B,EAAUxI,GAChEuI,GAAUn2B,EAAQa,EAAQu1B,EAAUxI,MAuBlC8b,GAAO9L,IAAS,SAAS59B,EAAQqtB,GACnC,IAAI9c,EAAS,GACb,GAAc,MAAVvQ,EACF,OAAOuQ,EAET,IAAIsd,GAAS,EACbR,EAAQ5K,GAAS4K,GAAO,SAASkE,GAG/B,OAFAA,EAAOC,GAASD,EAAMvxB,GACtB6tB,IAAWA,EAAS0D,EAAK9rB,OAAS,GAC3B8rB,KAETpE,GAAWntB,EAAQuvB,GAAavvB,GAASuQ,GACrCsd,IACFtd,EAASmd,GAAUnd,EAAQo5B,EAAwDlI,KAGrF,IADA,IAAIh8B,EAAS4nB,EAAM5nB,OACZA,KACLwyB,GAAU1nB,EAAQ8c,EAAM5nB,IAE1B,OAAO8K,KA4CT,IAAIwV,GAAO6X,IAAS,SAAS59B,EAAQqtB,GACnC,OAAiB,MAAVrtB,EAAiB,GAtlT1B,SAAkBA,EAAQqtB,GACxB,OAAOsK,GAAW33B,EAAQqtB,GAAO,SAAS9tB,EAAOgyB,GAC/C,OAAO2E,GAAMl2B,EAAQuxB,MAolTMqY,CAAS5pC,EAAQqtB,MAqBhD,SAASwc,GAAO7pC,EAAQ6W,GACtB,GAAc,MAAV7W,EACF,MAAO,GAET,IAAI+jB,EAAQtB,GAAS8M,GAAavvB,IAAS,SAAS8pC,GAClD,MAAO,CAACA,MAGV,OADAjzB,EAAYogB,GAAYpgB,GACjB8gB,GAAW33B,EAAQ+jB,GAAO,SAASxkB,EAAOgyB,GAC/C,OAAO1a,EAAUtX,EAAOgyB,EAAK,OA4IjC,IAAIwY,GAAUlJ,GAAcr2B,IA0BxBw/B,GAAYnJ,GAAcrS,IA4K9B,SAASxb,GAAOhT,GACd,OAAiB,MAAVA,EAAiB,GAAK8jB,GAAW9jB,EAAQwK,GAAKxK,IAkNvD,IAAIiqC,GAAY9M,IAAiB,SAAS5sB,EAAQ25B,EAAM//B,GAEtD,OADA+/B,EAAOA,EAAKn+B,cACLwE,GAAUpG,EAAQggC,GAAWD,GAAQA,MAkB9C,SAASC,GAAW3+B,GAClB,OAAO4+B,GAAW55B,GAAShF,GAAQO,eAqBrC,SAASuxB,GAAO9xB,GAEd,OADAA,EAASgF,GAAShF,KACDA,EAAOI,QAAQiS,GAAS2G,IAAc5Y,QAAQ2T,GAAa,IAsH9E,IAAI8qB,GAAYlN,IAAiB,SAAS5sB,EAAQ25B,EAAM//B,GACtD,OAAOoG,GAAUpG,EAAQ,IAAM,IAAM+/B,EAAKn+B,iBAuBxCu+B,GAAYnN,IAAiB,SAAS5sB,EAAQ25B,EAAM//B,GACtD,OAAOoG,GAAUpG,EAAQ,IAAM,IAAM+/B,EAAKn+B,iBAoBxCw+B,GAAaxN,GAAgB,eA0NjC,IAAIyN,GAAYrN,IAAiB,SAAS5sB,EAAQ25B,EAAM//B,GACtD,OAAOoG,GAAUpG,EAAQ,IAAM,IAAM+/B,EAAKn+B,iBAgE5C,IAAI0+B,GAAYtN,IAAiB,SAAS5sB,EAAQ25B,EAAM//B,GACtD,OAAOoG,GAAUpG,EAAQ,IAAM,IAAMigC,GAAWF,MAkiBlD,IAAIQ,GAAYvN,IAAiB,SAAS5sB,EAAQ25B,EAAM//B,GACtD,OAAOoG,GAAUpG,EAAQ,IAAM,IAAM+/B,EAAKS,iBAoBxCP,GAAarN,GAAgB,eAqBjC,SAASM,GAAM7xB,EAAQo/B,EAAShO,GAI9B,OAHApxB,EAASgF,GAAShF,QAv2dlB3J,KAw2dA+oC,EAAUhO,OAx2dV/6B,EAw2d8B+oC,GAtvblC,SAAwBp/B,GACtB,OAAOmU,GAAiB7T,KAAKN,GAwvblBq/B,CAAer/B,GA5hb5B,SAAsBA,GACpB,OAAOA,EAAOga,MAAM/F,KAAkB,GA2hbFqrB,CAAat/B,GA/ncnD,SAAoBA,GAClB,OAAOA,EAAOga,MAAMpI,KAAgB,GA8ncuB2tB,CAAWv/B,GAE7DA,EAAOga,MAAMolB,IAAY,GA2BlC,IAAII,GAAU7S,IAAS,SAAS9rB,EAAMrG,GACpC,IACE,OAAOvB,GAAM4H,OA14dfxK,EA04dgCmE,GAC9B,MAAOnD,GACP,OAAOslC,GAAQtlC,GAAKA,EAAI,IAAIiC,GAAMjC,OA8BlCooC,GAAUrN,IAAS,SAAS59B,EAAQkrC,GAKtC,OAJA/oB,GAAU+oB,GAAa,SAASrrC,GAC9BA,EAAM4xB,GAAM5xB,GACZ+sB,GAAgB5sB,EAAQH,EAAKC,GAAKE,EAAOH,GAAMG,OAE1CA,KAqGT,SAAS24B,GAASp5B,GAChB,OAAO,WACL,OAAOA,GAkDX,IAAI4rC,GAAOxN,KAuBPyN,GAAYzN,IAAW,GAkB3B,SAASxI,GAAS51B,GAChB,OAAOA,EA6CT,SAAS0iB,GAAS5V,GAChB,OAAO6oB,GAA4B,mBAAR7oB,EAAqBA,EAAOqhB,GAAUrhB,EA1oe/C,IAmuepB,IAAIW,GAASmrB,IAAS,SAAS5G,EAAMvrB,GACnC,OAAO,SAAShG,GACd,OAAO8yB,GAAW9yB,EAAQuxB,EAAMvrB,OA2BhCqlC,GAAWlT,IAAS,SAASn4B,EAAQgG,GACvC,OAAO,SAASurB,GACd,OAAOuB,GAAW9yB,EAAQuxB,EAAMvrB,OAwCpC,SAASslC,GAAMtrC,EAAQa,EAAQmlC,GAC7B,IAAIjiB,EAAQvZ,GAAK3J,GACbqqC,EAAc7Z,GAAcxwB,EAAQkjB,GAEzB,MAAXiiB,GACEljC,GAASjC,KAAYqqC,EAAYzlC,SAAWse,EAAMte,UACtDugC,EAAUnlC,EACVA,EAASb,EACTA,EAASqC,KACT6oC,EAAc7Z,GAAcxwB,EAAQ2J,GAAK3J,KAE3C,IAAIokC,IAAUniC,GAASkjC,IAAY,UAAWA,IAAcA,EAAQf,OAChE9W,EAAShjB,GAAWnL,GAqBxB,OAnBAmiB,GAAU+oB,GAAa,SAASlO,GAC9B,IAAI3wB,EAAOxL,EAAOm8B,GAClBh9B,EAAOg9B,GAAc3wB,EACjB8hB,IACFnuB,EAAOE,UAAU88B,GAAc,WAC7B,IAAI1S,EAAWjoB,KAAKooB,UACpB,GAAIwa,GAAS3a,EAAU,CACrB,IAAI/Z,EAASvQ,EAAOqC,KAAKkoB,aACrBhe,EAAUgE,EAAOia,YAAc+B,GAAUlqB,KAAKmoB,aAIlD,OAFAje,EAAQ9E,KAAK,CAAE,KAAQ4E,EAAM,KAAQ3H,UAAW,QAAW1E,IAC3DuQ,EAAOka,UAAYH,EACZ/Z,EAET,OAAOlE,EAAK5H,MAAMzE,EAAQ0iB,GAAU,CAACrgB,KAAK9C,SAAUmF,iBAKnD1E,EAmCT,SAAS4gC,MAiDT,IAAI2K,GAAO7L,GAAWjd,IA0BlB+oB,GAAY9L,GAAWhtB,IA0BvB+4B,GAAW/L,GAAWjtB,IAwB1B,SAASxS,GAASsxB,GAChB,OAAOyE,GAAMzE,GAAQ1O,GAAa4O,GAAMF,IAt0X1C,SAA0BA,GACxB,OAAO,SAASvxB,GACd,OAAOsxB,GAAQtxB,EAAQuxB,IAo0XwBma,CAAiBna,GAuEpE,IAAIoa,GAAQ5L,KAsCR6L,GAAa7L,IAAY,GAoB7B,SAASgC,KACP,MAAO,GAgBT,SAASO,KACP,OAAO,EA+JT,IAAI9W,GAAM+T,IAAoB,SAASsM,EAAQC,GAC7C,OAAOD,EAASC,IACf,GAuBC58B,GAAOuxB,GAAY,QAiBnBsL,GAASxM,IAAoB,SAASyM,EAAUC,GAClD,OAAOD,EAAWC,IACjB,GAuBC98B,GAAQsxB,GAAY,SAwKxB,IAgaM5/B,GAhaFqrC,GAAW3M,IAAoB,SAAS4M,EAAYC,GACtD,OAAOD,EAAaC,IACnB,GAuBC/yB,GAAQonB,GAAY,SAiBpB4L,GAAW9M,IAAoB,SAAS+M,EAASC,GACnD,OAAOD,EAAUC,IAChB,GAgmBH,OA1iBAziB,GAAO0iB,MAv4MP,SAAezsC,EAAGsM,GAChB,GAAmB,mBAARA,EACT,MAAM,IAAIrJ,GAAUkX,GAGtB,OADAna,EAAIqD,GAAUrD,GACP,WACL,KAAMA,EAAI,EACR,OAAOsM,EAAK5H,MAAMpC,KAAMqC,aAi4M9BolB,GAAO2U,IAAMA,GACb3U,GAAO+e,OAASA,GAChB/e,GAAOgf,SAAWA,GAClBhf,GAAOif,aAAeA,GACtBjf,GAAOkf,WAAaA,GACpBlf,GAAOmf,GAAKA,GACZnf,GAAO8b,OAASA,GAChB9b,GAAOhqB,KAAOA,GACdgqB,GAAOmhB,QAAUA,GACjBnhB,GAAO+b,QAAUA,GACjB/b,GAAO2iB,UAr6KP,WACE,IAAK/nC,UAAUe,OACb,MAAO,GAET,IAAIlG,EAAQmF,UAAU,GACtB,OAAOslB,GAAQzqB,GAASA,EAAQ,CAACA,IAi6KnCuqB,GAAOmb,MAAQA,GACfnb,GAAO4iB,MAn+SP,SAAe1qB,EAAO8C,EAAM8X,GAExB9X,GADG8X,EAAQC,GAAe7a,EAAO8C,EAAM8X,QA5qNzC/6B,IA4qNkDijB,GACzC,EAEAuD,GAAUjlB,GAAU0hB,GAAO,GAEpC,IAAIrf,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,IAAKA,GAAUqf,EAAO,EACpB,MAAO,GAMT,IAJA,IAAI3a,EAAQ,EACRkY,EAAW,EACX9R,EAASlM,EAAMujB,GAAWniB,EAASqf,IAEhC3a,EAAQ1E,GACb8K,EAAO8R,KAAcwW,GAAU7W,EAAO7X,EAAQA,GAAS2a,GAEzD,OAAOvU,GAm9STuZ,GAAO6iB,QAj8SP,SAAiB3qB,GAMf,IALA,IAAI7X,GAAS,EACT1E,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACnC4c,EAAW,EACX9R,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd5K,IACFgR,EAAO8R,KAAc9iB,GAGzB,OAAOgR,GAs7STuZ,GAAO1jB,OA75SP,WACE,IAAIX,EAASf,UAAUe,OACvB,IAAKA,EACH,MAAO,GAMT,IAJA,IAAIO,EAAO3B,EAAMoB,EAAS,GACtBuc,EAAQtd,UAAU,GAClByF,EAAQ1E,EAEL0E,KACLnE,EAAKmE,EAAQ,GAAKzF,UAAUyF,GAE9B,OAAOuY,GAAUsH,GAAQhI,GAASuK,GAAUvK,GAAS,CAACA,GAAQ8O,GAAY9qB,EAAM,KAk5SlF8jB,GAAO8iB,KAlsCP,SAAcxc,GACZ,IAAI3qB,EAAkB,MAAT2qB,EAAgB,EAAIA,EAAM3qB,OACnC45B,EAAapI,KASjB,OAPA7G,EAAS3qB,EAAcgd,GAAS2N,GAAO,SAASuQ,GAC9C,GAAsB,mBAAXA,EAAK,GACd,MAAM,IAAI39B,GAAUkX,GAEtB,MAAO,CAACmlB,EAAWsB,EAAK,IAAKA,EAAK,OAJlB,GAOXxI,IAAS,SAASnyB,GAEvB,IADA,IAAImE,GAAS,IACJA,EAAQ1E,GAAQ,CACvB,IAAIk7B,EAAOvQ,EAAMjmB,GACjB,GAAI1F,GAAMk8B,EAAK,GAAIt+B,KAAM2D,GACvB,OAAOvB,GAAMk8B,EAAK,GAAIt+B,KAAM2D,QAmrCpC8jB,GAAO+iB,SArpCP,SAAkBhsC,GAChB,OA33YF,SAAsBA,GACpB,IAAIkjB,EAAQvZ,GAAK3J,GACjB,OAAO,SAASb,GACd,OAAOyvB,GAAezvB,EAAQa,EAAQkjB,IAw3YjC+oB,CAAapf,GAAU7sB,EAx+dZ,KA6ngBpBipB,GAAO6O,SAAWA,GAClB7O,GAAOsb,QAAUA,GACjBtb,GAAOlqB,OAzsHP,SAAgBM,EAAW6sC,GACzB,IAAIx8B,EAAS6Z,GAAWlqB,GACxB,OAAqB,MAAd6sC,EAAqBx8B,EAAS2c,GAAW3c,EAAQw8B,IAwsH1DjjB,GAAOkjB,MA5sMP,SAASA,EAAM3gC,EAAMqyB,EAAO9B,GAE1B,IAAIrsB,EAASwwB,GAAW10B,EA16TN,OAlClBxK,8BA28TA68B,EAAQ9B,OA38TR/6B,EA28T4B68B,GAG5B,OADAnuB,EAAOgU,YAAcyoB,EAAMzoB,YACpBhU,GAysMTuZ,GAAOmjB,WAhqMP,SAASA,EAAW5gC,EAAMqyB,EAAO9B,GAE/B,IAAIrsB,EAASwwB,GAAW10B,EAt9TA,QAnCxBxK,8BAw/TA68B,EAAQ9B,OAx/TR/6B,EAw/T4B68B,GAG5B,OADAnuB,EAAOgU,YAAc0oB,EAAW1oB,YACzBhU,GA6pMTuZ,GAAOic,SAAWA,GAClBjc,GAAOhE,SAAWA,GAClBgE,GAAOsf,aAAeA,GACtBtf,GAAOud,MAAQA,GACfvd,GAAOwd,MAAQA,GACfxd,GAAO2Z,WAAaA,GACpB3Z,GAAO4Z,aAAeA,GACtB5Z,GAAO6Z,eAAiBA,GACxB7Z,GAAOojB,KArySP,SAAclrB,EAAOjiB,EAAG68B,GACtB,IAAIn3B,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAKA,EAIEozB,GAAU7W,GADjBjiB,EAAK68B,QAh4NL/6B,IAg4Nc9B,EAAmB,EAAIqD,GAAUrD,IACnB,EAAI,EAAIA,EAAG0F,GAH9B,IAmySXqkB,GAAOqjB,UApwSP,SAAmBnrB,EAAOjiB,EAAG68B,GAC3B,IAAIn3B,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAKA,EAKEozB,GAAU7W,EAAO,GADxBjiB,EAAI0F,GADJ1F,EAAK68B,QAl6NL/6B,IAk6Nc9B,EAAmB,EAAIqD,GAAUrD,KAEhB,EAAI,EAAIA,GAJ9B,IAkwSX+pB,GAAOsjB,eAxtSP,SAAwBprB,EAAOnL,GAC7B,OAAQmL,GAASA,EAAMvc,OACnB80B,GAAUvY,EAAOiV,GAAYpgB,EAAW,IAAI,GAAM,GAClD,IAstSNiT,GAAOujB,UAhrSP,SAAmBrrB,EAAOnL,GACxB,OAAQmL,GAASA,EAAMvc,OACnB80B,GAAUvY,EAAOiV,GAAYpgB,EAAW,IAAI,GAC5C,IA8qSNiT,GAAOpT,KA9oSP,SAAcsL,EAAOziB,EAAOiX,EAAOmB,GACjC,IAAIlS,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAKA,GAGD+Q,GAAyB,iBAATA,GAAqBqmB,GAAe7a,EAAOziB,EAAOiX,KACpEA,EAAQ,EACRmB,EAAMlS,GAnuIV,SAAkBuc,EAAOziB,EAAOiX,EAAOmB,GACrC,IAAIlS,EAASuc,EAAMvc,OAWnB,KATA+Q,EAAQpT,GAAUoT,IACN,IACVA,GAASA,EAAQ/Q,EAAS,EAAKA,EAAS+Q,IAE1CmB,OAj0FA9V,IAi0FO8V,GAAqBA,EAAMlS,EAAUA,EAASrC,GAAUuU,IACrD,IACRA,GAAOlS,GAETkS,EAAMnB,EAAQmB,EAAM,EAAIjI,GAASiI,GAC1BnB,EAAQmB,GACbqK,EAAMxL,KAAWjX,EAEnB,OAAOyiB,EAstIAsrB,CAAStrB,EAAOziB,EAAOiX,EAAOmB,IAN5B,IA4oSXmS,GAAOnT,OA9tOP,SAAgBoM,EAAYlM,GAE1B,OADWmT,GAAQjH,GAAcvQ,GAAcqe,IACnC9N,EAAYkU,GAAYpgB,EAAW,KA6tOjDiT,GAAOyjB,QA1oOP,SAAiBxqB,EAAYd,GAC3B,OAAO6O,GAAY1Z,GAAI2L,EAAYd,GAAW,IA0oOhD6H,GAAO0jB,YAnnOP,SAAqBzqB,EAAYd,GAC/B,OAAO6O,GAAY1Z,GAAI2L,EAAYd,GA7/RxB,MAgngBb6H,GAAO2jB,aA3lOP,SAAsB1qB,EAAYd,EAAU8O,GAE1C,OADAA,OA9kSAlvB,IA8kSQkvB,EAAsB,EAAI3tB,GAAU2tB,GACrCD,GAAY1Z,GAAI2L,EAAYd,GAAW8O,IA0lOhDjH,GAAO8X,QAAUA,GACjB9X,GAAO4jB,YAtgSP,SAAqB1rB,GAEnB,OADsB,MAATA,EAAgB,EAAIA,EAAMvc,QACvBqrB,GAAY9O,EA9mOjB,KA8mOoC,IAqgSjD8H,GAAO6jB,aA9+RP,SAAsB3rB,EAAO+O,GAE3B,OADsB,MAAT/O,EAAgB,EAAIA,EAAMvc,QAKhCqrB,GAAY9O,EADnB+O,OAlsOAlvB,IAksOQkvB,EAAsB,EAAI3tB,GAAU2tB,IAFnC,IA4+RXjH,GAAO8jB,KA57LP,SAAcvhC,GACZ,OAAO00B,GAAW10B,EAzsUD,MAqogBnByd,GAAOqhB,KAAOA,GACdrhB,GAAOshB,UAAYA,GACnBthB,GAAO+jB,UA19RP,SAAmBzd,GAKjB,IAJA,IAAIjmB,GAAS,EACT1E,EAAkB,MAAT2qB,EAAgB,EAAIA,EAAM3qB,OACnC8K,EAAS,KAEJpG,EAAQ1E,GAAQ,CACvB,IAAIk7B,EAAOvQ,EAAMjmB,GACjBoG,EAAOowB,EAAK,IAAMA,EAAK,GAEzB,OAAOpwB,GAk9RTuZ,GAAOvlB,UA96GP,SAAmBvE,GACjB,OAAiB,MAAVA,EAAiB,GAAKqxB,GAAcrxB,EAAQwK,GAAKxK,KA86G1D8pB,GAAOgkB,YAp5GP,SAAqB9tC,GACnB,OAAiB,MAAVA,EAAiB,GAAKqxB,GAAcrxB,EAAQwuB,GAAOxuB,KAo5G5D8pB,GAAOyb,QAAUA,GACjBzb,GAAOikB,QA34RP,SAAiB/rB,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAMvc,QACvBozB,GAAU7W,EAAO,GAAI,GAAK,IA04R5C8H,GAAOga,aAAeA,GACtBha,GAAOka,eAAiBA,GACxBla,GAAOma,iBAAmBA,GAC1Bna,GAAOwf,OAASA,GAChBxf,GAAOyf,SAAWA,GAClBzf,GAAO0b,UAAYA,GACnB1b,GAAO7H,SAAWA,GAClB6H,GAAO2b,MAAQA,GACf3b,GAAOtf,KAAOA,GACdsf,GAAO0E,OAASA,GAChB1E,GAAO1S,IAAMA,GACb0S,GAAOkkB,QA7pGP,SAAiBhuC,EAAQiiB,GACvB,IAAI1R,EAAS,GAMb,OALA0R,EAAWgV,GAAYhV,EAAU,GAEjCsO,GAAWvwB,GAAQ,SAAST,EAAOM,EAAKG,GACtC4sB,GAAgBrc,EAAQ0R,EAAS1iB,EAAOM,EAAKG,GAAST,MAEjDgR,GAupGTuZ,GAAOmkB,UAxnGP,SAAmBjuC,EAAQiiB,GACzB,IAAI1R,EAAS,GAMb,OALA0R,EAAWgV,GAAYhV,EAAU,GAEjCsO,GAAWvwB,GAAQ,SAAST,EAAOM,EAAKG,GACtC4sB,GAAgBrc,EAAQ1Q,EAAKoiB,EAAS1iB,EAAOM,EAAKG,OAE7CuQ,GAknGTuZ,GAAOokB,QAlgCP,SAAiBrtC,GACf,OAAOw0B,GAAY3H,GAAU7sB,EA1qeX,KA4qgBpBipB,GAAOqkB,gBAr+BP,SAAyB5c,EAAMwD,GAC7B,OAAOK,GAAoB7D,EAAM7D,GAAUqH,EAxsezB,KA6qgBpBjL,GAAOqZ,QAAUA,GACjBrZ,GAAO2f,MAAQA,GACf3f,GAAOuf,UAAYA,GACnBvf,GAAO9c,OAASA,GAChB8c,GAAOuhB,SAAWA,GAClBvhB,GAAOwhB,MAAQA,GACfxhB,GAAO4d,OAASA,GAChB5d,GAAOskB,OA9yBP,SAAgBruC,GAEd,OADAA,EAAIqD,GAAUrD,GACPo4B,IAAS,SAASnyB,GACvB,OAAO6wB,GAAQ7wB,EAAMjG,OA4yBzB+pB,GAAO4f,KAAOA,GACd5f,GAAOukB,OAt/FP,SAAgBruC,EAAQ6W,GACtB,OAAOgzB,GAAO7pC,EAAQ0nC,GAAOzQ,GAAYpgB,MAs/F3CiT,GAAOjgB,KAh2LP,SAAcwC,GACZ,OAAOu5B,GAAO,EAAGv5B,IAg2LnByd,GAAOwkB,QAx2NP,SAAiBvrB,EAAYgU,EAAWC,EAAQ4F,GAC9C,OAAkB,MAAd7Z,EACK,IAEJiH,GAAQ+M,KACXA,EAAyB,MAAbA,EAAoB,GAAK,CAACA,IAGnC/M,GADLgN,EAAS4F,OA72ST/6B,EA62S6Bm1B,KAE3BA,EAAmB,MAAVA,EAAiB,GAAK,CAACA,IAE3BF,GAAY/T,EAAYgU,EAAWC,KA81N5ClN,GAAOyhB,KAAOA,GACdzhB,GAAO6d,SAAWA,GAClB7d,GAAO0hB,UAAYA,GACnB1hB,GAAO2hB,SAAWA,GAClB3hB,GAAOge,QAAUA,GACjBhe,GAAOie,aAAeA,GACtBje,GAAO4b,UAAYA,GACnB5b,GAAO/D,KAAOA,GACd+D,GAAO+f,OAASA,GAChB/f,GAAO7pB,SAAWA,GAClB6pB,GAAOykB,WA/rBP,SAAoBvuC,GAClB,OAAO,SAASuxB,GACd,OAAiB,MAAVvxB,OA5hfT6B,EA4hfsCyvB,GAAQtxB,EAAQuxB,KA8rBxDzH,GAAOoa,KAAOA,GACdpa,GAAOqa,QAAUA,GACjBra,GAAO0kB,UAnqRP,SAAmBxsB,EAAOhP,EAAQiP,GAChC,OAAQD,GAASA,EAAMvc,QAAUuN,GAAUA,EAAOvN,OAC9CoyB,GAAY7V,EAAOhP,EAAQikB,GAAYhV,EAAU,IACjDD,GAiqRN8H,GAAO2kB,YAvoRP,SAAqBzsB,EAAOhP,EAAQwP,GAClC,OAAQR,GAASA,EAAMvc,QAAUuN,GAAUA,EAAOvN,OAC9CoyB,GAAY7V,EAAOhP,OAxlPvBnR,EAwlP0C2gB,GACtCR,GAqoRN8H,GAAOsa,OAASA,GAChBta,GAAO6hB,MAAQA,GACf7hB,GAAO8hB,WAAaA,GACpB9hB,GAAOke,MAAQA,GACfle,GAAO4kB,OA3tNP,SAAgB3rB,EAAYlM,GAE1B,OADWmT,GAAQjH,GAAcvQ,GAAcqe,IACnC9N,EAAY2kB,GAAOzQ,GAAYpgB,EAAW,MA0tNxDiT,GAAO6kB,OAxkRP,SAAgB3sB,EAAOnL,GACrB,IAAItG,EAAS,GACb,IAAMyR,IAASA,EAAMvc,OACnB,OAAO8K,EAET,IAAIpG,GAAS,EACT4tB,EAAU,GACVtyB,EAASuc,EAAMvc,OAGnB,IADAoR,EAAYogB,GAAYpgB,EAAW,KAC1B1M,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAQyiB,EAAM7X,GACd0M,EAAUtX,EAAO4K,EAAO6X,KAC1BzR,EAAO9I,KAAKlI,GACZw4B,EAAQtwB,KAAK0C,IAIjB,OADA2tB,GAAW9V,EAAO+V,GACXxnB,GAujRTuZ,GAAO8kB,KArsLP,SAAcviC,EAAMmK,GAClB,GAAmB,mBAARnK,EACT,MAAM,IAAIrJ,GAAUkX,GAGtB,OAAOie,GAAS9rB,EADhBmK,OAniVA3U,IAmiVQ2U,EAAsBA,EAAQpT,GAAUoT,KAksLlDsT,GAAOzS,QAAUA,GACjByS,GAAO+kB,WAnrNP,SAAoB9rB,EAAYhjB,EAAG68B,GAOjC,OALE78B,GADG68B,EAAQC,GAAe9Z,EAAYhjB,EAAG68B,QApjT3C/6B,IAojToD9B,GAC9C,EAEAqD,GAAUrD,IAELiqB,GAAQjH,GAAcsJ,GAAkBkM,IACvCxV,EAAYhjB,IA6qN1B+pB,GAAOhhB,IA14FP,SAAa9I,EAAQuxB,EAAMhyB,GACzB,OAAiB,MAAVS,EAAiBA,EAAS43B,GAAQ53B,EAAQuxB,EAAMhyB,IA04FzDuqB,GAAOglB,QA/2FP,SAAiB9uC,EAAQuxB,EAAMhyB,EAAOquB,GAEpC,OADAA,EAAkC,mBAAdA,EAA2BA,OA13a/C/rB,EA23aiB,MAAV7B,EAAiBA,EAAS43B,GAAQ53B,EAAQuxB,EAAMhyB,EAAOquB,IA82FhE9D,GAAOilB,QA7pNP,SAAiBhsB,GAEf,OADWiH,GAAQjH,GAAc0J,GAAemM,IACpC7V,IA4pNd+G,GAAO1lB,MA/gRP,SAAe4d,EAAOxL,EAAOmB,GAC3B,IAAIlS,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAKA,GAGDkS,GAAqB,iBAAPA,GAAmBklB,GAAe7a,EAAOxL,EAAOmB,IAChEnB,EAAQ,EACRmB,EAAMlS,IAGN+Q,EAAiB,MAATA,EAAgB,EAAIpT,GAAUoT,GACtCmB,OAtuPF9V,IAsuPQ8V,EAAoBlS,EAASrC,GAAUuU,IAExCkhB,GAAU7W,EAAOxL,EAAOmB,IAVtB,IA6gRXmS,GAAO6b,OAASA,GAChB7b,GAAOklB,WAv1QP,SAAoBhtB,GAClB,OAAQA,GAASA,EAAMvc,OACnBs0B,GAAe/X,GACf,IAq1QN8H,GAAOmlB,aAl0QP,SAAsBjtB,EAAOC,GAC3B,OAAQD,GAASA,EAAMvc,OACnBs0B,GAAe/X,EAAOiV,GAAYhV,EAAU,IAC5C,IAg0QN6H,GAAO/e,MA//DP,SAAeS,EAAQ2L,EAAW+3B,GAKhC,OAJIA,GAAyB,iBAATA,GAAqBrS,GAAerxB,EAAQ2L,EAAW+3B,KACzE/3B,EAAY+3B,OAjvcdrtC,IAmvcAqtC,OAnvcArtC,IAmvcQqtC,EArrcW,WAqrc8BA,IAAU,IAI3D1jC,EAASgF,GAAShF,MAEQ,iBAAb2L,GACO,MAAbA,IAAsBsK,GAAStK,OAEpCA,EAAY8iB,GAAa9iB,KACPyN,GAAWpZ,GACpB0vB,GAAU3V,GAAc/Z,GAAS,EAAG0jC,GAGxC1jC,EAAOT,MAAMoM,EAAW+3B,GAZtB,IA0/DXplB,GAAOqlB,OAtqLP,SAAgB9iC,EAAMmK,GACpB,GAAmB,mBAARnK,EACT,MAAM,IAAIrJ,GAAUkX,GAGtB,OADA1D,EAAiB,MAATA,EAAgB,EAAI6R,GAAUjlB,GAAUoT,GAAQ,GACjD2hB,IAAS,SAASnyB,GACvB,IAAIgc,EAAQhc,EAAKwQ,GACb+rB,EAAYrH,GAAUl1B,EAAM,EAAGwQ,GAKnC,OAHIwL,GACFU,GAAU6f,EAAWvgB,GAEhBvd,GAAM4H,EAAMhK,KAAMkgC,OA2pL7BzY,GAAOslB,KAjzQP,SAAcptB,GACZ,IAAIvc,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAOA,EAASozB,GAAU7W,EAAO,EAAGvc,GAAU,IAgzQhDqkB,GAAOulB,KApxQP,SAAcrtB,EAAOjiB,EAAG68B,GACtB,OAAM5a,GAASA,EAAMvc,OAIdozB,GAAU7W,EAAO,GADxBjiB,EAAK68B,QAj+PL/6B,IAi+Pc9B,EAAmB,EAAIqD,GAAUrD,IAChB,EAAI,EAAIA,GAH9B,IAmxQX+pB,GAAOwlB,UApvQP,SAAmBttB,EAAOjiB,EAAG68B,GAC3B,IAAIn3B,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,OAAKA,EAKEozB,GAAU7W,GADjBjiB,EAAI0F,GADJ1F,EAAK68B,QAngQL/6B,IAmgQc9B,EAAmB,EAAIqD,GAAUrD,KAEnB,EAAI,EAAIA,EAAG0F,GAJ9B,IAkvQXqkB,GAAOylB,eAxsQP,SAAwBvtB,EAAOnL,GAC7B,OAAQmL,GAASA,EAAMvc,OACnB80B,GAAUvY,EAAOiV,GAAYpgB,EAAW,IAAI,GAAO,GACnD,IAssQNiT,GAAO0lB,UAhqQP,SAAmBxtB,EAAOnL,GACxB,OAAQmL,GAASA,EAAMvc,OACnB80B,GAAUvY,EAAOiV,GAAYpgB,EAAW,IACxC,IA8pQNiT,GAAO2lB,IAnsPP,SAAalwC,EAAO2lC,GAElB,OADAA,EAAY3lC,GACLA,GAksPTuqB,GAAO4lB,SAjnLP,SAAkBrjC,EAAMsjB,EAAMqW,GAC5B,IAAIO,GAAU,EACVrJ,GAAW,EAEf,GAAmB,mBAAR7wB,EACT,MAAM,IAAIrJ,GAAUkX,GAMtB,OAJIpX,GAASkjC,KACXO,EAAU,YAAaP,IAAYA,EAAQO,QAAUA,EACrDrJ,EAAW,aAAc8I,IAAYA,EAAQ9I,SAAWA,GAEnD6I,GAAS15B,EAAMsjB,EAAM,CAC1B,QAAW4W,EACX,QAAW5W,EACX,SAAYuN,KAomLhBpT,GAAOiU,KAAOA,GACdjU,GAAO2e,QAAUA,GACjB3e,GAAOigB,QAAUA,GACjBjgB,GAAOkgB,UAAYA,GACnBlgB,GAAO6lB,OArfP,SAAgBpwC,GACd,OAAIyqB,GAAQzqB,GACHkjB,GAASljB,EAAOkyB,IAElBb,GAASrxB,GAAS,CAACA,GAASgtB,GAAUyO,GAAaxqB,GAASjR,MAkfrEuqB,GAAO6M,cAAgBA,GACvB7M,GAAO9E,UA7yFP,SAAmBhlB,EAAQiiB,EAAUC,GACnC,IAAI0J,EAAQ5B,GAAQhqB,GAChB4vC,EAAYhkB,GAAS5D,GAAShoB,IAAW6hB,GAAa7hB,GAG1D,GADAiiB,EAAWgV,GAAYhV,EAAU,GACd,MAAfC,EAAqB,CACvB,IAAI0M,EAAO5uB,GAAUA,EAAO4M,YAE1BsV,EADE0tB,EACYhkB,EAAQ,IAAIgD,EAAO,GAE1B9rB,GAAS9C,IACFmL,GAAWyjB,GAAQxE,GAAWrD,GAAa/mB,IAG3C,GAMlB,OAHC4vC,EAAYztB,GAAYoO,IAAYvwB,GAAQ,SAAST,EAAO4K,EAAOnK,GAClE,OAAOiiB,EAASC,EAAa3iB,EAAO4K,EAAOnK,MAEtCkiB,GA0xFT4H,GAAO+lB,MAxlLP,SAAexjC,GACb,OAAOoyB,GAAIpyB,EAAM,IAwlLnByd,GAAOua,MAAQA,GACfva,GAAOwa,QAAUA,GACjBxa,GAAOya,UAAYA,GACnBza,GAAOgmB,KAxkQP,SAAc9tB,GACZ,OAAQA,GAASA,EAAMvc,OAAUy0B,GAASlY,GAAS,IAwkQrD8H,GAAOimB,OA9iQP,SAAgB/tB,EAAOC,GACrB,OAAQD,GAASA,EAAMvc,OAAUy0B,GAASlY,EAAOiV,GAAYhV,EAAU,IAAM,IA8iQ/E6H,GAAOkmB,SAvhQP,SAAkBhuB,EAAOQ,GAEvB,OADAA,EAAkC,mBAAdA,EAA2BA,OA9uQ/C3gB,EA+uQQmgB,GAASA,EAAMvc,OAAUy0B,GAASlY,OA/uQ1CngB,EA+uQ4D2gB,GAAc,IAshQ5EsH,GAAOmmB,MAnwFP,SAAejwC,EAAQuxB,GACrB,OAAiB,MAAVvxB,GAAwBi4B,GAAUj4B,EAAQuxB,IAmwFnDzH,GAAO0a,MAAQA,GACf1a,GAAO4a,UAAYA,GACnB5a,GAAOomB,OAvuFP,SAAgBlwC,EAAQuxB,EAAM+I,GAC5B,OAAiB,MAAVt6B,EAAiBA,EAASq6B,GAAWr6B,EAAQuxB,EAAMwJ,GAAaT,KAuuFzExQ,GAAOqmB,WA5sFP,SAAoBnwC,EAAQuxB,EAAM+I,EAAS1M,GAEzC,OADAA,EAAkC,mBAAdA,EAA2BA,OA9jb/C/rB,EA+jbiB,MAAV7B,EAAiBA,EAASq6B,GAAWr6B,EAAQuxB,EAAMwJ,GAAaT,GAAU1M,IA2sFnF9D,GAAO9W,OAASA,GAChB8W,GAAOsmB,SAnpFP,SAAkBpwC,GAChB,OAAiB,MAAVA,EAAiB,GAAK8jB,GAAW9jB,EAAQwuB,GAAOxuB,KAmpFzD8pB,GAAO6a,QAAUA,GACjB7a,GAAOuT,MAAQA,GACfvT,GAAOumB,KA9kLP,SAAc9wC,EAAOkZ,GACnB,OAAOqvB,GAAQ/M,GAAatiB,GAAUlZ,IA8kLxCuqB,GAAO8a,IAAMA,GACb9a,GAAO+a,MAAQA,GACf/a,GAAOgb,QAAUA,GACjBhb,GAAOib,IAAMA,GACbjb,GAAOwmB,UAh1PP,SAAmBvsB,EAAO/Q,GACxB,OAAO2nB,GAAc5W,GAAS,GAAI/Q,GAAU,GAAI6Z,KAg1PlD/C,GAAOymB,cA9zPP,SAAuBxsB,EAAO/Q,GAC5B,OAAO2nB,GAAc5W,GAAS,GAAI/Q,GAAU,GAAI4kB,KA8zPlD9N,GAAOkb,QAAUA,GAGjBlb,GAAO3W,QAAU42B,GACjBjgB,GAAO0mB,UAAYxG,GACnBlgB,GAAO2mB,OAAS3H,GAChBhf,GAAO4mB,WAAa3H,GAGpBuC,GAAMxhB,GAAQA,IAKdA,GAAO0B,IAAMA,GACb1B,GAAOkhB,QAAUA,GACjBlhB,GAAOmgB,UAAYA,GACnBngB,GAAOqgB,WAAaA,GACpBrgB,GAAO5a,KAAOA,GACd4a,GAAO6mB,MAvpFP,SAAepjB,EAAQC,EAAOC,GAa5B,YA9pbA5rB,IAkpbI4rB,IACFA,EAAQD,EACRA,OAppbF3rB,YAspbI4rB,IAEFA,GADAA,EAAQ0S,GAAS1S,KACCA,EAAQA,EAAQ,QAxpbpC5rB,IA0pbI2rB,IAEFA,GADAA,EAAQ2S,GAAS3S,KACCA,EAAQA,EAAQ,GAE7BhB,GAAU2T,GAAS5S,GAASC,EAAOC,IA2oF5C3D,GAAO0Z,MAhiLP,SAAejkC,GACb,OAAOmuB,GAAUnuB,EAlvVI,IAkxgBvBuqB,GAAO8mB,UAv+KP,SAAmBrxC,GACjB,OAAOmuB,GAAUnuB,EAAOoqC,IAu+K1B7f,GAAO+mB,cAx8KP,SAAuBtxC,EAAOquB,GAE5B,OAAOF,GAAUnuB,EAAOoqC,EADxB/b,EAAkC,mBAAdA,EAA2BA,OAp2V/C/rB,IA4ygBFioB,GAAOgnB,UAhgLP,SAAmBvxC,EAAOquB,GAExB,OAAOF,GAAUnuB,EAtxVI,EAqxVrBquB,EAAkC,mBAAdA,EAA2BA,OA7yV/C/rB,IA6ygBFioB,GAAOinB,WA76KP,SAAoB/wC,EAAQa,GAC1B,OAAiB,MAAVA,GAAkB4uB,GAAezvB,EAAQa,EAAQ2J,GAAK3J,KA66K/DipB,GAAOwT,OAASA,GAChBxT,GAAOknB,UAjwCP,SAAmBzxC,EAAOkgC,GACxB,OAAiB,MAATlgC,GAAiBA,GAAUA,EAASkgC,EAAelgC,GAiwC7DuqB,GAAOiiB,OAASA,GAChBjiB,GAAOmnB,SA57EP,SAAkBzlC,EAAQ7J,EAAQqI,GAChCwB,EAASgF,GAAShF,GAClB7J,EAASs4B,GAAat4B,GAEtB,IAAI8D,EAAS+F,EAAO/F,OAKhBkS,EAJJ3N,OA13bAnI,IA03bWmI,EACPvE,EACA+mB,GAAUppB,GAAU4G,GAAW,EAAGvE,GAItC,OADAuE,GAAYrI,EAAO8D,SACA,GAAK+F,EAAOpH,MAAM4F,EAAU2N,IAAQhW,GAk7EzDmoB,GAAO6C,GAAKA,GACZ7C,GAAOonB,OAp5EP,SAAgB1lC,GAEd,OADAA,EAASgF,GAAShF,KACA6Q,EAAmBvQ,KAAKN,GACtCA,EAAOI,QAAQsQ,EAAiBuI,IAChCjZ,GAi5ENse,GAAOqnB,aA/3EP,SAAsB3lC,GAEpB,OADAA,EAASgF,GAAShF,KACAqR,EAAgB/Q,KAAKN,GACnCA,EAAOI,QAAQgR,EAAc,QAC7BpR,GA43ENse,GAAOrT,MA35OP,SAAesM,EAAYlM,EAAW+lB,GACpC,IAAIvwB,EAAO2d,GAAQjH,GAAcrQ,GAAage,GAI9C,OAHIkM,GAASC,GAAe9Z,EAAYlM,EAAW+lB,KACjD/lB,OA75RFhV,GA+5ROwK,EAAK0W,EAAYkU,GAAYpgB,EAAW,KAu5OjDiT,GAAOlT,KAAOA,GACdkT,GAAOhT,UAAYA,GACnBgT,GAAOsnB,QAxvHP,SAAiBpxC,EAAQ6W,GACvB,OAAOiM,GAAY9iB,EAAQi3B,GAAYpgB,EAAW,GAAI0Z,KAwvHxDzG,GAAOub,SAAWA,GAClBvb,GAAO8Z,cAAgBA,GACvB9Z,GAAOunB,YAptHP,SAAqBrxC,EAAQ6W,GAC3B,OAAOiM,GAAY9iB,EAAQi3B,GAAYpgB,EAAW,GAAI4Z,KAotHxD3G,GAAO3a,MAAQA,GACf2a,GAAO/S,QAAUA,GACjB+S,GAAOwb,aAAeA,GACtBxb,GAAOwnB,MAxrHP,SAAetxC,EAAQiiB,GACrB,OAAiB,MAAVjiB,EACHA,EACAkxB,GAAQlxB,EAAQi3B,GAAYhV,EAAU,GAAIuM,KAsrHhD1E,GAAOynB,WAzpHP,SAAoBvxC,EAAQiiB,GAC1B,OAAiB,MAAVjiB,EACHA,EACAoxB,GAAapxB,EAAQi3B,GAAYhV,EAAU,GAAIuM,KAupHrD1E,GAAO0nB,OAxnHP,SAAgBxxC,EAAQiiB,GACtB,OAAOjiB,GAAUuwB,GAAWvwB,EAAQi3B,GAAYhV,EAAU,KAwnH5D6H,GAAO2nB,YA3lHP,SAAqBzxC,EAAQiiB,GAC3B,OAAOjiB,GAAUywB,GAAgBzwB,EAAQi3B,GAAYhV,EAAU,KA2lHjE6H,GAAO3qB,IAAMA,GACb2qB,GAAOme,GAAKA,GACZne,GAAOoe,IAAMA,GACbpe,GAAOnf,IA5+GP,SAAa3K,EAAQuxB,GACnB,OAAiB,MAAVvxB,GAAkBgiC,GAAQhiC,EAAQuxB,EAAMa,KA4+GjDtI,GAAOoM,MAAQA,GACfpM,GAAO+Z,KAAOA,GACd/Z,GAAOqL,SAAWA,GAClBrL,GAAO5S,SA/nOP,SAAkB6L,EAAYxjB,EAAO2jB,EAAW0Z,GAC9C7Z,EAAa8S,GAAY9S,GAAcA,EAAa/P,GAAO+P,GAC3DG,EAAaA,IAAc0Z,EAASx5B,GAAU8f,GAAa,EAE3D,IAAIzd,EAASsd,EAAWtd,OAIxB,OAHIyd,EAAY,IACdA,EAAYmF,GAAU5iB,EAASyd,EAAW,IAErColB,GAASvlB,GACXG,GAAazd,GAAUsd,EAAW/L,QAAQzX,EAAO2jB,IAAc,IAC7Dzd,GAAU6c,GAAYS,EAAYxjB,EAAO2jB,IAAc,GAsnOhE4G,GAAO9S,QA7jSP,SAAiBgL,EAAOziB,EAAO2jB,GAC7B,IAAIzd,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI0E,EAAqB,MAAb+Y,EAAoB,EAAI9f,GAAU8f,GAI9C,OAHI/Y,EAAQ,IACVA,EAAQke,GAAU5iB,EAAS0E,EAAO,IAE7BmY,GAAYN,EAAOziB,EAAO4K,IAqjSnC2f,GAAO4nB,QAroFP,SAAiBnkB,EAAQ/W,EAAOmB,GAS9B,OARAnB,EAAQwpB,GAASxpB,QAxsbjB3U,IAysbI8V,GACFA,EAAMnB,EACNA,EAAQ,GAERmB,EAAMqoB,GAASroB,GA3qVnB,SAAqB4V,EAAQ/W,EAAOmB,GAClC,OAAO4V,GAAUhF,GAAU/R,EAAOmB,IAAQ4V,EAASlF,GAAU7R,EAAOmB,GA6qV7Dg6B,CADPpkB,EAAS4S,GAAS5S,GACS/W,EAAOmB,IA6nFpCmS,GAAO0f,OAASA,GAChB1f,GAAOgC,YAAcA,GACrBhC,GAAOE,QAAUA,GACjBF,GAAO3I,cAAgBA,GACvB2I,GAAO+L,YAAcA,GACrB/L,GAAO2M,kBAAoBA,GAC3B3M,GAAO8nB,UAzuKP,SAAmBryC,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACtBwqB,GAAaxqB,IAAUsyB,GAAWtyB,IAAUgb,GAwuKjDuP,GAAO9B,SAAWA,GAClB8B,GAAOzI,OAASA,GAChByI,GAAO+nB,UAhrKP,SAAmBtyC,GACjB,OAAOwqB,GAAaxqB,IAA6B,IAAnBA,EAAMkhB,WAAmBiW,GAAcn3B,IAgrKvEuqB,GAAOgoB,QA5oKP,SAAiBvyC,GACf,GAAa,MAATA,EACF,OAAO,EAET,GAAIs2B,GAAYt2B,KACXyqB,GAAQzqB,IAA0B,iBAATA,GAA4C,mBAAhBA,EAAM2nB,QAC1Dc,GAASzoB,IAAUsiB,GAAatiB,IAAUusB,GAAYvsB,IAC1D,OAAQA,EAAMkG,OAEhB,IAAIgG,EAAMyiB,GAAO3uB,GACjB,GAAIkM,GAAOmP,GAAUnP,GAAOuP,EAC1B,OAAQzb,EAAMulB,KAEhB,GAAIyQ,GAAYh2B,GACd,OAAQ+1B,GAAS/1B,GAAOkG,OAE1B,IAAK,IAAI5F,KAAON,EACd,GAAIY,GAAe1B,KAAKc,EAAOM,GAC7B,OAAO,EAGX,OAAO,GAwnKTiqB,GAAOioB,QAzlKP,SAAiBxyC,EAAO4yB,GACtB,OAAOe,GAAY3zB,EAAO4yB,IAylK5BrI,GAAOkoB,YAtjKP,SAAqBzyC,EAAO4yB,EAAOvE,GAEjC,IAAIrd,GADJqd,EAAkC,mBAAdA,EAA2BA,OApyW/C/rB,GAqyW0B+rB,EAAWruB,EAAO4yB,QAryW5CtwB,EAsyWA,YAtyWAA,IAsyWO0O,EAAuB2iB,GAAY3zB,EAAO4yB,OAtyWjDtwB,EAsyWmE+rB,KAAgBrd,GAojKrFuZ,GAAOqe,QAAUA,GACjBre,GAAO5B,SA7/JP,SAAkB3oB,GAChB,MAAuB,iBAATA,GAAqB0oB,GAAe1oB,IA6/JpDuqB,GAAO3e,WAAaA,GACpB2e,GAAOse,UAAYA,GACnBte,GAAOoY,SAAWA,GAClBpY,GAAOvI,MAAQA,GACfuI,GAAOmoB,QA7zJP,SAAiBjyC,EAAQa,GACvB,OAAOb,IAAWa,GAAU+zB,GAAY50B,EAAQa,EAAQi1B,GAAaj1B,KA6zJvEipB,GAAOooB,YA1xJP,SAAqBlyC,EAAQa,EAAQ+sB,GAEnC,OADAA,EAAkC,mBAAdA,EAA2BA,OAxkX/C/rB,EAykXO+yB,GAAY50B,EAAQa,EAAQi1B,GAAaj1B,GAAS+sB,IAyxJ3D9D,GAAOvjB,MA1vJP,SAAehH,GAIb,OAAO8oC,GAAS9oC,IAAUA,IAAUA,GAuvJtCuqB,GAAOqoB,SA1tJP,SAAkB5yC,GAChB,GAAI8iC,GAAW9iC,GACb,MAAM,IAAIuF,GAloXM,mEAooXlB,OAAOmwB,GAAa11B,IAutJtBuqB,GAAOsoB,MA3qJP,SAAe7yC,GACb,OAAgB,MAATA,GA2qJTuqB,GAAOuoB,OApsJP,SAAgB9yC,GACd,OAAiB,OAAVA,GAosJTuqB,GAAOue,SAAWA,GAClBve,GAAOhnB,SAAWA,GAClBgnB,GAAOC,aAAeA,GACtBD,GAAO4M,cAAgBA,GACvB5M,GAAOrI,SAAWA,GAClBqI,GAAOwoB,cAxjJP,SAAuB/yC,GACrB,OAAO6oC,GAAU7oC,IAAUA,IA3vXR,kBA2vXsCA,GA3vXtC,kBAmzgBrBuqB,GAAOnI,MAAQA,GACfmI,GAAOwe,SAAWA,GAClBxe,GAAO8G,SAAWA,GAClB9G,GAAOjI,aAAeA,GACtBiI,GAAOyoB,YAt9IP,SAAqBhzC,GACnB,YA35XAsC,IA25XOtC,GAs9ITuqB,GAAO0oB,UAl8IP,SAAmBjzC,GACjB,OAAOwqB,GAAaxqB,IAAU2uB,GAAO3uB,IAAU4b,GAk8IjD2O,GAAO2oB,UA96IP,SAAmBlzC,GACjB,OAAOwqB,GAAaxqB,IAh2XP,oBAg2XiBsyB,GAAWtyB,IA86I3CuqB,GAAO1e,KAx9RP,SAAc4W,EAAO7K,GACnB,OAAgB,MAAT6K,EAAgB,GAAKmG,GAAW1pB,KAAKujB,EAAO7K,IAw9RrD2S,GAAOugB,UAAYA,GACnBvgB,GAAOkJ,KAAOA,GACdlJ,GAAOzW,YA/6RP,SAAqB2O,EAAOziB,EAAO2jB,GACjC,IAAIzd,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAI0E,EAAQ1E,EAKZ,YAj9OA5D,IA68OIqhB,IAEF/Y,GADAA,EAAQ/G,GAAU8f,IACF,EAAImF,GAAU5iB,EAAS0E,EAAO,GAAKoe,GAAUpe,EAAO1E,EAAS,IAExElG,GAAUA,EAhtMrB,SAA2ByiB,EAAOziB,EAAO2jB,GAEvC,IADA,IAAI/Y,EAAQ+Y,EAAY,EACjB/Y,KACL,GAAI6X,EAAM7X,KAAW5K,EACnB,OAAO4K,EAGX,OAAOA,EA0sMDuoC,CAAkB1wB,EAAOziB,EAAO4K,GAChC8Y,GAAcjB,EAAOqB,GAAWlZ,GAAO,IAo6R7C2f,GAAOwgB,UAAYA,GACnBxgB,GAAOygB,WAAaA,GACpBzgB,GAAOye,GAAKA,GACZze,GAAO0e,IAAMA,GACb1e,GAAOxB,IAhfP,SAAatG,GACX,OAAQA,GAASA,EAAMvc,OACnBkrB,GAAa3O,EAAOmT,GAAUjD,SA74flCrwB,GA43gBFioB,GAAO6oB,MApdP,SAAe3wB,EAAOC,GACpB,OAAQD,GAASA,EAAMvc,OACnBkrB,GAAa3O,EAAOiV,GAAYhV,EAAU,GAAIiQ,SA16flDrwB,GA63gBFioB,GAAO8oB,KAjcP,SAAc5wB,GACZ,OAAOuB,GAASvB,EAAOmT,KAiczBrL,GAAO+oB,OAvaP,SAAgB7wB,EAAOC,GACrB,OAAOsB,GAASvB,EAAOiV,GAAYhV,EAAU,KAua/C6H,GAAOzmB,IAlZP,SAAa2e,GACX,OAAQA,GAASA,EAAMvc,OACnBkrB,GAAa3O,EAAOmT,GAAUQ,SA/+flC9zB,GAg4gBFioB,GAAOgpB,MAtXP,SAAe9wB,EAAOC,GACpB,OAAQD,GAASA,EAAMvc,OACnBkrB,GAAa3O,EAAOiV,GAAYhV,EAAU,GAAI0T,SA5ggBlD9zB,GAi4gBFioB,GAAOiY,UAAYA,GACnBjY,GAAOwY,UAAYA,GACnBxY,GAAOipB,WAztBP,WACE,MAAO,IAytBTjpB,GAAOkpB,WAzsBP,WACE,MAAO,IAysBTlpB,GAAOmpB,SAzrBP,WACE,OAAO,GAyrBTnpB,GAAOoiB,SAAWA,GAClBpiB,GAAOopB,IA55RP,SAAalxB,EAAOjiB,GAClB,OAAQiiB,GAASA,EAAMvc,OAAUoxB,GAAQ7U,EAAO5e,GAAUrD,SA5+O1D8B,GAw4gBFioB,GAAOqpB,WAvhCP,WAIE,OAHI5yB,GAAKqF,IAAMvjB,OACbke,GAAKqF,EAAIe,IAEJtkB,MAohCTynB,GAAO8W,KAAOA,GACd9W,GAAO3lB,IAAMA,GACb2lB,GAAOspB,IAp3EP,SAAa5nC,EAAQ/F,EAAQo6B,GAC3Br0B,EAASgF,GAAShF,GAGlB,IAAI6nC,GAFJ5tC,EAASrC,GAAUqC,IAEM2f,GAAW5Z,GAAU,EAC9C,IAAK/F,GAAU4tC,GAAa5tC,EAC1B,OAAO+F,EAET,IAAI4tB,GAAO3zB,EAAS4tC,GAAa,EACjC,OACEzT,GAAc/X,GAAYuR,GAAMyG,GAChCr0B,EACAo0B,GAAchY,GAAWwR,GAAMyG,IAy2EnC/V,GAAOwpB,OA90EP,SAAgB9nC,EAAQ/F,EAAQo6B,GAC9Br0B,EAASgF,GAAShF,GAGlB,IAAI6nC,GAFJ5tC,EAASrC,GAAUqC,IAEM2f,GAAW5Z,GAAU,EAC9C,OAAQ/F,GAAU4tC,EAAY5tC,EACzB+F,EAASo0B,GAAcn6B,EAAS4tC,EAAWxT,GAC5Cr0B,GAw0ENse,GAAOypB,SA9yEP,SAAkB/nC,EAAQ/F,EAAQo6B,GAChCr0B,EAASgF,GAAShF,GAGlB,IAAI6nC,GAFJ5tC,EAASrC,GAAUqC,IAEM2f,GAAW5Z,GAAU,EAC9C,OAAQ/F,GAAU4tC,EAAY5tC,EACzBm6B,GAAcn6B,EAAS4tC,EAAWxT,GAASr0B,EAC5CA,GAwyENse,GAAO1J,SA7wEP,SAAkB5U,EAAQgoC,EAAO5W,GAM/B,OALIA,GAAkB,MAAT4W,EACXA,EAAQ,EACCA,IACTA,GAASA,GAEJ/qB,GAAejY,GAAShF,GAAQI,QAAQmR,EAAa,IAAKy2B,GAAS,IAwwE5E1pB,GAAOnB,OA7pFP,SAAgB6E,EAAOC,EAAOgmB,GA2B5B,GA1BIA,GAA+B,kBAAZA,GAAyB5W,GAAerP,EAAOC,EAAOgmB,KAC3EhmB,EAAQgmB,OApvbV5xC,YAsvbI4xC,IACkB,kBAAThmB,GACTgmB,EAAWhmB,EACXA,OAzvbJ5rB,GA2vb2B,kBAAT2rB,IACdimB,EAAWjmB,EACXA,OA7vbJ3rB,aAgwbI2rB,QAhwbJ3rB,IAgwb2B4rB,GACzBD,EAAQ,EACRC,EAAQ,IAGRD,EAAQwS,GAASxS,QArwbnB3rB,IAswbM4rB,GACFA,EAAQD,EACRA,EAAQ,GAERC,EAAQuS,GAASvS,IAGjBD,EAAQC,EAAO,CACjB,IAAIimB,EAAOlmB,EACXA,EAAQC,EACRA,EAAQimB,EAEV,GAAID,GAAYjmB,EAAQ,GAAKC,EAAQ,EAAG,CACtC,IAAIyV,EAAOxa,KACX,OAAOH,GAAUiF,EAAS0V,GAAQzV,EAAQD,EAAQvN,GAAe,QAAUijB,EAAO,IAAIz9B,OAAS,KAAOgoB,GAExG,OAAOrB,GAAWoB,EAAOC,IA0nF3B3D,GAAOvW,OA/8NP,SAAgBwP,EAAYd,EAAUC,GACpC,IAAI7V,EAAO2d,GAAQjH,GAAczP,GAAcoQ,GAC3Cf,EAAYje,UAAUe,OAAS,EAEnC,OAAO4G,EAAK0W,EAAYkU,GAAYhV,EAAU,GAAIC,EAAaS,EAAWsK,KA48N5EnD,GAAOrW,YAn7NP,SAAqBsP,EAAYd,EAAUC,GACzC,IAAI7V,EAAO2d,GAAQjH,GAAcvP,GAAmBkQ,GAChDf,EAAYje,UAAUe,OAAS,EAEnC,OAAO4G,EAAK0W,EAAYkU,GAAYhV,EAAU,GAAIC,EAAaS,EAAW6N,KAg7N5E1G,GAAO6pB,OAlvEP,SAAgBnoC,EAAQzL,EAAG68B,GAMzB,OAJE78B,GADG68B,EAAQC,GAAerxB,EAAQzL,EAAG68B,QAjqcvC/6B,IAiqcgD9B,GAC1C,EAEAqD,GAAUrD,GAETm4B,GAAW1nB,GAAShF,GAASzL,IA6uEtC+pB,GAAOle,QAvtEP,WACE,IAAI5F,EAAOtB,UACP8G,EAASgF,GAASxK,EAAK,IAE3B,OAAOA,EAAKP,OAAS,EAAI+F,EAASA,EAAOI,QAAQ5F,EAAK,GAAIA,EAAK,KAotEjE8jB,GAAOvZ,OAzmGP,SAAgBvQ,EAAQuxB,EAAMkO,GAG5B,IAAIt1B,GAAS,EACT1E,GAHJ8rB,EAAOC,GAASD,EAAMvxB,IAGJyF,OAOlB,IAJKA,IACHA,EAAS,EACTzF,OApzaF6B,KAszaSsI,EAAQ1E,GAAQ,CACvB,IAAIlG,EAAkB,MAAVS,OAvzad6B,EAuza2C7B,EAAOyxB,GAAMF,EAAKpnB,UAvza7DtI,IAwzaMtC,IACF4K,EAAQ1E,EACRlG,EAAQkgC,GAEVz/B,EAASmL,GAAW5L,GAASA,EAAMd,KAAKuB,GAAUT,EAEpD,OAAOS,GAulGT8pB,GAAOzQ,MAAQA,GACfyQ,GAAOjE,aAAeA,EACtBiE,GAAO8pB,OA73NP,SAAgB7wB,GAEd,OADWiH,GAAQjH,GAAcoJ,GAAcmM,IACnCvV,IA43Nd+G,GAAOhF,KAlzNP,SAAc/B,GACZ,GAAkB,MAAdA,EACF,OAAO,EAET,GAAI8S,GAAY9S,GACd,OAAOulB,GAASvlB,GAAcqC,GAAWrC,GAAcA,EAAWtd,OAEpE,IAAIgG,EAAMyiB,GAAOnL,GACjB,OAAItX,GAAOmP,GAAUnP,GAAOuP,EACnB+H,EAAW+B,KAEbwQ,GAASvS,GAAYtd,QAwyN9BqkB,GAAO0gB,UAAYA,GACnB1gB,GAAOvS,KAlwNP,SAAcwL,EAAYlM,EAAW+lB,GACnC,IAAIvwB,EAAO2d,GAAQjH,GAActQ,GAAYqmB,GAI7C,OAHI8D,GAASC,GAAe9Z,EAAYlM,EAAW+lB,KACjD/lB,OA3pTFhV,GA6pTOwK,EAAK0W,EAAYkU,GAAYpgB,EAAW,KA8vNjDiT,GAAO+pB,YA/pRP,SAAqB7xB,EAAOziB,GAC1B,OAAOw5B,GAAgB/W,EAAOziB,IA+pRhCuqB,GAAOgqB,cAnoRP,SAAuB9xB,EAAOziB,EAAO0iB,GACnC,OAAOoX,GAAkBrX,EAAOziB,EAAO03B,GAAYhV,EAAU,KAmoR/D6H,GAAOiqB,cAhnRP,SAAuB/xB,EAAOziB,GAC5B,IAAIkG,EAAkB,MAATuc,EAAgB,EAAIA,EAAMvc,OACvC,GAAIA,EAAQ,CACV,IAAI0E,EAAQ4uB,GAAgB/W,EAAOziB,GACnC,GAAI4K,EAAQ1E,GAAUknB,GAAG3K,EAAM7X,GAAQ5K,GACrC,OAAO4K,EAGX,OAAQ,GAymRV2f,GAAOkqB,gBAplRP,SAAyBhyB,EAAOziB,GAC9B,OAAOw5B,GAAgB/W,EAAOziB,GAAO,IAolRvCuqB,GAAOmqB,kBAxjRP,SAA2BjyB,EAAOziB,EAAO0iB,GACvC,OAAOoX,GAAkBrX,EAAOziB,EAAO03B,GAAYhV,EAAU,IAAI,IAwjRnE6H,GAAOoqB,kBAriRP,SAA2BlyB,EAAOziB,GAEhC,GADsB,MAATyiB,EAAgB,EAAIA,EAAMvc,OAC3B,CACV,IAAI0E,EAAQ4uB,GAAgB/W,EAAOziB,GAAO,GAAQ,EAClD,GAAIotB,GAAG3K,EAAM7X,GAAQ5K,GACnB,OAAO4K,EAGX,OAAQ,GA8hRV2f,GAAO2gB,UAAYA,GACnB3gB,GAAOqqB,WA9mEP,SAAoB3oC,EAAQ7J,EAAQqI,GAOlC,OANAwB,EAASgF,GAAShF,GAClBxB,EAAuB,MAAZA,EACP,EACAwiB,GAAUppB,GAAU4G,GAAW,EAAGwB,EAAO/F,QAE7C9D,EAASs4B,GAAat4B,GACf6J,EAAOpH,MAAM4F,EAAUA,EAAWrI,EAAO8D,SAAW9D,GAwmE7DmoB,GAAOuiB,SAAWA,GAClBviB,GAAOsqB,IAzUP,SAAapyB,GACX,OAAQA,GAASA,EAAMvc,OACnB+d,GAAQxB,EAAOmT,IACf,GAuUNrL,GAAOuqB,MA7SP,SAAeryB,EAAOC,GACpB,OAAQD,GAASA,EAAMvc,OACnB+d,GAAQxB,EAAOiV,GAAYhV,EAAU,IACrC,GA2SN6H,GAAOwqB,SAhgEP,SAAkB9oC,EAAQw6B,EAASpJ,GAIjC,IAAI2X,EAAWzqB,GAAOoG,iBAElB0M,GAASC,GAAerxB,EAAQw6B,EAASpJ,KAC3CoJ,OA76cFnkC,GA+6cA2J,EAASgF,GAAShF,GAClBw6B,EAAU+C,GAAa,GAAI/C,EAASuO,EAAUhT,IAE9C,IAIIiT,EACAC,EALAC,EAAU3L,GAAa,GAAI/C,EAAQ0O,QAASH,EAASG,QAASnT,IAC9DoT,EAAcnqC,GAAKkqC,GACnBE,EAAgB9wB,GAAW4wB,EAASC,GAIpCxqC,EAAQ,EACR0qC,EAAc7O,EAAQ6O,aAAe/2B,GACrCjd,EAAS,WAGTi0C,EAAe14B,IAChB4pB,EAAQkL,QAAUpzB,IAAWjd,OAAS,IACvCg0C,EAAYh0C,OAAS,KACpBg0C,IAAgBr4B,EAAgBc,GAAeQ,IAAWjd,OAAS,KACnEmlC,EAAQ+O,UAAYj3B,IAAWjd,OAAS,KACzC,KAMEm0C,EAAY,kBACb70C,GAAe1B,KAAKunC,EAAS,cACzBA,EAAQgP,UAAY,IAAIppC,QAAQ,UAAW,KAC3C,6BAA+BiU,GAAmB,KACnD,KAENrU,EAAOI,QAAQkpC,GAAc,SAAStvB,EAAOyvB,EAAaC,EAAkBC,EAAiBC,EAAelgC,GAsB1G,OArBAggC,IAAqBA,EAAmBC,GAGxCt0C,GAAU2K,EAAOpH,MAAM+F,EAAO+K,GAAQtJ,QAAQmS,GAAmB2G,IAG7DuwB,IACFT,GAAa,EACb3zC,GAAU,YAAco0C,EAAc,UAEpCG,IACFX,GAAe,EACf5zC,GAAU,OAASu0C,EAAgB,eAEjCF,IACFr0C,GAAU,iBAAmBq0C,EAAmB,+BAElD/qC,EAAQ+K,EAASsQ,EAAM/f,OAIhB+f,KAGT3kB,GAAU,OAMV,IAAIw0C,EAAWl1C,GAAe1B,KAAKunC,EAAS,aAAeA,EAAQqP,SAC9DA,IACHx0C,EAAS,iBAAmBA,EAAS,SAGvCA,GAAU4zC,EAAe5zC,EAAO+K,QAAQkQ,EAAsB,IAAMjb,GACjE+K,QAAQmQ,EAAqB,MAC7BnQ,QAAQoQ,EAAuB,OAGlCnb,EAAS,aAAew0C,GAAY,OAAS,SAC1CA,EACG,GACA,wBAEJ,qBACCb,EACI,mBACA,KAEJC,EACG,uFAEA,OAEJ5zC,EACA,gBAEF,IAAI0P,EAASy6B,IAAQ,WACnB,OAAOlpC,GAAS6yC,EAAaK,EAAY,UAAYn0C,GAClD4D,WA3gdL5C,EA2gdsB+yC,MAMtB,GADArkC,EAAO1P,OAASA,EACZsnC,GAAQ53B,GACV,MAAMA,EAER,OAAOA,GAm5DTuZ,GAAOxlB,MApsBP,SAAevE,EAAGkiB,GAEhB,IADAliB,EAAIqD,GAAUrD,IACN,GAAKA,EA5qfM,iBA6qfjB,MAAO,GAET,IAAIoK,EA1qfe,WA2qff1E,EAAS8iB,GAAUxoB,EA3qfJ,YA8qfnBA,GA9qfmB,WAirfnB,IADA,IAAIwQ,EAASqT,GAAUne,EAHvBwc,EAAWgV,GAAYhV,MAId9X,EAAQpK,GACfkiB,EAAS9X,GAEX,OAAOoG,GAsrBTuZ,GAAOkW,SAAWA,GAClBlW,GAAO1mB,UAAYA,GACnB0mB,GAAOpa,SAAWA,GAClBoa,GAAOwrB,QA/3DP,SAAiB/1C,GACf,OAAOiR,GAASjR,GAAOwM,eA+3DzB+d,GAAOqW,SAAWA,GAClBrW,GAAOyrB,cAvsIP,SAAuBh2C,GACrB,OAAOA,EACHitB,GAAUppB,GAAU7D,IA/qYL,mCAgrYJ,IAAVA,EAAcA,EAAQ,GAqsI7BuqB,GAAOtZ,SAAWA,GAClBsZ,GAAO0rB,QA12DP,SAAiBj2C,GACf,OAAOiR,GAASjR,GAAOorC,eA02DzB7gB,GAAO2rB,KAj1DP,SAAcjqC,EAAQq0B,EAAOjD,GAE3B,IADApxB,EAASgF,GAAShF,MACHoxB,QAjmdf/6B,IAimdwBg+B,GACtB,OAAOr0B,EAAOI,QAAQkR,EAAQ,IAEhC,IAAKtR,KAAYq0B,EAAQ5F,GAAa4F,IACpC,OAAOr0B,EAET,IAAI2Y,EAAaoB,GAAc/Z,GAC3B4Y,EAAamB,GAAcsa,GAI/B,OAAO3E,GAAU/W,EAHLD,GAAgBC,EAAYC,GAC9BC,GAAcF,EAAYC,GAAc,GAEThZ,KAAK,KAq0DhD0e,GAAO4rB,QA/yDP,SAAiBlqC,EAAQq0B,EAAOjD,GAE9B,IADApxB,EAASgF,GAAShF,MACHoxB,QApodf/6B,IAoodwBg+B,GACtB,OAAOr0B,EAAOI,QAAQoR,EAAW,IAEnC,IAAKxR,KAAYq0B,EAAQ5F,GAAa4F,IACpC,OAAOr0B,EAET,IAAI2Y,EAAaoB,GAAc/Z,GAG/B,OAAO0vB,GAAU/W,EAAY,EAFnBE,GAAcF,EAAYoB,GAAcsa,IAAU,GAEvBz0B,KAAK,KAqyD5C0e,GAAO6rB,UA/wDP,SAAmBnqC,EAAQq0B,EAAOjD,GAEhC,IADApxB,EAASgF,GAAShF,MACHoxB,QArqdf/6B,IAqqdwBg+B,GACtB,OAAOr0B,EAAOI,QAAQmR,EAAa,IAErC,IAAKvR,KAAYq0B,EAAQ5F,GAAa4F,IACpC,OAAOr0B,EAET,IAAI2Y,EAAaoB,GAAc/Z,GAG/B,OAAO0vB,GAAU/W,EAFLD,GAAgBC,EAAYoB,GAAcsa,KAElBz0B,KAAK,KAqwD3C0e,GAAO8rB,SA7tDP,SAAkBpqC,EAAQw6B,GACxB,IAAIvgC,EA5qdmB,GA6qdnBowC,EA5qdqB,MA8qdzB,GAAI/yC,GAASkjC,GAAU,CACrB,IAAI7uB,EAAY,cAAe6uB,EAAUA,EAAQ7uB,UAAYA,EAC7D1R,EAAS,WAAYugC,EAAU5iC,GAAU4iC,EAAQvgC,QAAUA,EAC3DowC,EAAW,aAAc7P,EAAU/L,GAAa+L,EAAQ6P,UAAYA,EAItE,IAAIxC,GAFJ7nC,EAASgF,GAAShF,IAEK/F,OACvB,GAAImf,GAAWpZ,GAAS,CACtB,IAAI2Y,EAAaoB,GAAc/Z,GAC/B6nC,EAAYlvB,EAAW1e,OAEzB,GAAIA,GAAU4tC,EACZ,OAAO7nC,EAET,IAAImM,EAAMlS,EAAS2f,GAAWywB,GAC9B,GAAIl+B,EAAM,EACR,OAAOk+B,EAET,IAAItlC,EAAS4T,EACT+W,GAAU/W,EAAY,EAAGxM,GAAKvM,KAAK,IACnCI,EAAOpH,MAAM,EAAGuT,GAEpB,QAjvdA9V,IAivdIsV,EACF,OAAO5G,EAASslC,EAKlB,GAHI1xB,IACFxM,GAAQpH,EAAO9K,OAASkS,GAEtB8J,GAAStK,IACX,GAAI3L,EAAOpH,MAAMuT,GAAKm+B,OAAO3+B,GAAY,CACvC,IAAIqO,EACAuwB,EAAYxlC,EAMhB,IAJK4G,EAAU7W,SACb6W,EAAYiF,GAAOjF,EAAUtW,OAAQ2P,GAAS+M,GAAQ3a,KAAKuU,IAAc,MAE3EA,EAAUkO,UAAY,EACdG,EAAQrO,EAAUvU,KAAKmzC,IAC7B,IAAIC,EAASxwB,EAAMrb,MAErBoG,EAASA,EAAOnM,MAAM,OAnwd1BvC,IAmwd6Bm0C,EAAuBr+B,EAAMq+B,SAEnD,GAAIxqC,EAAOwL,QAAQijB,GAAa9iB,GAAYQ,IAAQA,EAAK,CAC9D,IAAIxN,EAAQoG,EAAO8C,YAAY8D,GAC3BhN,GAAS,IACXoG,EAASA,EAAOnM,MAAM,EAAG+F,IAG7B,OAAOoG,EAASslC,GAyqDlB/rB,GAAOmsB,SAnpDP,SAAkBzqC,GAEhB,OADAA,EAASgF,GAAShF,KACA2Q,EAAiBrQ,KAAKN,GACpCA,EAAOI,QAAQqQ,EAAe0J,IAC9Bna,GAgpDNse,GAAOosB,SAvpBP,SAAkBC,GAChB,IAAIh0C,IAAOmkB,GACX,OAAO9V,GAAS2lC,GAAUh0C,GAspB5B2nB,GAAO4gB,UAAYA,GACnB5gB,GAAOsgB,WAAaA,GAGpBtgB,GAAOssB,KAAOr/B,GACd+S,GAAOusB,UAAY/Q,GACnBxb,GAAOwsB,MAAQzS,GAEfyH,GAAMxhB,IACAjpB,GAAS,GACb0vB,GAAWzG,IAAQ,SAASzd,EAAM2wB,GAC3B78B,GAAe1B,KAAKqrB,GAAO5pB,UAAW88B,KACzCn8B,GAAOm8B,GAAc3wB,MAGlBxL,IACH,CAAE,OAAS,IAWjBipB,GAAOysB,QA98gBK,UAi9gBZp0B,GAAU,CAAC,OAAQ,UAAW,QAAS,aAAc,UAAW,iBAAiB,SAAS6a,GACxFlT,GAAOkT,GAAYzY,YAAcuF,MAInC3H,GAAU,CAAC,OAAQ,SAAS,SAAS6a,EAAY7yB,GAC/C8f,GAAY/pB,UAAU88B,GAAc,SAASj9B,GAC3CA,OA39gBF8B,IA29gBM9B,EAAkB,EAAIsoB,GAAUjlB,GAAUrD,GAAI,GAElD,IAAIwQ,EAAUlO,KAAKwoB,eAAiB1gB,EAChC,IAAI8f,GAAY5nB,MAChBA,KAAKmhC,QAUT,OARIjzB,EAAOsa,aACTta,EAAOwa,cAAgBxC,GAAUxoB,EAAGwQ,EAAOwa,eAE3Cxa,EAAOya,UAAUvjB,KAAK,CACpB,KAAQ8gB,GAAUxoB,EAv6gBL,YAw6gBb,KAAQi9B,GAAczsB,EAAOqa,QAAU,EAAI,QAAU,MAGlDra,GAGT0Z,GAAY/pB,UAAU88B,EAAa,SAAW,SAASj9B,GACrD,OAAOsC,KAAKgV,UAAU2lB,GAAYj9B,GAAGsX,cAKzC8K,GAAU,CAAC,SAAU,MAAO,cAAc,SAAS6a,EAAY7yB,GAC7D,IAAIvJ,EAAOuJ,EAAQ,EACfqsC,EAj8gBe,GAi8gBJ51C,GA/7gBG,GA+7gByBA,EAE3CqpB,GAAY/pB,UAAU88B,GAAc,SAAS/a,GAC3C,IAAI1R,EAASlO,KAAKmhC,QAMlB,OALAjzB,EAAOua,cAAcrjB,KAAK,CACxB,SAAYwvB,GAAYhV,EAAU,GAClC,KAAQrhB,IAEV2P,EAAOsa,aAAeta,EAAOsa,cAAgB2rB,EACtCjmC,MAKX4R,GAAU,CAAC,OAAQ,SAAS,SAAS6a,EAAY7yB,GAC/C,IAAIssC,EAAW,QAAUtsC,EAAQ,QAAU,IAE3C8f,GAAY/pB,UAAU88B,GAAc,WAClC,OAAO36B,KAAKo0C,GAAU,GAAGl3C,QAAQ,OAKrC4iB,GAAU,CAAC,UAAW,SAAS,SAAS6a,EAAY7yB,GAClD,IAAIusC,EAAW,QAAUvsC,EAAQ,GAAK,SAEtC8f,GAAY/pB,UAAU88B,GAAc,WAClC,OAAO36B,KAAKwoB,aAAe,IAAIZ,GAAY5nB,MAAQA,KAAKq0C,GAAU,OAItEzsB,GAAY/pB,UAAUysC,QAAU,WAC9B,OAAOtqC,KAAKsU,OAAOwe,KAGrBlL,GAAY/pB,UAAU0W,KAAO,SAASC,GACpC,OAAOxU,KAAKsU,OAAOE,GAAWgtB,QAGhC5Z,GAAY/pB,UAAUmlC,SAAW,SAASxuB,GACxC,OAAOxU,KAAKgV,UAAUT,KAAKC,IAG7BoT,GAAY/pB,UAAUslC,UAAYrN,IAAS,SAAS5G,EAAMvrB,GACxD,MAAmB,mBAARurB,EACF,IAAItH,GAAY5nB,MAElBA,KAAK+U,KAAI,SAAS7X,GACvB,OAAOuzB,GAAWvzB,EAAOgyB,EAAMvrB,SAInCikB,GAAY/pB,UAAUwuC,OAAS,SAAS73B,GACtC,OAAOxU,KAAKsU,OAAO+wB,GAAOzQ,GAAYpgB,MAGxCoT,GAAY/pB,UAAUkE,MAAQ,SAASoS,EAAOmB,GAC5CnB,EAAQpT,GAAUoT,GAElB,IAAIjG,EAASlO,KACb,OAAIkO,EAAOsa,eAAiBrU,EAAQ,GAAKmB,EAAM,GACtC,IAAIsS,GAAY1Z,IAErBiG,EAAQ,EACVjG,EAASA,EAAO++B,WAAW94B,GAClBA,IACTjG,EAASA,EAAO28B,KAAK12B,SAtjhBvB3U,IAwjhBI8V,IAEFpH,GADAoH,EAAMvU,GAAUuU,IACD,EAAIpH,EAAO48B,WAAWx1B,GAAOpH,EAAO8+B,KAAK13B,EAAMnB,IAEzDjG,IAGT0Z,GAAY/pB,UAAUqvC,eAAiB,SAAS14B,GAC9C,OAAOxU,KAAKgV,UAAUm4B,UAAU34B,GAAWQ,WAG7C4S,GAAY/pB,UAAUuoC,QAAU,WAC9B,OAAOpmC,KAAKgtC,KAtghBO,aA0ghBrB9e,GAAWtG,GAAY/pB,WAAW,SAASmM,EAAM2wB,GAC/C,IAAI2Z,EAAgB,qCAAqC7qC,KAAKkxB,GAC1D4Z,EAAU,kBAAkB9qC,KAAKkxB,GACjC6Z,EAAa/sB,GAAO8sB,EAAW,QAAwB,QAAd5Z,EAAuB,QAAU,IAAOA,GACjF8Z,EAAeF,GAAW,QAAQ9qC,KAAKkxB,GAEtC6Z,IAGL/sB,GAAO5pB,UAAU88B,GAAc,WAC7B,IAAIz9B,EAAQ8C,KAAKkoB,YACbvkB,EAAO4wC,EAAU,CAAC,GAAKlyC,UACvBqyC,EAASx3C,aAAiB0qB,GAC1BhI,EAAWjc,EAAK,GAChBgxC,EAAUD,GAAU/sB,GAAQzqB,GAE5B2lC,EAAc,SAAS3lC,GACzB,IAAIgR,EAASsmC,EAAWpyC,MAAMqlB,GAAQpH,GAAU,CAACnjB,GAAQyG,IACzD,OAAQ4wC,GAAWtsB,EAAY/Z,EAAO,GAAKA,GAGzCymC,GAAWL,GAAoC,mBAAZ10B,GAA6C,GAAnBA,EAASxc,SAExEsxC,EAASC,GAAU,GAErB,IAAI1sB,EAAWjoB,KAAKooB,UAChBwsB,IAAa50C,KAAKmoB,YAAY/kB,OAC9ByxC,EAAcJ,IAAiBxsB,EAC/B6sB,EAAWJ,IAAWE,EAE1B,IAAKH,GAAgBE,EAAS,CAC5Bz3C,EAAQ43C,EAAW53C,EAAQ,IAAI0qB,GAAY5nB,MAC3C,IAAIkO,EAASlE,EAAK5H,MAAMlF,EAAOyG,GAE/B,OADAuK,EAAOia,YAAY/iB,KAAK,CAAE,KAAQs2B,GAAM,KAAQ,CAACmH,GAAc,aAzmhBnErjC,IA0mhBW,IAAIqoB,GAAc3Z,EAAQ+Z,GAEnC,OAAI4sB,GAAeC,EACV9qC,EAAK5H,MAAMpC,KAAM2D,IAE1BuK,EAASlO,KAAK07B,KAAKmH,GACZgS,EAAeN,EAAUrmC,EAAOhR,QAAQ,GAAKgR,EAAOhR,QAAWgR,QAK1E4R,GAAU,CAAC,MAAO,OAAQ,QAAS,OAAQ,SAAU,YAAY,SAAS6a,GACxE,IAAI3wB,EAAO4Z,GAAW+W,GAClBoa,EAAY,0BAA0BtrC,KAAKkxB,GAAc,MAAQ,OACjE8Z,EAAe,kBAAkBhrC,KAAKkxB,GAE1ClT,GAAO5pB,UAAU88B,GAAc,WAC7B,IAAIh3B,EAAOtB,UACX,GAAIoyC,IAAiBz0C,KAAKooB,UAAW,CACnC,IAAIlrB,EAAQ8C,KAAK9C,QACjB,OAAO8M,EAAK5H,MAAMulB,GAAQzqB,GAASA,EAAQ,GAAIyG,GAEjD,OAAO3D,KAAK+0C,IAAW,SAAS73C,GAC9B,OAAO8M,EAAK5H,MAAMulB,GAAQzqB,GAASA,EAAQ,GAAIyG,UAMrDuqB,GAAWtG,GAAY/pB,WAAW,SAASmM,EAAM2wB,GAC/C,IAAI6Z,EAAa/sB,GAAOkT,GACxB,GAAI6Z,EAAY,CACd,IAAIh3C,EAAMg3C,EAAWh4C,KAAO,GACvBsB,GAAe1B,KAAK0qB,GAAWtpB,KAClCspB,GAAUtpB,GAAO,IAEnBspB,GAAUtpB,GAAK4H,KAAK,CAAE,KAAQu1B,EAAY,KAAQ6Z,QAItD1tB,GAAUkV,QAlphBRx8B,EAgCqB,GAknhB+BhD,MAAQ,CAAC,CAC7D,KAAQ,UACR,UApphBAgD,IAwphBFooB,GAAY/pB,UAAUsjC,MAz5dtB,WACE,IAAIjzB,EAAS,IAAI0Z,GAAY5nB,KAAKkoB,aAOlC,OANAha,EAAOia,YAAc+B,GAAUlqB,KAAKmoB,aACpCja,EAAOqa,QAAUvoB,KAAKuoB,QACtBra,EAAOsa,aAAexoB,KAAKwoB,aAC3Bta,EAAOua,cAAgByB,GAAUlqB,KAAKyoB,eACtCva,EAAOwa,cAAgB1oB,KAAK0oB,cAC5Bxa,EAAOya,UAAYuB,GAAUlqB,KAAK2oB,WAC3Bza,GAk5dT0Z,GAAY/pB,UAAUmX,QAv4dtB,WACE,GAAIhV,KAAKwoB,aAAc,CACrB,IAAIta,EAAS,IAAI0Z,GAAY5nB,MAC7BkO,EAAOqa,SAAW,EAClBra,EAAOsa,cAAe,OAEtBta,EAASlO,KAAKmhC,SACP5Y,UAAY,EAErB,OAAOra,GA+3dT0Z,GAAY/pB,UAAUX,MAp3dtB,WACE,IAAIyiB,EAAQ3f,KAAKkoB,YAAYhrB,QACzB83C,EAAMh1C,KAAKuoB,QACXgB,EAAQ5B,GAAQhI,GAChBs1B,EAAUD,EAAM,EAChB3V,EAAY9V,EAAQ5J,EAAMvc,OAAS,EACnC8xC,EAwoIN,SAAiB/gC,EAAOmB,EAAKiwB,GAC3B,IAAIz9B,GAAS,EACT1E,EAASmiC,EAAWniC,OAExB,OAAS0E,EAAQ1E,GAAQ,CACvB,IAAIrD,EAAOwlC,EAAWz9B,GAClB2a,EAAO1iB,EAAK0iB,KAEhB,OAAQ1iB,EAAKxB,MACX,IAAK,OAAa4V,GAASsO,EAAM,MACjC,IAAK,YAAanN,GAAOmN,EAAM,MAC/B,IAAK,OAAanN,EAAM4Q,GAAU5Q,EAAKnB,EAAQsO,GAAO,MACtD,IAAK,YAAatO,EAAQ6R,GAAU7R,EAAOmB,EAAMmN,IAGrD,MAAO,CAAE,MAAStO,EAAO,IAAOmB,GAvpIrB6/B,CAAQ,EAAG9V,EAAWr/B,KAAK2oB,WAClCxU,EAAQ+gC,EAAK/gC,MACbmB,EAAM4/B,EAAK5/B,IACXlS,EAASkS,EAAMnB,EACfrM,EAAQmtC,EAAU3/B,EAAOnB,EAAQ,EACjCugB,EAAY10B,KAAKyoB,cACjB2sB,EAAa1gB,EAAUtxB,OACvB4c,EAAW,EACXq1B,EAAYnvB,GAAU9iB,EAAQpD,KAAK0oB,eAEvC,IAAKa,IAAW0rB,GAAW5V,GAAaj8B,GAAUiyC,GAAajyC,EAC7D,OAAOg1B,GAAiBzY,EAAO3f,KAAKmoB,aAEtC,IAAIja,EAAS,GAEbwf,EACA,KAAOtqB,KAAY4c,EAAWq1B,GAAW,CAMvC,IAHA,IAAIC,GAAa,EACbp4C,EAAQyiB,EAHZ7X,GAASktC,KAKAM,EAAYF,GAAY,CAC/B,IAAIr1C,EAAO20B,EAAU4gB,GACjB11B,EAAW7f,EAAK6f,SAChBrhB,EAAOwB,EAAKxB,KACZovB,EAAW/N,EAAS1iB,GAExB,GApxDY,GAoxDRqB,EACFrB,EAAQywB,OACH,IAAKA,EAAU,CACpB,GAxxDa,GAwxDTpvB,EACF,SAASmvB,EAET,MAAMA,GAIZxf,EAAO8R,KAAc9iB,EAEvB,OAAOgR,GAy0dTuZ,GAAO5pB,UAAU+oC,GAAK9D,GACtBrb,GAAO5pB,UAAU+kC,MAzgQjB,WACE,OAAOA,GAAM5iC,OAygQfynB,GAAO5pB,UAAU03C,OA5+PjB,WACE,OAAO,IAAI1tB,GAAc7nB,KAAK9C,QAAS8C,KAAKooB,YA4+P9CX,GAAO5pB,UAAU+V,KAn9PjB,gBA7sREpU,IA8sRIQ,KAAKsoB,aACPtoB,KAAKsoB,WAAa8d,GAAQpmC,KAAK9C,UAEjC,IAAI2W,EAAO7T,KAAKqoB,WAAaroB,KAAKsoB,WAAWllB,OAG7C,MAAO,CAAE,KAAQyQ,EAAM,MAFXA,OAltRZrU,EAktR+BQ,KAAKsoB,WAAWtoB,KAAKqoB,eA+8PtDZ,GAAO5pB,UAAUk+B,MA55PjB,SAAsB7+B,GAIpB,IAHA,IAAIgR,EACAwiB,EAAS1wB,KAEN0wB,aAAkB1I,IAAY,CACnC,IAAImZ,EAAQrZ,GAAa4I,GACzByQ,EAAM9Y,UAAY,EAClB8Y,EAAM7Y,gBA5wRR9oB,EA6wRM0O,EACFynB,EAASzN,YAAciZ,EAEvBjzB,EAASizB,EAEX,IAAIxL,EAAWwL,EACfzQ,EAASA,EAAOxI,YAGlB,OADAyN,EAASzN,YAAchrB,EAChBgR,GA44PTuZ,GAAO5pB,UAAUmX,QAr3PjB,WACE,IAAI9X,EAAQ8C,KAAKkoB,YACjB,GAAIhrB,aAAiB0qB,GAAa,CAChC,IAAI5hB,EAAU9I,EAUd,OATI8C,KAAKmoB,YAAY/kB,SACnB4C,EAAU,IAAI4hB,GAAY5nB,QAE5BgG,EAAUA,EAAQgP,WACVmT,YAAY/iB,KAAK,CACvB,KAAQs2B,GACR,KAAQ,CAAC1mB,IACT,aAxzRJxV,IA0zRS,IAAIqoB,GAAc7hB,EAAShG,KAAKooB,WAEzC,OAAOpoB,KAAK07B,KAAK1mB,KAu2PnByS,GAAO5pB,UAAU23C,OAAS/tB,GAAO5pB,UAAU0pB,QAAUE,GAAO5pB,UAAUX,MAt1PtE,WACE,OAAOk7B,GAAiBp4B,KAAKkoB,YAAaloB,KAAKmoB,cAw1PjDV,GAAO5pB,UAAUo2C,MAAQxsB,GAAO5pB,UAAU2jC,KAEtCxc,KACFyC,GAAO5pB,UAAUmnB,IAh8PnB,WACE,OAAOhlB,OAi8PFynB,GAMDjE,GAQNtF,GAAKqF,EAAIA,QAzrhBP/jB,KA6rhBF,aACE,OAAO+jB,IACR,gCAaHnnB,KAAK4D,Q,2QC5shBcy1C,E,WACnB,WAAaC,EAASC,EAAOzrC,I,4FAAS,SACpClK,KAAK01C,QAAUA,EACf11C,KAAK21C,MAAQA,EACb31C,KAAKkK,QAAUA,E,gEAkDCC,GAChB,OAAOnK,KAAKkK,QAAQqK,MAAK,SAAApT,GAAC,OAAgC,IAA5BA,EAAE3E,KAAKmY,QAAQxK,Q,qCAG/ByrC,GAEd,IAAKA,GAAc51C,KAAKF,KAAO81C,EAAW91C,GACxC,OAAO,EAIT,IAAKE,KAAK61C,SACR,OAAO,EAIT,IAAK71C,KAAK81C,gBACR,OAAO,EAIT,IAAIC,EAAW/1C,KAAK0qC,WAAL,cAAmC,GAGlDqL,EAAWA,EAAShhC,KAAI,SAAAhX,GAAC,MAAK,CAC5Bi4C,kBAAmBj4C,EAAEk4C,mBACrBC,SAAWn4C,EAAEo4C,iBAAmBp4C,EAAEo4C,gBAAgBC,kBAAqB,KACvEC,gBAAkBt4C,EAAEo4C,iBAAmBp4C,EAAEo4C,gBAAgBG,2BAA6B,MAvB9D,2BA2B1B,YAAmBP,EAAnB,+CAEE,GAF2B,QAEhBC,oBAAsBJ,EAAWlL,WAAWuL,mBACrD,OAAO,EA9Be,kFAmC1B,OAAO,I,yCAKP,QAASj2C,KAAK21C,MAAMphC,MAAK,SAAA/S,GAAC,OAA2C,QAAtCA,EAAEkpC,WAAW6L,YAAYC,UAA4D,YAAtCh1C,EAAEkpC,WAAW6L,YAAYC,WAAkE,SAAvCh1C,EAAEkpC,WAAW6L,YAAYE,e,yCAK3J,QAASz2C,KAAK21C,MAAMphC,MAAK,SAAA/S,GAAC,OAA2C,QAAtCA,EAAEkpC,WAAW6L,YAAYC,UAA4D,YAAtCh1C,EAAEkpC,WAAW6L,YAAYC,WAAkE,SAAvCh1C,EAAEkpC,WAAW6L,YAAYE,e,+CAK3J,QAASz2C,KAAK21C,MAAMphC,MAAK,SAAA/S,GAAC,OAA2C,QAAtCA,EAAEkpC,WAAW6L,YAAYC,UAA4D,YAAtCh1C,EAAEkpC,WAAW6L,YAAYC,WAAkE,eAAvCh1C,EAAEkpC,WAAW6L,YAAYE,e,yBApG3J,OAAOz2C,KAAK01C,QAAQ51C,K,8BAIpB,OAAOE,KAAK01C,QAAL,U,kCAIP,OAAO11C,KAAK01C,QAAQgB,c,8BAIpB,OAAO12C,KAAK01C,QAAQz0C,U,2BAIpB,OAAOjB,KAAK01C,QAAQiB,O,kCAIpB,OAAO32C,KAAK01C,QAAQkB,e,mCAIpB,OAAO52C,KAAK01C,QAAQmB,gB,iCAIpB,OAAO72C,KAAK01C,QAAQ,sB,+BAKpB,OAAkE,IAA3D11C,KAAK0qC,WAAL,UAA6B/1B,QAAQ,mB,sCAK5C,OAA+E,IAAxE3U,KAAK0qC,WAAL,UAA6B/1B,QAAQ,gC,uCAK5C,OAA+E,GAAxE3U,KAAK0qC,WAAL,UAA6B/1B,QAAQ,oC,iDC7DhD,IAAIlU,EAAW,EAAQ,GAGvBzE,EAAOD,QAAU,SAAU2E,EAAIzB,GAC7B,IAAKwB,EAASC,GAAK,OAAOA,EAC1B,IAAIiM,EAAI/D,EACR,GAAI3J,GAAkC,mBAArB0N,EAAKjM,EAAGyN,YAA4B1N,EAASmI,EAAM+D,EAAGvQ,KAAKsE,IAAM,OAAOkI,EACzF,GAAgC,mBAApB+D,EAAKjM,EAAG6mB,WAA2B9mB,EAASmI,EAAM+D,EAAGvQ,KAAKsE,IAAM,OAAOkI,EACnF,IAAK3J,GAAkC,mBAArB0N,EAAKjM,EAAGyN,YAA4B1N,EAASmI,EAAM+D,EAAGvQ,KAAKsE,IAAM,OAAOkI,EAC1F,MAAMjI,UAAU,6C,gBCVlB,IAAIm2C,EAAO,EAAQ,GAAR,CAAkB,QACzBr2C,EAAW,EAAQ,GACnB6H,EAAM,EAAQ,IACdyuC,EAAU,EAAQ,IAAgBv1C,EAClC1B,EAAK,EACLk3C,EAAer6C,OAAOq6C,cAAgB,WACxC,OAAO,GAELC,GAAU,EAAQ,EAAR,EAAoB,WAChC,OAAOD,EAAar6C,OAAOu6C,kBAAkB,QAE3CC,EAAU,SAAUz2C,GACtBq2C,EAAQr2C,EAAIo2C,EAAM,CAAE55C,MAAO,CACzBjB,EAAG,OAAQ6D,EACXwF,EAAG,OAgCH8xC,EAAOp7C,EAAOD,QAAU,CAC1BoR,IAAK2pC,EACLO,MAAM,EACNC,QAhCY,SAAU52C,EAAInD,GAE1B,IAAKkD,EAASC,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK4H,EAAI5H,EAAIo2C,GAAO,CAElB,IAAKE,EAAat2C,GAAK,MAAO,IAE9B,IAAKnD,EAAQ,MAAO,IAEpB45C,EAAQz2C,GAER,OAAOA,EAAGo2C,GAAM76C,GAsBlBs7C,QApBY,SAAU72C,EAAInD,GAC1B,IAAK+K,EAAI5H,EAAIo2C,GAAO,CAElB,IAAKE,EAAat2C,GAAK,OAAO,EAE9B,IAAKnD,EAAQ,OAAO,EAEpB45C,EAAQz2C,GAER,OAAOA,EAAGo2C,GAAMxxC,GAYlBkyC,SATa,SAAU92C,GAEvB,OADIu2C,GAAUG,EAAKC,MAAQL,EAAat2C,KAAQ4H,EAAI5H,EAAIo2C,IAAOK,EAAQz2C,GAChEA,K,m8CCjCY+2C,E,YACnB,WAAaC,GAAU,a,4FAAA,UACrB,E,qEAAA,qBAAMA,KAGDC,eAAiB,GACtB,EAAKC,cAAe,EACpB,EAAKC,kBAAmB,EAGxB,EAAKC,mBAAqB,EAAKA,mBAAmBr6C,KAAxB,MAG1B,EAAKs6C,OAAS,EAAKL,SAASM,OAAOC,WACnC,EAAKF,OAAOG,UACZ,EAAKH,OAAOI,iBAAiB,gBAAiB,EAAKL,oBAGnDM,IAAmBC,WAAWX,EAASM,QAAQM,UAA/C,MAjBqB,E,mSAsBrB,0CAEAt4C,KAAK+3C,OAAOQ,oBAAoB,gBAAiBv4C,KAAK83C,oBACtDM,IAAmBC,WAAWr4C,KAAK03C,SAASM,QAAQQ,aAAax4C,Q,sCAQjEA,KAAK43C,cAAe,I,uCAUpB53C,KAAK43C,cAAe,EAGf53C,KAAK63C,kBACR73C,KAAKy4C,uB,yCAUWC,GAElB14C,KAAK23C,eAAevyC,KAAKszC,GAGpB14C,KAAK43C,cAAiB53C,KAAK63C,kBAC9B73C,KAAKy4C,uB,qKASHz4C,KAAK43C,a,qDAKL53C,KAAK63C,iB,oDAGT73C,KAAK63C,kBAAmB,EAGpBa,EAAM14C,KAAK23C,eAAe9vC,Q,uBAI5B7H,KAAK63C,kBAAmB,E,oDASlB73C,KAAK24C,eAAeD,G,0DAK1B/2C,EAAQW,KAAK,sEAAwE,KAAIM,QAAS81C,G,QAKpG14C,KAAK63C,kBAAmB,EACxB73C,KAAKy4C,qB,4KAUeC,G,mFAGA,gBAAhBA,EAAIE,S,oDAIMF,EAAIhD,SAAWgD,EAAIhD,QAAQ51C,G,sBAEjC,IAAI2C,MAAJ,iD,UAIHi2C,EAAIhD,QAAQmD,W,sBACT,IAAIp2C,MAAJ,gD,OAIRzC,KAAK84C,cAAc,CAAC,CAClBh5C,GAAI44C,EAAIhD,QAAQ51C,GAChBi5C,SAAUL,EAAIhD,QAAQmD,c,wHAKrBl7C,GAEH,GAAoB,UAAhBA,EAAOY,KACT,OAAO,KAIT,IAAIo3C,EAAQ3zC,MAAM4V,KAAK5X,KAAKg5C,QAAQroC,UAAU2D,QAAO,SAAA5X,GAAC,MAAe,SAAXA,EAAE6B,MAAmB7B,EAAEqD,KAAKkyC,WAAat0C,EAAOoC,KAAK,oBAAoBkyC,YAAUl9B,KAAI,SAAArY,GAAC,OAAIA,EAAEqD,QAGpJmK,EAAUlI,MAAM4V,KAAK5X,KAAKg5C,QAAQroC,UAAU2D,QAAO,SAAA5X,GAAC,MAAe,WAAXA,EAAE6B,MAAqB7B,EAAEqD,KAAKvD,KAAKs1C,WAAWn0C,EAAOoC,KAAK,oBAAoBkyC,SAAW,iBAAel9B,KAAI,SAAArY,GAAC,OAAIA,EAAEqD,QAG/K,OAAO,IAAI01C,IAAM93C,EAAOoC,KAAM41C,EAAOzrC,K,8BAU9BvM,GAAQ,WAEX+yB,EAAS/yB,EAAOoC,MAAQpC,EAAOoC,KAAK,qBAAuBpC,EAAOoC,KAAK,oBAAoBk5C,UAC3FvoB,GACFwoB,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBwrB,MAG/C,IAAI0oB,EAAahB,IAAmBC,WAAWr4C,KAAK03C,SAASM,QAAQqB,QAAQ9kC,MAAK,SAAA+kC,GAAC,OAAIA,EAAEx5C,KAAOnC,EAAOmC,MACnGs5C,GACFhS,gBAAMzpC,EAAOoC,KAAMq5C,EAAWL,Y,uCAYhBp7C,EAAQsgC,GAAS,WAE7Bsb,EAAY57C,EAAOoC,MAAQpC,EAAOoC,KAAK,qBAAuBpC,EAAOoC,KAAK,oBAAoBk5C,UAC9FO,EAAYvb,GAAWA,EAAQ,qBAAuBA,EAAQ,oBAAoBgb,UAClFO,GAAaN,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBq0C,MAC1DC,GAAaN,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBs0C,Q,sCAa/C77C,EAAQ87C,EAASC,EAAUxlB,GAAU,WAEpC,+BAAZulB,IAIJP,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBw0C,MAC7CR,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBgvB,S,iCAUnCylB,GAAY,WAElBh8C,EAASg8C,EACa,iBAAfA,IACTh8C,EAASqC,KAAKg5C,QAAQl8C,IAAI68C,IAG5B,IAAIjpB,EAAS/yB,GAAUA,EAAOoC,MAAQpC,EAAOoC,KAAK,qBAAuBpC,EAAOoC,KAAK,oBAAoBk5C,UACrGvoB,GACFwoB,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBwrB,W,8BAvOTkpB,O,0MCgBpCz1C,E,kLAME01C,GAA4B,WAAjB9e,EAAiB,uDAAN,KAQ1B,OANA/6B,KAAK85C,sBAAwB95C,KAAK85C,uBAAyB,GAG3D95C,KAAK85C,sBAAsBD,GAAa75C,KAAK85C,sBAAsBD,IAAc,GAG7E9e,GAEF/6B,KAAK85C,sBAAsBD,GAAWz0C,KAAK21B,GACpC,MAGF,IAAItU,SAAQ,SAACqZ,GAGlBA,EAAQia,iBAAkB,EAG1B,EAAKD,sBAAsBD,GAAWz0C,KAAK06B,Q,2BAM7C,OAAO9/B,KAAKg6C,KAAK53C,MAAMpC,KAAMqC,a,yCAI7B,OAAOrC,KAAKg6C,KAAK53C,MAAMpC,KAAMqC,a,0CAIVw3C,EAAW9e,GAE9B/6B,KAAK85C,sBAAwB95C,KAAK85C,uBAAyB,GAG3D95C,KAAK85C,sBAAsBD,GAAa75C,KAAK85C,sBAAsBD,IAAc,GAGjF,IAAK,IAAI59C,EAAI,EAAGA,EAAI+D,KAAK85C,sBAAsBD,GAAWz2C,OAAQnH,GAAK,EACjE+D,KAAK85C,sBAAsBD,GAAW59C,KAAO8+B,IAC/C/6B,KAAK85C,sBAAsBD,GAAWh1B,OAAO5oB,EAAG,GAChDA,GAAK,K,4BAMT,OAAO+D,KAAKu4C,oBAAoBn2C,MAAMpC,KAAMqC,a,2BAIxCw3C,GAAW,WAMTI,EAAaj6C,KAAK85C,uBAAyB95C,KAAK85C,sBAAsBD,IAAe,GAEvFK,EAAgBl4C,MAAM4V,KAAKvV,WAAWN,MAAM,GAChDk4C,EAAUvlC,SAAQ,SAACqmB,GACjBA,EAAS34B,MAAM,EAAM83C,MAIvB,IAAK,IAAIj+C,EAAI,EAAGA,EAAIg+C,EAAU72C,OAAQnH,GAAK,EACrCg+C,EAAUh+C,GAAG89C,kBACfE,EAAUp1B,OAAO5oB,EAAG,GACpBA,GAAK,K,gCAOT,OAAO+D,KAAKkF,KAAK9C,MAAMpC,KAAMqC,a,qCAI7B,OAAOrC,KAAKkF,KAAK9C,MAAMpC,KAAMqC,gB,gCAKjC8B,EAAa8kC,MAAQ,SAA4BkR,GAE/C,IAAK,IAAM1S,KAAQtjC,EAAatG,UAE1BsG,EAAatG,UAAUC,eAAe2pC,KAExC0S,EAAW1S,GAAQtjC,EAAatG,UAAU4pC,KAIhDzrC,EAAOD,QAAUoI,G,cCnIjBnI,EAAOD,QAAU,SAAUq+C,EAAQl9C,GACjC,MAAO,CACLL,aAAuB,EAATu9C,GACd3vC,eAAyB,EAAT2vC,GAChB5vC,WAAqB,EAAT4vC,GACZl9C,MAAOA,K,cCLX,IAAI4C,EAAK,EACLu6C,EAAKj6C,KAAKkmB,SACdtqB,EAAOD,QAAU,SAAUyB,GACzB,MAAO,UAAUuG,YAAevE,IAARhC,EAAoB,GAAKA,EAAK,QAASsC,EAAKu6C,GAAIlsC,SAAS,O,cCHnFnS,EAAOD,SAAU,G,gBCCjB,IAAIu+C,EAAQ,EAAQ,KAChBC,EAAc,EAAQ,IAE1Bv+C,EAAOD,QAAUY,OAAOwL,MAAQ,SAAc1G,GAC5C,OAAO64C,EAAM74C,EAAG84C,K,gBCLlB,IAAIx5C,EAAY,EAAQ,IACpBklB,EAAM7lB,KAAK6lB,IACXjlB,EAAMZ,KAAKY,IACfhF,EAAOD,QAAU,SAAU+L,EAAO1E,GAEhC,OADA0E,EAAQ/G,EAAU+G,IACH,EAAIme,EAAIne,EAAQ1E,EAAQ,GAAKpC,EAAI8G,EAAO1E,K,gBCJzD,IAAIhC,EAAW,EAAQ,GACnBo5C,EAAM,EAAQ,KACdD,EAAc,EAAQ,IACtBp2B,EAAW,EAAQ,GAAR,CAAyB,YACpCs2B,EAAQ,aAIRC,EAAa,WAEf,IAIIC,EAJAC,EAAS,EAAQ,GAAR,CAAyB,UAClC3+C,EAAIs+C,EAAYn3C,OAcpB,IAVAw3C,EAAOC,MAAMC,QAAU,OACvB,EAAQ,IAAW7uC,YAAY2uC,GAC/BA,EAAO/kC,IAAM,eAGb8kC,EAAiBC,EAAOG,cAAc1vC,UACvB2vC,OACfL,EAAeM,MAAM/U,uCACrByU,EAAeO,QACfR,EAAaC,EAAe97C,EACrB5C,YAAYy+C,EAAoB,UAAEH,EAAYt+C,IACrD,OAAOy+C,KAGT1+C,EAAOD,QAAUY,OAAOY,QAAU,SAAgBkE,EAAG05C,GACnD,IAAIjtC,EAQJ,OAPU,OAANzM,GACFg5C,EAAe,UAAIr5C,EAASK,GAC5ByM,EAAS,IAAIusC,EACbA,EAAe,UAAI,KAEnBvsC,EAAOiW,GAAY1iB,GACdyM,EAASwsC,SACMl7C,IAAf27C,EAA2BjtC,EAASssC,EAAItsC,EAAQitC,K,gBCtCzD,IAAIb,EAAQ,EAAQ,KAChBc,EAAa,EAAQ,IAAoBr3C,OAAO,SAAU,aAE9DhI,EAAQyF,EAAI7E,OAAOmH,qBAAuB,SAA6BrC,GACrE,OAAO64C,EAAM74C,EAAG25C,K,gBCJlB,IAAI9yC,EAAM,EAAQ,IACd8E,EAAW,EAAQ,IACnB+W,EAAW,EAAQ,GAAR,CAAyB,YACpCk3B,EAAc1+C,OAAOkB,UAEzB7B,EAAOD,QAAUY,OAAOiK,gBAAkB,SAAUnF,GAElD,OADAA,EAAI2L,EAAS3L,GACT6G,EAAI7G,EAAG0iB,GAAkB1iB,EAAE0iB,GACH,mBAAjB1iB,EAAE8I,aAA6B9I,aAAaA,EAAE8I,YAChD9I,EAAE8I,YAAY1M,UACd4D,aAAa9E,OAAS0+C,EAAc,O,gBCV/C,IAAIC,EAAc,EAAQ,EAAR,CAAkB,eAChCzrC,EAAa7N,MAAMnE,UACQ2B,MAA3BqQ,EAAWyrC,IAA2B,EAAQ,GAAR,CAAmBzrC,EAAYyrC,EAAa,IACtFt/C,EAAOD,QAAU,SAAUyB,GACzBqS,EAAWyrC,GAAa99C,IAAO,I,gBCLjC,IAAIiD,EAAW,EAAQ,GACvBzE,EAAOD,QAAU,SAAU2E,EAAI6M,GAC7B,IAAK9M,EAASC,IAAOA,EAAG66C,KAAOhuC,EAAM,MAAM5M,UAAU,0BAA4B4M,EAAO,cACxF,OAAO7M,I,6BCDT1E,EAAOD,QAEP,SAAmBy/C,GACjB,OAAO,WACL,IAAIr0C,EAAM9E,UAAUe,OACpB,GAAI+D,EAAK,CAGP,IAFA,IAAIxD,EAAO,GACP1H,GAAK,IACAA,EAAIkL,GACXxD,EAAK1H,GAAKoG,UAAUpG,GAEtB,OAAOu/C,EAAIp/C,KAAK4D,KAAM2D,GAEtB,OAAO63C,EAAIp/C,KAAK4D,KAAM,O,cCf5B,IAAIy7C,EAGJA,EAAI,WACH,OAAOz7C,KADJ,GAIJ,IAECy7C,EAAIA,GAAK,IAAIh8C,SAAS,cAAb,GACR,MAAOe,GAEc,iBAAXL,SAAqBs7C,EAAIt7C,QAOrCnE,EAAOD,QAAU0/C,G,gBCnBjB,IAAIC,EAAM,EAAQ,IAAgBl6C,EAC9B8G,EAAM,EAAQ,IACduJ,EAAM,EAAQ,EAAR,CAAkB,eAE5B7V,EAAOD,QAAU,SAAU2E,EAAI0I,EAAKuyC,GAC9Bj7C,IAAO4H,EAAI5H,EAAKi7C,EAAOj7C,EAAKA,EAAG7C,UAAWgU,IAAM6pC,EAAIh7C,EAAImR,EAAK,CAAEpH,cAAc,EAAMvN,MAAOkM,M,gBCLhG,IAAI9K,EAAU,EAAQ,GAClBgF,EAAU,EAAQ,IAClB0F,EAAQ,EAAQ,GAChB4yC,EAAS,EAAQ,IACjBC,EAAQ,IAAMD,EAAS,IAEvBE,EAAQ/hC,OAAO,IAAM8hC,EAAQA,EAAQ,KACrCE,EAAQhiC,OAAO8hC,EAAQA,EAAQ,MAE/BG,EAAW,SAAU7uC,EAAK5M,EAAM07C,GAClC,IAAIt9C,EAAM,GACNu9C,EAAQlzC,GAAM,WAChB,QAAS4yC,EAAOzuC,MAPV,WAOwBA,QAE5BR,EAAKhO,EAAIwO,GAAO+uC,EAAQ37C,EAAK6yC,GAAQwI,EAAOzuC,GAC5C8uC,IAAOt9C,EAAIs9C,GAAStvC,GACxBrO,EAAQA,EAAQa,EAAIb,EAAQO,EAAIq9C,EAAO,SAAUv9C,IAM/Cy0C,EAAO4I,EAAS5I,KAAO,SAAUjqC,EAAQoE,GAI3C,OAHApE,EAAS5D,OAAOjC,EAAQ6F,IACb,EAAPoE,IAAUpE,EAASA,EAAOI,QAAQuyC,EAAO,KAClC,EAAPvuC,IAAUpE,EAASA,EAAOI,QAAQwyC,EAAO,KACtC5yC,GAGTnN,EAAOD,QAAUigD,G,cC7BjBhgD,EAAOD,QAAU,I,6BCCjB,IAAIkC,EAAS,EAAQ,GACjBsD,EAAK,EAAQ,IACb46C,EAAc,EAAQ,GACtBC,EAAU,EAAQ,EAAR,CAAkB,WAEhCpgD,EAAOD,QAAU,SAAUoR,GACzB,IAAI4F,EAAI9U,EAAOkP,GACXgvC,GAAeppC,IAAMA,EAAEqpC,IAAU76C,EAAGC,EAAEuR,EAAGqpC,EAAS,CACpD3xC,cAAc,EACd3N,IAAK,WAAc,OAAOkD,U,cCV9BhE,EAAOD,QAAU,SAAU2E,EAAI27C,EAAa7/C,EAAM8/C,GAChD,KAAM57C,aAAc27C,SAAoC78C,IAAnB88C,GAAgCA,KAAkB57C,EACrF,MAAMC,UAAUnE,EAAO,2BACvB,OAAOkE,I,gBCHX,IAAItC,EAAW,EAAQ,IACvBpC,EAAOD,QAAU,SAAUuD,EAAQuW,EAAKhN,GACtC,IAAK,IAAIrL,KAAOqY,EAAKzX,EAASkB,EAAQ9B,EAAKqY,EAAIrY,GAAMqL,GACrD,OAAOvJ,I,6BCDT,IAAIi9C,EAAoB,EAAQ,KAEhC,SAASC,EAAkB55C,GACzB5C,KAAK4C,QAAUA,EAGjB45C,EAAkB3+C,UAAY,IAAI4E,MAClC+5C,EAAkB3+C,UAAUrB,KAAO,oBAEnCR,EAAOD,QAAU,SAAU0gD,EAAM9Y,GAC/B,GAAqB,iBAAV8Y,EACT,MAAM,IAAID,EAAkB,2BAI9B,IAAIE,GAAyB,KAD7B/Y,EAAUA,GAAW,IACHgZ,OAAkB,EAAI,EACxC,IACE,OAAOC,KAAKC,MAAMN,EAAkBE,EAAM/zC,MAAM,KAAKg0C,KACrD,MAAOl8C,GACP,MAAM,IAAIg8C,EAAkB,4BAA8Bh8C,EAAEoC,WAIhE5G,EAAOD,QAAQygD,kBAAoBA,G,cCxBnC,IAOIM,EACAC,EARAv+B,EAAUxiB,EAAOD,QAAU,GAU/B,SAASihD,IACL,MAAM,IAAIv6C,MAAM,mCAEpB,SAASw6C,IACL,MAAM,IAAIx6C,MAAM,qCAsBpB,SAASy6C,EAAW1B,GAChB,GAAIsB,IAAqB7yC,WAErB,OAAOA,WAAWuxC,EAAK,GAG3B,IAAKsB,IAAqBE,IAAqBF,IAAqB7yC,WAEhE,OADA6yC,EAAmB7yC,WACZA,WAAWuxC,EAAK,GAE3B,IAEI,OAAOsB,EAAiBtB,EAAK,GAC/B,MAAMh7C,GACJ,IAEI,OAAOs8C,EAAiB1gD,KAAK,KAAMo/C,EAAK,GAC1C,MAAMh7C,GAEJ,OAAOs8C,EAAiB1gD,KAAK4D,KAAMw7C,EAAK,MAvCnD,WACG,IAEQsB,EADsB,mBAAf7yC,WACYA,WAEA+yC,EAEzB,MAAOx8C,GACLs8C,EAAmBE,EAEvB,IAEQD,EADwB,mBAAjB33B,aACcA,aAEA63B,EAE3B,MAAOz8C,GACLu8C,EAAqBE,GAjB7B,GAwEA,IAEIE,EAFA5wC,EAAQ,GACR1B,GAAW,EAEXuyC,GAAc,EAElB,SAASC,IACAxyC,GAAasyC,IAGlBtyC,GAAW,EACPsyC,EAAa/5C,OACbmJ,EAAQ4wC,EAAap5C,OAAOwI,GAE5B6wC,GAAc,EAEd7wC,EAAMnJ,QACNk6C,KAIR,SAASA,IACL,IAAIzyC,EAAJ,CAGA,IAAI0yC,EAAUL,EAAWG,GACzBxyC,GAAW,EAGX,IADA,IAAI1D,EAAMoF,EAAMnJ,OACV+D,GAAK,CAGP,IAFAg2C,EAAe5wC,EACfA,EAAQ,KACC6wC,EAAaj2C,GACdg2C,GACAA,EAAaC,GAAYjE,MAGjCiE,GAAc,EACdj2C,EAAMoF,EAAMnJ,OAEhB+5C,EAAe,KACftyC,GAAW,EAnEf,SAAyB2yC,GACrB,GAAIT,IAAuB33B,aAEvB,OAAOA,aAAao4B,GAGxB,IAAKT,IAAuBE,IAAwBF,IAAuB33B,aAEvE,OADA23B,EAAqB33B,aACdA,aAAao4B,GAExB,IAEWT,EAAmBS,GAC5B,MAAOh9C,GACL,IAEI,OAAOu8C,EAAmB3gD,KAAK,KAAMohD,GACvC,MAAOh9C,GAGL,OAAOu8C,EAAmB3gD,KAAK4D,KAAMw9C,KAgD7CC,CAAgBF,IAiBpB,SAASG,EAAKlC,EAAK77B,GACf3f,KAAKw7C,IAAMA,EACXx7C,KAAK2f,MAAQA,EAYjB,SAAS4e,KA5BT/f,EAAQrT,SAAW,SAAUqwC,GACzB,IAAI73C,EAAO,IAAI3B,MAAMK,UAAUe,OAAS,GACxC,GAAIf,UAAUe,OAAS,EACnB,IAAK,IAAInH,EAAI,EAAGA,EAAIoG,UAAUe,OAAQnH,IAClC0H,EAAK1H,EAAI,GAAKoG,UAAUpG,GAGhCsQ,EAAMnH,KAAK,IAAIs4C,EAAKlC,EAAK73C,IACJ,IAAjB4I,EAAMnJ,QAAiByH,GACvBqyC,EAAWI,IASnBI,EAAK7/C,UAAUs7C,IAAM,WACjBn5C,KAAKw7C,IAAIp5C,MAAM,KAAMpC,KAAK2f,QAE9BnB,EAAQm/B,MAAQ,UAChBn/B,EAAQo/B,SAAU,EAClBp/B,EAAQq/B,IAAM,GACdr/B,EAAQs/B,KAAO,GACft/B,EAAQvd,QAAU,GAClBud,EAAQu/B,SAAW,GAInBv/B,EAAQlX,GAAKi3B,EACb/f,EAAQnX,YAAck3B,EACtB/f,EAAQhX,KAAO+2B,EACf/f,EAAQvW,IAAMs2B,EACd/f,EAAQ5Y,eAAiB24B,EACzB/f,EAAQtW,mBAAqBq2B,EAC7B/f,EAAQtZ,KAAOq5B,EACf/f,EAAQjX,gBAAkBg3B,EAC1B/f,EAAQ/W,oBAAsB82B,EAE9B/f,EAAQpX,UAAY,SAAU5K,GAAQ,MAAO,IAE7CgiB,EAAQI,QAAU,SAAUpiB,GACxB,MAAM,IAAIiG,MAAM,qCAGpB+b,EAAQw/B,IAAM,WAAc,MAAO,KACnCx/B,EAAQy/B,MAAQ,SAAUjJ,GACtB,MAAM,IAAIvyC,MAAM,mCAEpB+b,EAAQ0/B,MAAQ,WAAa,OAAO,I,gBCtLpC,IAAIC,EAAM,EAAQ,IAElBniD,EAAOD,QAAUY,OAAO,KAAKioB,qBAAqB,GAAKjoB,OAAS,SAAU+D,GACxE,MAAkB,UAAXy9C,EAAIz9C,GAAkBA,EAAGgI,MAAM,IAAM/L,OAAO+D,K,cCJrD3E,EAAQyF,EAAI,GAAGojB,sB,gBCCf,IAAIu5B,EAAM,EAAQ,IACdtsC,EAAM,EAAQ,EAAR,CAAkB,eAExBusC,EAAkD,aAA5CD,EAAI,WAAc,OAAO97C,UAArB,IASdrG,EAAOD,QAAU,SAAU2E,GACzB,IAAIe,EAAG48C,EAAGh/C,EACV,YAAcG,IAAPkB,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApC29C,EAVD,SAAU39C,EAAIlD,GACzB,IACE,OAAOkD,EAAGlD,GACV,MAAOgD,KAOO89C,CAAO78C,EAAI9E,OAAO+D,GAAKmR,IAAoBwsC,EAEvDD,EAAMD,EAAI18C,GAEM,WAAfpC,EAAI8+C,EAAI18C,KAAsC,mBAAZA,EAAE88C,OAAuB,YAAcl/C,I,gBCpBhF,IAAI+B,EAAW,EAAQ,GACnBsL,EAAY,EAAQ,IACpB0vC,EAAU,EAAQ,EAAR,CAAkB,WAChCpgD,EAAOD,QAAU,SAAU0F,EAAG+8C,GAC5B,IACIv/C,EADA8T,EAAI3R,EAASK,GAAG8I,YAEpB,YAAa/K,IAANuT,GAAiDvT,OAA7BP,EAAImC,EAAS2R,GAAGqpC,IAAyBoC,EAAI9xC,EAAUzN,K,qPCM/Dw/C,E,WACnB,WAAaC,EAAIC,I,4FAAe,SAC9B3+C,KAAK0+C,GAAKA,EAEV1+C,KAAK4+C,gBAAkBD,EACvB3+C,KAAK6+C,QAAU,GACf7+C,KAAKkjC,QAAU,CAACub,EAASK,wBACzB9+C,KAAK++C,MAAQ,KACb/+C,KAAKg/C,MAAO,EAGZh/C,KAAKi/C,4BAILj/C,KAAKk/C,QAAU,E,4DAIHC,EAAOjiD,EAAOkiD,EAAkBC,GAE5Cr/C,KAAK6+C,QAAQz5C,KAAK,CAChB+5C,QACAjiD,QACAoiD,UAAWF,GAAoBX,EAASc,gBAAgBC,MACxDC,QAASJ,GAAoBZ,EAASiB,iBAAiBC,Q,8CAKlCC,GAEvB5/C,KAAK++C,MAAQ,CACXvhD,IAAKihD,EAASoB,mBACd3iD,MAAO0iD,K,kDAOT5/C,KAAK++C,MAAQ,CACXvhD,IAAKihD,EAASqB,WACd5iD,MAAO,kB,+BAKDM,EAAKN,GAEb8C,KAAK++C,MAAQ,CACXvhD,MACAN,W,mCAOF,GAAI8C,KAAK4+C,gBACP,OAAO5+C,KAAK4+C,gBAGd,IAAK5+C,KAAK++C,MACR,MAAM,IAAIt8C,MAAM,kDAGlB,IAAMizC,EAAU,GAuBhB,OAtBAA,EAAQqJ,MAAQ/+C,KAAK++C,MAGjB/+C,KAAKk/C,QAAU,GAAKl/C,KAAKkjC,QAAQ9/B,OAAS,IAC5CsyC,EAAQnE,OAASvxC,KAAKk/C,QACtBxJ,EAAQqK,SAAW//C,KAAKkjC,SAItBljC,KAAK6+C,QAAQz7C,OAAS,IACxBsyC,EAAQmJ,QAAU,CAAC,CACjBmB,aAAchgD,KAAK6+C,WAKvBnJ,EAAO,OAAU,CACfn3C,KAAM,IACN0hD,OAAQ,IAIHvK,I,gCAMP,OAAO11C,KAAK0+C,GAAGwB,OAAOC,QAAQ,OAAQ,qBAAsBngD,KAAKogD,aAAcpgD,KAAKg/C,MAAMqB,MAAK,SAACtgD,GAAS,IAC/FmK,EAA4BnK,EAA5BmK,QAASyrC,EAAmB51C,EAAnB41C,MAAO2K,EAAYvgD,EAAZugD,QAElBC,EAAe,GACfC,EAAa,GACbC,EAAc,GALmF,uBAOvG,YAAcv2C,EAAd,+CAAuB,KAAd/I,EAAc,QACfu/C,EAAQv/C,EAAE3E,KAAKkM,MAAM,cACrBi4C,EAAOD,EAAM,GACnBH,EAAan7C,KAAK,CAChB6sC,SAAU0O,EACVx2C,OAAQu2C,EAAM,GACdtJ,KAAMj2C,EAAEi2C,KACR1M,WAAYvpC,EAAEupC,cAdqF,6GAkBvG,YAAciL,EAAd,+CAAqB,KAAZn0C,EAAY,QACnBg/C,EAAWp7C,KAAK,CACd6sC,SAAUzwC,EAAEywC,SACZnyC,GAAI0B,EAAE1B,GACNs3C,KAAM51C,EAAE41C,KACR1M,WAAYlpC,EAAEkpC,cAvBqF,6GA2BvG,IA3BuG,IA2BvG,EA3BuG,iBA2B9F3zB,EA3B8F,QA4B7Fk7B,EAAal7B,EAAE,oBAAfk7B,SACF2O,EAAM,IAAInL,IAAM1+B,EAAGypC,EAAWlsC,QAAO,SAAA9S,GAAC,OAAIA,EAAEywC,WAAaA,KAAWsO,EAAajsC,QAAO,SAAAnT,GAAC,OAAIA,EAAE8wC,WAAaA,MAClHwO,EAAYr7C,KAAKw7C,IAHnB,EAAcN,EAAd,+CAAuB,IA3BgF,kFAgCvG,OAAOG,O,8BAOT,IAAM/K,EAAU11C,KAAKogD,aAIrB,OAHA1K,EAAO,OAAQn3C,KAAO,QAGfyB,KAAK0+C,GAAGwB,OAAOC,QAAQ,OAAQ,qBAAsBzK,EAAS11C,KAAKg/C,MACvEqB,MAAK,SAAAtgD,GAAI,OAAIA,EAAK0F,OAAS,U,gCAKlCg5C,EAASc,gBAAkB,CACzBC,MAAO,KACPqB,YAAa,KACbC,eAAgB,KAChBC,SAAU,KACVC,YAAa,KACbC,SAAU,KACVC,MAAO,SAITzC,EAASiB,iBAAmB,CAC1BC,IAAK,MACLwB,GAAI,MAIN1C,EAAS2C,iBAAmB,+BAC5B3C,EAAS4C,iBAAmB,eAC5B5C,EAAS6C,QAAU,KACnB7C,EAASoB,mBAAqB,kCAC9BpB,EAAS8C,cAAgB,4BACzB9C,EAASK,uBAAyB,sCAClCL,EAAS+C,oBAAsB,mCAC/B/C,EAASqB,WAAa,yBACtBrB,EAASgD,cAAgB,8B,mEC7KJC,EACnB,WAAaC,I,4FAAM,SACjB3hD,KAAKF,GAAK6hD,EAAK7hD,GACfE,KAAK4hD,UAAYD,EAAKjX,WAAWmX,WACjC7hD,KAAK8hD,SAAWH,EAAKjX,WAAWqX,UAChC/hD,KAAKgiD,WAAaL,EAAKjX,WAAWuX,YAClCjiD,KAAKkiD,UAAYP,EAAKjX,WAAWyX,WACjCniD,KAAKoiD,aAAeT,EAAKjX,WAAW2X,cACpCriD,KAAKsiD,SAAWX,EAAKjX,WAAW4X,SAChCtiD,KAAKuiD,SAAWZ,EAAKjX,WAAW6X,SAChCviD,KAAKwiD,oBAAsBb,EAAKjX,WAAW+X,qBAC3CziD,KAAK0iD,QAAUf,EAAKjX,WAAWiY,SAC/B3iD,KAAK4iD,cAAgBjB,EAAKjX,WAAWmY,gBACrC7iD,KAAK8iD,UAAYnB,EAAKoB,kBAAkBD,UACxC9iD,KAAKgjD,QAAUrB,EAAKoB,kBAAkBE,SACtCjjD,KAAKkjD,WAAavB,EAAKoB,kBAAkBI,YACzCnjD,KAAKojD,UAAYzB,EAAKoB,kBAAkBM,WACxCrjD,KAAKsjD,QAAU3B,EAAKoB,kBAAkBQ,SACtCvjD,KAAKwjD,WAAa7B,EAClB3hD,KAAKyjD,SAAW9B,EAAKjX,WAAWgZ,cAChC1jD,KAAKo3C,KAAO,CACVuM,UAAWhC,EAAKvK,KAAKwM,WACrBC,SAAUlC,EAAKvK,KAAK0M,UACpBC,WAAYpC,EAAKvK,KAAK4M,YACtBC,YAAatC,EAAKvK,KAAKR,aACvBsN,aAAcvC,EAAKvK,KAAKP,iB,iBCnC9B,cAqBA,IAAIsN,EAA4BxnD,OAAOwnD,2BACrC,SAAmCvD,GAGjC,IAFA,IAAIz4C,EAAOxL,OAAOwL,KAAKy4C,GACnBwD,EAAc,GACTnoD,EAAI,EAAGA,EAAIkM,EAAK/E,OAAQnH,IAC/BmoD,EAAYj8C,EAAKlM,IAAMU,OAAOuQ,yBAAyB0zC,EAAKz4C,EAAKlM,IAEnE,OAAOmoD,GAGPC,EAAe,WACnBtoD,EAAQ8G,OAAS,SAASrB,GACxB,IAAKykC,EAASzkC,GAAI,CAEhB,IADA,IAAIw3C,EAAU,GACL/8C,EAAI,EAAGA,EAAIoG,UAAUe,OAAQnH,IACpC+8C,EAAQ5zC,KAAKpC,EAAQX,UAAUpG,KAEjC,OAAO+8C,EAAQjwC,KAAK,KAGlB9M,EAAI,EAmBR,IAnBA,IACI0H,EAAOtB,UACP8E,EAAMxD,EAAKP,OACXkhD,EAAM/+C,OAAO/D,GAAG+H,QAAQ86C,GAAc,SAASE,GACjD,GAAU,OAANA,EAAY,MAAO,IACvB,GAAItoD,GAAKkL,EAAK,OAAOo9C,EACrB,OAAQA,GACN,IAAK,KAAM,OAAOh/C,OAAO5B,EAAK1H,MAC9B,IAAK,KAAM,OAAOgI,OAAON,EAAK1H,MAC9B,IAAK,KACH,IACE,OAAO2gD,KAAK4H,UAAU7gD,EAAK1H,MAC3B,MAAOsnB,GACP,MAAO,aAEX,QACE,OAAOghC,MAGJA,EAAI5gD,EAAK1H,GAAIA,EAAIkL,EAAKo9C,EAAI5gD,IAAO1H,GACpC+zC,EAAOuU,KAAO9jD,EAAS8jD,GACzBD,GAAO,IAAMC,EAEbD,GAAO,IAAMthD,EAAQuhD,GAGzB,OAAOD,GAOTvoD,EAAQ0oD,UAAY,SAAS93C,EAAI+rC,GAC/B,QAAuB,IAAZl6B,IAAqD,IAA1BA,EAAQkmC,cAC5C,OAAO/3C,EAIT,QAAuB,IAAZ6R,EACT,OAAO,WACL,OAAOziB,EAAQ0oD,UAAU93C,EAAI+rC,GAAKt2C,MAAMpC,KAAMqC,YAIlD,IAAIgD,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAImZ,EAAQmmC,iBACV,MAAM,IAAIliD,MAAMi2C,GACPl6B,EAAQomC,iBACjBjjD,EAAQkjD,MAAMnM,GAEd/2C,EAAQmB,MAAM41C,GAEhBrzC,GAAS,EAEX,OAAOsH,EAAGvK,MAAMpC,KAAMqC,aAO1B,IACIyiD,EADAC,EAAS,GA6Bb,SAAS/hD,EAAQ49C,EAAKoE,GAEpB,IAAI3mD,EAAM,CACRmyB,KAAM,GACNy0B,QAASC,GAkBX,OAfI7iD,UAAUe,QAAU,IAAG/E,EAAIqwB,MAAQrsB,UAAU,IAC7CA,UAAUe,QAAU,IAAG/E,EAAI8mD,OAAS9iD,UAAU,IAC9CktC,EAAUyV,GAEZ3mD,EAAI+mD,WAAaJ,EACRA,GAETjpD,EAAQspD,QAAQhnD,EAAK2mD,GAGnB9U,EAAY7xC,EAAI+mD,cAAa/mD,EAAI+mD,YAAa,GAC9ClV,EAAY7xC,EAAIqwB,SAAQrwB,EAAIqwB,MAAQ,GACpCwhB,EAAY7xC,EAAI8mD,UAAS9mD,EAAI8mD,QAAS,GACtCjV,EAAY7xC,EAAIinD,iBAAgBjnD,EAAIinD,eAAgB,GACpDjnD,EAAI8mD,SAAQ9mD,EAAI4mD,QAAUM,GACvBC,EAAYnnD,EAAKuiD,EAAKviD,EAAIqwB,OAoCnC,SAAS62B,EAAiBjB,EAAKmB,GAC7B,IAAI5K,EAAQ73C,EAAQ0iD,OAAOD,GAE3B,OAAI5K,EACK,KAAY73C,EAAQmiD,OAAOtK,GAAO,GAAK,IAAMyJ,EAC7C,KAAYthD,EAAQmiD,OAAOtK,GAAO,GAAK,IAEvCyJ,EAKX,SAASY,EAAeZ,EAAKmB,GAC3B,OAAOnB,EAeT,SAASkB,EAAYnnD,EAAKnB,EAAOyoD,GAG/B,GAAItnD,EAAIinD,eACJpoD,GACA4L,EAAW5L,EAAM8F,UAEjB9F,EAAM8F,UAAYjH,EAAQiH,WAExB9F,EAAMqN,aAAerN,EAAMqN,YAAY1M,YAAcX,GAAQ,CACjE,IAAIkJ,EAAMlJ,EAAM8F,QAAQ2iD,EAActnD,GAItC,OAHK4nC,EAAS7/B,KACZA,EAAMo/C,EAAYnnD,EAAK+H,EAAKu/C,IAEvBv/C,EAIT,IAAIw/C,EA+FN,SAAyBvnD,EAAKnB,GAC5B,GAAIgzC,EAAYhzC,GACd,OAAOmB,EAAI4mD,QAAQ,YAAa,aAClC,GAAIhf,EAAS/oC,GAAQ,CACnB,IAAI2oD,EAAS,IAAOjJ,KAAK4H,UAAUtnD,GAAOqM,QAAQ,SAAU,IAClBA,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAAO,IACjE,OAAOlL,EAAI4mD,QAAQY,EAAQ,UAE7B,GAAI7f,EAAS9oC,GACX,OAAOmB,EAAI4mD,QAAQ,GAAK/nD,EAAO,UACjC,GAAIqyC,EAAUryC,GACZ,OAAOmB,EAAI4mD,QAAQ,GAAK/nD,EAAO,WAEjC,GAAI8yC,EAAO9yC,GACT,OAAOmB,EAAI4mD,QAAQ,OAAQ,QA9Gba,CAAgBznD,EAAKnB,GACrC,GAAI0oD,EACF,OAAOA,EAIT,IAAIz9C,EAAOxL,OAAOwL,KAAKjL,GACnB6oD,EApCN,SAAqBpmC,GACnB,IAAIqmC,EAAO,GAMX,OAJArmC,EAAMjL,SAAQ,SAAS9L,EAAKq9C,GAC1BD,EAAKp9C,IAAO,KAGPo9C,EA6BWE,CAAY/9C,GAQ9B,GANI9J,EAAI+mD,aACNj9C,EAAOxL,OAAOmH,oBAAoB5G,IAKhC4oC,EAAQ5oC,KACJiL,EAAKwM,QAAQ,YAAc,GAAKxM,EAAKwM,QAAQ,gBAAkB,GACrE,OAAOwxC,EAAYjpD,GAIrB,GAAoB,IAAhBiL,EAAK/E,OAAc,CACrB,GAAI0F,EAAW5L,GAAQ,CACrB,IAAIV,EAAOU,EAAMV,KAAO,KAAOU,EAAMV,KAAO,GAC5C,OAAO6B,EAAI4mD,QAAQ,YAAczoD,EAAO,IAAK,WAE/C,GAAI4iB,EAASliB,GACX,OAAOmB,EAAI4mD,QAAQlrC,OAAOlc,UAAUsQ,SAAS/R,KAAKc,GAAQ,UAE5D,GAAI8hB,EAAO9hB,GACT,OAAOmB,EAAI4mD,QAAQthC,KAAK9lB,UAAUsQ,SAAS/R,KAAKc,GAAQ,QAE1D,GAAI4oC,EAAQ5oC,GACV,OAAOipD,EAAYjpD,GAIvB,IA2CIkpD,EA3CAC,EAAO,GAAI1mC,GAAQ,EAAO2mC,EAAS,CAAC,IAAK,MAGzC3+B,EAAQzqB,KACVyiB,GAAQ,EACR2mC,EAAS,CAAC,IAAK,MAIbx9C,EAAW5L,MAEbmpD,EAAO,cADCnpD,EAAMV,KAAO,KAAOU,EAAMV,KAAO,IACf,KAkB5B,OAdI4iB,EAASliB,KACXmpD,EAAO,IAAMtsC,OAAOlc,UAAUsQ,SAAS/R,KAAKc,IAI1C8hB,EAAO9hB,KACTmpD,EAAO,IAAM1iC,KAAK9lB,UAAU0oD,YAAYnqD,KAAKc,IAI3C4oC,EAAQ5oC,KACVmpD,EAAO,IAAMF,EAAYjpD,IAGP,IAAhBiL,EAAK/E,QAAkBuc,GAAyB,GAAhBziB,EAAMkG,OAItCuiD,EAAe,EACbvmC,EAASliB,GACJmB,EAAI4mD,QAAQlrC,OAAOlc,UAAUsQ,SAAS/R,KAAKc,GAAQ,UAEnDmB,EAAI4mD,QAAQ,WAAY,YAInC5mD,EAAImyB,KAAKprB,KAAKlI,GAIZkpD,EADEzmC,EAsCN,SAAqBthB,EAAKnB,EAAOyoD,EAAcI,EAAa59C,GAE1D,IADA,IAAIi+C,EAAS,GACJnqD,EAAI,EAAGC,EAAIgB,EAAMkG,OAAQnH,EAAIC,IAAKD,EACrC6B,EAAeZ,EAAOqI,OAAOtJ,IAC/BmqD,EAAOhhD,KAAKohD,EAAenoD,EAAKnB,EAAOyoD,EAAcI,EACjDxgD,OAAOtJ,IAAI,IAEfmqD,EAAOhhD,KAAK,IAShB,OANA+C,EAAKuM,SAAQ,SAASlX,GACfA,EAAI2lB,MAAM,UACbijC,EAAOhhD,KAAKohD,EAAenoD,EAAKnB,EAAOyoD,EAAcI,EACjDvoD,GAAK,OAGN4oD,EArDIK,CAAYpoD,EAAKnB,EAAOyoD,EAAcI,EAAa59C,GAEnDA,EAAK4M,KAAI,SAASvX,GACzB,OAAOgpD,EAAenoD,EAAKnB,EAAOyoD,EAAcI,EAAavoD,EAAKmiB,MAItEthB,EAAImyB,KAAKzoB,MA6GX,SAA8Bq+C,EAAQC,EAAMC,GAQ1C,GANaF,EAAOl1C,QAAO,SAASw1C,EAAMC,GAGxC,OADIA,EAAIhyC,QAAQ,OAAS,GAAGiyC,EACrBF,EAAOC,EAAIp9C,QAAQ,kBAAmB,IAAInG,OAAS,IACzD,GAEU,GACX,OAAOkjD,EAAO,IACG,KAATD,EAAc,GAAKA,EAAO,OAC3B,IACAD,EAAOr9C,KAAK,SACZ,IACAu9C,EAAO,GAGhB,OAAOA,EAAO,GAAKD,EAAO,IAAMD,EAAOr9C,KAAK,MAAQ,IAAMu9C,EAAO,GA5H1DO,CAAqBT,EAAQC,EAAMC,IAxBjCA,EAAO,GAAKD,EAAOC,EAAO,GA+CrC,SAASH,EAAYjpD,GACnB,MAAO,IAAMuF,MAAM5E,UAAUsQ,SAAS/R,KAAKc,GAAS,IAwBtD,SAASspD,EAAenoD,EAAKnB,EAAOyoD,EAAcI,EAAavoD,EAAKmiB,GAClE,IAAInjB,EAAM8nD,EAAKpuC,EAsCf,IArCAA,EAAOvZ,OAAOuQ,yBAAyBhQ,EAAOM,IAAQ,CAAEN,MAAOA,EAAMM,KAC5DV,IAELwnD,EADEpuC,EAAKzP,IACDpI,EAAI4mD,QAAQ,kBAAmB,WAE/B5mD,EAAI4mD,QAAQ,WAAY,WAG5B/uC,EAAKzP,MACP69C,EAAMjmD,EAAI4mD,QAAQ,WAAY,YAG7BnnD,EAAeioD,EAAavoD,KAC/BhB,EAAO,IAAMgB,EAAM,KAEhB8mD,IACCjmD,EAAImyB,KAAK7b,QAAQuB,EAAKhZ,OAAS,GAE/BonD,EADEtU,EAAO2V,GACHH,EAAYnnD,EAAK6X,EAAKhZ,MAAO,MAE7BsoD,EAAYnnD,EAAK6X,EAAKhZ,MAAOyoD,EAAe,IAE5ChxC,QAAQ,OAAS,IAErB2vC,EADE3kC,EACI2kC,EAAI57C,MAAM,MAAMqM,KAAI,SAAS+xC,GACjC,MAAO,KAAOA,KACb/9C,KAAK,MAAMg+C,OAAO,GAEf,KAAOzC,EAAI57C,MAAM,MAAMqM,KAAI,SAAS+xC,GACxC,MAAO,MAAQA,KACd/9C,KAAK,OAIZu7C,EAAMjmD,EAAI4mD,QAAQ,aAAc,YAGhC/U,EAAY1zC,GAAO,CACrB,GAAImjB,GAASniB,EAAI2lB,MAAM,SACrB,OAAOmhC,GAET9nD,EAAOogD,KAAK4H,UAAU,GAAKhnD,IAClB2lB,MAAM,iCACb3mB,EAAOA,EAAKuqD,OAAO,EAAGvqD,EAAK4G,OAAS,GACpC5G,EAAO6B,EAAI4mD,QAAQzoD,EAAM,UAEzBA,EAAOA,EAAK+M,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAChBA,QAAQ,WAAY,KAChC/M,EAAO6B,EAAI4mD,QAAQzoD,EAAM,WAI7B,OAAOA,EAAO,KAAO8nD,EA2BvB,SAAS38B,EAAQq/B,GACf,OAAOhlD,MAAM2lB,QAAQq/B,GAIvB,SAASzX,EAAU7oC,GACjB,MAAsB,kBAARA,EAIhB,SAASspC,EAAOtpC,GACd,OAAe,OAARA,EAST,SAASs/B,EAASt/B,GAChB,MAAsB,iBAARA,EAIhB,SAASu/B,EAASv/B,GAChB,MAAsB,iBAARA,EAShB,SAASwpC,EAAYxpC,GACnB,YAAe,IAARA,EAIT,SAAS0Y,EAAS6nC,GAChB,OAAOxmD,EAASwmD,IAA8B,oBAAvBr3B,EAAeq3B,GAIxC,SAASxmD,EAASiG,GAChB,MAAsB,iBAARA,GAA4B,OAARA,EAIpC,SAASsY,EAAOziB,GACd,OAAOkE,EAASlE,IAA4B,kBAAtBqzB,EAAerzB,GAIvC,SAASupC,EAAQtlC,GACf,OAAOC,EAASD,KACW,mBAAtBovB,EAAepvB,IAA2BA,aAAaiC,OAI9D,SAASqG,EAAWpC,GAClB,MAAsB,mBAARA,EAgBhB,SAASkpB,EAAelzB,GACtB,OAAOC,OAAOkB,UAAUsQ,SAAS/R,KAAKM,GAIxC,SAASq0C,EAAIrzC,GACX,OAAOA,EAAI,GAAK,IAAMA,EAAEyQ,SAAS,IAAMzQ,EAAEyQ,SAAS,IApbpDpS,EAAQmrD,SAAW,SAASzgD,GAI1B,GAHIypC,EAAY4U,KACdA,EAAetmC,EAAQq/B,IAAIsJ,YAAc,IAC3C1gD,EAAMA,EAAI6hC,eACLyc,EAAOt+C,GACV,GAAI,IAAIsT,OAAO,MAAQtT,EAAM,MAAO,KAAKgD,KAAKq7C,GAAe,CAC3D,IAAIsC,EAAM5oC,EAAQ4oC,IAClBrC,EAAOt+C,GAAO,WACZ,IAAIiyC,EAAM38C,EAAQ8G,OAAOT,MAAMrG,EAASsG,WACxCV,EAAQmB,MAAM,YAAa2D,EAAK2gD,EAAK1O,SAGvCqM,EAAOt+C,GAAO,aAGlB,OAAOs+C,EAAOt+C,IAoChB1K,EAAQiH,QAAUA,EAIlBA,EAAQmiD,OAAS,CACf,KAAS,CAAC,EAAG,IACb,OAAW,CAAC,EAAG,IACf,UAAc,CAAC,EAAG,IAClB,QAAY,CAAC,EAAG,IAChB,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,QAAY,CAAC,GAAI,IACjB,IAAQ,CAAC,GAAI,IACb,OAAW,CAAC,GAAI,KAIlBniD,EAAQ0iD,OAAS,CACf,QAAW,OACX,OAAU,SACV,QAAW,SACX,UAAa,OACb,KAAQ,OACR,OAAU,QACV,KAAQ,UAER,OAAU,OAkRZ3pD,EAAQ4rB,QAAUA,EAKlB5rB,EAAQwzC,UAAYA,EAKpBxzC,EAAQi0C,OAASA,EAKjBj0C,EAAQsrD,kBAHR,SAA2B3gD,GACzB,OAAc,MAAPA,GAOT3K,EAAQiqC,SAAWA,EAKnBjqC,EAAQkqC,SAAWA,EAKnBlqC,EAAQwyB,SAHR,SAAkB7nB,GAChB,MAAsB,iBAARA,GAOhB3K,EAAQm0C,YAAcA,EAKtBn0C,EAAQqjB,SAAWA,EAKnBrjB,EAAQ0E,SAAWA,EAKnB1E,EAAQijB,OAASA,EAMjBjjB,EAAQ+pC,QAAUA,EAKlB/pC,EAAQ+M,WAAaA,EAUrB/M,EAAQurD,YARR,SAAqB5gD,GACnB,OAAe,OAARA,GACe,kBAARA,GACQ,iBAARA,GACQ,iBAARA,GACQ,iBAARA,QACQ,IAARA,GAIhB3K,EAAQ4pB,SAAW,EAAQ,KAY3B,IAAI4hC,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACxD,MAAO,MAAO,OAG5B,SAASC,IACP,IAAIjrD,EAAI,IAAIonB,KACRnhB,EAAO,CAACuuC,EAAIx0C,EAAEkrD,YACN1W,EAAIx0C,EAAEmrD,cACN3W,EAAIx0C,EAAEorD,eAAe5+C,KAAK,KACtC,MAAO,CAACxM,EAAEqrD,UAAWL,EAAOhrD,EAAEsrD,YAAarlD,GAAMuG,KAAK,KAqCxD,SAASjL,EAAe8iD,EAAKnZ,GAC3B,OAAO9qC,OAAOkB,UAAUC,eAAe1B,KAAKwkD,EAAKnZ,GAjCnD1rC,EAAQoG,IAAM,WACZR,EAAQQ,IAAI,UAAWqlD,IAAazrD,EAAQ8G,OAAOT,MAAMrG,EAASsG,aAiBpEtG,EAAQ+rD,SAAW,EAAQ,KAE3B/rD,EAAQspD,QAAU,SAAS0C,EAAQ5+B,GAEjC,IAAKA,IAAQ1oB,EAAS0oB,GAAM,OAAO4+B,EAInC,IAFA,IAAI5/C,EAAOxL,OAAOwL,KAAKghB,GACnBltB,EAAIkM,EAAK/E,OACNnH,KACL8rD,EAAO5/C,EAAKlM,IAAMktB,EAAIhhB,EAAKlM,IAE7B,OAAO8rD,GAOT,IAAIC,EAA6C,oBAAXhrD,OAAyBA,OAAO,8BAA2BwC,EA0DjG,SAASyoD,EAAsBC,EAAQC,GAKrC,IAAKD,EAAQ,CACX,IAAIE,EAAY,IAAI3lD,MAAM,2CAC1B2lD,EAAUF,OAASA,EACnBA,EAASE,EAEX,OAAOD,EAAGD,GAlEZnsD,EAAQssD,UAAY,SAAmBC,GACrC,GAAwB,mBAAbA,EACT,MAAM,IAAI3nD,UAAU,oDAEtB,GAAIqnD,GAA4BM,EAASN,GAA2B,CAClE,IAAIr7C,EACJ,GAAkB,mBADdA,EAAK27C,EAASN,IAEhB,MAAM,IAAIrnD,UAAU,iEAKtB,OAHAhE,OAAOC,eAAe+P,EAAIq7C,EAA0B,CAClD9qD,MAAOyP,EAAI9P,YAAY,EAAO2N,UAAU,EAAOC,cAAc,IAExDkC,EAGT,SAASA,IAQP,IAPA,IAAI47C,EAAgBC,EAChBC,EAAU,IAAIhiC,SAAQ,SAAUqZ,EAASuM,GAC3Ckc,EAAiBzoB,EACjB0oB,EAAgBnc,KAGd1oC,EAAO,GACF1H,EAAI,EAAGA,EAAIoG,UAAUe,OAAQnH,IACpC0H,EAAKyB,KAAK/C,UAAUpG,IAEtB0H,EAAKyB,MAAK,SAAUzC,EAAKzF,GACnByF,EACF6lD,EAAc7lD,GAEd4lD,EAAerrD,MAInB,IACEorD,EAASlmD,MAAMpC,KAAM2D,GACrB,MAAOhB,GACP6lD,EAAc7lD,GAGhB,OAAO8lD,EAQT,OALA9rD,OAAO+rD,eAAe/7C,EAAIhQ,OAAOiK,eAAe0hD,IAE5CN,GAA0BrrD,OAAOC,eAAe+P,EAAIq7C,EAA0B,CAChF9qD,MAAOyP,EAAI9P,YAAY,EAAO2N,UAAU,EAAOC,cAAc,IAExD9N,OAAOgsD,iBACZh8C,EACAw3C,EAA0BmE,KAI9BvsD,EAAQssD,UAAUO,OAASZ,EAiD3BjsD,EAAQ8sD,YAlCR,SAAqBP,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAI3nD,UAAU,oDAMtB,SAASmoD,IAEP,IADA,IAAInlD,EAAO,GACF1H,EAAI,EAAGA,EAAIoG,UAAUe,OAAQnH,IACpC0H,EAAKyB,KAAK/C,UAAUpG,IAGtB,IAAI8sD,EAAUplD,EAAKoE,MACnB,GAAuB,mBAAZghD,EACT,MAAM,IAAIpoD,UAAU,8CAEtB,IAAIN,EAAOL,KACPmoD,EAAK,WACP,OAAOY,EAAQ3mD,MAAM/B,EAAMgC,YAI7BimD,EAASlmD,MAAMpC,KAAM2D,GAClB08C,MAAK,SAASj6C,GAAOoY,EAAQrT,SAASg9C,EAAI,KAAM/hD,MAC3C,SAAS4iD,GAAOxqC,EAAQrT,SAAS88C,EAAuBe,EAAKb,MAMvE,OAHAxrD,OAAO+rD,eAAeI,EAAensD,OAAOiK,eAAe0hD,IAC3D3rD,OAAOgsD,iBAAiBG,EACA3E,EAA0BmE,IAC3CQ,K,wCC5rBT,IAAI5qD,EAAO,EAAQ,GACfD,EAAS,EAAQ,GAEjB2C,EAAQ3C,EADC,wBACkBA,EADlB,sBACmC,KAE/CjC,EAAOD,QAAU,SAAUyB,EAAKN,GAC/B,OAAO0D,EAAMpD,KAASoD,EAAMpD,QAAiBgC,IAAVtC,EAAsBA,EAAQ,MAChE,WAAY,IAAIkI,KAAK,CACtBnE,QAAS/C,EAAK+C,QACd7D,KAAM,EAAQ,IAAgB,OAAS,SACvC6rD,UAAW,0C,gBCRb,IAAIj8C,EAAY,EAAQ,IACpBK,EAAW,EAAQ,GACnBsB,EAAkB,EAAQ,IAC9B3S,EAAOD,QAAU,SAAUmtD,GACzB,OAAO,SAAUn7C,EAAOo7C,EAAItoC,GAC1B,IAGI3jB,EAHAuE,EAAIuL,EAAUe,GACd3K,EAASiK,EAAS5L,EAAE2B,QACpB0E,EAAQ6G,EAAgBkS,EAAWzd,GAIvC,GAAI8lD,GAAeC,GAAMA,GAAI,KAAO/lD,EAAS0E,GAG3C,IAFA5K,EAAQuE,EAAEqG,OAEG5K,EAAO,OAAO,OAEtB,KAAMkG,EAAS0E,EAAOA,IAAS,IAAIohD,GAAephD,KAASrG,IAC5DA,EAAEqG,KAAWqhD,EAAI,OAAOD,GAAephD,GAAS,EACpD,OAAQohD,IAAgB,K,cCpB9BntD,EAAQyF,EAAI7E,OAAOkH,uB,gBCCnB,IAAIs6C,EAAM,EAAQ,IAClBniD,EAAOD,QAAUiG,MAAM2lB,SAAW,SAAiBjhB,GACjD,MAAmB,SAAZy3C,EAAIz3C,K,gBCHb,IAAIkL,EAAW,EAAQ,EAAR,CAAkB,YAC7Bw3C,GAAe,EAEnB,IACE,IAAIC,EAAQ,CAAC,GAAGz3C,KAChBy3C,EAAc,OAAI,WAAcD,GAAe,GAE/CpnD,MAAM4V,KAAKyxC,GAAO,WAAc,MAAM,KACtC,MAAO7oD,IAETxE,EAAOD,QAAU,SAAUwE,EAAM+oD,GAC/B,IAAKA,IAAgBF,EAAc,OAAO,EAC1C,IAAIvgD,GAAO,EACX,IACE,IAAI3F,EAAM,CAAC,GACPqU,EAAOrU,EAAI0O,KACf2F,EAAK3D,KAAO,WAAc,MAAO,CAAEC,KAAMhL,GAAO,IAChD3F,EAAI0O,GAAY,WAAc,OAAO2F,GACrChX,EAAK2C,GACL,MAAO1C,IACT,OAAOqI,I,6BClBT,IAAIzH,EAAW,EAAQ,GACvBpF,EAAOD,QAAU,WACf,IAAI2I,EAAOtD,EAASpB,MAChBkO,EAAS,GAMb,OALIxJ,EAAKzG,SAAQiQ,GAAU,KACvBxJ,EAAK6kD,aAAYr7C,GAAU,KAC3BxJ,EAAK8kD,YAAWt7C,GAAU,KAC1BxJ,EAAK+kD,UAASv7C,GAAU,KACxBxJ,EAAKglD,SAAQx7C,GAAU,KACpBA,I,6BCTT,IAAIU,EAAU,EAAQ,IAClB+6C,EAAc5vC,OAAOlc,UAAU0C,KAInCvE,EAAOD,QAAU,SAAU6D,EAAGX,GAC5B,IAAIsB,EAAOX,EAAEW,KACb,GAAoB,mBAATA,EAAqB,CAC9B,IAAI2N,EAAS3N,EAAKnE,KAAKwD,EAAGX,GAC1B,GAAsB,iBAAXiP,EACT,MAAM,IAAIvN,UAAU,sEAEtB,OAAOuN,EAET,GAAmB,WAAfU,EAAQhP,GACV,MAAM,IAAIe,UAAU,+CAEtB,OAAOgpD,EAAYvtD,KAAKwD,EAAGX,K,6BClB7B,EAAQ,KACR,IAAIb,EAAW,EAAQ,IACnBD,EAAO,EAAQ,IACf6K,EAAQ,EAAQ,GAChB1F,EAAU,EAAQ,IAClB0L,EAAM,EAAQ,GACd46C,EAAa,EAAQ,KAErBxN,EAAUptC,EAAI,WAEd66C,GAAiC7gD,GAAM,WAIzC,IAAIi+C,EAAK,IAMT,OALAA,EAAG1mD,KAAO,WACR,IAAI2N,EAAS,GAEb,OADAA,EAAO47C,OAAS,CAAE3oD,EAAG,KACd+M,GAEyB,MAA3B,GAAG3E,QAAQ09C,EAAI,WAGpB8C,EAAoC,WAEtC,IAAI9C,EAAK,OACL+C,EAAe/C,EAAG1mD,KACtB0mD,EAAG1mD,KAAO,WAAc,OAAOypD,EAAa5nD,MAAMpC,KAAMqC,YACxD,IAAI6L,EAAS,KAAKxF,MAAMu+C,GACxB,OAAyB,IAAlB/4C,EAAO9K,QAA8B,MAAd8K,EAAO,IAA4B,MAAdA,EAAO,GANpB,GASxClS,EAAOD,QAAU,SAAUoR,EAAK/J,EAAQ7C,GACtC,IAAI0pD,EAASj7C,EAAI7B,GAEb+8C,GAAuBlhD,GAAM,WAE/B,IAAIvH,EAAI,GAER,OADAA,EAAEwoD,GAAU,WAAc,OAAO,GACZ,GAAd,GAAG98C,GAAK1L,MAGb0oD,EAAoBD,GAAuBlhD,GAAM,WAEnD,IAAIohD,GAAa,EACbnD,EAAK,IAST,OARAA,EAAG1mD,KAAO,WAAiC,OAAnB6pD,GAAa,EAAa,MACtC,UAARj9C,IAGF85C,EAAG18C,YAAc,GACjB08C,EAAG18C,YAAY6xC,GAAW,WAAc,OAAO6K,IAEjDA,EAAGgD,GAAQ,KACHG,UACL5qD,EAEL,IACG0qD,IACAC,GACQ,YAARh9C,IAAsB08C,GACd,UAAR18C,IAAoB48C,EACrB,CACA,IAAIM,EAAqB,IAAIJ,GACzBK,EAAM/pD,EACR+C,EACA2mD,EACA,GAAG98C,IACH,SAAyBo9C,EAAc39B,EAAQ03B,EAAKkG,EAAMC,GACxD,OAAI79B,EAAOrsB,OAASqpD,EACdM,IAAwBO,EAInB,CAAE52C,MAAM,EAAM3W,MAAOmtD,EAAmBjuD,KAAKwwB,EAAQ03B,EAAKkG,IAE5D,CAAE32C,MAAM,EAAM3W,MAAOqtD,EAAanuD,KAAKkoD,EAAK13B,EAAQ49B,IAEtD,CAAE32C,MAAM,MAGf62C,EAAQJ,EAAI,GACZK,EAAOL,EAAI,GAEflsD,EAASmH,OAAO1H,UAAWsP,EAAKu9C,GAChCvsD,EAAK4b,OAAOlc,UAAWosD,EAAkB,GAAV7mD,EAG3B,SAAU+F,EAAQzC,GAAO,OAAOikD,EAAKvuD,KAAK+M,EAAQnJ,KAAM0G,IAGxD,SAAUyC,GAAU,OAAOwhD,EAAKvuD,KAAK+M,EAAQnJ,W,gBC5FrD,IAAI3B,EAAM,EAAQ,IACdjC,EAAO,EAAQ,KACfyS,EAAc,EAAQ,IACtBzN,EAAW,EAAQ,GACnBiM,EAAW,EAAQ,GACnB0B,EAAY,EAAQ,IACpB67C,EAAQ,GACRC,EAAS,IACT9uD,EAAUC,EAAOD,QAAU,SAAU0+B,EAAU3pB,EAASnE,EAAIjI,EAAMkN,GACpE,IAGIxO,EAAQkQ,EAAMC,EAAUrF,EAHxByF,EAAS/B,EAAW,WAAc,OAAO6oB,GAAc1rB,EAAU0rB,GACjEj5B,EAAInD,EAAIsO,EAAIjI,EAAMoM,EAAU,EAAI,GAChChJ,EAAQ,EAEZ,GAAqB,mBAAV6L,EAAsB,MAAMhT,UAAU85B,EAAW,qBAE5D,GAAI5rB,EAAY8E,IAAS,IAAKvQ,EAASiK,EAASotB,EAASr3B,QAASA,EAAS0E,EAAOA,IAEhF,IADAoG,EAAS4C,EAAUtP,EAAEJ,EAASkS,EAAOmnB,EAAS3yB,IAAQ,GAAIwL,EAAK,IAAM9R,EAAEi5B,EAAS3yB,OACjE8iD,GAAS18C,IAAW28C,EAAQ,OAAO38C,OAC7C,IAAKqF,EAAWI,EAAOvX,KAAKq+B,KAAannB,EAAOC,EAASK,QAAQC,MAEtE,IADA3F,EAAS9R,EAAKmX,EAAU/R,EAAG8R,EAAKpW,MAAO4T,MACxB85C,GAAS18C,IAAW28C,EAAQ,OAAO38C,IAG9C08C,MAAQA,EAChB7uD,EAAQ8uD,OAASA,G,gBCxBjB,IACIC,EADS,EAAQ,GACEA,UAEvB9uD,EAAOD,QAAU+uD,GAAaA,EAAUC,WAAa,I,6BCFrD,IAAI9sD,EAAS,EAAQ,GACjBK,EAAU,EAAQ,GAClBF,EAAW,EAAQ,IACnBqQ,EAAc,EAAQ,IACtB2oC,EAAO,EAAQ,IACf4T,EAAQ,EAAQ,IAChBz8C,EAAa,EAAQ,IACrB9N,EAAW,EAAQ,GACnBuI,EAAQ,EAAQ,GAChBsG,EAAc,EAAQ,IACtB27C,EAAiB,EAAQ,IACzBC,EAAoB,EAAQ,IAEhClvD,EAAOD,QAAU,SAAUyN,EAAM4M,EAAS+0C,EAASC,EAAQ39C,EAAQ49C,GACjE,IAAI50C,EAAOxY,EAAOuL,GACduJ,EAAI0D,EACJ60C,EAAQ79C,EAAS,MAAQ,MACzBwG,EAAQlB,GAAKA,EAAElV,UACf4D,EAAI,GACJ8pD,EAAY,SAAUp+C,GACxB,IAAIR,EAAKsH,EAAM9G,GACf/O,EAAS6V,EAAO9G,EACP,UAAPA,EAAkB,SAAUhM,GAC1B,QAAOkqD,IAAY5qD,EAASU,KAAawL,EAAGvQ,KAAK4D,KAAY,IAANmB,EAAU,EAAIA,IAC5D,OAAPgM,EAAe,SAAahM,GAC9B,QAAOkqD,IAAY5qD,EAASU,KAAawL,EAAGvQ,KAAK4D,KAAY,IAANmB,EAAU,EAAIA,IAC5D,OAAPgM,EAAe,SAAahM,GAC9B,OAAOkqD,IAAY5qD,EAASU,QAAK3B,EAAYmN,EAAGvQ,KAAK4D,KAAY,IAANmB,EAAU,EAAIA,IAChE,OAAPgM,EAAe,SAAahM,GAAqC,OAAhCwL,EAAGvQ,KAAK4D,KAAY,IAANmB,EAAU,EAAIA,GAAWnB,MACxE,SAAamB,EAAGyL,GAAwC,OAAnCD,EAAGvQ,KAAK4D,KAAY,IAANmB,EAAU,EAAIA,EAAGyL,GAAW5M,QAGvE,GAAgB,mBAAL+S,IAAqBs4C,GAAWp3C,EAAMS,UAAY1L,GAAM,YACjE,IAAI+J,GAAIjC,UAAU8C,WAMb,CACL,IAAI43C,EAAW,IAAIz4C,EAEf04C,EAAiBD,EAASF,GAAOD,EAAU,IAAM,EAAG,IAAMG,EAE1DE,EAAuB1iD,GAAM,WAAcwiD,EAASljD,IAAI,MAExDqjD,EAAmBr8C,GAAY,SAAUiI,GAAQ,IAAIxE,EAAEwE,MAEvDq0C,GAAcP,GAAWriD,GAAM,WAIjC,IAFA,IAAI6iD,EAAY,IAAI94C,EAChBjL,EAAQ,EACLA,KAAS+jD,EAAUP,GAAOxjD,EAAOA,GACxC,OAAQ+jD,EAAUvjD,KAAK,MAEpBqjD,KACH54C,EAAIqD,GAAQ,SAAU9W,EAAQm7B,GAC5BlsB,EAAWjP,EAAQyT,EAAGvJ,GACtB,IAAI9E,EAAOwmD,EAAkB,IAAIz0C,EAAQnX,EAAQyT,GAEjD,OADgBvT,MAAZi7B,GAAuBuwB,EAAMvwB,EAAUhtB,EAAQ/I,EAAK4mD,GAAQ5mD,GACzDA,MAEP7G,UAAYoW,EACdA,EAAM1J,YAAcwI,IAElB24C,GAAwBE,KAC1BL,EAAU,UACVA,EAAU,OACV99C,GAAU89C,EAAU,SAElBK,GAAcH,IAAgBF,EAAUD,GAExCD,GAAWp3C,EAAM4U,cAAc5U,EAAM4U,WApCzC9V,EAAIq4C,EAAOU,eAAe11C,EAAS5M,EAAMiE,EAAQ69C,GACjD78C,EAAYsE,EAAElV,UAAWstD,GACzB/T,EAAKC,MAAO,EA4Cd,OAPA4T,EAAel4C,EAAGvJ,GAElB/H,EAAE+H,GAAQuJ,EACVzU,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAKkU,GAAK0D,GAAOhV,GAEpD4pD,GAASD,EAAOW,UAAUh5C,EAAGvJ,EAAMiE,GAEjCsF,I,gBCpET,IAfA,IASIi5C,EATA/tD,EAAS,EAAQ,GACjBE,EAAO,EAAQ,IACf0C,EAAM,EAAQ,IACdsR,EAAQtR,EAAI,eACZuR,EAAOvR,EAAI,QACX+V,KAAS3Y,EAAO8R,cAAe9R,EAAOgS,UACtCgC,EAAS2E,EACT3a,EAAI,EAIJgwD,EAAyB,iHAE3BvjD,MAAM,KAEDzM,EAPC,IAQF+vD,EAAQ/tD,EAAOguD,EAAuBhwD,QACxCkC,EAAK6tD,EAAMnuD,UAAWsU,GAAO,GAC7BhU,EAAK6tD,EAAMnuD,UAAWuU,GAAM,IACvBH,GAAS,EAGlBjW,EAAOD,QAAU,CACf6a,IAAKA,EACL3E,OAAQA,EACRE,MAAOA,EACPC,KAAMA,I,iBC1BR,kBAAmB,EAAQ,KAAS85C,aAChCC,EAAc,EAAQ,KAAyBA,YAC/CC,EAAW,EAAQ,KAEnBC,EAAc,CACdC,WAAY,aACZC,SAAU,WACVC,YAAa,cACblsB,QAAS,WA2Bb,SAASmsB,EAAe9oD,GACpB,IAAI+oD,EAAO,GACP1H,EAAO,GACX,IAAI,IAAI/oD,KAAK0H,EAAM,CACf,IAAI+C,EAAM/C,EAAK1H,GAEf,GADoByK,GAAOA,EAAIimD,iBAE3B,IAAI,IAAIC,KAAKlmD,EAAK,CACd,IAAK2lD,EAAYO,IAAU,qBAAJA,EAEnB,MAAM,IAAInqD,MAAM,wCADN,mBAAmBmqD,EAAE,MAGnC5H,EAAK4H,GAAKlmD,EAAIkmD,QAGlBF,EAAKtnD,KAAKsB,GAIlB,MAAO,CAACgmD,KAAMA,EAAM1H,KAAMA,GAG9B,SAAS6H,EAAgBC,EAAWJ,EAAM1H,EAAM+H,GAC5C,IAAInqD,EAAU,GAWd,OATAA,EAAUA,EAAQmB,OAyDtB,SAAgCihD,GAC5B,IAAMA,EAAK1kB,QACP,MAAO,GAGX,IAAI19B,EAAU,CACVupD,EAAY,kBAGhB,IAAI,IAAIlwD,KAAK+oD,EAAK1kB,QACd19B,EAAQwC,KAAK8mD,EAAalH,EAAK1kB,QAAQrkC,KAK3C,OAFA2G,EAAQwC,KAAK,MAENxC,EAxEkBoqD,CAAuBhI,IAE1CiI,MACFrqD,EAAUA,EAAQmB,OAsC1B,SAAyBihD,EAAM0H,EAAMK,GACjC,GAAI/H,EAAKqH,EAAYC,aAAeI,EAAKtpD,OAAO,EAC5C,MAAO,GAQX,MAAO,CAEH+oD,EAAY,eACZY,EAAUhkD,KAAK,OAnDUmkD,CAAgBlI,EAAM0H,EAAMK,KAC7C3nD,KAAK,MAGjBxC,EAAUA,EAAQmB,OAItB,SAAgC+oD,EAAWJ,EAAM1H,GAC7C,IAAIpiD,EAAU,GAEd,IAAI+6C,GACAqH,EAAKqH,EAAYC,YAAe,UAChCtH,EAAKqH,EAAYE,WAAa,gBAC9BvH,EAAKqH,EAAYG,cAAgB,kBACjC,iBAGJ5pD,EAAQwC,KAAK+mD,EAAYxO,IAEP,IAAd+O,EAAKtpD,QACLR,EAAQwC,KAAK,gCAAgC0nD,EAAU,aAG3D,IAAI,IAAI7wD,KAAKywD,EAAM,CACf,IAAIhU,EAAMgU,EAAKzwD,GACXqoD,EAAM4H,EAAaxT,GAEvB91C,EAAQwC,KAAKk/C,GAGbU,EAAK1kB,UACL19B,EAAQwC,KAAK,IACbxC,EAAQwC,KAAK,oDAGjB,OAAOxC,EAhCkBuqD,CAAuBL,EAAWJ,EAAM1H,IAoErE,SAASoI,EAAWxqD,EAASoiD,EAAM+H,GAC/B,IAAIM,GAAsBrI,EAAKqH,EAAYC,YAE3C,GAAIF,IAAa,CACb,GAAIiB,EAAqB,CACrB,IAAI1qD,EAAM,IAAIF,MAEd,MADAE,EAAII,MAAQH,EAAQmG,KAAK,MACnBpG,EAEN,IAAI,IAAI1G,KAAK2G,EAASjB,EAAQmB,MAAMF,EAAQ3G,IAIhDgxD,MACII,EACAC,EAAe1qD,GAEfqH,YAAW,WACPqjD,EAAe1qD,KAChB,IAKf,SAAS0qD,EAAe1qD,GACpB,IAAI,IAAI3G,KAAK2G,EAASjB,EAAQmB,MAAMF,EAAQ3G,IAE5C,MADAwG,MAAM8qD,gBAAkBh9B,IAClB,IAAI9tB,MAGd,SAAS+qD,IACL,IAAIC,EAA4BhrD,MAAM8qD,gBACtC9qD,MAAM8qD,gBAAkBh9B,IACxB,IAAIm9B,GAAkB,IAAIjrD,OAAQM,MAClCN,MAAM8qD,gBAAkBE,EAExB,IAAIE,EAAQD,EAAgBhlD,MAAM,MAE9BklD,EAAkB,GACtB,IAAI,IAAI3xD,KAAK0xD,EAAO,CAChB,IAAI7G,EAAO6G,EAAM1xD,GACJ,UAAT6qD,KAGqD,IAArDA,EAAKnyC,QAAQ,qCAGoB,IAAjCmyC,EAAKnyC,QAAQ,gBAKjBi5C,EAAgBxoD,KAAK0hD,IAIzB,OADgB8G,EAmBpB,SAASX,IACL,MAAyB,oBAAX9sD,OAvMlBnE,EAAOD,QAEP,SAAgB+wD,GACZ,GAAIA,EACA,OAAOA,EAIX,IAAIe,EAASpB,EAAe,GAAG1qD,MAAM3F,KAAKiG,UAAW,IACjDqqD,EAAOmB,EAAOnB,KACd1H,EAAO6I,EAAO7I,KAEd+H,EAAYS,IAGZ5qD,EAAUiqD,EAAgBC,EAAWJ,EAAM1H,EAAM+H,GAMrD,OAHAK,EAAWxqD,EAASoiD,EAAM+H,GAGnBD,K,gDChCX,YAEA,IAAIgB,EAAW,EAAQ,KACnBC,EAAK,EAAQ,KACbC,EAAU,gCACVC,EAAa,0CAEbC,EAAO,IAAIn0C,OAAO,gLAQtB,SAASo0C,EAAS7J,GAChB,OAAQA,GAAY,IAAIn2C,WAAW5E,QAAQ2kD,EAAM,IAenD,IAAIE,EAAQ,CACV,CAAC,IAAK,QACN,CAAC,IAAK,SACN,SAAkBC,GAChB,OAAOA,EAAQ9kD,QAAQ,KAAM,MAE/B,CAAC,IAAK,YACN,CAAC,IAAK,OAAQ,GACd,CAAC+kD,IAAK,YAAQ9uD,EAAW,EAAG,GAC5B,CAAC,UAAW,YAAQA,EAAW,GAC/B,CAAC8uD,IAAK,gBAAY9uD,EAAW,EAAG,IAW9B+uD,EAAS,CAAEvI,KAAM,EAAGwI,MAAO,GAc/B,SAASC,EAAUC,GACjB,IAYIlxD,EALAmxD,GALkB,oBAAXxuD,OAAoCA,YACpB,IAAXlC,EAAoCA,EAC3B,oBAAToC,KAAkCA,KACjC,IAEQsuD,UAAY,GAGjCC,EAAmB,GACnBrwD,SAHJmwD,EAAMA,GAAOC,GAMb,GAAI,UAAYD,EAAIG,SAClBD,EAAmB,IAAIE,EAAIlb,SAAS8a,EAAIK,UAAW,SAC9C,GAAI,WAAaxwD,EAEtB,IAAKf,KADLoxD,EAAmB,IAAIE,EAAIJ,EAAK,IACpBH,SAAeK,EAAiBpxD,QACvC,GAAI,WAAae,EAAM,CAC5B,IAAKf,KAAOkxD,EACNlxD,KAAO+wD,IACXK,EAAiBpxD,GAAOkxD,EAAIlxD,SAGGgC,IAA7BovD,EAAiBZ,UACnBY,EAAiBZ,QAAUA,EAAQvkD,KAAKilD,EAAIM,OAIhD,OAAOJ,EAkBT,SAASK,EAAgBZ,GACvBA,EAAUF,EAASE,GACnB,IAAIlrC,EAAQ8qC,EAAW1tD,KAAK8tD,GAE5B,MAAO,CACLQ,SAAU1rC,EAAM,GAAKA,EAAM,GAAGzZ,cAAgB,GAC9CskD,UAAW7qC,EAAM,GACjBopB,KAAMppB,EAAM,IAsDhB,SAAS2rC,EAAIT,EAASM,EAAUO,GAG9B,GAFAb,EAAUF,EAASE,KAEbruD,gBAAgB8uD,GACpB,OAAO,IAAIA,EAAIT,EAASM,EAAUO,GAGpC,IAAIC,EAAUC,EAAWvS,EAAOwS,EAAavnD,EAAOtK,EAChD8xD,EAAelB,EAAMrsD,QACrBxD,SAAcowD,EACdY,EAAMvvD,KACN/D,EAAI,EAqCR,IAxBI,WAAasC,GAAQ,WAAaA,IACpC2wD,EAASP,EACTA,EAAW,MAGTO,GAAU,mBAAsBA,IAAQA,EAASnB,EAAGlR,OAExD8R,EAAWF,EAAUE,GAMrBQ,IADAC,EAAYH,EAAgBZ,GAAW,KACjBQ,WAAaO,EAAUpB,QAC7CuB,EAAIvB,QAAUoB,EAAUpB,SAAWmB,GAAYR,EAASX,QACxDuB,EAAIV,SAAWO,EAAUP,UAAYF,EAASE,UAAY,GAC1DR,EAAUe,EAAU7iB,KAMf6iB,EAAUpB,UAASsB,EAAa,GAAK,CAAC,OAAQ,aAE5CrzD,EAAIqzD,EAAalsD,OAAQnH,IAGH,mBAF3BozD,EAAcC,EAAarzD,KAO3B4gD,EAAQwS,EAAY,GACpB7xD,EAAM6xD,EAAY,GAEdxS,GAAUA,EACZ0S,EAAI/xD,GAAO6wD,EACF,iBAAoBxR,IACvB/0C,EAAQumD,EAAQ15C,QAAQkoC,MACxB,iBAAoBwS,EAAY,IAClCE,EAAI/xD,GAAO6wD,EAAQtsD,MAAM,EAAG+F,GAC5BumD,EAAUA,EAAQtsD,MAAM+F,EAAQunD,EAAY,MAE5CE,EAAI/xD,GAAO6wD,EAAQtsD,MAAM+F,GACzBumD,EAAUA,EAAQtsD,MAAM,EAAG+F,MAGrBA,EAAQ+0C,EAAMt8C,KAAK8tD,MAC7BkB,EAAI/xD,GAAOsK,EAAM,GACjBumD,EAAUA,EAAQtsD,MAAM,EAAG+F,EAAMA,QAGnCynD,EAAI/xD,GAAO+xD,EAAI/xD,IACb2xD,GAAYE,EAAY,IAAKV,EAASnxD,IAAa,GAOjD6xD,EAAY,KAAIE,EAAI/xD,GAAO+xD,EAAI/xD,GAAKkM,gBAhCtC2kD,EAAUgB,EAAYhB,GAwCtBa,IAAQK,EAAIf,MAAQU,EAAOK,EAAIf,QAM/BW,GACCR,EAASX,SACkB,MAA3BuB,EAAIR,SAASn0B,OAAO,KACF,KAAjB20B,EAAIR,UAAyC,KAAtBJ,EAASI,YAEpCQ,EAAIR,SAjJR,SAAiBI,EAAU9I,GACzB,GAAiB,KAAb8I,EAAiB,OAAO9I,EAQ5B,IANA,IAAIn3B,GAAQm3B,GAAQ,KAAK39C,MAAM,KAAK3G,MAAM,GAAI,GAAGgC,OAAOorD,EAASzmD,MAAM,MACnEzM,EAAIizB,EAAK9rB,OACTutB,EAAOzB,EAAKjzB,EAAI,GAChBkJ,GAAU,EACVqqD,EAAK,EAEFvzD,KACW,MAAZizB,EAAKjzB,GACPizB,EAAKrK,OAAO5oB,EAAG,GACM,OAAZizB,EAAKjzB,IACdizB,EAAKrK,OAAO5oB,EAAG,GACfuzD,KACSA,IACC,IAANvzD,IAASkJ,GAAU,GACvB+pB,EAAKrK,OAAO5oB,EAAG,GACfuzD,KAOJ,OAHIrqD,GAAS+pB,EAAK/pB,QAAQ,IACb,MAATwrB,GAAyB,OAATA,GAAezB,EAAK9pB,KAAK,IAEtC8pB,EAAKnmB,KAAK,KAwHA+2B,CAAQyvB,EAAIR,SAAUJ,EAASI,WAQ3CjB,EAASyB,EAAIE,KAAMF,EAAIV,YAC1BU,EAAIG,KAAOH,EAAII,SACfJ,EAAIE,KAAO,IAMbF,EAAIK,SAAWL,EAAIM,SAAW,GAC1BN,EAAIvQ,OACNqQ,EAAcE,EAAIvQ,KAAKt2C,MAAM,KAC7B6mD,EAAIK,SAAWP,EAAY,IAAM,GACjCE,EAAIM,SAAWR,EAAY,IAAM,IAGnCE,EAAIxH,OAASwH,EAAIV,UAAYU,EAAIG,MAAyB,UAAjBH,EAAIV,SACzCU,EAAIV,SAAU,KAAMU,EAAIG,KACxB,OAKJH,EAAIP,KAAOO,EAAIphD,WAiIjB2gD,EAAIjxD,UAAY,CAAE4I,IAjHlB,SAAaqpD,EAAM5yD,EAAOyP,GACxB,IAAI4iD,EAAMvvD,KAEV,OAAQ8vD,GACN,IAAK,QACC,iBAAoB5yD,GAASA,EAAMkG,SACrClG,GAASyP,GAAMohD,EAAGlR,OAAO3/C,IAG3BqyD,EAAIO,GAAQ5yD,EACZ,MAEF,IAAK,OACHqyD,EAAIO,GAAQ5yD,EAEP4wD,EAAS5wD,EAAOqyD,EAAIV,UAGd3xD,IACTqyD,EAAIG,KAAOH,EAAII,SAAU,IAAKzyD,IAH9BqyD,EAAIG,KAAOH,EAAII,SACfJ,EAAIO,GAAQ,IAKd,MAEF,IAAK,WACHP,EAAIO,GAAQ5yD,EAERqyD,EAAIE,OAAMvyD,GAAS,IAAKqyD,EAAIE,MAChCF,EAAIG,KAAOxyD,EACX,MAEF,IAAK,OACHqyD,EAAIO,GAAQ5yD,EAER,QAAQuM,KAAKvM,IACfA,EAAQA,EAAMwL,MAAM,KACpB6mD,EAAIE,KAAOvyD,EAAM6K,MACjBwnD,EAAII,SAAWzyD,EAAM6L,KAAK,OAE1BwmD,EAAII,SAAWzyD,EACfqyD,EAAIE,KAAO,IAGb,MAEF,IAAK,WACHF,EAAIV,SAAW3xD,EAAMwM,cACrB6lD,EAAIvB,SAAWrhD,EACf,MAEF,IAAK,WACL,IAAK,OACH,GAAIzP,EAAO,CACT,IAAI6yD,EAAgB,aAATD,EAAsB,IAAM,IACvCP,EAAIO,GAAQ5yD,EAAM09B,OAAO,KAAOm1B,EAAOA,EAAO7yD,EAAQA,OAEtDqyD,EAAIO,GAAQ5yD,EAEd,MAEF,QACEqyD,EAAIO,GAAQ5yD,EAGhB,IAAK,IAAIjB,EAAI,EAAGA,EAAImyD,EAAMhrD,OAAQnH,IAAK,CACrC,IAAI+zD,EAAM5B,EAAMnyD,GAEZ+zD,EAAI,KAAIT,EAAIS,EAAI,IAAMT,EAAIS,EAAI,IAAItmD,eASxC,OANA6lD,EAAIxH,OAASwH,EAAIV,UAAYU,EAAIG,MAAyB,UAAjBH,EAAIV,SACzCU,EAAIV,SAAU,KAAMU,EAAIG,KACxB,OAEJH,EAAIP,KAAOO,EAAIphD,WAERohD,GAqCmBphD,SA3B5B,SAAkBq2C,GACXA,GAAa,mBAAsBA,IAAWA,EAAYuJ,EAAGvJ,WAElE,IAAIgK,EACAe,EAAMvvD,KACN6uD,EAAWU,EAAIV,SAEfA,GAAqD,MAAzCA,EAASj0B,OAAOi0B,EAASzrD,OAAS,KAAYyrD,GAAY,KAE1E,IAAI3gD,EAAS2gD,GAAYU,EAAIvB,QAAU,KAAO,IAe9C,OAbIuB,EAAIK,WACN1hD,GAAUqhD,EAAIK,SACVL,EAAIM,WAAU3hD,GAAU,IAAKqhD,EAAIM,UACrC3hD,GAAU,KAGZA,GAAUqhD,EAAIG,KAAOH,EAAIR,UAEzBP,EAAQ,iBAAoBe,EAAIf,MAAQhK,EAAU+K,EAAIf,OAASe,EAAIf,SACxDtgD,GAAU,MAAQsgD,EAAM5zB,OAAO,GAAK,IAAK4zB,EAAQA,GAExDe,EAAIvJ,OAAM93C,GAAUqhD,EAAIvJ,MAErB93C,IAST4gD,EAAIG,gBAAkBA,EACtBH,EAAIH,SAAWF,EACfK,EAAIX,SAAWA,EACfW,EAAIf,GAAKA,EAET/xD,EAAOD,QAAU+yD,I,kCC9bT9yD,EAAOD,QAgBb,SAAUyD,GAER,aAeA,IAGIywD,EAAU,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAQ1F,SAASC,EAAS3L,EAAG4L,GACjB,IAAIhvD,EAAIojD,EAAE,GACN33C,EAAI23C,EAAE,GACNjoD,EAAIioD,EAAE,GACNhoD,EAAIgoD,EAAE,GASV33C,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,GAAKsQ,EAAIrQ,GAAK4zD,EAAE,GAAK,UAAY,IAChC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,GAAKzL,EAAI7E,GAAK6zD,EAAE,GAAK,UAAY,IAChC,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,GAAK5E,EAAIqQ,GAAKujD,EAAE,GAAK,UAAY,IAChC,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,GAAKD,EAAI6E,GAAKgvD,EAAE,GAAK,WAAa,IACjC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAQhCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,GAAKsQ,EAAIrQ,GAAK4zD,EAAE,GAAK,UAAY,IAChC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,GAAKzL,EAAI7E,GAAK6zD,EAAE,GAAK,WAAa,IACjC,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,GAAK5E,EAAIqQ,GAAKujD,EAAE,GAAK,WAAa,IACjC,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,GAAKD,EAAI6E,GAAKgvD,EAAE,GAAK,SAAW,IAC/B,GAAKvjD,IAAM,IAAMtQ,EAAI,EAQhCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,GAAKsQ,EAAIrQ,GAAK4zD,EAAE,GAAK,WAAa,IACjC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,GAAKzL,EAAI7E,GAAK6zD,EAAE,GAAK,WAAa,IACjC,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,GAAK5E,EAAIqQ,GAAKujD,EAAE,IAAM,MAAQ,IAC7B,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,GAAKD,EAAI6E,GAAKgvD,EAAE,IAAM,WAAa,IAClC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAQhCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,GAAKsQ,EAAIrQ,GAAK4zD,EAAE,IAAM,WAAa,IAClC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,GAAKzL,EAAI7E,GAAK6zD,EAAE,IAAM,SAAW,IAChC,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,GAAK5E,EAAIqQ,GAAKujD,EAAE,IAAM,WAAa,IAClC,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,GAAKD,EAAI6E,GAAKgvD,EAAE,IAAM,WAAa,IAClC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAShCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAIrQ,EAAID,GAAKC,GAAK4zD,EAAE,GAAK,UAAY,IAChC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBtQ,EAAIsQ,GAAKtQ,GAAK6zD,EAAE,GAAK,WAAa,IACjC,EAAI5zD,IAAM,IAAM4E,EAAI,GACrByL,EAAIzL,GAAKyL,GAAKujD,EAAE,IAAM,UAAY,IACjC,GAAK7zD,IAAM,IAAMC,EAAI,GACtB4E,EAAI5E,GAAK4E,GAAKgvD,EAAE,GAAK,UAAY,IAChC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAQhCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAIrQ,EAAID,GAAKC,GAAK4zD,EAAE,GAAK,UAAY,IAChC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBtQ,EAAIsQ,GAAKtQ,GAAK6zD,EAAE,IAAM,SAAW,IAChC,EAAI5zD,IAAM,IAAM4E,EAAI,GACrByL,EAAIzL,GAAKyL,GAAKujD,EAAE,IAAM,UAAY,IACjC,GAAK7zD,IAAM,IAAMC,EAAI,GACtB4E,EAAI5E,GAAK4E,GAAKgvD,EAAE,GAAK,UAAY,IAChC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAQhCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAIrQ,EAAID,GAAKC,GAAK4zD,EAAE,GAAK,UAAY,IAChC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBtQ,EAAIsQ,GAAKtQ,GAAK6zD,EAAE,IAAM,WAAa,IAClC,EAAI5zD,IAAM,IAAM4E,EAAI,GACrByL,EAAIzL,GAAKyL,GAAKujD,EAAE,GAAK,UAAY,IAChC,GAAK7zD,IAAM,IAAMC,EAAI,GACtB4E,EAAI5E,GAAK4E,GAAKgvD,EAAE,GAAK,WAAa,IACjC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAQhCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAIrQ,EAAID,GAAKC,GAAK4zD,EAAE,IAAM,WAAa,IAClC,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBtQ,EAAIsQ,GAAKtQ,GAAK6zD,EAAE,GAAK,SAAW,IAC/B,EAAI5zD,IAAM,IAAM4E,EAAI,GACrByL,EAAIzL,GAAKyL,GAAKujD,EAAE,GAAK,WAAa,IACjC,GAAK7zD,IAAM,IAAMC,EAAI,GACtB4E,EAAI5E,GAAK4E,GAAKgvD,EAAE,IAAM,WAAa,IAClC,GAAKvjD,IAAM,IAAMtQ,EAAI,EAShCsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,EAAIC,GAAK4zD,EAAE,GAAK,OAAS,IACxB,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,EAAItQ,GAAK6zD,EAAE,GAAK,WAAa,IAC5B,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,EAAIyL,GAAKujD,EAAE,IAAM,WAAa,IAC7B,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,EAAI4E,GAAKgvD,EAAE,IAAM,SAAW,IAC3B,GAAKvjD,IAAM,GAAKtQ,EAAI,EAQ/BsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,EAAIC,GAAK4zD,EAAE,GAAK,WAAa,IAC5B,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,EAAItQ,GAAK6zD,EAAE,GAAK,WAAa,IAC5B,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,EAAIyL,GAAKujD,EAAE,GAAK,UAAY,IAC3B,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,EAAI4E,GAAKgvD,EAAE,IAAM,WAAa,IAC7B,GAAKvjD,IAAM,GAAKtQ,EAAI,EAQ/BsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,EAAIC,GAAK4zD,EAAE,IAAM,UAAY,IAC5B,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,EAAItQ,GAAK6zD,EAAE,GAAK,UAAY,IAC3B,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,EAAIyL,GAAKujD,EAAE,GAAK,UAAY,IAC3B,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,EAAI4E,GAAKgvD,EAAE,GAAK,SAAW,IAC1B,GAAKvjD,IAAM,GAAKtQ,EAAI,EAQ/BsQ,IADAA,KADAtQ,IADAA,KADAC,IADAA,KADA4E,IADAA,IAAMyL,EAAItQ,EAAIC,GAAK4zD,EAAE,GAAK,UAAY,IAC3B,EAAIhvD,IAAM,IAAMyL,EAAI,GACrBA,EAAItQ,GAAK6zD,EAAE,IAAM,UAAY,IAC5B,GAAK5zD,IAAM,IAAM4E,EAAI,GACtBA,EAAIyL,GAAKujD,EAAE,IAAM,UAAY,IAC5B,GAAK7zD,IAAM,IAAMC,EAAI,GACtBA,EAAI4E,GAAKgvD,EAAE,GAAK,UAAY,IAC3B,GAAKvjD,IAAM,GAAKtQ,EAAI,EAS/BsQ,IADAA,KAHArQ,IADAA,IAAMqQ,IADNzL,IADAA,IAAM7E,GAAKsQ,GAAKrQ,IAAM4zD,EAAE,GAAK,UAAY,IAC9B,EAAIhvD,IAAM,IAAMyL,EAAI,IACftQ,IAAM6zD,EAAE,GAAK,WAAa,IAC/B,GAAK5zD,IAAM,IAAM4E,EAAI,KAEhC7E,IADAA,IAAM6E,GAAK5E,GAAKqQ,IAAMujD,EAAE,IAAM,WAAa,IAChC,GAAK7zD,IAAM,IAAMC,EAAI,IAChB4E,IAAMgvD,EAAE,GAAK,SAAW,IAC7B,GAAIvjD,IAAM,IAAMtQ,EAAI,EAQ/BsQ,IADAA,KAHArQ,IADAA,IAAMqQ,IADNzL,IADAA,IAAM7E,GAAKsQ,GAAKrQ,IAAM4zD,EAAE,IAAM,WAAa,IAChC,EAAIhvD,IAAM,IAAMyL,EAAI,IACftQ,IAAM6zD,EAAE,GAAK,WAAa,IAC/B,GAAK5zD,IAAM,IAAM4E,EAAI,KAEhC7E,IADAA,IAAM6E,GAAK5E,GAAKqQ,IAAMujD,EAAE,IAAM,QAAU,IAC7B,GAAK7zD,IAAM,IAAMC,EAAI,IAChB4E,IAAMgvD,EAAE,GAAK,WAAa,IAC/B,GAAIvjD,IAAM,IAAMtQ,EAAI,EAQ/BsQ,IADAA,KAHArQ,IADAA,IAAMqQ,IADNzL,IADAA,IAAM7E,GAAKsQ,GAAKrQ,IAAM4zD,EAAE,GAAK,WAAa,IAC/B,EAAIhvD,IAAM,IAAMyL,EAAI,IACftQ,IAAM6zD,EAAE,IAAM,SAAW,IAC9B,GAAK5zD,IAAM,IAAM4E,EAAI,KAEhC7E,IADAA,IAAM6E,GAAK5E,GAAKqQ,IAAMujD,EAAE,GAAK,WAAa,IAC/B,GAAK7zD,IAAM,IAAMC,EAAI,IAChB4E,IAAMgvD,EAAE,IAAM,WAAa,IAChC,GAAIvjD,IAAM,IAAMtQ,EAAI,EAQ/BsQ,IADAA,KAHArQ,IADAA,IAAMqQ,IADNzL,IADAA,IAAM7E,GAAKsQ,GAAKrQ,IAAM4zD,EAAE,GAAK,UAAY,IAC9B,EAAIhvD,IAAM,IAAMyL,EAAI,IACftQ,IAAM6zD,EAAE,IAAM,WAAa,IAChC,GAAK5zD,IAAM,IAAM4E,EAAI,KAEhC7E,IADAA,IAAM6E,GAAK5E,GAAKqQ,IAAMujD,EAAE,GAAK,UAAY,IAC9B,GAAK7zD,IAAM,IAAMC,EAAI,IAChB4E,IAAMgvD,EAAE,GAAK,UAAY,IAC9B,GAAKvjD,IAAM,IAAMtQ,EAAI,EAEhCioD,EAAE,GAAKpjD,EAAIojD,EAAE,GAAK,EAClBA,EAAE,GAAK33C,EAAI23C,EAAE,GAAK,EAClBA,EAAE,GAAKjoD,EAAIioD,EAAE,GAAK,EAClBA,EAAE,GAAKhoD,EAAIgoD,EAAE,GAAK,EAGtB,SAAS6L,EAAOpyD,GACZ,IACI/B,EADAo0D,EAAU,GAGd,IAAKp0D,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrBo0D,EAAQp0D,GAAK,GAAK+B,EAAEgjC,WAAW/kC,IAAM+B,EAAEgjC,WAAW/kC,EAAI,IAAM,IAAM+B,EAAEgjC,WAAW/kC,EAAI,IAAM,KAAO+B,EAAEgjC,WAAW/kC,EAAI,IAAM,IAE3H,OAAOo0D,EAGX,SAASC,EAAanvD,GAClB,IACIlF,EADAo0D,EAAU,GAGd,IAAKp0D,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrBo0D,EAAQp0D,GAAK,GAAKkF,EAAElF,IAAMkF,EAAElF,EAAI,IAAM,IAAMkF,EAAElF,EAAI,IAAM,KAAOkF,EAAElF,EAAI,IAAM,IAE/E,OAAOo0D,EAGX,SAASE,EAAKvyD,GACV,IAEI/B,EACAmH,EACA2pC,EACAyjB,EACAC,EACAC,EAPAhzD,EAAIM,EAAEoF,OACN2C,EAAQ,CAAC,YAAa,WAAY,WAAY,WAQlD,IAAK9J,EAAI,GAAIA,GAAKyB,EAAGzB,GAAK,GACtBi0D,EAASnqD,EAAOqqD,EAAOpyD,EAAE01C,UAAUz3C,EAAI,GAAIA,KAK/C,IAFAmH,GADApF,EAAIA,EAAE01C,UAAUz3C,EAAI,KACTmH,OACX2pC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChD9wC,EAAI,EAAGA,EAAImH,EAAQnH,GAAK,EACzB8wC,EAAK9wC,GAAK,IAAM+B,EAAEgjC,WAAW/kC,KAAQA,EAAI,GAAM,GAGnD,GADA8wC,EAAK9wC,GAAK,IAAM,MAAUA,EAAI,GAAM,GAChCA,EAAI,GAEJ,IADAi0D,EAASnqD,EAAOgnC,GACX9wC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrB8wC,EAAK9wC,GAAK,EAclB,OARAu0D,GADAA,EAAU,EAAJ9yD,GACIyQ,SAAS,IAAIgV,MAAM,kBAC7BstC,EAAK1yC,SAASyyC,EAAI,GAAI,IACtBE,EAAK3yC,SAASyyC,EAAI,GAAI,KAAO,EAE7BzjB,EAAK,IAAM0jB,EACX1jB,EAAK,IAAM2jB,EAEXR,EAASnqD,EAAOgnC,GACThnC,EAmDX,SAAS4qD,EAAKjzD,GACV,IACIkvD,EADA5uD,EAAI,GAER,IAAK4uD,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACpB5uD,GAAKiyD,EAASvyD,GAAU,EAAJkvD,EAAQ,EAAM,IAAQqD,EAASvyD,GAAU,EAAJkvD,EAAU,IAEvE,OAAO5uD,EAGX,SAAS4yD,EAAIrM,GACT,IAAItoD,EACJ,IAAKA,EAAI,EAAGA,EAAIsoD,EAAEnhD,OAAQnH,GAAK,EAC3BsoD,EAAEtoD,GAAK00D,EAAKpM,EAAEtoD,IAElB,OAAOsoD,EAAEx7C,KAAK,IAmElB,SAAS8nD,EAAOvM,GAKZ,MAJI,kBAAkB76C,KAAK66C,KACvBA,EAAM1Q,SAASkd,mBAAmBxM,KAG/BA,EA6BX,SAASyM,EAAkBH,GACvB,IAEIrM,EAFAyM,EAAQ,GACR5tD,EAASwtD,EAAIxtD,OAGjB,IAAKmhD,EAAI,EAAGA,EAAInhD,EAAS,EAAGmhD,GAAK,EAC7ByM,EAAM5rD,KAAK2Y,SAAS6yC,EAAI7J,OAAOxC,EAAG,GAAI,KAG1C,OAAOh/C,OAAO0rD,aAAa7uD,MAAMmD,OAAQyrD,GAY7C,SAASE,IAELlxD,KAAKmxD,QAwTT,OAhbIP,EAAIL,EAAK,UAgBc,oBAAhBxgD,aAAgCA,YAAYlS,UAAUkE,OAC7D,WACI,SAASusC,EAAM1lC,EAAKxF,GAGhB,OAFAwF,EAAa,EAANA,GAAY,GAET,EACCxI,KAAK6lB,IAAIrd,EAAMxF,EAAQ,GAG3BhD,KAAKY,IAAI4H,EAAKxF,GAGzB2M,YAAYlS,UAAUkE,MAAQ,SAAU6V,EAAMw5C,GAC1C,IAGIC,EACA/xD,EACAgyD,EACAC,EANAnuD,EAASpD,KAAKoX,WACd/B,EAAQi5B,EAAM12B,EAAMxU,GACpBkS,EAAMlS,EAUV,OAJIguD,IAAO5xD,IACP8V,EAAMg5B,EAAM8iB,EAAIhuD,IAGhBiS,EAAQC,EACD,IAAIvF,YAAY,IAG3BshD,EAAM/7C,EAAMD,EACZ/V,EAAS,IAAIyQ,YAAYshD,GACzBC,EAAc,IAAI1hD,WAAWtQ,GAE7BiyD,EAAc,IAAI3hD,WAAW5P,KAAMqV,EAAOg8C,GAC1CC,EAAY7qD,IAAI8qD,GAETjyD,IAnCf,GAkHJ4xD,EAASrzD,UAAU2zD,OAAS,SAAUlN,GAKlC,OAFAtkD,KAAKyxD,aAAaZ,EAAOvM,IAElBtkD,MAUXkxD,EAASrzD,UAAU4zD,aAAe,SAAUC,GACxC1xD,KAAK2xD,OAASD,EACd1xD,KAAK4xD,SAAWF,EAAStuD,OAEzB,IACInH,EADAmH,EAASpD,KAAK2xD,MAAMvuD,OAGxB,IAAKnH,EAAI,GAAIA,GAAKmH,EAAQnH,GAAK,GAC3Bi0D,EAASlwD,KAAK6xD,MAAOzB,EAAOpwD,KAAK2xD,MAAMje,UAAUz3C,EAAI,GAAIA,KAK7D,OAFA+D,KAAK2xD,MAAQ3xD,KAAK2xD,MAAMje,UAAUz3C,EAAI,IAE/B+D,MAWXkxD,EAASrzD,UAAUyX,IAAM,SAAUw8C,GAC/B,IAEI71D,EAEAmK,EAJA2rD,EAAO/xD,KAAK2xD,MACZvuD,EAAS2uD,EAAK3uD,OAEd2pC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGzD,IAAK9wC,EAAI,EAAGA,EAAImH,EAAQnH,GAAK,EACzB8wC,EAAK9wC,GAAK,IAAM81D,EAAK/wB,WAAW/kC,KAAQA,EAAI,GAAM,GAYtD,OATA+D,KAAKgyD,QAAQjlB,EAAM3pC,GACnBgD,EAAMwqD,EAAI5wD,KAAK6xD,OAEXC,IACA1rD,EAAM2qD,EAAkB3qD,IAG5BpG,KAAKmxD,QAEE/qD,GAQX8qD,EAASrzD,UAAUszD,MAAQ,WAKvB,OAJAnxD,KAAK2xD,MAAQ,GACb3xD,KAAK4xD,QAAU,EACf5xD,KAAK6xD,MAAQ,CAAC,YAAa,WAAY,WAAY,WAE5C7xD,MAQXkxD,EAASrzD,UAAUo0D,SAAW,WAC1B,MAAO,CACHF,KAAM/xD,KAAK2xD,MACXvuD,OAAQpD,KAAK4xD,QACb5L,KAAMhmD,KAAK6xD,QAWnBX,EAASrzD,UAAUq0D,SAAW,SAAUnsD,GAKpC,OAJA/F,KAAK2xD,MAAQ5rD,EAAMgsD,KACnB/xD,KAAK4xD,QAAU7rD,EAAM3C,OACrBpD,KAAK6xD,MAAQ9rD,EAAMigD,KAEZhmD,MAOXkxD,EAASrzD,UAAUs0D,QAAU,kBAClBnyD,KAAK6xD,aACL7xD,KAAK2xD,aACL3xD,KAAK4xD,SAShBV,EAASrzD,UAAUm0D,QAAU,SAAUjlB,EAAM3pC,GACzC,IACIotD,EACAC,EACAC,EAHAz0D,EAAImH,EAMR,GADA2pC,EAAK9wC,GAAK,IAAM,MAAUA,EAAI,GAAM,GAChCA,EAAI,GAEJ,IADAi0D,EAASlwD,KAAK6xD,MAAO9kB,GAChB9wC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrB8wC,EAAK9wC,GAAK,EAOlBu0D,GADAA,EAAqB,EAAfxwD,KAAK4xD,SACDzjD,SAAS,IAAIgV,MAAM,kBAC7BstC,EAAK1yC,SAASyyC,EAAI,GAAI,IACtBE,EAAK3yC,SAASyyC,EAAI,GAAI,KAAO,EAE7BzjB,EAAK,IAAM0jB,EACX1jB,EAAK,IAAM2jB,EACXR,EAASlwD,KAAK6xD,MAAO9kB,IAYzBmkB,EAASlL,KAAO,SAAU1B,EAAKwN,GAG3B,OAAOZ,EAASkB,WAAWvB,EAAOvM,GAAMwN,IAW5CZ,EAASkB,WAAa,SAAUC,EAASP,GACrC,IACI1rD,EAAMwqD,EADCL,EAAK8B,IAGhB,OAAOP,EAAMf,EAAkB3qD,GAAOA,GAU1C8qD,EAASnhD,YAAc,WAEnB/P,KAAKmxD,SAUTD,EAASnhD,YAAYlS,UAAU2zD,OAAS,SAAUtuD,GAC9C,IAEIjH,EAhPyBg4C,EAAOqe,EAAQC,EACxCrkD,EA6OA6jD,GA9OyB9d,EA8OMj0C,KAAK2xD,MAAMl/C,OA9OV6/C,EA8OkBpvD,EA9OVqvD,GA8Oe,GA7OvDrkD,EAAS,IAAI0B,WAAWqkC,EAAM78B,WAAak7C,EAAOl7C,aAE/C3Q,IAAI,IAAImJ,WAAWqkC,IAC1B/lC,EAAOzH,IAAI,IAAImJ,WAAW0iD,GAASre,EAAM78B,YAElCm7C,EAAmBrkD,EAASA,EAAOuE,QAyOtCrP,EAAS2uD,EAAK3uD,OAKlB,IAFApD,KAAK4xD,SAAW1uD,EAAIkU,WAEfnb,EAAI,GAAIA,GAAKmH,EAAQnH,GAAK,GAC3Bi0D,EAASlwD,KAAK6xD,MAAOvB,EAAayB,EAAK38C,SAASnZ,EAAI,GAAIA,KAK5D,OAFA+D,KAAK2xD,MAAS11D,EAAI,GAAMmH,EAAS,IAAIwM,WAAWmiD,EAAKt/C,OAAO1Q,MAAM9F,EAAI,KAAO,IAAI2T,WAAW,GAErF5P,MAWXkxD,EAASnhD,YAAYlS,UAAUyX,IAAM,SAAUw8C,GAC3C,IAGI71D,EACAmK,EAJA2rD,EAAO/xD,KAAK2xD,MACZvuD,EAAS2uD,EAAK3uD,OACd2pC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAIzD,IAAK9wC,EAAI,EAAGA,EAAImH,EAAQnH,GAAK,EACzB8wC,EAAK9wC,GAAK,IAAM81D,EAAK91D,KAAQA,EAAI,GAAM,GAY3C,OATA+D,KAAKgyD,QAAQjlB,EAAM3pC,GACnBgD,EAAMwqD,EAAI5wD,KAAK6xD,OAEXC,IACA1rD,EAAM2qD,EAAkB3qD,IAG5BpG,KAAKmxD,QAEE/qD,GAQX8qD,EAASnhD,YAAYlS,UAAUszD,MAAQ,WAKnC,OAJAnxD,KAAK2xD,MAAQ,IAAI/hD,WAAW,GAC5B5P,KAAK4xD,QAAU,EACf5xD,KAAK6xD,MAAQ,CAAC,YAAa,WAAY,WAAY,WAE5C7xD,MAQXkxD,EAASnhD,YAAYlS,UAAUo0D,SAAW,WACtC,IAnTyBF,EAmTrBhsD,EAAQmrD,EAASrzD,UAAUo0D,SAAS71D,KAAK4D,MAK7C,OAFA+F,EAAMgsD,MAtTmBA,EAsTQhsD,EAAMgsD,KArThCxsD,OAAO0rD,aAAa7uD,MAAM,KAAM,IAAIwN,WAAWmiD,KAuT/ChsD,GAUXmrD,EAASnhD,YAAYlS,UAAUq0D,SAAW,SAAUnsD,GAIhD,OAFAA,EAAMgsD,KAjVV,SAA6BzN,EAAKiO,GAC9B,IAGGt2D,EAHCmH,EAASkhD,EAAIlhD,OACd2uD,EAAO,IAAIhiD,YAAY3M,GACvBF,EAAM,IAAI0M,WAAWmiD,GAGxB,IAAK91D,EAAI,EAAGA,EAAImH,EAAQnH,GAAK,EACzBiH,EAAIjH,GAAKqoD,EAAItjB,WAAW/kC,GAG5B,OAAOs2D,EAAmBrvD,EAAM6uD,EAuUnBS,CAAoBzsD,EAAMgsD,MAAM,GAEtCb,EAASrzD,UAAUq0D,SAAS91D,KAAK4D,KAAM+F,IAGlDmrD,EAASnhD,YAAYlS,UAAUs0D,QAAUjB,EAASrzD,UAAUs0D,QAE5DjB,EAASnhD,YAAYlS,UAAUm0D,QAAUd,EAASrzD,UAAUm0D,QAU5Dd,EAASnhD,YAAYi2C,KAAO,SAAU9iD,EAAK4uD,GACvC,IACI1rD,EAAMwqD,EA7ed,SAAoBzvD,GAChB,IAEIlF,EACAmH,EACA2pC,EACAyjB,EACAC,EACAC,EAPAhzD,EAAIyD,EAAEiC,OACN2C,EAAQ,CAAC,YAAa,WAAY,WAAY,WAQlD,IAAK9J,EAAI,GAAIA,GAAKyB,EAAGzB,GAAK,GACtBi0D,EAASnqD,EAAOuqD,EAAanvD,EAAEiU,SAASnZ,EAAI,GAAIA,KAWpD,IAJAkF,EAAKlF,EAAI,GAAMyB,EAAIyD,EAAEiU,SAASnZ,EAAI,IAAM,IAAI2T,WAAW,GAEvDxM,EAASjC,EAAEiC,OACX2pC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChD9wC,EAAI,EAAGA,EAAImH,EAAQnH,GAAK,EACzB8wC,EAAK9wC,GAAK,IAAMkF,EAAElF,KAAQA,EAAI,GAAM,GAIxC,GADA8wC,EAAK9wC,GAAK,IAAM,MAAUA,EAAI,GAAM,GAChCA,EAAI,GAEJ,IADAi0D,EAASnqD,EAAOgnC,GACX9wC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrB8wC,EAAK9wC,GAAK,EAelB,OATAu0D,GADAA,EAAU,EAAJ9yD,GACIyQ,SAAS,IAAIgV,MAAM,kBAC7BstC,EAAK1yC,SAASyyC,EAAI,GAAI,IACtBE,EAAK3yC,SAASyyC,EAAI,GAAI,KAAO,EAE7BzjB,EAAK,IAAM0jB,EACX1jB,EAAK,IAAM2jB,EAEXR,EAASnqD,EAAOgnC,GAEThnC,EA+bI0sD,CAAW,IAAI7iD,WAAW1M,KAGrC,OAAO4uD,EAAMf,EAAkB3qD,GAAOA,GAGnC8qD,EA1uBcwB,I,kSCEJta,E,WAOjB,WAAYsG,I,4FAAI,SAEZ1+C,KAAK2yD,OAASjU,EAGd1+C,KAAK4yD,QAAU,GAGf5yD,KAAKq5C,QAAU,GAGfr5C,KAAK6yD,YAAc,KAGnB7yD,KAAK8yD,SAAW,EAGhB9yD,KAAK83C,mBAAqB93C,KAAK83C,mBAAmBr6C,KAAKuC,MACvDA,KAAK2yD,OAAO1a,WAAWE,iBAAiB,gBAAiBn4C,KAAK83C,oB,kDAxB/C4G,GAGf,OAFKA,EAAGqU,WACNrU,EAAGqU,SAAW,IAAI3a,EAAmBsG,IAChCA,EAAGqU,a,8CA2BKra,GAGf,GAAoB,gBAAhBA,EAAIE,UAIuB,gBAA3BF,EAAIhD,QAAQsd,YAAhB,CAIA,IAAIC,EAAgBva,EAAIhD,QAAQmD,WAAWqa,eAC3C,GAAID,EAAe,CAGf,IAAIE,EAAUF,EAAcl+C,KAAI,SAAAhX,GAAO,MAAO,CAC1C+B,GAAI44C,EAAIhD,QAAQ51C,GAChB0C,KAAMzE,EAAEyE,KACRu2C,SAAU,CACN,mBAAoB,CAChB,QAAW,CACP,YAAeh7C,EAAEq1D,eAO7BC,EAAeF,EAAQ,GAAG3wD,KAhBf,uBAiBf,YAAmB2wD,EAAnB,oDAAStlB,EAAT,QACQwlB,EAAexlB,EAAOrrC,OACtB6wD,EAAexlB,EAAOrrC,OAnBf,kFAsBfxC,KAAKszD,gBAAgB5a,EAAIhD,QAAQ51C,GAAIuzD,GAGrCrzD,KAAKmpB,IAAIgqC,O,gCAOPI,GACNvzD,KAAK4yD,QAAQxtD,KAAKmuD,K,mCAITA,GACTvzD,KAAK4yD,QAAU5yD,KAAK4yD,QAAQt+C,QAAO,SAAAvX,GAAC,OAAIA,GAAKw2D,O,qCAIlCzzD,GAAI,2BAEf,YAAmBE,KAAK4yD,QAAxB,gDACI,GADJ,QACe5Z,QAAQl8C,IAAIgD,GACnB,OAAO,GAJA,kFAOf,OAAO,I,0BAKPqzD,GAGA,IAAIrxD,EAAM6hB,KAAK7hB,MAAQ9B,KAAK8yD,SAHnB,uBAIT,YAAcK,EAAd,+CAAuB,KAAd7Z,EAAc,QAGdt5C,KAAKwzD,eAAela,EAAEx5C,OAItBw5C,EAAE92C,MAAQ82C,EAAE92C,KAAOV,GAIxB9B,KAAKq5C,QAAQj0C,KAAKk0C,KAfb,kFAoBTt5C,KAAKq5C,QAAQ9nC,MAAK,SAACpQ,EAAGyL,GAAJ,OAAUzL,EAAEqB,KAAOoK,EAAEpK,QAGlCxC,KAAK6yD,cACN7yD,KAAK6yD,YAAcY,YAAYzzD,KAAK0zD,aAAaj2D,KAAKuC,MAAO,O,sCAKrDF,GAGZ,IAH+B,IAAf6zD,EAAe,uDAAH,EAGnB13D,EAAI,EAAIA,EAAI+D,KAAKq5C,QAAQj2C,OAASnH,IACnC+D,KAAKq5C,QAAQp9C,GAAG6D,IAAMA,GAAME,KAAKq5C,QAAQp9C,GAAGuG,KAAOmxD,GACnD3zD,KAAKq5C,QAAQx0B,OAAO5oB,IAAK,K,qCAQjC,GAA2B,GAAvB+D,KAAKq5C,QAAQj2C,OAGb,OAFAwwD,cAAc5zD,KAAK6yD,kBACnB7yD,KAAK6yD,YAAc,MAKvB,IAAI/wD,EAAM6hB,KAAK7hB,MAAQ9B,KAAK8yD,SAC5B,KAAI9yD,KAAKq5C,QAAQ,GAAG72C,KAAOV,GAA3B,CAIA,IAAI+xD,EAAS7zD,KAAKq5C,QAAQxxC,QAff,uBAkBX,YAAmB7H,KAAK4yD,QAAxB,wDACW9Z,cAAc,CAAC+a,KAnBf,kFAsBP7zD,KAAKq5C,QAAQj2C,OAAS,GAAKpD,KAAKq5C,QAAQ,GAAG72C,KAAOV,GAClD9B,KAAK0zD,oB,sBCpKjB,IAAIjzD,EAAW,EAAQ,GACnB4K,EAAW,EAAQ,GAAaA,SAEhCyoD,EAAKrzD,EAAS4K,IAAa5K,EAAS4K,EAASM,eACjD3P,EAAOD,QAAU,SAAU2E,GACzB,OAAOozD,EAAKzoD,EAASM,cAAcjL,GAAM,K,gBCL3C3E,EAAQyF,EAAI,EAAQ,I,gBCApB,IAAIuyD,EAAS,EAAQ,GAAR,CAAqB,QAC9BlzD,EAAM,EAAQ,IAClB7E,EAAOD,QAAU,SAAUyB,GACzB,OAAOu2D,EAAOv2D,KAASu2D,EAAOv2D,GAAOqD,EAAIrD,M,cCF3CxB,EAAOD,QAAU,gGAEf2M,MAAM,M,gBCHR,IAAI2C,EAAW,EAAQ,GAAaA,SACpCrP,EAAOD,QAAUsP,GAAYA,EAASW,iB,gBCCtC,IAAIvL,EAAW,EAAQ,GACnBW,EAAW,EAAQ,GACnB4yD,EAAQ,SAAUvyD,EAAGwS,GAEvB,GADA7S,EAASK,IACJhB,EAASwT,IAAoB,OAAVA,EAAgB,MAAMtT,UAAUsT,EAAQ,8BAElEjY,EAAOD,QAAU,CACf0K,IAAK9J,OAAO+rD,iBAAmB,aAAe,GAC5C,SAAUj/C,EAAMwqD,EAAOxtD,GACrB,KACEA,EAAM,EAAQ,GAAR,CAAkBhH,SAASrD,KAAM,EAAQ,IAAkBoF,EAAE7E,OAAOkB,UAAW,aAAa4I,IAAK,IACnGgD,EAAM,IACVwqD,IAAUxqD,aAAgBzH,OAC1B,MAAOxB,GAAKyzD,GAAQ,EACtB,OAAO,SAAwBxyD,EAAGwS,GAIhC,OAHA+/C,EAAMvyD,EAAGwS,GACLggD,EAAOxyD,EAAEyyD,UAAYjgD,EACpBxN,EAAIhF,EAAGwS,GACLxS,GAVX,CAYE,IAAI,QAASjC,GACjBw0D,MAAOA,I,cCvBTh4D,EAAOD,QAAU,kD,gBCAjB,IAAI0E,EAAW,EAAQ,GACnBioD,EAAiB,EAAQ,IAAgBjiD,IAC7CzK,EAAOD,QAAU,SAAU2I,EAAMpF,EAAQyT,GACvC,IACI5T,EADAF,EAAIK,EAAOiL,YAIb,OAFEtL,IAAM8T,GAAiB,mBAAL9T,IAAoBE,EAAIF,EAAEpB,aAAekV,EAAElV,WAAa4C,EAAStB,IAAMupD,GAC3FA,EAAehkD,EAAMvF,GACduF,I,6BCNX,IAAI3D,EAAY,EAAQ,IACpBuC,EAAU,EAAQ,IAEtBtH,EAAOD,QAAU,SAAgB0J,GAC/B,IAAI6+C,EAAM/+C,OAAOjC,EAAQtD,OACrBiO,EAAM,GACNvQ,EAAIqD,EAAU0E,GAClB,GAAI/H,EAAI,GAAKA,GAAK6yB,IAAU,MAAM5pB,WAAW,2BAC7C,KAAMjJ,EAAI,GAAIA,KAAO,KAAO4mD,GAAOA,GAAc,EAAJ5mD,IAAOuQ,GAAOq2C,GAC3D,OAAOr2C,I,cCTTjS,EAAOD,QAAUqE,KAAK+zD,MAAQ,SAAc5P,GAE1C,OAAmB,IAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,I,cCFpD,IAAI6P,EAASh0D,KAAKi0D,MAClBr4D,EAAOD,SAAYq4D,GAEdA,EAAO,IAAM,oBAAsBA,EAAO,IAAM,qBAE7B,OAAnBA,GAAQ,OACT,SAAe7P,GACjB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIA,GAAK,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAInkD,KAAKzB,IAAI4lD,GAAK,GAC/E6P,G,gBCTJ,IAAIrzD,EAAY,EAAQ,IACpBuC,EAAU,EAAQ,IAGtBtH,EAAOD,QAAU,SAAUu4D,GACzB,OAAO,SAAU5vD,EAAMg4C,GACrB,IAGIv7C,EAAGyL,EAHH5O,EAAIuH,OAAOjC,EAAQoB,IACnBzI,EAAI8E,EAAU27C,GACdxgD,EAAI8B,EAAEoF,OAEV,OAAInH,EAAI,GAAKA,GAAKC,EAAUo4D,EAAY,QAAK90D,GAC7C2B,EAAInD,EAAEgjC,WAAW/kC,IACN,OAAUkF,EAAI,OAAUlF,EAAI,IAAMC,IAAM0Q,EAAI5O,EAAEgjC,WAAW/kC,EAAI,IAAM,OAAU2Q,EAAI,MACxF0nD,EAAYt2D,EAAE48B,OAAO3+B,GAAKkF,EAC1BmzD,EAAYt2D,EAAE+D,MAAM9F,EAAGA,EAAI,GAA2B2Q,EAAI,OAAzBzL,EAAI,OAAU,IAAqB,S,6BCb5E,IAAIiN,EAAU,EAAQ,IAClB9P,EAAU,EAAQ,GAClBF,EAAW,EAAQ,IACnBD,EAAO,EAAQ,IACfkR,EAAY,EAAQ,IACpBklD,EAAc,EAAQ,KACtBtJ,EAAiB,EAAQ,IACzBrkD,EAAiB,EAAQ,IACzBgL,EAAW,EAAQ,EAAR,CAAkB,YAC7B4iD,IAAU,GAAGrsD,MAAQ,QAAU,GAAGA,QAKlCssD,EAAa,WAAc,OAAOz0D,MAEtChE,EAAOD,QAAU,SAAU0a,EAAMjN,EAAM6yC,EAAazoC,EAAM8gD,EAASC,EAAQh+C,GACzE49C,EAAYlY,EAAa7yC,EAAMoK,GAC/B,IAeIu3C,EAAS3tD,EAAKo3D,EAfdC,EAAY,SAAUC,GACxB,IAAKN,GAASM,KAAQ7gD,EAAO,OAAOA,EAAM6gD,GAC1C,OAAQA,GACN,IAVK,OAWL,IAVO,SAUM,OAAO,WAAoB,OAAO,IAAIzY,EAAYr8C,KAAM80D,IACrE,OAAO,WAAqB,OAAO,IAAIzY,EAAYr8C,KAAM80D,KAEzDjjD,EAAMrI,EAAO,YACburD,EAdO,UAcML,EACbM,GAAa,EACb/gD,EAAQwC,EAAK5Y,UACbo3D,EAAUhhD,EAAMrC,IAAaqC,EAnBjB,eAmBuCygD,GAAWzgD,EAAMygD,GACpEQ,EAAWD,GAAWJ,EAAUH,GAChCS,EAAWT,EAAWK,EAAwBF,EAAU,WAArBK,OAAkC11D,EACrE41D,EAAqB,SAAR5rD,GAAkByK,EAAMnD,SAAqBmkD,EAwB9D,GArBIG,IACFR,EAAoBhuD,EAAewuD,EAAWh5D,KAAK,IAAIqa,OAC7B9Z,OAAOkB,WAAa+2D,EAAkBhhD,OAE9Dq3C,EAAe2J,EAAmB/iD,GAAK,GAElCzD,GAAiD,mBAA/BwmD,EAAkBhjD,IAAyBzT,EAAKy2D,EAAmBhjD,EAAU6iD,IAIpGM,GAAcE,GAjCP,WAiCkBA,EAAQz4D,OACnCw4D,GAAa,EACbE,EAAW,WAAoB,OAAOD,EAAQ74D,KAAK4D,QAG/CoO,IAAWuI,IAAY69C,IAASQ,GAAe/gD,EAAMrC,IACzDzT,EAAK8V,EAAOrC,EAAUsjD,GAGxB7lD,EAAU7F,GAAQ0rD,EAClB7lD,EAAUwC,GAAO4iD,EACbC,EAMF,GALAvJ,EAAU,CACRx6C,OAAQokD,EAAaG,EAAWL,EA9CzB,UA+CP1sD,KAAMwsD,EAASO,EAAWL,EAhDrB,QAiDL/jD,QAASqkD,GAEPx+C,EAAQ,IAAKnZ,KAAO2tD,EAChB3tD,KAAOyW,GAAQ7V,EAAS6V,EAAOzW,EAAK2tD,EAAQ3tD,SAC7Cc,EAAQA,EAAQa,EAAIb,EAAQO,GAAK21D,GAASQ,GAAaxrD,EAAM2hD,GAEtE,OAAOA,I,gBClET,IAAI/rC,EAAW,EAAQ,IACnB9b,EAAU,EAAQ,IAEtBtH,EAAOD,QAAU,SAAU2I,EAAM2wD,EAAc7rD,GAC7C,GAAI4V,EAASi2C,GAAe,MAAM10D,UAAU,UAAY6I,EAAO,0BAC/D,OAAOjE,OAAOjC,EAAQoB,M,gBCLxB,IAAIjE,EAAW,EAAQ,GACnB09C,EAAM,EAAQ,IACdmX,EAAQ,EAAQ,EAAR,CAAkB,SAC9Bt5D,EAAOD,QAAU,SAAU2E,GACzB,IAAI0e,EACJ,OAAO3e,EAASC,UAAmClB,KAA1B4f,EAAW1e,EAAG40D,MAA0Bl2C,EAAsB,UAAX++B,EAAIz9C,M,gBCNlF,IAAI40D,EAAQ,EAAQ,EAAR,CAAkB,SAC9Bt5D,EAAOD,QAAU,SAAUoR,GACzB,IAAI85C,EAAK,IACT,IACE,MAAM95C,GAAK85C,GACX,MAAOzmD,GACP,IAEE,OADAymD,EAAGqO,IAAS,GACJ,MAAMnoD,GAAK85C,GACnB,MAAOzlD,KACT,OAAO,I,gBCTX,IAAI6N,EAAY,EAAQ,IACpBuC,EAAW,EAAQ,EAAR,CAAkB,YAC7B/B,EAAa7N,MAAMnE,UAEvB7B,EAAOD,QAAU,SAAU2E,GACzB,YAAclB,IAAPkB,IAAqB2O,EAAUrN,QAAUtB,GAAMmP,EAAW+B,KAAclR,K,6BCLjF,IAAI60D,EAAkB,EAAQ,IAC1B5rD,EAAa,EAAQ,IAEzB3N,EAAOD,QAAU,SAAU4B,EAAQmK,EAAO5K,GACpC4K,KAASnK,EAAQ43D,EAAgB/zD,EAAE7D,EAAQmK,EAAO6B,EAAW,EAAGzM,IAC/DS,EAAOmK,GAAS5K,I,gBCNvB,IAAI0R,EAAU,EAAQ,IAClBgD,EAAW,EAAQ,EAAR,CAAkB,YAC7BvC,EAAY,EAAQ,IACxBrT,EAAOD,QAAU,EAAQ,GAAWy5D,kBAAoB,SAAU90D,GAChE,GAAUlB,MAANkB,EAAiB,OAAOA,EAAGkR,IAC1BlR,EAAG,eACH2O,EAAUT,EAAQlO,M,6BCJzB,IAAI0M,EAAW,EAAQ,IACnBuB,EAAkB,EAAQ,IAC1BtB,EAAW,EAAQ,GACvBrR,EAAOD,QAAU,SAAcmB,GAO7B,IANA,IAAIuE,EAAI2L,EAASpN,MACboD,EAASiK,EAAS5L,EAAE2B,QACpBoQ,EAAOnR,UAAUe,OACjB0E,EAAQ6G,EAAgB6E,EAAO,EAAInR,UAAU,QAAK7C,EAAW4D,GAC7DkS,EAAM9B,EAAO,EAAInR,UAAU,QAAK7C,EAChCi2D,OAAiBj2D,IAAR8V,EAAoBlS,EAASuL,EAAgB2G,EAAKlS,GACxDqyD,EAAS3tD,GAAOrG,EAAEqG,KAAW5K,EACpC,OAAOuE,I,6BCZT,IAAIi0D,EAAmB,EAAQ,IAC3BpiD,EAAO,EAAQ,KACfjE,EAAY,EAAQ,IACpBrC,EAAY,EAAQ,IAMxBhR,EAAOD,QAAU,EAAQ,GAAR,CAA0BiG,MAAO,SAAS,SAAU2zD,EAAUb,GAC7E90D,KAAKu7C,GAAKvuC,EAAU2oD,GACpB31D,KAAK41D,GAAK,EACV51D,KAAK61D,GAAKf,KAET,WACD,IAAIrzD,EAAIzB,KAAKu7C,GACTuZ,EAAO90D,KAAK61D,GACZ/tD,EAAQ9H,KAAK41D,KACjB,OAAKn0D,GAAKqG,GAASrG,EAAE2B,QACnBpD,KAAKu7C,QAAK/7C,EACH8T,EAAK,IAEaA,EAAK,EAApB,QAARwhD,EAA+BhtD,EACvB,UAARgtD,EAAiCrzD,EAAEqG,GACxB,CAACA,EAAOrG,EAAEqG,OACxB,UAGHuH,EAAUymD,UAAYzmD,EAAUrN,MAEhC0zD,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,Y,6BC/BjB,IAaMK,EACAC,EAdFC,EAAc,EAAQ,IAEtBC,EAAan8C,OAAOlc,UAAU0C,KAI9B41D,EAAgB5wD,OAAO1H,UAAU0L,QAEjC6sD,EAAcF,EAIdG,GACEN,EAAM,IACNC,EAAM,MACVE,EAAW95D,KAAK25D,EAAK,KACrBG,EAAW95D,KAAK45D,EAAK,KACM,IAApBD,EAAc,WAA+B,IAApBC,EAAc,WAI5CM,OAAuC92D,IAAvB,OAAOe,KAAK,IAAI,IAExB81D,GAA4BC,KAGtCF,EAAc,SAAc9R,GAC1B,IACIthC,EAAWuzC,EAAQpzC,EAAOlnB,EAD1BgrD,EAAKjnD,KAwBT,OArBIs2D,IACFC,EAAS,IAAIx8C,OAAO,IAAMktC,EAAGzoD,OAAS,WAAYy3D,EAAY75D,KAAK6qD,KAEjEoP,IAA0BrzC,EAAYikC,EAAa,WAEvD9jC,EAAQ+yC,EAAW95D,KAAK6qD,EAAI3C,GAExB+R,GAA4BlzC,IAC9B8jC,EAAa,UAAIA,EAAGhpD,OAASklB,EAAMrb,MAAQqb,EAAM,GAAG/f,OAAS4f,GAE3DszC,GAAiBnzC,GAASA,EAAM/f,OAAS,GAI3C+yD,EAAc/5D,KAAK+mB,EAAM,GAAIozC,GAAQ,WACnC,IAAKt6D,EAAI,EAAGA,EAAIoG,UAAUe,OAAS,EAAGnH,SACfuD,IAAjB6C,UAAUpG,KAAkBknB,EAAMlnB,QAAKuD,MAK1C2jB,IAIXnnB,EAAOD,QAAUq6D,G,6BCxDjB,IAAIxvB,EAAK,EAAQ,GAAR,EAAwB,GAIjC5qC,EAAOD,QAAU,SAAUkD,EAAG6I,EAAO2hD,GACnC,OAAO3hD,GAAS2hD,EAAU7iB,EAAG3nC,EAAG6I,GAAO1E,OAAS,K,gBCNlD,IAaI4hC,EAAO94B,EAASujD,EAbhBpxD,EAAM,EAAQ,IACd8oC,EAAS,EAAQ,KACjBqvB,EAAO,EAAQ,IACfC,EAAM,EAAQ,IACdx4D,EAAS,EAAQ,GACjBugB,EAAUvgB,EAAOugB,QACjBk4C,EAAUz4D,EAAOwN,aACjBkrD,EAAY14D,EAAO24D,eACnBlrD,EAAiBzN,EAAOyN,eACxBmrD,EAAW54D,EAAO44D,SAClBC,EAAU,EACVvqD,EAAQ,GAGR4sC,EAAM,WACR,IAAIr5C,GAAME,KAEV,GAAIuM,EAAMzO,eAAegC,GAAK,CAC5B,IAAI6M,EAAKJ,EAAMzM,UACRyM,EAAMzM,GACb6M,MAGA/H,EAAW,SAAUmyD,GACvB5d,EAAI/8C,KAAK26D,EAAMh3D,OAGZ22D,GAAYC,IACfD,EAAU,SAAsB/pD,GAG9B,IAFA,IAAIhJ,EAAO,GACP1H,EAAI,EACDoG,UAAUe,OAASnH,GAAG0H,EAAKyB,KAAK/C,UAAUpG,MAMjD,OALAsQ,IAAQuqD,GAAW,WAEjB3vB,EAAoB,mBAANx6B,EAAmBA,EAAKlN,SAASkN,GAAKhJ,IAEtDqhC,EAAM8xB,GACCA,GAETH,EAAY,SAAwB72D,UAC3ByM,EAAMzM,IAGmB,WAA9B,EAAQ,GAAR,CAAkB0e,GACpBwmB,EAAQ,SAAUllC,GAChB0e,EAAQrT,SAAS9M,EAAI86C,EAAKr5C,EAAI,KAGvB+2D,GAAYA,EAAS/0D,IAC9BkjC,EAAQ,SAAUllC,GAChB+2D,EAAS/0D,IAAIzD,EAAI86C,EAAKr5C,EAAI,KAGnB4L,GAET+jD,GADAvjD,EAAU,IAAIR,GACCW,MACfH,EAAQC,MAAMC,UAAYxH,EAC1BogC,EAAQ3mC,EAAIoxD,EAAKnjD,YAAamjD,EAAM,IAG3BxxD,EAAOk6C,kBAA0C,mBAAf7rC,cAA8BrO,EAAO+4D,eAChFhyB,EAAQ,SAAUllC,GAChB7B,EAAOqO,YAAYxM,EAAK,GAAI,MAE9B7B,EAAOk6C,iBAAiB,UAAWvzC,GAAU,IAG7CogC,EAvDqB,uBAsDUyxB,EAAI,UAC3B,SAAU32D,GAChB02D,EAAKvqD,YAAYwqD,EAAI,WAA6B,mBAAI,WACpDD,EAAKzqD,YAAY/L,MACjBm5C,EAAI/8C,KAAK0D,KAKL,SAAUA,GAChBmK,WAAW5L,EAAI86C,EAAKr5C,EAAI,GAAI,KAIlC9D,EAAOD,QAAU,CACf0K,IAAKiwD,EACL7tC,MAAO8tC,I,6BCjFT,IAAI14D,EAAS,EAAQ,GACjBk+C,EAAc,EAAQ,GACtB/tC,EAAU,EAAQ,IAClBC,EAAS,EAAQ,IACjBlQ,EAAO,EAAQ,IACfsQ,EAAc,EAAQ,IACtBzF,EAAQ,EAAQ,GAChBuF,EAAa,EAAQ,IACrBxN,EAAY,EAAQ,IACpBsM,EAAW,EAAQ,GACnBqB,EAAU,EAAQ,KAClBI,EAAO,EAAQ,IAAkBtN,EACjCD,EAAK,EAAQ,IAAgBC,EAC7BgO,EAAY,EAAQ,KACpBy7C,EAAiB,EAAQ,IAMzBn7C,EAAe7R,EAAmB,YAClC+R,EAAY/R,EAAgB,SAC5BmC,EAAOnC,EAAOmC,KACduG,EAAa1I,EAAO0I,WAEpB4pB,EAAWtyB,EAAOsyB,SAClB0mC,EAAannD,EACbonD,EAAM92D,EAAK82D,IACXC,EAAM/2D,EAAK+2D,IACXrqD,EAAQ1M,EAAK0M,MACb3K,EAAM/B,EAAK+B,IACXi1D,EAAMh3D,EAAKg3D,IAIXC,EAAUlb,EAAc,KAHf,SAITmb,EAAUnb,EAAc,KAHV,aAIdob,EAAUpb,EAAc,KAHV,aAMlB,SAASqb,EAAYt6D,EAAOu6D,EAAMC,GAChC,IAOIl3D,EAAGnE,EAAGC,EAPNmW,EAAS,IAAIzQ,MAAM01D,GACnBC,EAAgB,EAATD,EAAaD,EAAO,EAC3BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAc,KAATL,EAAcN,EAAI,GAAI,IAAMA,EAAI,GAAI,IAAM,EAC/Cl7D,EAAI,EACJ+B,EAAId,EAAQ,GAAe,IAAVA,GAAe,EAAIA,EAAQ,EAAI,EAAI,EAkCxD,KAhCAA,EAAQg6D,EAAIh6D,KAECA,GAASA,IAAUqzB,GAE9Bl0B,EAAIa,GAASA,EAAQ,EAAI,EACzBsD,EAAIo3D,IAEJp3D,EAAIsM,EAAM3K,EAAIjF,GAASk6D,GACnBl6D,GAASZ,EAAI66D,EAAI,GAAI32D,IAAM,IAC7BA,IACAlE,GAAK,IAGLY,GADEsD,EAAIq3D,GAAS,EACNC,EAAKx7D,EAELw7D,EAAKX,EAAI,EAAG,EAAIU,IAEfv7D,GAAK,IACfkE,IACAlE,GAAK,GAEHkE,EAAIq3D,GAASD,GACfv7D,EAAI,EACJmE,EAAIo3D,GACKp3D,EAAIq3D,GAAS,GACtBx7D,GAAKa,EAAQZ,EAAI,GAAK66D,EAAI,EAAGM,GAC7Bj3D,GAAQq3D,IAERx7D,EAAIa,EAAQi6D,EAAI,EAAGU,EAAQ,GAAKV,EAAI,EAAGM,GACvCj3D,EAAI,IAGDi3D,GAAQ,EAAGhlD,EAAOxW,KAAW,IAAJI,EAASA,GAAK,IAAKo7D,GAAQ,GAG3D,IAFAj3D,EAAIA,GAAKi3D,EAAOp7D,EAChBs7D,GAAQF,EACDE,EAAO,EAAGllD,EAAOxW,KAAW,IAAJuE,EAASA,GAAK,IAAKm3D,GAAQ,GAE1D,OADAllD,IAASxW,IAAU,IAAJ+B,EACRyU,EAET,SAASslD,EAActlD,EAAQglD,EAAMC,GACnC,IAOIr7D,EAPAs7D,EAAgB,EAATD,EAAaD,EAAO,EAC3BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBI,EAAQL,EAAO,EACf17D,EAAIy7D,EAAS,EACb15D,EAAIyU,EAAOxW,KACXuE,EAAQ,IAAJxC,EAGR,IADAA,IAAM,EACCg6D,EAAQ,EAAGx3D,EAAQ,IAAJA,EAAUiS,EAAOxW,GAAIA,IAAK+7D,GAAS,GAIzD,IAHA37D,EAAImE,GAAK,IAAMw3D,GAAS,EACxBx3D,KAAOw3D,EACPA,GAASP,EACFO,EAAQ,EAAG37D,EAAQ,IAAJA,EAAUoW,EAAOxW,GAAIA,IAAK+7D,GAAS,GACzD,GAAU,IAANx3D,EACFA,EAAI,EAAIq3D,MACH,IAAIr3D,IAAMo3D,EACf,OAAOv7D,EAAIiyD,IAAMtwD,GAAKuyB,EAAWA,EAEjCl0B,GAAQ86D,EAAI,EAAGM,GACfj3D,GAAQq3D,EACR,OAAQ75D,GAAK,EAAI,GAAK3B,EAAI86D,EAAI,EAAG32D,EAAIi3D,GAGzC,SAASQ,EAAUjH,GACjB,OAAOA,EAAM,IAAM,GAAKA,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GAEjE,SAASkH,EAAOx3D,GACd,MAAO,CAAM,IAALA,GAEV,SAASy3D,EAAQz3D,GACf,MAAO,CAAM,IAALA,EAAWA,GAAM,EAAI,KAE/B,SAAS03D,EAAQ13D,GACf,MAAO,CAAM,IAALA,EAAWA,GAAM,EAAI,IAAMA,GAAM,GAAK,IAAMA,GAAM,GAAK,KAEjE,SAAS23D,EAAQ33D,GACf,OAAO82D,EAAY92D,EAAI,GAAI,GAE7B,SAAS43D,EAAQ53D,GACf,OAAO82D,EAAY92D,EAAI,GAAI,GAG7B,SAASwS,EAAUH,EAAGvV,EAAK2V,GACzB5R,EAAGwR,EAAW,UAAGvV,EAAK,CAAEV,IAAK,WAAc,OAAOkD,KAAKmT,MAGzD,SAASrW,EAAIo4C,EAAM8b,EAAOlpD,EAAOywD,GAC/B,IACIC,EAAW9pD,GADC5G,GAEhB,GAAI0wD,EAAWxH,EAAQ9b,EAAKoiB,GAAU,MAAM3wD,EAxH5B,gBAyHhB,IAAI/F,EAAQs0C,EAAKmiB,GAASoB,GACtBtkD,EAAQqkD,EAAWtjB,EAAKqiB,GACxBmB,EAAO93D,EAAMmB,MAAMoS,EAAOA,EAAQ68C,GACtC,OAAOuH,EAAiBG,EAAOA,EAAK1jD,UAEtC,SAASvO,EAAIyuC,EAAM8b,EAAOlpD,EAAO6wD,EAAYz7D,EAAOq7D,GAClD,IACIC,EAAW9pD,GADC5G,GAEhB,GAAI0wD,EAAWxH,EAAQ9b,EAAKoiB,GAAU,MAAM3wD,EAjI5B,gBAqIhB,IAHA,IAAI/F,EAAQs0C,EAAKmiB,GAASoB,GACtBtkD,EAAQqkD,EAAWtjB,EAAKqiB,GACxBmB,EAAOC,GAAYz7D,GACdjB,EAAI,EAAGA,EAAI+0D,EAAO/0D,IAAK2E,EAAMuT,EAAQlY,GAAKy8D,EAAKH,EAAiBt8D,EAAI+0D,EAAQ/0D,EAAI,GAG3F,GAAKoS,EAAOuI,IAgFL,CACL,IAAK5N,GAAM,WACT8G,EAAa,QACR9G,GAAM,WACX,IAAI8G,GAAc,OACd9G,GAAM,WAIV,OAHA,IAAI8G,EACJ,IAAIA,EAAa,KACjB,IAAIA,EAAaw+C,KApOF,eAqORx+C,EAAatT,QAClB,CAMF,IADA,IACyCgB,EADrCo7D,GAJJ9oD,EAAe,SAAqB1M,GAElC,OADAmL,EAAWvO,KAAM8P,GACV,IAAImnD,EAAWvoD,EAAQtL,MAEa,UAAI6zD,EAAoB,UAC5D9uD,EAAO2G,EAAKmoD,GAAarK,EAAI,EAAQzkD,EAAK/E,OAASwpD,IACnDpvD,EAAM2K,EAAKykD,QAAS98C,GAAe3R,EAAK2R,EAActS,EAAKy5D,EAAWz5D,IAE1E4Q,IAASwqD,EAAiBruD,YAAcuF,GAG/C,IAAIolC,EAAO,IAAIllC,EAAU,IAAIF,EAAa,IACtC+oD,EAAW7oD,EAAmB,UAAE8oD,QACpC5jB,EAAK4jB,QAAQ,EAAG,YAChB5jB,EAAK4jB,QAAQ,EAAG,aACZ5jB,EAAK6jB,QAAQ,IAAO7jB,EAAK6jB,QAAQ,IAAItqD,EAAYuB,EAAmB,UAAG,CACzE8oD,QAAS,SAAiBtjD,EAAYtY,GACpC27D,EAASz8D,KAAK4D,KAAMwV,EAAYtY,GAAS,IAAM,KAEjD87D,SAAU,SAAkBxjD,EAAYtY,GACtC27D,EAASz8D,KAAK4D,KAAMwV,EAAYtY,GAAS,IAAM,OAEhD,QAhHH4S,EAAe,SAAqB1M,GAClCmL,EAAWvO,KAAM8P,EA9IF,eA+If,IAAIsH,EAAa1I,EAAQtL,GACzBpD,KAAKy4D,GAAKjpD,EAAUpT,KAAK,IAAI4F,MAAMoV,GAAa,GAChDpX,KAAKs3D,GAAWlgD,GAGlBpH,EAAY,SAAkByC,EAAQ+C,EAAY4B,GAChD7I,EAAWvO,KAAMgQ,EApJL,YAqJZzB,EAAWkE,EAAQ3C,EArJP,YAsJZ,IAAImpD,EAAexmD,EAAO6kD,GACtBzkD,EAAS9R,EAAUyU,GACvB,GAAI3C,EAAS,GAAKA,EAASomD,EAAc,MAAMtyD,EAAW,iBAE1D,GAAIkM,GADJuE,OAA4B5X,IAAf4X,EAA2B6hD,EAAepmD,EAASxF,EAAS+J,IAC/C6hD,EAAc,MAAMtyD,EAxJ/B,iBAyJf3G,KAAKq3D,GAAW5kD,EAChBzS,KAAKu3D,GAAW1kD,EAChB7S,KAAKs3D,GAAWlgD,GAGd+kC,IACFjpC,EAAUpD,EAhJI,aAgJuB,MACrCoD,EAAUlD,EAlJD,SAkJoB,MAC7BkD,EAAUlD,EAlJI,aAkJoB,MAClCkD,EAAUlD,EAlJI,aAkJoB,OAGpCvB,EAAYuB,EAAmB,UAAG,CAChC+oD,QAAS,SAAiBvjD,GACxB,OAAO1Y,EAAIkD,KAAM,EAAGwV,GAAY,IAAM,IAAM,IAE9C0jD,SAAU,SAAkB1jD,GAC1B,OAAO1Y,EAAIkD,KAAM,EAAGwV,GAAY,IAElC2jD,SAAU,SAAkB3jD,GAC1B,IAAIw7C,EAAQl0D,EAAIkD,KAAM,EAAGwV,EAAYnT,UAAU,IAC/C,OAAQ2uD,EAAM,IAAM,EAAIA,EAAM,KAAO,IAAM,IAE7CoI,UAAW,SAAmB5jD,GAC5B,IAAIw7C,EAAQl0D,EAAIkD,KAAM,EAAGwV,EAAYnT,UAAU,IAC/C,OAAO2uD,EAAM,IAAM,EAAIA,EAAM,IAE/BqI,SAAU,SAAkB7jD,GAC1B,OAAOyiD,EAAUn7D,EAAIkD,KAAM,EAAGwV,EAAYnT,UAAU,MAEtDi3D,UAAW,SAAmB9jD,GAC5B,OAAOyiD,EAAUn7D,EAAIkD,KAAM,EAAGwV,EAAYnT,UAAU,OAAS,GAE/Dk3D,WAAY,SAAoB/jD,GAC9B,OAAOuiD,EAAcj7D,EAAIkD,KAAM,EAAGwV,EAAYnT,UAAU,IAAK,GAAI,IAEnEm3D,WAAY,SAAoBhkD,GAC9B,OAAOuiD,EAAcj7D,EAAIkD,KAAM,EAAGwV,EAAYnT,UAAU,IAAK,GAAI,IAEnEy2D,QAAS,SAAiBtjD,EAAYtY,GACpCuJ,EAAIzG,KAAM,EAAGwV,EAAY0iD,EAAQh7D,IAEnC87D,SAAU,SAAkBxjD,EAAYtY,GACtCuJ,EAAIzG,KAAM,EAAGwV,EAAY0iD,EAAQh7D,IAEnCu8D,SAAU,SAAkBjkD,EAAYtY,GACtCuJ,EAAIzG,KAAM,EAAGwV,EAAY2iD,EAASj7D,EAAOmF,UAAU,KAErDq3D,UAAW,SAAmBlkD,EAAYtY,GACxCuJ,EAAIzG,KAAM,EAAGwV,EAAY2iD,EAASj7D,EAAOmF,UAAU,KAErDs3D,SAAU,SAAkBnkD,EAAYtY,GACtCuJ,EAAIzG,KAAM,EAAGwV,EAAY4iD,EAASl7D,EAAOmF,UAAU,KAErDu3D,UAAW,SAAmBpkD,EAAYtY,GACxCuJ,EAAIzG,KAAM,EAAGwV,EAAY4iD,EAASl7D,EAAOmF,UAAU,KAErDw3D,WAAY,SAAoBrkD,EAAYtY,GAC1CuJ,EAAIzG,KAAM,EAAGwV,EAAY8iD,EAASp7D,EAAOmF,UAAU,KAErDy3D,WAAY,SAAoBtkD,EAAYtY,GAC1CuJ,EAAIzG,KAAM,EAAGwV,EAAY6iD,EAASn7D,EAAOmF,UAAU,OAsCzD4oD,EAAen7C,EA/PI,eAgQnBm7C,EAAej7C,EA/PC,YAgQhB7R,EAAK6R,EAAmB,UAAG3B,EAAO+D,MAAM,GACxCrW,EAAoB,YAAI+T,EACxB/T,EAAiB,SAAIiU,G,cClRrB,IAAI/R,EAASjC,EAAOD,QAA2B,oBAAVoE,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DZ,SAAS,cAATA,GACc,iBAAPa,MAAiBA,IAAMrC,I,cCLlCjC,EAAOD,QAAU,SAAU2E,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,I,gBCAvD1E,EAAOD,SAAW,EAAQ,IAAR,EAAoB,WACpC,OAA+E,GAAxEY,OAAOC,eAAe,GAAI,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQqE,M,yOCoBvDgD,E,kLAKf01C,GAA4B,WAAjB9e,EAAiB,uDAAN,KAS1B,GANA/6B,KAAK+5D,gBAAkB/5D,KAAK+5D,iBAAmB,GAG/C/5D,KAAK+5D,gBAAgBlgB,GAAa75C,KAAK+5D,gBAAgBlgB,IAAc,IAGjE9e,EAQH,OAAO,IAAItU,SAAQ,SAACuzC,EAAWC,GAG9BD,EAAUE,kBAAmB,EAG7B,EAAKH,gBAAgBlgB,GAAWz0C,KAAK40D,MAXtCh6D,KAAK+5D,gBAAgBlgB,GAAWz0C,KAAK21B,K,2BAqBtC,OAAO/6B,KAAKg6C,KAAK53C,MAAMpC,KAAMqC,a,yCAI7B,OAAOrC,KAAKg6C,KAAK53C,MAAMpC,KAAMqC,a,0CAMPw3C,EAAW9e,GAGjC/6B,KAAK+5D,gBAAkB/5D,KAAK+5D,iBAAmB,GAG/C/5D,KAAK+5D,gBAAgBlgB,GAAa75C,KAAK+5D,gBAAgBlgB,IAAc,GAG/D,IAAK,IAAI59C,EAAI,EAAIA,EAAI+D,KAAK+5D,gBAAgBlgB,GAAWz2C,OAASnH,IACtD+D,KAAK+5D,gBAAgBlgB,GAAW59C,IAAM8+B,GACtC/6B,KAAK+5D,gBAAgBlgB,GAAWh1B,OAAO5oB,IAAK,K,4BAKpD,OAAO+D,KAAKu4C,oBAAoBn2C,MAAMpC,KAAMqC,a,2BAO9Cw3C,GAAoB,IAOxB,IAAII,EAAYj6C,KAAK+5D,iBAAmB/5D,KAAK+5D,gBAAgBlgB,IAAc,GAPnD,mBAANl2C,EAAM,iCAANA,EAAM,6CAUxB,YAAqBs2C,EAArB,+CAAgC,KAAvBlf,EAAuB,QAG/BA,EAAS34B,MAAMpC,KAAM2D,IAbE,kFAkBxB,IAAK,IAAI1H,EAAI,EAAIA,EAAIg+C,EAAU72C,OAASnH,IACnCg+C,EAAUh+C,GAAGi+D,kBAChBjgB,EAAUp1B,OAAO5oB,IAAK,K,gCAMxB,OAAO+D,KAAKkF,KAAK9C,MAAMpC,KAAMqC,a,qCAI7B,OAAOrC,KAAKkF,KAAK9C,MAAMpC,KAAMqC,gB,gCAM/B8B,EAAa8kC,MAAQ,SAASkR,GAE7B,IAAK,IAAI1S,KAAQtjC,EAAatG,UACzBsG,EAAatG,UAAUC,eAAe2pC,KACzC0S,EAAW1S,GAAQtjC,EAAatG,UAAU4pC,M,gBCrI7C,IAAI0yB,EAAK,EAAQ,KACbC,EAAK,EAAQ,KAEbC,EAAOD,EACXC,EAAKF,GAAKA,EACVE,EAAKD,GAAKA,EAEVp+D,EAAOD,QAAUs+D,G,6BCgDjB,SAAStyD,EAAI64C,EAAK79C,EAAOu3D,GACvB,IAAIC,EAAkBD,EAAUA,EAAUl3D,OAAS,GAC/Cw9C,IAAQ2Z,EAAgBnvD,UAE1BkvD,EAAUvyD,MACVwyD,EAAkBD,EAAUA,EAAUl3D,OAAS,IAEjD,IAAIgI,EAAUmvD,EAAgBnvD,QAC1BovD,EAAmBD,EAAgBzyD,MACvC,GAAI9F,MAAM2lB,QAAQvc,GAChBA,EAAQhG,KAAKw7C,QACR,GAAI4Z,IAAqBz3D,EAAMK,OAAS,EAAG,CAEhDgI,EADUrI,EAAMgF,OACD64C,OAEf79C,EAAMqC,KAAKw7C,GA/Df7kD,EAAQyoD,UAAY,SAAmB74B,GACrC,IAAIpf,EAAQ,GACZA,EAAMnH,KAAK,CAACw7C,IAAKj1B,IAIjB,IAFA,IACI/X,EAAMgtC,EAAah4C,EAAK3M,EAAGw+D,EAAatyD,EAAMgoD,EAAG3yD,EAAKN,EAAOw9D,EAD7DzsD,EAAM,GAEF2F,EAAOrH,EAAMxE,OAKnB,GAJA64C,EAAMhtC,EAAKgtC,IAGX3yC,GAFS2F,EAAKkgC,QAAU,GACxBlrC,EAAMgL,EAAKhL,KAAO,GAGhBqF,GAAOrF,OACF,GAAmB,iBAARg4C,EAChB3yC,QAAsB,IAAR2yC,EAAsB,KAAOhE,KAAK4H,UAAU5D,QACrD,GAAY,OAARA,EACT3yC,GAAO,YACF,GAAIjM,MAAM2lB,QAAQi5B,GAAM,CAE7B,IADAr0C,EAAMnH,KAAK,CAACwD,IAAK,MACZ3M,EAAI2kD,EAAIx9C,OAAS,EAAGnH,GAAK,EAAGA,IAC/Bw+D,EAAoB,IAANx+D,EAAU,GAAK,IAC7BsQ,EAAMnH,KAAK,CAACw7C,IAAKA,EAAI3kD,GAAI63C,OAAQ2mB,IAEnCluD,EAAMnH,KAAK,CAACwD,IAAK,UACZ,CAEL,IAAKunD,KADLhoD,EAAO,GACGy4C,EACJA,EAAI9iD,eAAeqyD,IACrBhoD,EAAK/C,KAAK+qD,GAId,IADA5jD,EAAMnH,KAAK,CAACwD,IAAK,MACZ3M,EAAIkM,EAAK/E,OAAS,EAAGnH,GAAK,EAAGA,IAEhCiB,EAAQ0jD,EADRpjD,EAAM2K,EAAKlM,IAEXy+D,EAAaz+D,EAAI,EAAI,IAAM,GAC3By+D,GAAa9d,KAAK4H,UAAUhnD,GAAO,IACnC+O,EAAMnH,KAAK,CAACw7C,IAAK1jD,EAAO42C,OAAQ4mB,IAElCnuD,EAAMnH,KAAK,CAACwD,IAAK,MAGrB,OAAOqF,GAyBTlS,EAAQ8gD,MAAQ,SAAUyH,GAOxB,IANA,IAGIqW,EAAeC,EAAUC,EACzBC,EAAaC,EAAOC,EAAsBC,EAC1CC,EAAcC,EALdp4D,EAAQ,GACRu3D,EAAY,GACZr+D,EAAI,IAMN,GAAuB,OADvB0+D,EAAiBrW,EAAIroD,OAEE,MAAnB0+D,QAC0B,IAAnBA,EAQX,OAAQA,GACN,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,IAAK,IACH,MACF,IAAK,IACH1+D,GAAK,EACL8L,EAAI,KAAMhF,EAAOu3D,GACjB,MACF,IAAK,IACHr+D,GAAK,EACL8L,GAAI,EAAMhF,EAAOu3D,GACjB,MACF,IAAK,IACHr+D,GAAK,EACL8L,GAAI,EAAOhF,EAAOu3D,GAClB,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAGH,IAFAM,EAAY,GACZ3+D,MACa,CAEX,GADA4+D,EAAUvW,EAAIroD,MACV,cAAcwN,KAAKoxD,GAEhB,CACL5+D,IACA,MAHA2+D,GAAaC,EAMjB9yD,EAAI8V,WAAW+8C,GAAY73D,EAAOu3D,GAClC,MACF,IAAK,IAIH,IAHAQ,EAAe,GACfC,OAAS,EACTC,EAAwB,EAGX,OADXC,EAAK3W,EAAIroD,OACqB,OAAX8+D,GACfC,EAAwB,GAAM,GAChCF,GAAgBG,EAED,QADfF,EAASE,GAEPD,IAEAA,EAAwB,EAM9BjzD,EAAI60C,KAAKC,MAAM,IAAMie,EAAe,KAAM/3D,EAAOu3D,GACjD,MACF,IAAK,IACHY,EAAe,CAAE9vD,QAAS,GAAItD,MAAO/E,EAAMK,QAC3CL,EAAMqC,KAAK81D,EAAa9vD,SACxBkvD,EAAUl1D,KAAK81D,GACf,MACF,IAAK,IACHC,EAAa,CAAE/vD,QAAS,GAAItD,MAAO/E,EAAMK,QACzCL,EAAMqC,KAAK+1D,EAAW/vD,SACtBkvD,EAAUl1D,KAAK+1D,GACf,MACF,QACE,MAAM,IAAI14D,MACR,sCAAwCk4D,OAtF9C,CAGE,GAAqB,IAAjB53D,EAAMK,OACR,OAAOL,EAAMgF,MAEbA,EAAIhF,EAAMgF,MAAOhF,EAAOu3D,M,gBCzFhCt+D,EAAOD,SAAW,EAAQ,KAAsB,EAAQ,EAAR,EAAoB,WAClE,OAA4G,GAArGY,OAAOC,eAAe,EAAQ,GAAR,CAAyB,OAAQ,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQqE,M,gBCDzG,IAAIlD,EAAS,EAAQ,GACjBC,EAAO,EAAQ,GACfkQ,EAAU,EAAQ,IAClBgtD,EAAS,EAAQ,IACjBx+D,EAAiB,EAAQ,IAAgB4E,EAC7CxF,EAAOD,QAAU,SAAUS,GACzB,IAAI6+D,EAAUn9D,EAAKlB,SAAWkB,EAAKlB,OAASoR,EAAU,GAAKnQ,EAAOjB,QAAU,IACtD,KAAlBR,EAAKo+B,OAAO,IAAep+B,KAAQ6+D,GAAUz+D,EAAey+D,EAAS7+D,EAAM,CAAEU,MAAOk+D,EAAO55D,EAAEhF,O,gBCPnG,IAAI8L,EAAM,EAAQ,IACd0E,EAAY,EAAQ,IACpByD,EAAe,EAAQ,GAAR,EAA6B,GAC5C0T,EAAW,EAAQ,GAAR,CAAyB,YAExCnoB,EAAOD,QAAU,SAAU4B,EAAQ29D,GACjC,IAGI99D,EAHAiE,EAAIuL,EAAUrP,GACd1B,EAAI,EACJiS,EAAS,GAEb,IAAK1Q,KAAOiE,EAAOjE,GAAO2mB,GAAU7b,EAAI7G,EAAGjE,IAAQ0Q,EAAO9I,KAAK5H,GAE/D,KAAO89D,EAAMl4D,OAASnH,GAAOqM,EAAI7G,EAAGjE,EAAM89D,EAAMr/D,SAC7CwU,EAAavC,EAAQ1Q,IAAQ0Q,EAAO9I,KAAK5H,IAE5C,OAAO0Q,I,gBCfT,IAAI3M,EAAK,EAAQ,IACbH,EAAW,EAAQ,GACnBm6D,EAAU,EAAQ,IAEtBv/D,EAAOD,QAAU,EAAQ,GAAoBY,OAAOgsD,iBAAmB,SAA0BlnD,EAAG05C,GAClG/5C,EAASK,GAKT,IAJA,IAGItC,EAHAgJ,EAAOozD,EAAQpgB,GACf/3C,EAAS+E,EAAK/E,OACdnH,EAAI,EAEDmH,EAASnH,GAAGsF,EAAGC,EAAEC,EAAGtC,EAAIgJ,EAAKlM,KAAMk/C,EAAWh8C,IACrD,OAAOsC,I,gBCVT,IAAIuL,EAAY,EAAQ,IACpB8B,EAAO,EAAQ,IAAkBtN,EACjC2M,EAAW,GAAGA,SAEdqtD,EAA+B,iBAAVr7D,QAAsBA,QAAUxD,OAAOmH,oBAC5DnH,OAAOmH,oBAAoB3D,QAAU,GAUzCnE,EAAOD,QAAQyF,EAAI,SAA6Bd,GAC9C,OAAO86D,GAAoC,mBAArBrtD,EAAS/R,KAAKsE,GATjB,SAAUA,GAC7B,IACE,OAAOoO,EAAKpO,GACZ,MAAOF,GACP,OAAOg7D,EAAYz5D,SAK0C05D,CAAe/6D,GAAMoO,EAAK9B,EAAUtM,M,6BCfrG,IAAIy7C,EAAc,EAAQ,GACtBof,EAAU,EAAQ,IAClBG,EAAO,EAAQ,IACf3uD,EAAM,EAAQ,IACdK,EAAW,EAAQ,IACnBxD,EAAU,EAAQ,IAClB+xD,EAAUh/D,OAAO6pC,OAGrBxqC,EAAOD,SAAW4/D,GAAW,EAAQ,EAAR,EAAoB,WAC/C,IAAIC,EAAI,GACJv8D,EAAI,GAEJJ,EAAIjC,SACJ6+D,EAAI,uBAGR,OAFAD,EAAE38D,GAAK,EACP48D,EAAEnzD,MAAM,IAAIgM,SAAQ,SAAUy7C,GAAK9wD,EAAE8wD,GAAKA,KACd,GAArBwL,EAAQ,GAAIC,GAAG38D,IAAWtC,OAAOwL,KAAKwzD,EAAQ,GAAIt8D,IAAI0J,KAAK,KAAO8yD,KACtE,SAAgBv8D,EAAQd,GAM3B,IALA,IAAI6/C,EAAIjxC,EAAS9N,GACbkU,EAAOnR,UAAUe,OACjB0E,EAAQ,EACRukB,EAAaqvC,EAAKl6D,EAClBs6D,EAAS/uD,EAAIvL,EACVgS,EAAO1L,GAMZ,IALA,IAIItK,EAJAyB,EAAI2K,EAAQvH,UAAUyF,MACtBK,EAAOkkB,EAAakvC,EAAQt8D,GAAG8E,OAAOsoB,EAAWptB,IAAMs8D,EAAQt8D,GAC/DmE,EAAS+E,EAAK/E,OACdwpD,EAAI,EAEDxpD,EAASwpD,GACdpvD,EAAM2K,EAAKykD,KACNzQ,IAAe2f,EAAO1/D,KAAK6C,EAAGzB,KAAM6gD,EAAE7gD,GAAOyB,EAAEzB,IAEtD,OAAO6gD,GACPsd,G,cCpCJ3/D,EAAOD,QAAUY,OAAOm3D,IAAM,SAAYvP,EAAGwX,GAE3C,OAAOxX,IAAMwX,EAAU,IAANxX,GAAW,EAAIA,GAAM,EAAIwX,EAAIxX,GAAKA,GAAKwX,GAAKA,I,6BCF/D,IAAIrvD,EAAY,EAAQ,IACpBjM,EAAW,EAAQ,GACnB0mC,EAAS,EAAQ,KACjB31B,EAAa,GAAGzP,MAChBi6D,EAAY,GAEZC,EAAY,SAAUp9D,EAAGsI,EAAKxD,GAChC,KAAMwD,KAAO60D,GAAY,CACvB,IAAK,IAAIt+D,EAAI,GAAIzB,EAAI,EAAGA,EAAIkL,EAAKlL,IAAKyB,EAAEzB,GAAK,KAAOA,EAAI,IAExD+/D,EAAU70D,GAAO1H,SAAS,MAAO,gBAAkB/B,EAAEqL,KAAK,KAAO,KACjE,OAAOizD,EAAU70D,GAAKtI,EAAG8E,IAG7B3H,EAAOD,QAAU0D,SAAShC,MAAQ,SAAciH,GAC9C,IAAIiI,EAAKD,EAAU1M,MACfk8D,EAAW1qD,EAAWpV,KAAKiG,UAAW,GACtC85D,EAAQ,WACV,IAAIx4D,EAAOu4D,EAASn4D,OAAOyN,EAAWpV,KAAKiG,YAC3C,OAAOrC,gBAAgBm8D,EAAQF,EAAUtvD,EAAIhJ,EAAKP,OAAQO,GAAQwjC,EAAOx6B,EAAIhJ,EAAMe,IAGrF,OADIjE,EAASkM,EAAG9O,aAAYs+D,EAAMt+D,UAAY8O,EAAG9O,WAC1Cs+D,I,cCtBTngE,EAAOD,QAAU,SAAU4Q,EAAIhJ,EAAMe,GACnC,IAAI03D,OAAc58D,IAATkF,EACT,OAAQf,EAAKP,QACX,KAAK,EAAG,OAAOg5D,EAAKzvD,IACAA,EAAGvQ,KAAKsI,GAC5B,KAAK,EAAG,OAAO03D,EAAKzvD,EAAGhJ,EAAK,IACRgJ,EAAGvQ,KAAKsI,EAAMf,EAAK,IACvC,KAAK,EAAG,OAAOy4D,EAAKzvD,EAAGhJ,EAAK,GAAIA,EAAK,IACjBgJ,EAAGvQ,KAAKsI,EAAMf,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOy4D,EAAKzvD,EAAGhJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1BgJ,EAAGvQ,KAAKsI,EAAMf,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzD,KAAK,EAAG,OAAOy4D,EAAKzvD,EAAGhJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACnCgJ,EAAGvQ,KAAKsI,EAAMf,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAClE,OAAOgJ,EAAGvK,MAAMsC,EAAMf,K,gBCd1B,IAAI04D,EAAY,EAAQ,GAAat+C,SACjCu+C,EAAQ,EAAQ,IAAkBlpB,KAClCmpB,EAAK,EAAQ,IACb3L,EAAM,cAEV50D,EAAOD,QAAmC,IAAzBsgE,EAAUE,EAAK,OAA0C,KAA3BF,EAAUE,EAAK,QAAiB,SAAkBjY,EAAKnT,GACpG,IAAIhoC,EAASmzD,EAAM/2D,OAAO++C,GAAM,GAChC,OAAO+X,EAAUlzD,EAASgoC,IAAU,IAAOyf,EAAInnD,KAAKN,GAAU,GAAK,MACjEkzD,G,gBCRJ,IAAIG,EAAc,EAAQ,GAAa3+C,WACnCy+C,EAAQ,EAAQ,IAAkBlpB,KAEtCp3C,EAAOD,QAAU,EAAIygE,EAAY,EAAQ,IAAkB,QAAWjsC,IAAW,SAAoB+zB,GACnG,IAAIn7C,EAASmzD,EAAM/2D,OAAO++C,GAAM,GAC5Bp2C,EAASsuD,EAAYrzD,GACzB,OAAkB,IAAX+E,GAAoC,KAApB/E,EAAOyxB,OAAO,IAAa,EAAI1sB,GACpDsuD,G,gBCPJ,IAAIre,EAAM,EAAQ,IAClBniD,EAAOD,QAAU,SAAU2E,EAAIg4C,GAC7B,GAAiB,iBAANh4C,GAA6B,UAAXy9C,EAAIz9C,GAAiB,MAAMC,UAAU+3C,GAClE,OAAQh4C,I,gBCFV,IAAID,EAAW,EAAQ,GACnBqM,EAAQ1M,KAAK0M,MACjB9Q,EAAOD,QAAU,SAAmB2E,GAClC,OAAQD,EAASC,IAAOmlB,SAASnlB,IAAOoM,EAAMpM,KAAQA,I,cCHxD1E,EAAOD,QAAUqE,KAAKq8D,OAAS,SAAelY,GAC5C,OAAQA,GAAKA,IAAM,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAInkD,KAAK+B,IAAI,EAAIoiD,K,6BCDrE,IAAIhnD,EAAS,EAAQ,IACjBm/D,EAAa,EAAQ,IACrBzR,EAAiB,EAAQ,IACzB2J,EAAoB,GAGxB,EAAQ,GAAR,CAAmBA,EAAmB,EAAQ,EAAR,CAAkB,aAAa,WAAc,OAAO50D,QAE1FhE,EAAOD,QAAU,SAAUsgD,EAAa7yC,EAAMoK,GAC5CyoC,EAAYx+C,UAAYN,EAAOq3D,EAAmB,CAAEhhD,KAAM8oD,EAAW,EAAG9oD,KACxEq3C,EAAe5O,EAAa7yC,EAAO,e,gBCVrC,IAAIpI,EAAW,EAAQ,GACvBpF,EAAOD,QAAU,SAAUwX,EAAU5G,EAAIzP,EAAO4T,GAC9C,IACE,OAAOA,EAAUnE,EAAGvL,EAASlE,GAAO,GAAIA,EAAM,IAAMyP,EAAGzP,GAEvD,MAAOsD,GACP,IAAI4F,EAAMmN,EAAiB,OAE3B,WADY/T,IAAR4G,GAAmBhF,EAASgF,EAAIhK,KAAKmX,IACnC/S,K,gBCRV,IAAI2O,EAAqB,EAAQ,KAEjCnT,EAAOD,QAAU,SAAUusD,EAAUllD,GACnC,OAAO,IAAK+L,EAAmBm5C,GAAxB,CAAmCllD,K,gBCJ5C,IAAIsJ,EAAY,EAAQ,IACpBU,EAAW,EAAQ,IACnBxD,EAAU,EAAQ,IAClByD,EAAW,EAAQ,GAEvBrR,EAAOD,QAAU,SAAU2I,EAAMsJ,EAAYwF,EAAMmpD,EAAM1nB,GACvDvoC,EAAUsB,GACV,IAAIvM,EAAI2L,EAAS1I,GACbrE,EAAOuJ,EAAQnI,GACf2B,EAASiK,EAAS5L,EAAE2B,QACpB0E,EAAQmtC,EAAU7xC,EAAS,EAAI,EAC/BnH,EAAIg5C,GAAW,EAAI,EACvB,GAAIzhC,EAAO,EAAG,OAAS,CACrB,GAAI1L,KAASzH,EAAM,CACjBs8D,EAAOt8D,EAAKyH,GACZA,GAAS7L,EACT,MAGF,GADA6L,GAAS7L,EACLg5C,EAAUntC,EAAQ,EAAI1E,GAAU0E,EAClC,MAAMnH,UAAU,+CAGpB,KAAMs0C,EAAUntC,GAAS,EAAI1E,EAAS0E,EAAOA,GAAS7L,EAAO6L,KAASzH,IACpEs8D,EAAO3uD,EAAW2uD,EAAMt8D,EAAKyH,GAAQA,EAAOrG,IAE9C,OAAOk7D,I,6BCxBT,IAAIvvD,EAAW,EAAQ,IACnBuB,EAAkB,EAAQ,IAC1BtB,EAAW,EAAQ,GAEvBrR,EAAOD,QAAU,GAAGmY,YAAc,SAAoB5U,EAAkB6U,GACtE,IAAI1S,EAAI2L,EAASpN,MACbmH,EAAMkG,EAAS5L,EAAE2B,QACjBguD,EAAKziD,EAAgBrP,EAAQ6H,GAC7ByQ,EAAOjJ,EAAgBwF,EAAOhN,GAC9BmO,EAAMjT,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,EAC5CiG,EAAQrF,KAAKY,UAAaxB,IAAR8V,EAAoBnO,EAAMwH,EAAgB2G,EAAKnO,IAAQyQ,EAAMzQ,EAAMiqD,GACrFwL,EAAM,EAMV,IALIhlD,EAAOw5C,GAAMA,EAAKx5C,EAAOnS,IAC3Bm3D,GAAO,EACPhlD,GAAQnS,EAAQ,EAChB2rD,GAAM3rD,EAAQ,GAETA,KAAU,GACXmS,KAAQnW,EAAGA,EAAE2vD,GAAM3vD,EAAEmW,UACbnW,EAAE2vD,GACdA,GAAMwL,EACNhlD,GAAQglD,EACR,OAAOn7D,I,cCxBXzF,EAAOD,QAAU,SAAU8X,EAAM3W,GAC/B,MAAO,CAAEA,MAAOA,EAAO2W,OAAQA,K,6BCAjC,IAAI+1C,EAAa,EAAQ,KACzB,EAAQ,EAAR,CAAqB,CACnBtqD,OAAQ,SACR2U,OAAO,EACP4oD,OAAQjT,IAAe,IAAIrpD,MAC1B,CACDA,KAAMqpD,K,gBCNJ,EAAQ,IAAmC,KAAd,KAAKkT,OAAc,EAAQ,IAAgBt7D,EAAEuY,OAAOlc,UAAW,QAAS,CACvG4M,cAAc,EACd3N,IAAK,EAAQ,O,6BCFf,IAwBIigE,EAAUC,EAA6BC,EAAsBC,EAxB7D9uD,EAAU,EAAQ,IAClBnQ,EAAS,EAAQ,GACjBI,EAAM,EAAQ,IACduQ,EAAU,EAAQ,IAClBtQ,EAAU,EAAQ,GAClBmC,EAAW,EAAQ,GACnBiM,EAAY,EAAQ,IACpB6B,EAAa,EAAQ,IACrBy8C,EAAQ,EAAQ,IAChB77C,EAAqB,EAAQ,IAC7B1C,EAAO,EAAQ,KAAWhG,IAC1B02D,EAAY,EAAQ,IAAR,GACZC,EAA6B,EAAQ,KACrCC,EAAU,EAAQ,KAClBtS,EAAY,EAAQ,IACpBxC,EAAiB,EAAQ,KAEzB5nD,EAAY1C,EAAO0C,UACnB6d,EAAUvgB,EAAOugB,QACjBu/B,EAAWv/B,GAAWA,EAAQu/B,SAC9Buf,EAAKvf,GAAYA,EAASuf,IAAM,GAChCC,EAAWt/D,EAAc,QACzBu/D,EAA6B,WAApB5uD,EAAQ4P,GACjBi/C,EAAQ,aAERC,EAAuBV,EAA8BI,EAA2B57D,EAEhFm8D,IAAe,WACjB,IAEE,IAAIlV,EAAU8U,EAASz9B,QAAQ,GAC3B89B,GAAenV,EAAQl+C,YAAc,IAAI,EAAQ,EAAR,CAAkB,YAAc,SAAUhK,GACrFA,EAAKk9D,EAAOA,IAGd,OAAQD,GAA0C,mBAAzBK,wBACpBpV,EAAQpI,KAAKod,aAAkBG,GAIT,IAAtBN,EAAG3oD,QAAQ,SACyB,IAApCo2C,EAAUp2C,QAAQ,aACvB,MAAOnU,KAfQ,GAmBfs9D,EAAa,SAAUp9D,GACzB,IAAI2/C,EACJ,SAAO5/C,EAASC,IAAkC,mBAAnB2/C,EAAO3/C,EAAG2/C,QAAsBA,GAE7D0d,EAAS,SAAUtV,EAASuV,GAC9B,IAAIvV,EAAQwV,GAAZ,CACAxV,EAAQwV,IAAK,EACb,IAAIr7B,EAAQ6lB,EAAQyV,GACpBf,GAAU,WAoCR,IAnCA,IAAIjgE,EAAQurD,EAAQ0V,GAChBh7D,EAAmB,GAAdslD,EAAQ2V,GACbniE,EAAI,EACJk9C,EAAM,SAAUklB,GAClB,IAIInwD,EAAQmyC,EAAMie,EAJdp3D,EAAU/D,EAAKk7D,EAASl7D,GAAKk7D,EAASE,KACtCz+B,EAAUu+B,EAASv+B,QACnBuM,EAASgyB,EAAShyB,OAClBmyB,EAASH,EAASG,OAEtB,IACMt3D,GACG/D,IACe,GAAdslD,EAAQgW,IAASC,EAAkBjW,GACvCA,EAAQgW,GAAK,IAEC,IAAZv3D,EAAkBgH,EAAShR,GAEzBshE,GAAQA,EAAOG,QACnBzwD,EAAShH,EAAQhK,GACbshE,IACFA,EAAOI,OACPN,GAAS,IAGTpwD,IAAWmwD,EAAS5V,QACtBpc,EAAO1rC,EAAU,yBACR0/C,EAAOyd,EAAW5vD,IAC3BmyC,EAAKjkD,KAAK8R,EAAQ4xB,EAASuM,GACtBvM,EAAQ5xB,IACVm+B,EAAOnvC,GACd,MAAOsD,GACHg+D,IAAWF,GAAQE,EAAOI,OAC9BvyB,EAAO7rC,KAGJoiC,EAAMx/B,OAASnH,GAAGk9C,EAAIvW,EAAM3mC,MACnCwsD,EAAQyV,GAAK,GACbzV,EAAQwV,IAAK,EACTD,IAAavV,EAAQgW,IAAII,EAAYpW,QAGzCoW,EAAc,SAAUpW,GAC1Bh8C,EAAKrQ,KAAK6B,GAAQ,WAChB,IAEIiQ,EAAQhH,EAASvF,EAFjBzE,EAAQurD,EAAQ0V,GAChBW,EAAYC,EAAYtW,GAe5B,GAbIqW,IACF5wD,EAASmvD,GAAQ,WACXG,EACFh/C,EAAQtZ,KAAK,qBAAsBhI,EAAOurD,IACjCvhD,EAAUjJ,EAAO+gE,sBAC1B93D,EAAQ,CAAEuhD,QAASA,EAASP,OAAQhrD,KAC1ByE,EAAU1D,EAAO0D,UAAYA,EAAQmB,OAC/CnB,EAAQmB,MAAM,8BAA+B5F,MAIjDurD,EAAQgW,GAAKjB,GAAUuB,EAAYtW,GAAW,EAAI,GAClDA,EAAQwW,QAAKz/D,EACXs/D,GAAa5wD,EAAO1N,EAAG,MAAM0N,EAAO6I,MAGxCgoD,EAAc,SAAUtW,GAC1B,OAAsB,IAAfA,EAAQgW,IAAkD,KAArChW,EAAQwW,IAAMxW,EAAQyV,IAAI96D,QAEpDs7D,EAAoB,SAAUjW,GAChCh8C,EAAKrQ,KAAK6B,GAAQ,WAChB,IAAIiJ,EACAs2D,EACFh/C,EAAQtZ,KAAK,mBAAoBujD,IACxBvhD,EAAUjJ,EAAOihE,qBAC1Bh4D,EAAQ,CAAEuhD,QAASA,EAASP,OAAQO,EAAQ0V,SAI9CgB,EAAU,SAAUjiE,GACtB,IAAIurD,EAAUzoD,KACVyoD,EAAQr1C,KACZq1C,EAAQr1C,IAAK,GACbq1C,EAAUA,EAAQ2W,IAAM3W,GAChB0V,GAAKjhE,EACburD,EAAQ2V,GAAK,EACR3V,EAAQwW,KAAIxW,EAAQwW,GAAKxW,EAAQyV,GAAGn8D,SACzCg8D,EAAOtV,GAAS,KAEd4W,EAAW,SAAUniE,GACvB,IACImjD,EADAoI,EAAUzoD,KAEd,IAAIyoD,EAAQr1C,GAAZ,CACAq1C,EAAQr1C,IAAK,EACbq1C,EAAUA,EAAQ2W,IAAM3W,EACxB,IACE,GAAIA,IAAYvrD,EAAO,MAAMyD,EAAU,qCACnC0/C,EAAOyd,EAAW5gE,IACpBigE,GAAU,WACR,IAAI/mD,EAAU,CAAEgpD,GAAI3W,EAASr1C,IAAI,GACjC,IACEitC,EAAKjkD,KAAKc,EAAOmB,EAAIghE,EAAUjpD,EAAS,GAAI/X,EAAI8gE,EAAS/oD,EAAS,IAClE,MAAO5V,GACP2+D,EAAQ/iE,KAAKga,EAAS5V,QAI1BioD,EAAQ0V,GAAKjhE,EACburD,EAAQ2V,GAAK,EACbL,EAAOtV,GAAS,IAElB,MAAOjoD,GACP2+D,EAAQ/iE,KAAK,CAAEgjE,GAAI3W,EAASr1C,IAAI,GAAS5S,MAKxCm9D,IAEHJ,EAAW,SAAiB+B,GAC1B/wD,EAAWvO,KAAMu9D,EA3JP,UA2J0B,MACpC7wD,EAAU4yD,GACVvC,EAAS3gE,KAAK4D,MACd,IACEs/D,EAASjhE,EAAIghE,EAAUr/D,KAAM,GAAI3B,EAAI8gE,EAASn/D,KAAM,IACpD,MAAO2C,GACPw8D,EAAQ/iE,KAAK4D,KAAM2C,MAIvBo6D,EAAW,SAAiBuC,GAC1Bt/D,KAAKk+D,GAAK,GACVl+D,KAAKi/D,QAAKz/D,EACVQ,KAAKo+D,GAAK,EACVp+D,KAAKoT,IAAK,EACVpT,KAAKm+D,QAAK3+D,EACVQ,KAAKy+D,GAAK,EACVz+D,KAAKi+D,IAAK,IAEHpgE,UAAY,EAAQ,GAAR,CAA2B0/D,EAAS1/D,UAAW,CAElEwiD,KAAM,SAAckf,EAAaC,GAC/B,IAAInB,EAAWX,EAAqBvuD,EAAmBnP,KAAMu9D,IAO7D,OANAc,EAASl7D,GAA2B,mBAAfo8D,GAA4BA,EACjDlB,EAASE,KAA4B,mBAAdiB,GAA4BA,EACnDnB,EAASG,OAAShB,EAASh/C,EAAQggD,YAASh/D,EAC5CQ,KAAKk+D,GAAG94D,KAAKi5D,GACTr+D,KAAKi/D,IAAIj/D,KAAKi/D,GAAG75D,KAAKi5D,GACtBr+D,KAAKo+D,IAAIL,EAAO/9D,MAAM,GACnBq+D,EAAS5V,SAGlB,MAAS,SAAU+W,GACjB,OAAOx/D,KAAKqgD,UAAK7gD,EAAWggE,MAGhCvC,EAAuB,WACrB,IAAIxU,EAAU,IAAIsU,EAClB/8D,KAAKyoD,QAAUA,EACfzoD,KAAK8/B,QAAUzhC,EAAIghE,EAAU5W,EAAS,GACtCzoD,KAAKqsC,OAAShuC,EAAI8gE,EAAS1W,EAAS,IAEtC2U,EAA2B57D,EAAIk8D,EAAuB,SAAU3qD,GAC9D,OAAOA,IAAMwqD,GAAYxqD,IAAMmqD,EAC3B,IAAID,EAAqBlqD,GACzBiqD,EAA4BjqD,KAIpCzU,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAK8+D,EAAY,CAAEl3C,QAAS82C,IACpE,EAAQ,GAAR,CAAgCA,EA7MlB,WA8Md,EAAQ,GAAR,CA9Mc,WA+MdL,EAAU,EAAQ,GAAkB,QAGpC5+D,EAAQA,EAAQW,EAAIX,EAAQO,GAAK8+D,EAlNnB,UAkNwC,CAEpDtxB,OAAQ,SAAgBtvC,GACtB,IAAI0iE,EAAa/B,EAAqB19D,MAGtC,OADA0/D,EADeD,EAAWpzB,QACjBtvC,GACF0iE,EAAWhX,WAGtBnqD,EAAQA,EAAQW,EAAIX,EAAQO,GAAKuP,IAAYuvD,GA3N/B,UA2NqD,CAEjE79B,QAAS,SAAiBykB,GACxB,OAAOgE,EAAen6C,GAAWpO,OAASk9D,EAAUK,EAAWv9D,KAAMukD,MAGzEjmD,EAAQA,EAAQW,EAAIX,EAAQO,IAAM8+D,GAAc,EAAQ,GAAR,EAA0B,SAAUpmD,GAClFgmD,EAASoC,IAAIpoD,GAAa,MAAEkmD,OAlOhB,UAmOA,CAEZkC,IAAK,SAAallC,GAChB,IAAI1nB,EAAI/S,KACJy/D,EAAa/B,EAAqB3qD,GAClC+sB,EAAU2/B,EAAW3/B,QACrBuM,EAASozB,EAAWpzB,OACpBn+B,EAASmvD,GAAQ,WACnB,IAAI1sD,EAAS,GACT7I,EAAQ,EACR84B,EAAY,EAChBoqB,EAAMvwB,GAAU,GAAO,SAAUguB,GAC/B,IAAImX,EAAS93D,IACT+3D,GAAgB,EACpBlvD,EAAOvL,UAAK5F,GACZohC,IACA7tB,EAAE+sB,QAAQ2oB,GAASpI,MAAK,SAAUnjD,GAC5B2iE,IACJA,GAAgB,EAChBlvD,EAAOivD,GAAU1iE,IACf0jC,GAAad,EAAQnvB,MACtB07B,QAEHzL,GAAad,EAAQnvB,MAGzB,OADIzC,EAAO1N,GAAG6rC,EAAOn+B,EAAO6I,GACrB0oD,EAAWhX,SAGpBqX,KAAM,SAAcrlC,GAClB,IAAI1nB,EAAI/S,KACJy/D,EAAa/B,EAAqB3qD,GAClCs5B,EAASozB,EAAWpzB,OACpBn+B,EAASmvD,GAAQ,WACnBrS,EAAMvwB,GAAU,GAAO,SAAUguB,GAC/B11C,EAAE+sB,QAAQ2oB,GAASpI,KAAKof,EAAW3/B,QAASuM,SAIhD,OADIn+B,EAAO1N,GAAG6rC,EAAOn+B,EAAO6I,GACrB0oD,EAAWhX,Y,6BCzRtB,IAAI/7C,EAAY,EAAQ,IAExB,SAASqzD,EAAkBhtD,GACzB,IAAI+sB,EAASuM,EACbrsC,KAAKyoD,QAAU,IAAI11C,GAAE,SAAUitD,EAAWN,GACxC,QAAgBlgE,IAAZsgC,QAAoCtgC,IAAX6sC,EAAsB,MAAM1rC,UAAU,2BACnEm/B,EAAUkgC,EACV3zB,EAASqzB,KAEX1/D,KAAK8/B,QAAUpzB,EAAUozB,GACzB9/B,KAAKqsC,OAAS3/B,EAAU2/B,GAG1BrwC,EAAOD,QAAQyF,EAAI,SAAUuR,GAC3B,OAAO,IAAIgtD,EAAkBhtD,K,gBChB/B,IAAI3R,EAAW,EAAQ,GACnBX,EAAW,EAAQ,GACnBi9D,EAAuB,EAAQ,KAEnC1hE,EAAOD,QAAU,SAAUgX,EAAGwxC,GAE5B,GADAnjD,EAAS2R,GACLtS,EAAS8jD,IAAMA,EAAEh6C,cAAgBwI,EAAG,OAAOwxC,EAC/C,IAAI0b,EAAoBvC,EAAqBl8D,EAAEuR,GAG/C,OADA+sB,EADcmgC,EAAkBngC,SACxBykB,GACD0b,EAAkBxX,U,6BCT3B,IAAIlnD,EAAK,EAAQ,IAAgBC,EAC7BjE,EAAS,EAAQ,IACjBkR,EAAc,EAAQ,IACtBpQ,EAAM,EAAQ,IACdkQ,EAAa,EAAQ,IACrBy8C,EAAQ,EAAQ,IAChBkV,EAAc,EAAQ,IACtB5sD,EAAO,EAAQ,KACf/D,EAAa,EAAQ,IACrB4sC,EAAc,EAAQ,GACtB7E,EAAU,EAAQ,IAAWA,QAC7BxkC,EAAW,EAAQ,IACnBqtD,EAAOhkB,EAAc,KAAO,OAE5BikB,EAAW,SAAU17D,EAAMlH,GAE7B,IACIsrB,EADAhhB,EAAQwvC,EAAQ95C,GAEpB,GAAc,MAAVsK,EAAe,OAAOpD,EAAKkxD,GAAG9tD,GAElC,IAAKghB,EAAQpkB,EAAK27D,GAAIv3C,EAAOA,EAAQA,EAAMprB,EACzC,GAAIorB,EAAMqnC,GAAK3yD,EAAK,OAAOsrB,GAI/B9sB,EAAOD,QAAU,CACf+vD,eAAgB,SAAU11C,EAAS5M,EAAMiE,EAAQ69C,GAC/C,IAAIv4C,EAAIqD,GAAQ,SAAU1R,EAAM+1B,GAC9BlsB,EAAW7J,EAAMqO,EAAGvJ,EAAM,MAC1B9E,EAAK62C,GAAK/xC,EACV9E,EAAKkxD,GAAKr4D,EAAO,MACjBmH,EAAK27D,QAAK7gE,EACVkF,EAAK47D,QAAK9gE,EACVkF,EAAKy7D,GAAQ,EACG3gE,MAAZi7B,GAAuBuwB,EAAMvwB,EAAUhtB,EAAQ/I,EAAK4mD,GAAQ5mD,MAsDlE,OApDA+J,EAAYsE,EAAElV,UAAW,CAGvBgrB,MAAO,WACL,IAAK,IAAInkB,EAAOoO,EAAS9S,KAAMwJ,GAAOzJ,EAAO2E,EAAKkxD,GAAI9sC,EAAQpkB,EAAK27D,GAAIv3C,EAAOA,EAAQA,EAAMprB,EAC1ForB,EAAM/rB,GAAI,EACN+rB,EAAM/qB,IAAG+qB,EAAM/qB,EAAI+qB,EAAM/qB,EAAEL,OAAI8B,UAC5BO,EAAK+oB,EAAM7sB,GAEpByI,EAAK27D,GAAK37D,EAAK47D,QAAK9gE,EACpBkF,EAAKy7D,GAAQ,GAIf,OAAU,SAAU3iE,GAClB,IAAIkH,EAAOoO,EAAS9S,KAAMwJ,GACtBsf,EAAQs3C,EAAS17D,EAAMlH,GAC3B,GAAIsrB,EAAO,CACT,IAAIlV,EAAOkV,EAAMprB,EACbgpD,EAAO59B,EAAM/qB,SACV2G,EAAKkxD,GAAG9sC,EAAM7sB,GACrB6sB,EAAM/rB,GAAI,EACN2pD,IAAMA,EAAKhpD,EAAIkW,GACfA,IAAMA,EAAK7V,EAAI2oD,GACfhiD,EAAK27D,IAAMv3C,IAAOpkB,EAAK27D,GAAKzsD,GAC5BlP,EAAK47D,IAAMx3C,IAAOpkB,EAAK47D,GAAK5Z,GAChChiD,EAAKy7D,KACL,QAASr3C,GAIbpU,QAAS,SAAiB1G,GACxB8E,EAAS9S,KAAMwJ,GAGf,IAFA,IACIsf,EADAtnB,EAAInD,EAAI2P,EAAY3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,EAAW,GAElEspB,EAAQA,EAAQA,EAAMprB,EAAIsC,KAAKqgE,IAGpC,IAFA7+D,EAAEsnB,EAAM/R,EAAG+R,EAAMqnC,EAAGnwD,MAEb8oB,GAASA,EAAM/rB,GAAG+rB,EAAQA,EAAM/qB,GAK3CuK,IAAK,SAAa9K,GAChB,QAAS4iE,EAASttD,EAAS9S,KAAMwJ,GAAOhM,MAGxC2+C,GAAa56C,EAAGwR,EAAElV,UAAW,OAAQ,CACvCf,IAAK,WACH,OAAOgW,EAAS9S,KAAMwJ,GAAM22D,MAGzBptD,GAET2oC,IAAK,SAAUh3C,EAAMlH,EAAKN,GACxB,IACIwpD,EAAM5+C,EADNghB,EAAQs3C,EAAS17D,EAAMlH,GAoBzB,OAjBEsrB,EACFA,EAAM/R,EAAI7Z,GAGVwH,EAAK47D,GAAKx3C,EAAQ,CAChB7sB,EAAG6L,EAAQwvC,EAAQ95C,GAAK,GACxB2yD,EAAG3yD,EACHuZ,EAAG7Z,EACHa,EAAG2oD,EAAOhiD,EAAK47D,GACf5iE,OAAG8B,EACHzC,GAAG,GAEA2H,EAAK27D,KAAI37D,EAAK27D,GAAKv3C,GACpB49B,IAAMA,EAAKhpD,EAAIorB,GACnBpkB,EAAKy7D,KAES,MAAVr4D,IAAepD,EAAKkxD,GAAG9tD,GAASghB,IAC7BpkB,GAEX07D,SAAUA,EACVrU,UAAW,SAAUh5C,EAAGvJ,EAAMiE,GAG5ByyD,EAAYntD,EAAGvJ,GAAM,SAAUmsD,EAAUb,GACvC90D,KAAKu7C,GAAKzoC,EAAS6iD,EAAUnsD,GAC7BxJ,KAAK61D,GAAKf,EACV90D,KAAKsgE,QAAK9gE,KACT,WAKD,IAJA,IACIs1D,EADO90D,KACK61D,GACZ/sC,EAFO9oB,KAEMsgE,GAEVx3C,GAASA,EAAM/rB,GAAG+rB,EAAQA,EAAM/qB,EAEvC,OANWiC,KAMDu7C,KANCv7C,KAMYsgE,GAAKx3C,EAAQA,EAAQA,EAAMprB,EANvCsC,KAMgDu7C,GAAG8kB,IAMnC/sD,EAAK,EAApB,QAARwhD,EAA+BhsC,EAAMqnC,EAC7B,UAAR2E,EAAiChsC,EAAM/R,EAC5B,CAAC+R,EAAMqnC,EAAGrnC,EAAM/R,KAdpB/W,KAQJu7C,QAAK/7C,EACH8T,EAAK,MAMb7F,EAAS,UAAY,UAAWA,GAAQ,GAG3C8B,EAAW/F,M,6BC5If,IAAIiF,EAAc,EAAQ,IACtB8oC,EAAU,EAAQ,IAAWA,QAC7Bn2C,EAAW,EAAQ,GACnBX,EAAW,EAAQ,GACnB8N,EAAa,EAAQ,IACrBy8C,EAAQ,EAAQ,IAChB/7C,EAAoB,EAAQ,IAC5BsxD,EAAO,EAAQ,IACfztD,EAAW,EAAQ,IACnBxC,EAAYrB,EAAkB,GAC9BsB,EAAiBtB,EAAkB,GACnCnP,EAAK,EAGL0gE,EAAsB,SAAU97D,GAClC,OAAOA,EAAK47D,KAAO57D,EAAK47D,GAAK,IAAIG,IAE/BA,EAAsB,WACxBzgE,KAAKmB,EAAI,IAEPu/D,EAAqB,SAAU9/D,EAAOpD,GACxC,OAAO8S,EAAU1P,EAAMO,GAAG,SAAUT,GAClC,OAAOA,EAAG,KAAOlD,MAGrBijE,EAAoB5iE,UAAY,CAC9Bf,IAAK,SAAUU,GACb,IAAIsrB,EAAQ43C,EAAmB1gE,KAAMxC,GACrC,GAAIsrB,EAAO,OAAOA,EAAM,IAE1BxgB,IAAK,SAAU9K,GACb,QAASkjE,EAAmB1gE,KAAMxC,IAEpCiJ,IAAK,SAAUjJ,EAAKN,GAClB,IAAI4rB,EAAQ43C,EAAmB1gE,KAAMxC,GACjCsrB,EAAOA,EAAM,GAAK5rB,EACjB8C,KAAKmB,EAAEiE,KAAK,CAAC5H,EAAKN,KAEzB,OAAU,SAAUM,GAClB,IAAIsK,EAAQyI,EAAevQ,KAAKmB,GAAG,SAAUT,GAC3C,OAAOA,EAAG,KAAOlD,KAGnB,OADKsK,GAAO9H,KAAKmB,EAAE0jB,OAAO/c,EAAO,MACvBA,IAId9L,EAAOD,QAAU,CACf+vD,eAAgB,SAAU11C,EAAS5M,EAAMiE,EAAQ69C,GAC/C,IAAIv4C,EAAIqD,GAAQ,SAAU1R,EAAM+1B,GAC9BlsB,EAAW7J,EAAMqO,EAAGvJ,EAAM,MAC1B9E,EAAK62C,GAAK/xC,EACV9E,EAAKkxD,GAAK91D,IACV4E,EAAK47D,QAAK9gE,EACMA,MAAZi7B,GAAuBuwB,EAAMvwB,EAAUhtB,EAAQ/I,EAAK4mD,GAAQ5mD,MAoBlE,OAlBA+J,EAAYsE,EAAElV,UAAW,CAGvB,OAAU,SAAUL,GAClB,IAAKiD,EAASjD,GAAM,OAAO,EAC3B,IAAIuC,EAAOw3C,EAAQ/5C,GACnB,OAAa,IAATuC,EAAsBygE,EAAoB1tD,EAAS9S,KAAMwJ,IAAe,OAAEhM,GACvEuC,GAAQwgE,EAAKxgE,EAAMC,KAAK41D,YAAc71D,EAAKC,KAAK41D,KAIzDttD,IAAK,SAAa9K,GAChB,IAAKiD,EAASjD,GAAM,OAAO,EAC3B,IAAIuC,EAAOw3C,EAAQ/5C,GACnB,OAAa,IAATuC,EAAsBygE,EAAoB1tD,EAAS9S,KAAMwJ,IAAOlB,IAAI9K,GACjEuC,GAAQwgE,EAAKxgE,EAAMC,KAAK41D,OAG5B7iD,GAET2oC,IAAK,SAAUh3C,EAAMlH,EAAKN,GACxB,IAAI6C,EAAOw3C,EAAQn2C,EAAS5D,IAAM,GAGlC,OAFa,IAATuC,EAAeygE,EAAoB97D,GAAM+B,IAAIjJ,EAAKN,GACjD6C,EAAK2E,EAAKkxD,IAAM14D,EACdwH,GAETi8D,QAASH,I,gBClFX,IAAIz/D,EAAY,EAAQ,IACpBsM,EAAW,EAAQ,GACvBrR,EAAOD,QAAU,SAAU2E,GACzB,QAAWlB,IAAPkB,EAAkB,OAAO,EAC7B,IAAIwqB,EAASnqB,EAAUL,GACnB0C,EAASiK,EAAS6d,GACtB,GAAIA,IAAW9nB,EAAQ,MAAMuD,WAAW,iBACxC,OAAOvD,I,gBCPT,IAAI0L,EAAO,EAAQ,IACf4sD,EAAO,EAAQ,IACft6D,EAAW,EAAQ,GACnBoC,EAAU,EAAQ,GAAaA,QACnCxH,EAAOD,QAAUyH,GAAWA,EAAQI,SAAW,SAAiBlD,GAC9D,IAAIyH,EAAO2G,EAAKtN,EAAEJ,EAASV,IACvB2rB,EAAaqvC,EAAKl6D,EACtB,OAAO6qB,EAAalkB,EAAKpE,OAAOsoB,EAAW3rB,IAAOyH,I,gBCPpD,IAAIkF,EAAW,EAAQ,GACnBikC,EAAS,EAAQ,IACjBhuC,EAAU,EAAQ,IAEtBtH,EAAOD,QAAU,SAAU2I,EAAM4rB,EAAWswC,EAAY1S,GACtD,IAAIjvD,EAAIsG,OAAOjC,EAAQoB,IACnBm8D,EAAe5hE,EAAEmE,OACjB09D,OAAyBthE,IAAfohE,EAA2B,IAAMr7D,OAAOq7D,GAClDG,EAAe1zD,EAASijB,GAC5B,GAAIywC,GAAgBF,GAA2B,IAAXC,EAAe,OAAO7hE,EAC1D,IAAI+hE,EAAUD,EAAeF,EACzBI,EAAe3vB,EAAOl1C,KAAK0kE,EAAS1gE,KAAKyM,KAAKm0D,EAAUF,EAAQ19D,SAEpE,OADI69D,EAAa79D,OAAS49D,IAASC,EAAeA,EAAal/D,MAAM,EAAGi/D,IACjE9S,EAAO+S,EAAehiE,EAAIA,EAAIgiE,I,gBCdvC,IAAI9kB,EAAc,EAAQ,GACtBof,EAAU,EAAQ,IAClBvuD,EAAY,EAAQ,IACpB8uD,EAAS,EAAQ,IAAiBt6D,EACtCxF,EAAOD,QAAU,SAAUmlE,GACzB,OAAO,SAAUxgE,GAOf,IANA,IAKIlD,EALAiE,EAAIuL,EAAUtM,GACdyH,EAAOozD,EAAQ95D,GACf2B,EAAS+E,EAAK/E,OACdnH,EAAI,EACJiS,EAAS,GAEN9K,EAASnH,GACduB,EAAM2K,EAAKlM,KACNkgD,IAAe2f,EAAO1/D,KAAKqF,EAAGjE,IACjC0Q,EAAO9I,KAAK87D,EAAY,CAAC1jE,EAAKiE,EAAEjE,IAAQiE,EAAEjE,IAG9C,OAAO0Q,K,cClBX,IAAIhQ,EAAOlC,EAAOD,QAAU,CAAEkF,QAAS,SACrB,iBAAPC,MAAiBA,IAAMhD,I,cCDlClC,EAAOD,QAAU,SAAUwE,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,K,cCEX,IAAI2gE,EAAqC,oBAAZ,QAA2BC,OAAOD,gBAAgB1jE,KAAK2jE,SACzC,oBAAd,UAA6BC,SAASF,gBAAgB1jE,KAAK4jE,UACxF,GAAIF,EAAiB,CAEnB,IAAIG,EAAQ,IAAI1xD,WAAW,IAE3B5T,EAAOD,QAAU,WAEf,OADAolE,EAAgBG,GACTA,OAEJ,CAKL,IAAIC,EAAO,IAAIv/D,MAAM,IAErBhG,EAAOD,QAAU,WACf,IAAK,IAAWgB,EAAPd,EAAI,EAAMA,EAAI,GAAIA,IACN,IAAV,EAAJA,KAAiBc,EAAoB,WAAhBqD,KAAKkmB,UAC/Bi7C,EAAKtlE,GAAKc,MAAY,EAAJd,IAAa,GAAK,IAGtC,OAAOslE,K,cCxBX,IADA,IAAIC,EAAY,GACPvlE,EAAI,EAAGA,EAAI,MAAOA,EACzBulE,EAAUvlE,IAAMA,EAAI,KAAOkS,SAAS,IAAI44C,OAAO,GAgBjD/qD,EAAOD,QAbP,SAAqB0lE,EAAK5uD,GACxB,IAAI5W,EAAI4W,GAAU,EACd6uD,EAAMF,EACV,OAAOE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MACvBylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MAAQ,IAChCylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MAAQ,IAChCylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MAAQ,IAChCylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MAAQ,IAChCylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MACxBylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,MACxBylE,EAAID,EAAIxlE,MAAQylE,EAAID,EAAIxlE,Q,iBCnBlC,kBAAe,EAAQ,KAEvBkG,EAAI+pD,aAAeA,EAEnBlwD,EAAOD,QAAUoG,EAKjB,SAASA,IACL,IAAI,IAAIlG,KAAKoG,UAAW,CACpB,IAAIspB,EAAQtpB,UAAUpG,GAClBqoD,EAAM4H,EAAavgC,GACvBhqB,EAAQQ,IAAImiD,IAIpB,SAAS4H,EAAavgC,GAClB,IAAI24B,EAWR,SAAiB34B,GACb,IAAMA,EACF,OAAOA,EAGX,GAAIA,EAAMphB,cAAgBvI,MACtB,OAAO2/D,EAAiBh2C,GAG5B,IACIi2C,EAAYC,EAAMl2C,GACtB,GAFkB,aAEdi2C,EAAU7/D,MAAM,EAFF,WAEiBqB,QAC/B,OAAOu+D,EAAiBh2C,GAE5B,OAAOi2C,EAzBGE,CAAQn2C,GAIlB,OAAI24B,GAAOA,EAAIlhD,OADH,IAEHkhD,EAAIviD,MAAM,EAFP,KAEiB,wBAGtBuiD,EAoBX,SAASqd,EAAiB/gB,GACtB,IAAImhB,EAYR,SAASC,EAAkB7Y,EAAI8Y,EAAe,IAC1C,KAAO9Y,aAAcxsD,QACjB,OAAOwsD,EAGX,GAAIA,aAAcpvC,OAOd,OANMovC,EAAG3T,SACL2T,EAAG3T,OAAS,WAER,MADU,YAAYqsB,EAAM1Y,GAAI,MAIjCA,EAEX,GAAIA,aAAc1pD,SAad,OAZM0pD,EAAG3T,SACL2T,EAAG3T,OAAS,WAQR,OANM2T,EAAG3sD,KAGD,cAAc2sD,EAAG3sD,KAAK,IAHd,eASjB2sD,EAGX,GAAIA,EAAG5+C,cAAgB5N,QAAUwsD,EAAG5+C,cAAgBvI,MAChD,OAAOmnD,EAGX,GAAI8Y,EAAeptD,SAASs0C,GACxB,MAAO,yBAEX8Y,EAAiB,CAAC9Y,KAAO8Y,GAEzB,IAAIC,EAAU,IAAK/Y,EAAc,YACjC,IAAI,IAAI3rD,KAAO2rD,EACX+Y,EAAQ1kE,GAAOwkE,EAAkB7Y,EAAG3rD,GAAMykE,GAE9C,OAAOC,EAvDQF,CAAkBphB,GACjC,IACI,OAAOhE,KAAK4H,UAAUud,EAAU,KAAM,GACxC,MAAMvhE,GACJ,OAAI4rD,IACW,EAAQ,IACPppD,QAAQ49C,GAEjBihB,EAAME,GAAU,IAAIvhE,EAAE,sCAkDrC,SAASqhE,EAAMM,GACX,MAAqB,iBAAVA,GAAuBA,EAAMh0D,SAGhC,GAAGg0D,EAFF,qB,mCC3Gb,YAAAnmE,EAAA,QAEA,WACE,OAA2CwiB,GAAWA,EAAQu/B,UAAYv/B,EAAQu/B,SAASqkB,Q,gECH7F,kBAEA,SAASC,YAAYC,GAAM,QAACC,EAAQ,EAAC,OAAEC,EAAO,MAAM,IAChD,MAAMC,EAAe,GAErBH,EAAK5tD,QAAQguD,IACTA,EAAMhuD,QAAQ,CAACiuD,EAAMC,KACjBH,EAAaG,GACTxiE,KAAK6lB,IACD48C,eAAeF,GACfF,EAAaG,IAAe,OAM5C,MAAMjV,EAAQ,GAmBd,OAjBA2U,EAAK5tD,QAAQguD,IACT,IAAI5b,EAAO0b,EACXE,EAAMhuD,QAAQ,CAACiuD,EAAMC,KACjB,MAAME,EAAWL,EAAaG,GAExBG,EADeH,IAAeF,EAAMt/D,OAAO,EAE7B,GAGX4/D,OAAOF,EAASP,EAAS,KAAKxgE,MAAM8gE,eAAeF,IAG5D7b,GAAQ6b,EAAOI,IAEnBpV,EAAMvoD,KAAK0hD,KAGR6G,EAAM5kD,KAAK,MAGtB,SAASojD,YAAYxO,GAAO,QAAC4kB,EAAQ,GAAG,IAEpC,MAAMU,EAAiB,oBAAQ,KAIzBC,EAAaL,eADnBllB,EAAQ,IAAIA,EAAM,KAEZwlB,EAAW/iE,KAAK6lB,IAHC,GAGmBi9C,EAAmB,EAARX,GAE/Ca,GADc,oBAAQ,KACVhjE,KAAK0M,OAAOq2D,EAAWD,GAAc,IACjDG,EAAML,OAAOG,GACbG,EAAYN,OAAOI,GAAazlB,EAAQqlB,OAAOG,EAAWC,EAAYF,GAE5E,OADAD,EAAeJ,eAAeQ,KAAOR,eAAeS,IAEhD,CACID,EACAC,EACAD,GACFt6D,KAAK,MAGf,SAAS85D,eAAeve,KACpB,IAAM8H,WACF,OAAO9H,IAAIlhD,OAEf,MAAMmgE,YAAcC,KAAK,UAALA,CAAgB,gBACpC,OAAOD,YAAYjf,KAEvB,SAAS8H,WACL,YAA0B,IAAZ5tC,SAA6C,oBAAXre,OAGpD,SAAS6iE,OAAOG,EAAUM,EAAO,KAC7B,OAAO,IAAIzhE,MAAMmhE,GAAU9uD,KAAKovD,GAAQ16D,KAAK,IAvEjD/M,OAAA,SAAkBqmE,wBAAalW,2B,qDCA/B,YAAAnwD,EAAA,QAEA,WACE,OAA2CwiB,GAAWA,EAAQu/B,UAAYv/B,EAAQu/B,SAASqkB,Q,owCCexExoB,E,YAEnB,WAAalC,GAAU,a,4FAAA,UACrB,2BAGKgsB,SAAU,EAGf,EAAKhsB,SAAWA,EAGhB,gBAAoB,EAGpB,EAAK50C,MAAQ,KAGb,EAAK6gE,aAAe,KACpBzqB,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAKojE,iBAjBD,E,8SAsCrB,OADA5jE,KAAA,cAAoB,EACbA,KAAK4jE,gB,oCASC,WAEb,OAAI5jE,KAAK2jE,aAAuB3jE,KAAK2jE,cAGrC3jE,KAAK8C,MAAQ,KACb9C,KAAKkF,KAAK,WAGNlF,KAAA,aAA4BymB,QAAQqZ,WAGxC9/B,KAAK2jE,aAAe3jE,KAAK6jE,eAAL,OAA0B,SAAAlhE,GAE5C,EAAKghE,aAAe,KACpB,EAAK7gE,MAAQH,EACbhB,EAAQmB,MAAMH,GACd,EAAKuC,KAAK,QAASvC,MAId3C,KAAK2jE,iB,gLAOZhiE,EAAQQ,IAAR,kEAAuEnC,KAAK8jE,W,SAGtE9jE,KAAKg5C,QAAQ+qB,O,cACnB/jE,KAAKkF,KAAK,W,SAGYlF,KAAK+jE,O,YAAvBC,E,SAGyC,iBAArBA,EAAU5gE,O,iBAEhC,IADI6gE,EAAe,G,6BACnB,EAAejkE,KAAKg5C,QAAQ7wC,OAA5B,+CAASrI,EAA2B,QAE7BkkE,EAAUnvD,SAAS/U,IAAOmkE,EAAa7+D,KAAKtF,G,0OAInDE,KAAKkkE,cAAcD,G,QAIrBjkE,KAAA,cAAoB,EACpBA,KAAK2jE,aAAe,KACpB3jE,KAAKkF,KAAK,WACVvD,EAAQQ,IAAR,sCAA2CnC,KAAK8jE,SAAhD,sB,6QAsBM,IAAIrhE,MAAJ,0C,sHAUNzC,KAAK03C,SAASc,aAAax4C,MAC3BA,KAAKkF,KAAK,Y,8BAYHpF,EAAI48D,GACX,MAAM,IAAIj6D,MAAM,+C,iCASNu2C,GAAS,kCAGnB,IAHmB,IAGnB,EAHmB,iBAGV4H,EAHU,QAMbujB,EAAiB,EAAKnrB,QAAQl8C,IAAI8jD,EAAI9gD,IACtCqkE,GAGF,EAAKC,iBAAiBD,EAAgBvjB,EAAI7gD,MAG1CokE,EAAepkE,KAAO6gD,EAAI7gD,KAC1BokE,EAAejkE,OAAS,KAGxB,EAAK84C,QAAQvyC,IAAIm6C,EAAI9gD,GAAI8gD,KAKzB,EAAKyjB,QAAQzjB,GAGb,EAAK5H,QAAQvyC,IAAIm6C,EAAI9gD,GAAI8gD,IAK3B1H,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkB07C,EAAI9gD,QA3BnD,EAAgBk5C,EAAhB,+CAAyB,IAHN,kFAmCfA,EAAQ51C,OAAS,GACnBpD,KAAKkF,KAAK,a,oCAUC8zC,GAAS,WAElBsrB,GAAY,EAFM,uBAGtB,IAHsB,IAGtB,EAHsB,iBAGb1jB,EAHa,QAKhBujB,EAAiB,EAAKnrB,QAAQl8C,IAAI8jD,EAAI9gD,IAC1C,OAAKqkE,GAGAA,EAAepkE,MAGpB,EAAKqkE,iBAAiBD,EAAgBvjB,EAAI7H,UAG1C3R,gBAAM+8B,EAAepkE,KAAM6gD,EAAI7H,UAG/BorB,EAAejkE,OAAS,KAGxBg5C,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkB07C,EAAI9gD,YACjDwkE,GAAY,IAhBW,YAHzB,EAAgBtrB,EAAhB,+CAAyB,IAHH,kFA0BlBsrB,GAAatkE,KAAKkF,KAAK,a,oCASdq/D,GAAK,WAEdD,GAAY,EAFE,uBAGlB,IAHkB,IAGlB,EAHkB,iBAGTxkE,EAHS,QAKhB,EAAK0kE,WAAW1kE,GAGZ,EAAKk5C,QAAL,OAAoBl5C,KAEtBo5C,IAAQC,KAAI,SAAA34C,GAAC,OAAI,EAAK0E,KAAK,iBAAkBpF,MAC7CwkE,GAAY,IARhB,EAAeC,EAAf,+CAAoB,IAHF,kFAgBdD,GAAatkE,KAAKkF,KAAK,a,2CAUPu/D,M,0BAWjB9mE,GACH,OAAOA,I,8BASAo9B,GAAU,2BAEjB,YAAmB/6B,KAAKg5C,QAAQroC,SAAhC,+CAA0C,KAAjChT,EAAiC,QAEpC+jC,EAAS/jC,EAAOuC,OASpB,GANKwhC,IAEH/jC,EAAOuC,OAASwhC,EAAS1hC,KAAK+U,IAAIpX,IAI/B+jC,IAGoB,IAArB3G,EAAS2G,GAAqB,OAhBnB,qF,4BA0BU,WAAxBgjC,IAAwB,yDAE3B,GAAIA,EACF,OAAO1kE,KAAK4jE,cAAcvjB,MAAK,SAAA7/C,GAAC,OAAI,EAAK1D,KAAI,MAI/C,IAAI6nE,EAAQ,GAPe,uBAQ3B,YAAmB3kE,KAAKg5C,QAAQroC,SAAhC,+CAA0C,KAAjChT,EAAiC,QAExC,GAAIA,EAAOuC,OACTykE,EAAMv/D,KAAKzH,EAAOuC,YADpB,CAMA,IAAIwhC,EAAS1hC,KAAK+U,IAAIpX,GACjB+jC,IAKL/jC,EAAOuC,OAASwhC,EAGhBijC,EAAMv/D,KAAKs8B,MAzBc,kFA6B3B,OAAOijC,I,8BASA7kE,GAA4B,WAAxB4kE,IAAwB,yDAEnC,GAAIA,EACF,OAAO1kE,KAAK4jE,cAAcvjB,MAAK,SAAA7/C,GAAC,OAAI,EAAKokE,QAAQ9kE,GAAI,MAIvD,IAAInC,EAASqC,KAAKg5C,QAAQl8C,IAAIgD,GAC9B,IAAKnC,EACH,OAAO,KAIT,GAAIA,EAAOuC,OAAU,OAAOvC,EAAOuC,OAGnC,IAAIwhC,EAAS1hC,KAAK+U,IAAIpX,GACtB,OAAK+jC,GAGL/jC,EAAOuC,OAASwhC,EAGTA,GANe,O,0BAenB5hC,GACH,OAAOE,KAAKg5C,QAAQ1wC,IAAIxI,K,uCAWRA,EAAI25C,EAASv8C,GAAO,WAEhCS,EAASqC,KAAKg5C,QAAQl8C,IAAIgD,GAC9B,IAAKnC,EAAU,OAAO,aAGtB,IAAI+7C,EAAW58C,cAAIa,EAAOoC,KAAM05C,GAehC,OAZAz5C,KAAK6kE,gBAAgBlnE,EAAQ87C,EAASC,EAAUx8C,GAGhDuJ,cAAI9I,EAAOoC,KAAM05C,EAASv8C,GAC1BS,EAAOuC,OAAS,KAChBF,KAAKkF,KAAK,iBAAkBpF,GAC5BE,KAAKkF,KAAK,WAGVlF,KAAKg5C,QAAQvyC,IAAI3G,EAAInC,GAGd,SAAA6C,GAEL,EAAKqkE,gBAAgBlnE,EAAQ87C,EAASv8C,EAAOw8C,GAG7CjzC,cAAI9I,EAAOoC,KAAM05C,EAASC,GAC1B/7C,EAAOuC,OAAS,KAChB,EAAKgF,KAAK,iBAAkBpF,GAC5B,EAAKoF,KAAK,WAGV,EAAK8zC,QAAQvyC,IAAI3G,EAAInC,M,uCAUPmC,GAAI,WAEhBnC,EAASqC,KAAKg5C,QAAQl8C,IAAIgD,GAC9B,OAAKnC,GAGLqC,KAAKwkE,WAAW7mE,GAGhBqC,KAAKg5C,QAAL,OAAoBl5C,GACpBE,KAAKkF,KAAK,WAGH,SAAA1E,GAED,EAAKw4C,QAAQ1wC,IAAIxI,KAGrB,EAAKukE,QAAQ1mE,GAGb,EAAKmnE,WAAW,CAACnnE,OAlBG,e,6BA6BhB87C,EAASv8C,GACf,OAAO,IAAI6nE,IAAO/kE,KAAMy5C,EAASv8C,K,8BAU1BS,M,uCAUSA,EAAQsgC,M,sCAYTtgC,EAAQ87C,EAASC,EAAUxlB,M,iCAShCylB,M,8BAneV,OAAI35C,KAAKglE,SACAhlE,KAAKglE,UAGdhlE,KAAKglE,SAAW,IAAIC,IAAYjlE,KAAK8jE,SAAU9jE,KAAK0jE,SAC7C1jE,KAAKglE,Y,+BAkFZ,MAAM,IAAIviE,MAAJ,+G,8BAjH0B0B,O,uQCZf4gE,E,WAGjB,WAAYxR,EAAQ9Z,EAASv8C,I,4FAAO,SAGhC8C,KAAKuzD,OAASA,EACdvzD,KAAKy5C,QAAUA,EACfz5C,KAAK9C,MAAQA,E,6DAWb,OAAO8C,KAAKuzD,OAAOqQ,gB,8BAIf9jE,GAA4B,IAAxB4kE,IAAwB,yDAChC,OAAO1kE,KAAKuzD,OAAOqR,QAAQ9kE,EAAI4kE,K,0BAI/B/mE,GACA,OAAOqC,KAAKuzD,OAAOx+C,IAAIpX,K,4BASC,WAAxB+mE,IAAwB,yDAGxB,GAAIA,EACA,OAAO1kE,KAAK4jE,cAAcvjB,MAAK,SAAA7/C,GAAC,OAAI,EAAK1D,KAAI,MAGjD,IAAI6nE,EAAQ,GAPY,uBAQxB,YAAmB3kE,KAAKg5C,QAAQroC,SAAhC,+CAA0C,KAAjChT,EAAiC,QAGlCT,EAAQJ,cAAIa,EAAOoC,KAAMC,KAAKy5C,SAClC,GAAIv8C,GAAS8C,KAAK9C,MAIlB,GAAIS,EAAOuC,OACPykE,EAAMv/D,KAAKzH,EAAOuC,YADtB,CAMA,IAAIwhC,EAAS1hC,KAAK+U,IAAIpX,GACjB+jC,IAIL/jC,EAAOuC,OAASwhC,EAGhBijC,EAAMv/D,KAAKs8B,MA9BS,kFAmCxB,OAAOijC,I,8BA3DP,OAAO3kE,KAAKuzD,OAAOva,a,8vBCZNksB,E,WAEjB,WAAYplE,EAAIqlE,GAAS,UAGrBnlE,KAAKF,GAAKA,EACVE,KAAKmlE,QAAUA,EAGfnlE,KAAKolE,MAAQplE,KAAKqlE,eAGlBrlE,KAAK4hB,MAAQ,IAAI4E,IAGjBxmB,KAAKuM,MAAQ,IAAI+4D,E,yDAOjB,IAGI,OAAItlE,KAAKmlE,QACE,KAGJ,IAAII,IAAQ,CAGf/oE,KAAM,YAAcwD,KAAKF,KAI/B,MAAO6C,GAIL,OADAhB,EAAQW,KAAKK,GACN,Q,4JAUP3C,KAAKwlE,O,oDACTxlE,KAAKwlE,QAAS,EAGTxlE,KAAKolE,M,0EAIHplE,KAAKuM,MAAM4sC,IAAX,4CAAe,WAAM34C,GAAN,oHAGE,EAAK4kE,MAAMK,QAAQ,CAAEC,cAAc,IAHrC,OAGdplB,EAHc,qCAMFA,EAAQgiB,KANN,sEAMTqD,EANS,SASL7lE,IAAO6lE,EAAIzoE,MAAM+C,IATZ,yDAaV2gD,EAAM,IAAI/gD,IAAW8lE,EAAIC,IAAIrnE,KAAMonE,EAAI7lE,GAAI6lE,EAAIC,IAAI7lE,OACnDE,IAAM0lE,EAAIzoE,MAAM+C,IACpB,EAAK2hB,MAAMnb,IAAIk/D,EAAI7lE,GAAI8gD,GAfT,6QA6BlBj/C,EAAQQ,IAAR,0CAA+C,EAAKyf,MAAMa,KAA1D,uBAA6E,EAAK2iD,MAAM5oE,OA7BtE,4EAAf,kCAAAwD,KAAA,uBA+BE,SAAA2C,GAGLhB,EAAQW,KAAK,qCAAsCK,O,6HAQ/C,OAAO3C,KAAK4hB,MAAM9Q,Y,8BACtBiqB,EAAU8qC,GAAa,OAAO7lE,KAAK4hB,MAAMlN,QAAQqmB,EAAU8qC,K,0BAC/DroE,GAAO,OAAOwC,KAAK4hB,MAAM9kB,IAAIU,K,0BAC7BA,GAAO,OAAOwC,KAAK4hB,MAAMtZ,IAAI9K,K,6BACxB,OAAOwC,KAAK4hB,MAAMzZ,S,+BAChB,OAAOnI,KAAK4hB,MAAMjR,W,KAC5B3T,OAAOuW,S,iBAAc,OAAOvT,KAAK4hB,MAAM5kB,OAAOuW,c,8BAEvC,WAGJvT,KAAK4hB,MAAMiH,QAGN7oB,KAAKolE,OAIVplE,KAAKuM,MAAM4sC,IAAX,4CAAe,WAAM34C,GAAN,gGAGL,EAAK4kE,MAAMjT,UAHN,OAMX,EAAKiT,MAAQ,EAAKC,eANP,2CAAf,kCAAArlE,KAAA,kB,6BAYGxC,GAAK,WAGR,IAAKwC,KAAKolE,MACN,OAAOplE,KAAK4hB,MAAL,OAAkBpkB,GAG7B,IAAIsoE,EAAQ9lE,KAAK4hB,MAAL,OAAkBpkB,GAgB9B,OAbAwC,KAAKuM,MAAM4sC,IAAX,4CAAe,WAAM34C,GAAN,sGAGU,EAAKulE,YAAYvoE,GAH3B,UAGPwoE,EAHO,wEAQL,EAAKZ,MAAM94B,OAAO9uC,EAAKwoE,GARlB,2CAAf,kCAAAhmE,KAAA,gBAaO8lE,I,0BAKPtoE,EAAKN,GAAO,WAGZ,IAAK8C,KAAKolE,MACN,OAAOplE,KAAK4hB,MAAMnb,IAAIjJ,EAAKN,GAG/B8C,KAAK4hB,MAAMnb,IAAIjJ,EAAKN,GAGpB8C,KAAKuM,MAAM4sC,IAAX,4CAAe,WAAM34C,GAAN,sGAGU,EAAKulE,YAAYvoE,GAH3B,UAGPwoE,EAHO,uCAOD,EAAKZ,MAAMa,IAAI,CACjBC,IAAK1oE,EACLe,KAAMrB,EAAMqB,KACZwB,KAAM7C,EAAM6C,OAVT,+CAgBD,EAAKqlE,MAAMa,IAAI,CACjBC,IAAK1oE,EACL2oE,KAAMH,EACNznE,KAAMrB,EAAMqB,KACZwB,KAAM7C,EAAM6C,OApBT,4CAAf,kCAAAC,KAAA,kB,kEA8BcF,G,kGAKLE,KAAKolE,M,yCACC,M,uBAGSplE,KAAKolE,MAAMtoE,IAAIgD,G,cAA/BwgD,E,yBACGA,GAAWA,EAAQ6lB,M,mCAKR,KAAd,KAAIC,O,0CACG,M,yJAUV5oE,GAGL,IAAI6oE,EAAMrmE,KAAKlD,IAAI,SAAWU,GAC9B,OAAI6oE,EACOA,EAAItmE,KAEJ,O,+BAKNvC,EAAKN,GAGV8C,KAAKyG,IAAI,SAAWjJ,EAAK,CACrBe,KAAM,SACNwB,KAAM7C,M,2BA9ID,OAAO8C,KAAK4hB,MAAMa,S,KA2J7B6iD,E,WAEF,aAAc,UAGVtlE,KAAK6J,QAAU,GAGf7J,KAAKsmE,UAAY,K,sCAOjBt8D,GAAM,WAGN,OAAO,IAAIyc,SAAQ,SAACuzC,EAAWC,GAG3B,EAAKpwD,QAAQzE,KAAK,CACd4E,OACAgwD,YACAC,WAIC,EAAKqM,WACN,EAAKv8D,6B,8CAOO,WAGpB,IAAI/J,KAAKsmE,UAAT,CACAtmE,KAAKsmE,WAAY,EAGjB,IAAIn8D,EAASnK,KAAK6J,QAAQhC,QACrBsC,EASLA,EAAOH,OAAOq2C,MAAK,SAAA7/C,GAGf2J,EAAO6vD,UAAUx5D,MAHrB,OAKS,SAAAmC,GAGLhB,EAAQmB,MAAMH,GACdwH,EAAO8vD,OAAOt3D,MAEf09C,MAAK,SAAA7/C,GAGJ,EAAK8lE,WAAY,EACjB,EAAKv8D,2BArBL/J,KAAKsmE,WAAY,K,4BA4BrB3kE,EAAQQ,IAAR,sDAA2DnC,KAAK6J,QAAQzG,OAAxE,uB,uDCjVR,oBA4FImjE,EACAC,EA7FJ,gHAQA,SAASC,EAAOjpE,GACd,MAAO,IAAMA,EAEf,SAASkpE,EAASlpE,GAChB,OAAOA,EAAIk2C,UAAU,GAEvB,SAASizB,IACP3mE,KAAK4mE,OAAS,GAoChB,SAASC,EAAMlnD,GAIb,GAHA3f,KAAK4mE,OAAS,IAAID,EAGdhnD,GAAS3d,MAAM2lB,QAAQhI,GACzB,IAAK,IAAI1jB,EAAI,EAAGkL,EAAMwY,EAAMvc,OAAQnH,EAAIkL,EAAKlL,IAC3C+D,KAAKmpB,IAAIxJ,EAAM1jB,IAiErB,SAAS6qE,EAAkBnpE,GACzB,GAAIA,aAAkBoS,YACpB,OAdJ,SAA0BgiD,GACxB,GAA0B,mBAAfA,EAAKhwD,MACd,OAAOgwD,EAAKhwD,MAAM,GAGpB,IAAIzC,EAAS,IAAIyQ,YAAYgiD,EAAK36C,YAC9Bk6C,EAAc,IAAI1hD,WAAWtQ,GAC7BiyD,EAAc,IAAI3hD,WAAWmiD,GAEjC,OADAT,EAAY7qD,IAAI8qD,GACTjyD,EAKEktB,CAAiB7uB,GAE1B,IAAI8kB,EAAO9kB,EAAO8kB,KACdlkB,EAAOZ,EAAOY,KAElB,MAA4B,mBAAjBZ,EAAOoE,MACTpE,EAAOoE,MAAM,EAAG0gB,EAAMlkB,GAGxBZ,EAAOopE,YAAY,EAAGtkD,EAAMlkB,GApHrCooE,EAAM9oE,UAAUf,IAAM,SAAUU,GAC9B,IAAIwpE,EAAUP,EAAOjpE,GACrB,OAAOwC,KAAK4mE,OAAOI,IAErBL,EAAM9oE,UAAU4I,IAAM,SAAUjJ,EAAKN,GACnC,IAAI8pE,EAAUP,EAAOjpE,GAErB,OADAwC,KAAK4mE,OAAOI,GAAW9pE,GAChB,GAETypE,EAAM9oE,UAAUyK,IAAM,SAAU9K,GAE9B,OADcipE,EAAOjpE,KACHwC,KAAK4mE,QAEzBD,EAAM9oE,UAAUopE,OAAS,SAAUzpE,GACjC,IAAIwpE,EAAUP,EAAOjpE,GACjByQ,EAAM+4D,KAAWhnE,KAAK4mE,OAE1B,cADO5mE,KAAK4mE,OAAOI,GACZ/4D,GAET04D,EAAM9oE,UAAU6W,QAAU,SAAUyzC,GAElC,IADA,IAAIhgD,EAAOxL,OAAOwL,KAAKnI,KAAK4mE,QACnB3qE,EAAI,EAAGkL,EAAMgB,EAAK/E,OAAQnH,EAAIkL,EAAKlL,IAAK,CAC/C,IAAIuB,EAAM2K,EAAKlM,GAGfksD,EAFYnoD,KAAK4mE,OAAOppE,GACxBA,EAAMkpE,EAASlpE,MAInBb,OAAOC,eAAe+pE,EAAM9oE,UAAW,OAAQ,CAC7Cf,IAAK,WACH,OAAOH,OAAOwL,KAAKnI,KAAK4mE,QAAQxjE,UAcpCyjE,EAAMhpE,UAAUsrB,IAAM,SAAU3rB,GAC9B,OAAOwC,KAAK4mE,OAAOngE,IAAIjJ,GAAK,IAE9BqpE,EAAMhpE,UAAUyK,IAAM,SAAU9K,GAC9B,OAAOwC,KAAK4mE,OAAOt+D,IAAI9K,IAEzBqpE,EAAMhpE,UAAU6W,QAAU,SAAUyzC,GAClCnoD,KAAK4mE,OAAOlyD,SAAQ,SAAUxX,EAAOM,GACnC2qD,EAAG3qD,OAGPb,OAAOC,eAAeiqE,EAAMhpE,UAAW,OAAQ,CAC7Cf,IAAK,WACH,OAAOkD,KAAK4mE,OAAOnkD,SAQvB,WACE,GAAsB,oBAAXzlB,QAAyC,oBAARwpB,KAAsC,oBAARE,IACxE,OAAO,EAET,IAAI+gB,EAAO9qC,OAAOuQ,yBAAyBsZ,IAAKxpB,OAAOkqE,SACvD,OAAOz/B,GAAQ,QAASA,GAAQjhB,IAAIxpB,OAAOkqE,WAAa1gD,IASpD2gD,IAIFZ,EAAcM,EACdL,EAAcG,IAJdJ,EAAc7/C,IACd8/C,EAAchgD,KA0ClB,IAAIxC,EAAevkB,SAAS5B,UAAUsQ,SAClCkW,EAAmBL,EAAa5nB,KAAKO,QAazC,SAASwkC,EAAMxjC,GACb,IAAIypE,EACAnrE,EACAkL,EAEJ,IAAKxJ,GAA4B,iBAAXA,EACpB,OAAOA,EAGT,GAAIqE,MAAM2lB,QAAQhqB,GAAS,CAEzB,IADAypE,EAAY,GACPnrE,EAAI,EAAGkL,EAAMxJ,EAAOyF,OAAQnH,EAAIkL,EAAKlL,IACxCmrE,EAAUnrE,GAAKklC,EAAMxjC,EAAO1B,IAE9B,OAAOmrE,EAKT,GAAIzpE,aAAkBgmB,KACpB,OAAOhmB,EAAO0pE,cAGhB,GAxEF,SAAwB1pE,GACtB,MAA+B,oBAAhBoS,aAA+BpS,aAAkBoS,aAC7C,oBAATu3D,MAAwB3pE,aAAkB2pE,KAsEhDC,CAAe5pE,GACjB,OAAOmpE,EAAkBnpE,GAG3B,IAtCF,SAAuBT,GACrB,IAAI+W,EAAQtX,OAAOiK,eAAe1J,GAElC,GAAc,OAAV+W,EACF,OAAO,EAET,IAAIsY,EAAOtY,EAAM1J,YACjB,MAAuB,mBAARgiB,GACbA,aAAgBA,GAAQvI,EAAa5nB,KAAKmwB,IAASlI,EA8BhDgQ,CAAc12B,GACjB,OAAOA,EAIT,IAAK1B,KADLmrE,EAAY,GACFzpE,EAER,GAAIhB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQ1B,GAAI,CACnD,IAAIiB,EAAQikC,EAAMxjC,EAAO1B,SACJ,IAAViB,IACTkqE,EAAUnrE,GAAKiB,GAIrB,OAAOkqE,EAGT,SAAS5/D,EAAKg0C,GACZ,IAAIvwC,GAAS,EACb,OAAO,KAAa,SAAUtH,GAE5B,GAAIsH,EAEF,MAAM,IAAIxI,MAAM,8BAEhBwI,GAAS,EACTuwC,EAAIp5C,MAAMpC,KAAM2D,MAKtB,SAAS6jE,EAAUx9D,GAEjB,OAAO,KAAa,SAAUrG,GAE5BA,EAAOw9B,EAAMx9B,GACb,IAAItD,EAAOL,KAEPynE,EAA2C,mBAA1B9jE,EAAKA,EAAKP,OAAS,IAAqBO,EAAKoE,MAC9D0gD,EAAU,IAAIhiC,SAAQ,SAAUihD,EAASr7B,GAC3C,IAAIs7B,EACJ,IACE,IAAI5sC,EAAWvzB,GAAK,SAAU7E,EAAKilE,GAC7BjlE,EACF0pC,EAAO1pC,GAEP+kE,EAAQE,MAKZjkE,EAAKyB,KAAK21B,IACV4sC,EAAO39D,EAAK5H,MAAM/B,EAAMsD,KACS,mBAAdgkE,EAAKtnB,MACtBqnB,EAAQC,GAEV,MAAOnnE,GACP6rC,EAAO7rC,OASX,OALIinE,GACFhf,EAAQpI,MAAK,SAAUnyC,GACrBu5D,EAAO,KAAMv5D,KACZu5D,GAEEhf,KA0BX,SAASof,EAAWrrE,EAAMu+B,GACxB,OAAOysC,EAAU,KAAa,SAAU7jE,GACtC,GAAI3D,KAAK8nE,QACP,OAAOrhD,QAAQ4lB,OAAO,IAAI5pC,MAAM,uBAElC,GAAIzC,KAAK+nE,WACP,OAAOthD,QAAQ4lB,OAAO,IAAI5pC,MAAM,0BAElC,IAAIpC,EAAOL,KAEX,OAhCJ,SAAoBK,EAAM7D,EAAMmH,GAE9B,GAAItD,EAAKkK,YAAYnD,UAAU,SAAShE,OAAQ,CAE9C,IADA,IAAI4kE,EAAU,CAAC,MAAO3nE,EAAK7D,KAAMA,GACxBP,EAAI,EAAGA,EAAI0H,EAAKP,OAAS,EAAGnH,IACnC+rE,EAAQ5iE,KAAKzB,EAAK1H,IAEpBoE,EAAKkK,YAAYrF,KAAK,QAAS8iE,GAG/B,IAAIC,EAAetkE,EAAKA,EAAKP,OAAS,GACtCO,EAAKA,EAAKP,OAAS,GAAK,SAAUT,EAAKsL,GACrC,IAAIi6D,EAAe,CAAC,MAAO7nE,EAAK7D,KAAMA,GACtC0rE,EAAeA,EAAankE,OAC1BpB,EAAM,CAAC,QAASA,GAAO,CAAC,UAAWsL,IAErC5N,EAAKkK,YAAYrF,KAAK,QAASgjE,GAC/BD,EAAatlE,EAAKsL,KAcpBk6D,CAAW9nE,EAAM7D,EAAMmH,GAClB3D,KAAKooE,UAAUC,QAWbttC,EAAS34B,MAAMpC,KAAM2D,GAVnB,IAAI8iB,SAAQ,SAAUihD,EAASr7B,GACpChsC,EAAK+nE,UAAUE,SAAQ,SAAUC,GAC3BA,EACFl8B,EAAOk8B,GAEPb,EAAQrnE,EAAK7D,GAAM4F,MAAM/B,EAAMsD,cAU3C,SAAS+f,EAAKk9B,EAAK19C,GAEjB,IADA,IAAI+K,EAAM,GACDhS,EAAI,EAAGkL,EAAMjE,EAAIE,OAAQnH,EAAIkL,EAAKlL,IAAK,CAC9C,IAAIwrC,EAAOvkC,EAAIjH,GACXwrC,KAAQmZ,IACV3yC,EAAIw5B,GAAQmZ,EAAInZ,IAGpB,OAAOx5B,EAMT,IAgIIu6D,EA9HJ,SAASC,EAAiBlkB,GACxB,OAAOA,EAGT,SAASmkB,EAA2Bx6D,GAClC,MAAO,CAAC,CACN/K,GAAI+K,IAKR,SAASy6D,EAAQC,EAAI5jB,EAAMjqB,GACzB,IAAI8tC,EAAW7jB,EAAK8jB,KAGhBC,EAAe,IAAIvC,EACvBqC,EAASn0D,SAAQ,SAAUyrC,GACrB4oB,EAAazgE,IAAI63C,EAAQrgD,IAC3BipE,EAAajsE,IAAIqjD,EAAQrgD,IAAIsF,KAAK+6C,GAElC4oB,EAAatiE,IAAI05C,EAAQrgD,GAAI,CAACqgD,OAIlC,IAAI6oB,EAAUD,EAAatmD,KACvBwmD,EAAU,EACVC,EAAgB,IAAIlnE,MAAMgnE,GAe9B,SAASG,IAbT,IACM7oB,IAaE2oB,IAAYD,IAbd1oB,EAAU,GACd4oB,EAAcx0D,SAAQ,SAAUzG,GAC9BA,EAAI66D,KAAKp0D,SAAQ,SAAU+vD,GACzBnkB,EAAQl7C,KAAK,CACXtF,GAAImO,EAAInO,GACRgpE,KAAM,CAACrE,WAIb1pC,EAAS,KAAM,CAACulB,QAASA,KAc3B,IAAI8oB,EAAc,GAClBL,EAAar0D,SAAQ,SAAUxX,EAAOM,GACpC4rE,EAAYhkE,KAAK5H,MAGnB,IAAIvB,EAAI,EAER,SAASotE,IAEP,KAAIptE,GAAKmtE,EAAYhmE,QAArB,CAIA,IAAIkmE,EAAOlpE,KAAKY,IAAI/E,EAnEU,EAmEuBmtE,EAAYhmE,QAC7DmmE,EAAQH,EAAYrnE,MAAM9F,EAAGqtE,IAKnC,SAAsBC,EAAO12D,GAC3B02D,EAAM70D,SAAQ,SAAU80D,EAAO5c,GAC7B,IAAI6c,EAAS52D,EAAS+5C,EAClB8c,EAAcX,EAAajsE,IAAI0sE,GAQ/BG,EAAUjmD,EAAKgmD,EAAY,GAAI,CAAC,aAAc,gBAClDC,EAAQC,UAAYF,EAAY30D,KAAI,SAAUorC,GAE5C,OAAOA,EAAQlgD,OAIjB0pE,EAAQC,UAAYD,EAAQC,UAAUt1D,OAAOm0D,GAE7C,IAAIoB,EAAepB,EAEc,IAA7BkB,EAAQC,UAAUxmE,gBACbumE,EAAQC,UAKfC,EAAenB,GAIjB,CAAC,OAAQ,cAAe,SAAU,OAAQ,UAAUh0D,SAAQ,SAAUo1D,GAChEA,KAAS9kB,IACX2kB,EAAQG,GAAS9kB,EAAK8kB,OAG1BlB,EAAG9rE,IAAI0sE,EAAOG,GAAS,SAAUhnE,EAAKsL,GACpC,IAAIC,EA9DmBpO,EAAIgpE,EAiEzB56D,EADEvL,EACO,CAAC,CAACG,MAAOH,IAETknE,EAAa57D,GAnEDnO,EAqEL0pE,EArESV,EAqEF56D,EApE7Bg7D,EAoEcO,GApEY,CAAC3pE,GAAIA,EAAIgpE,KAAMA,GACzCK,IAoEIE,UAlDJU,CAAaR,EAAOttE,GACpBA,GAAKstE,EAAMnmE,QAsDbimE,IAMF,IACEW,aAAaC,QAAQ,4BAA6B,GAClDzB,IAAawB,aAAapF,QAAQ,6BAClC,MAAOpkE,GACPgoE,GAAW,EAGb,SAAS0B,IACP,OAAO1B,EAgBT,SAAS2B,IACP,eAAa/tE,KAAK4D,MAClBA,KAAKiG,WAAa,GAVpB,SAA6B5F,GACvB6pE,KACF/xB,iBAAiB,WAAW,SAAU33C,GACpCH,EAAK6E,KAAK1E,EAAEhD,QAShB4sE,CAAoBpqE,MAsEtB,SAASqqE,EAAe1/D,GAEtB,QAAuB,IAAZhJ,GAAsD,mBAApBA,EAAQgJ,GAAwB,CAC3E,IAAIhH,EAAO3B,MAAMnE,UAAUkE,MAAM3F,KAAKiG,UAAW,GACjDV,EAAQgJ,GAAQvI,MAAMT,EAASgC,IAwBnC,SAAS2mE,EAAetpE,GACtB,IAAIilB,EAAM,EAIV,OAHKjlB,IACHilB,EAAM,KAvBV,SAAsBjlB,EAAKilB,GAiBzB,OAfAjlB,EAAM+c,SAAS/c,EAAK,KAAO,GAC3BilB,EAAMlI,SAASkI,EAAK,MACRA,GAAOA,GAAOjlB,EACxBilB,GAAOjlB,GAAO,IAAM,EAEpBilB,GAAY,EAGVA,EATa,MAUfjlB,EAAMupE,IACNtkD,EAXe,SAcLA,EAAMjlB,GADNZ,KAAKkmB,SAGStlB,GAQnBwpE,CAAaxpE,EAAKilB,GAK3B,SAASwkD,EAAarE,EAAQ9hB,GAC5B+lB,EAAe,OAAQ,aAAejE,EAAS,uBAAyB9hB,GA5H1E,IAAS6lB,EAAS,gBAiBlBA,EAAQtsE,UAAUwJ,YAAc,SAAUqjE,EAAQ5qE,EAAI8oE,EAAI5jB,GAExD,IAAIhlD,KAAKiG,WAAWnG,GAApB,CAGA,IAAIO,EAAOL,KACP2qE,GAAa,EAiCjB3qE,KAAKiG,WAAWnG,GAAM8qE,EACtB5qE,KAAKsH,GAAGojE,EAAQE,GAjChB,SAASA,IAEP,GAAKvqE,EAAK4F,WAAWnG,GAGrB,GAAI6qE,EACFA,EAAa,cADf,CAIAA,GAAa,EACb,IAAIE,EAAcnnD,EAAKshC,EAAM,CAC3B,QAAS,eAAgB,cAAe,YAAa,SACrD,UAAW,OAAQ,QAAS,eAAgB,SAAU,gBAQxD4jB,EAAGvvB,QAAQwxB,GAAavjE,GAAG,UAAU,SAAUhL,GACzCA,EAAEwuE,IAAM9lB,EAAK+lB,QAAU/lB,EAAKgmB,YAC9BhmB,EAAK+lB,MAAQzuE,EAAEwuE,IACf9lB,EAAKimB,SAAS3uE,OAEfgL,GAAG,YAAY,WACG,YAAfqjE,GACF,IAAUC,GAEZD,GAAa,KACZrjE,GAAG,SAdN,WACEqjE,GAAa,QAmBnBR,EAAQtsE,UAAU+H,eAAiB,SAAU8kE,EAAQ5qE,GAE7CA,KAAME,KAAKiG,aAGjB,eAAapI,UAAU+H,eAAexJ,KAAK4D,KAAM0qE,EAC/C1qE,KAAKiG,WAAWnG,WACXE,KAAKiG,WAAWnG,KAKzBqqE,EAAQtsE,UAAUqtE,mBAAqB,SAAUR,GAG3CR,MACFF,aAAaU,GAAoC,MAAzBV,aAAaU,GAAmB,IAAM,MAIlEP,EAAQtsE,UAAUkgE,OAAS,SAAU2M,GACnC1qE,KAAKkF,KAAKwlE,GACV1qE,KAAKkrE,mBAAmBR,IAwE1B,IAAIS,EAzB2B,mBAAlBxuE,OAAO6pC,OACP7pC,OAAO6pC,OAIP,SAAUlnC,GAGjB,IAFA,IAAI8xD,EAAKz0D,OAAO2C,GAEPwI,EAAQ,EAAGA,EAAQzF,UAAUe,OAAQ0E,IAAS,CACrD,IAAIsjE,EAAa/oE,UAAUyF,GAE3B,GAAkB,MAAdsjE,EACF,IAAK,IAAIC,KAAWD,EAEdzuE,OAAOkB,UAAUC,eAAe1B,KAAKgvE,EAAYC,KACnDja,EAAGia,GAAWD,EAAWC,IAKjC,OAAOja,GASb,SAASka,EAAWlF,EAAQtjE,EAAOolD,GACjCzlD,MAAMrG,KAAK4D,KAAMkoD,GACjBloD,KAAKomE,OAASA,EACdpmE,KAAKxD,KAAOsG,EACZ9C,KAAK4C,QAAUslD,EACfloD,KAAK8C,OAAQ,EAPf,IAASwoE,EAAY7oE,OAUrB6oE,EAAWztE,UAAUsQ,SAAW,WAC9B,OAAOyuC,KAAK4H,UAAU,CACpB4hB,OAAQpmE,KAAKomE,OACb5pE,KAAMwD,KAAKxD,KACXoG,QAAS5C,KAAK4C,QACdslD,OAAQloD,KAAKkoD,UAIE,IAAIojB,EAAW,IAAK,eAAgB,kCAAvD,IACIC,EAAoB,IAAID,EAAW,IAAK,cAAe,+BACvDE,EAAc,IAAIF,EAAW,IAAK,YAAa,WAC/CG,EAAe,IAAIH,EAAW,IAAK,WAAY,4BAC/CI,EAAa,IAAIJ,EAAW,IAAK,cAAe,mCAChDK,EAAa,IAAIL,EAAW,IAAK,aAAc,4BAC/CM,EAAc,IAAIN,EAAW,IAAK,cAAe,yDAEjDO,GADW,IAAIP,EAAW,IAAK,sBAAuB,qBACtC,IAAIA,EAAW,IAAK,gBAAiB,0CACrDQ,EAAU,IAAIR,EAAW,IAAK,SAAU,kCAExCS,GADkB,IAAIT,EAAW,IAAK,kBAAmB,uBACrC,IAAIA,EAAW,IAAK,oBAAqB,oCAC7DU,EAAiB,IAAIV,EAAW,IAAK,iBAAkB,+BACvDW,EAAc,IAAIX,EAAW,IAAK,cAAe,oCACjDY,GAAgB,IAAIZ,EAAW,IAAK,cAAe,kCAEnDa,IADa,IAAIb,EAAW,IAAK,YAAa,sBAClC,IAAIA,EAAW,IAAK,sBAAuB,YAIvDc,IAHY,IAAId,EAAW,IAAK,mBAAoB,WACxC,IAAIA,EAAW,IAAK,wBAAyB,WAC7C,IAAIA,EAAW,IAAK,YAAa,wDAC/B,IAAIA,EAAW,IAAK,cAAe,uBAEjDe,IADc,IAAIf,EAAW,IAAK,cAAe,+DAClC,IAAIA,EAAW,IAAK,eAAgB,gDACrC,IAAIA,EAAW,IAAK,cAAe,2BAErD,SAASgB,GAAYxpE,EAAOolD,GAC1B,SAASqkB,EAAiBrkB,GAIxB,IAAK,IAAInqD,KAAK+E,EACY,mBAAbA,EAAM/E,KACfiC,KAAKjC,GAAK+E,EAAM/E,SAILyB,IAAX0oD,IACFloD,KAAKkoD,OAASA,GAIlB,OADAqkB,EAAiB1uE,UAAYytE,EAAWztE,UACjC,IAAI0uE,EAAiBrkB,GAG9B,SAASskB,GAA0B7pE,GAEjC,GAAmB,iBAARA,EAAkB,CAC3B,IAAI5C,EAAO4C,GACXA,EAAMkpE,GACF9rE,KAAOA,EAoBb,MAjBI,UAAW4C,GAAqB,aAAdA,EAAIG,QACxBH,EAAInG,KAAO,WACXmG,EAAIyjE,OAAS,KAGT,SAAUzjE,IACdA,EAAInG,KAAOmG,EAAIG,OAAS,WAGpB,WAAYH,IAChBA,EAAIyjE,OAAS,KAGT,YAAazjE,IACjBA,EAAIC,QAAUD,EAAIC,SAAWD,EAAIulD,QAG5BvlD,EAYT,SAAS8pE,GAAaznB,GACpB,IAAI0nB,EAAM,GACNC,EAAY3nB,EAAK1wC,QAAiC,mBAAhB0wC,EAAK1wC,OAG3C,OAFAo4D,EAAIle,MAAQxJ,EAAK4nB,aAEV,SAAgB/Y,GAChBA,EAAO+R,MAGV/R,EAAO+R,IAAM,IAGf,IAAIiH,EAAeF,GArBvB,SAAmBr4D,EAAQsxD,EAAK8G,GAC9B,IACE,OAAQp4D,EAAOsxD,EAAK8G,GACpB,MAAO/pE,GACP,IAAI+1C,EAAM,0BAA4B/1C,EAAIwL,WAC1C,OAAOm+D,GAAYL,EAAavzB,IAgBAo0B,CAAU9nB,EAAK1wC,OAAQu/C,EAAO+R,IAAK8G,GAEnE,GAA4B,iBAAjBG,EACT,OAAOA,EAGT,GAAIA,EACF,OAAO,EAGT,GAAK7nB,EAAK0gB,cAEH,IAAK1gB,EAAK+nB,YACf,IAAK,IAAIC,KAAOnZ,EAAO+R,IAAIqH,aAErBpZ,EAAO+R,IAAIqH,aAAanvE,eAAekvE,KACzCnZ,EAAO+R,IAAIqH,aAAaD,GAAKE,MAAO,eALjCrZ,EAAO+R,IAShB,OAAO,GAIX,SAASrmC,GAAQ4tC,GAEf,IADA,IAAIl/D,EAAM,GACDhS,EAAI,EAAGkL,EAAMgmE,EAAK/pE,OAAQnH,EAAIkL,EAAKlL,IAC1CgS,EAAMA,EAAIlK,OAAOopE,EAAKlxE,IAExB,OAAOgS,EAUT,SAASm/D,GAAettE,GACtB,IAAI6C,EAQJ,GAPK7C,EAEoB,iBAAPA,EAChB6C,EAAM2pE,GAAYZ,GACT,KAAKjiE,KAAK3J,KAAQ,mBAAqB2J,KAAK3J,KACrD6C,EAAM2pE,GAAYV,IAJlBjpE,EAAM2pE,GAAYX,GAMhBhpE,EACF,MAAMA,EAMV,SAAS0qE,GAASzE,GAChB,MAA0B,kBAAfA,EAAG0E,QACL1E,EAAG0E,QAGW,mBAAZ1E,EAAGrqE,OACZ8rE,EAAe,OACb,8EAEmB,SAAdzB,EAAGrqE,QAWd,SAASgvE,GAA2BvvE,GAClC,IAAKA,EACH,OAAO,KAET,IAAIwvE,EAAQxvE,EAAE0K,MAAM,KACpB,OAAqB,IAAjB8kE,EAAMpqE,OACDoqE,EAEY,IAAjBA,EAAMpqE,OACD,CAACpF,EAAGA,GAEN,KAGT,SAASyvE,GAA+BzvE,GACtC,IAAI0vE,EAAaH,GAA2BvvE,GAC5C,OAAO0vE,EAAaA,EAAW3kE,KAAK,KAAO,KAM7C,IAAIZ,GAAO,CAAC,SAAU,WAAY,YAAa,WAAY,OAAQ,WAC/D,OAAQ,OAAQ,WAAY,OAAQ,YAAa,OAAQ,QAAS,UAElEwlE,GAAU,4BAIVze,GAAS,mMAEb,SAAS0e,GAAStpB,GAKhB,IAJA,IAAIjoD,EAAI6yD,GAAO3uD,KAAK+jD,GAChBupB,EAAM,GACN5xE,EAAI,GAEDA,KAAK,CACV,IAAIuB,EAAM2K,GAAKlM,GACXiB,EAAQb,EAAEJ,IAAM,GAChB6xE,GAAiD,IAAvC,CAAC,OAAQ,YAAYn5D,QAAQnX,GAC3CqwE,EAAIrwE,GAAOswE,EAAUC,mBAAmB7wE,GAASA,EAUnD,OAPA2wE,EAAS,SAAI,GACbA,EAAI1lE,GAAK,KAAKoB,QAAQokE,IAAS,SAAUK,EAAIC,EAAIC,GAC3CD,IACFJ,EAAS,SAAEI,GAAMC,MAIdL,EAOT,SAASM,GAAU3vE,EAAQugD,GACzB,IAAI52C,EAAO,GACPwI,EAAS,GACb,IAAK,IAAInT,KAAOuhD,EACVA,EAAMjhD,eAAeN,KACvB2K,EAAK/C,KAAK5H,GACVmT,EAAOvL,KAAK25C,EAAMvhD,KAItB,OADA2K,EAAK/C,KAAK5G,GACHiB,SAAS2C,MAAM,KAAM+F,GAAM/F,MAAM,KAAMuO,GAMhD,SAASy9D,GAAOxF,EAAIY,EAAO6E,GACzB,OAAO,IAAI5nD,SAAQ,SAAUihD,EAASr7B,GACpCu8B,EAAG9rE,IAAI0sE,GAAO,SAAU7mE,EAAKijE,GAC3B,GAAIjjE,EAAK,CAEP,GAAmB,MAAfA,EAAIyjE,OACN,OAAO/5B,EAAO1pC,GAEhBijE,EAAM,GAIR,IAAI0I,EAAS1I,EAAIO,KACboI,EAASF,EAAQzI,GAErB,IAAK2I,EAGH,OAAO7G,EAAQ,CAAC8G,SAAS,EAAOvuE,IAAKquE,IAKvCC,EAAOrI,IAAMsD,EACb+E,EAAOpI,KAAOmI,EACd5G,EAKN,SAAmBkB,EAAIhD,EAAKyI,GAC1B,OAAOzF,EAAG3C,IAAIL,GAAKvlB,MAAK,SAAUpyC,GAChC,MAAO,CACLugE,SAAS,EACTvuE,IAAKgO,EAAIhO,QAEV,SAAU0C,GAEX,GAAmB,MAAfA,EAAIyjE,OACN,MAAMzjE,EAER,OAAOyrE,GAAOxF,EAAIhD,EAAIM,IAAKmI,MAhBjBI,CAAU7F,EAAI2F,EAAQF,UAoBpC,IAAIK,GAAW,SAAUpqB,GACvB,OAAOqqB,KAAKrqB,IAGVsqB,GAAW,SAAUtqB,GACvB,OAAOuqB,KAAKvqB,IAMd,SAASwqB,GAAWtB,EAAO9iC,GAEzB8iC,EAAQA,GAAS,GACjB9iC,EAAaA,GAAc,GAC3B,IACE,OAAO,IAAI48B,KAAKkG,EAAO9iC,GACvB,MAAOlqC,GACP,GAAe,cAAXA,EAAEhE,KACJ,MAAMgE,EAOR,IALA,IAIIuuE,EAAU,IAJuB,oBAAhBC,YAA8BA,YACZ,oBAAlBC,cAAgCA,cACb,oBAAnBC,eAAiCA,eACxCC,mBAELlzE,EAAI,EAAGA,EAAIuxE,EAAMpqE,OAAQnH,GAAK,EACrC8yE,EAAQvd,OAAOgc,EAAMvxE,IAEvB,OAAO8yE,EAAQK,QAAQ1kC,EAAWnsC,OAMtC,SAAS8wE,GAA0BC,GAIjC,IAHA,IAAIlsE,EAASksE,EAAIlsE,OACbq+D,EAAM,IAAI1xD,YAAY3M,GACtBF,EAAM,IAAI0M,WAAW6xD,GAChBxlE,EAAI,EAAGA,EAAImH,EAAQnH,IAC1BiH,EAAIjH,GAAKqzE,EAAItuC,WAAW/kC,GAE1B,OAAOwlE,EAGT,SAAS8N,GAAmBC,EAAWjxE,GACrC,OAAOuwE,GAAW,CAACO,GAA0BG,IAAa,CAACjxE,KAAMA,IAGnE,SAASkxE,GAAaC,EAAKnxE,GACzB,OAAOgxE,GAAmBb,GAASgB,GAAMnxE,GAiB3C,SAASoxE,GAAmBC,EAAM70C,GAChC,IAAI80C,EAAS,IAAIC,WACbC,EAAuD,mBAA9BF,EAAOF,mBACpCE,EAAOG,UAAY,SAAUxvE,GAC3B,IAAI0N,EAAS1N,EAAElB,OAAO4O,QAAU,GAChC,GAAI6hE,EACF,OAAOh1C,EAAS7sB,GAElB6sB,EAnBJ,SAAmCtoB,GAIjC,IAHA,IAAIw9D,EAAS,GACTjf,EAAQ,IAAIphD,WAAW6C,GACvBrP,EAAS4tD,EAAM55C,WACVnb,EAAI,EAAGA,EAAImH,EAAQnH,IAC1Bg0E,GAAU1qE,OAAO0rD,aAAaD,EAAM/0D,IAEtC,OAAOg0E,EAYIC,CAA0BhiE,KAEjC6hE,EACFF,EAAOF,mBAAmBC,GAE1BC,EAAOM,kBAAkBP,GAI7B,SAASQ,GAAmBC,EAAct1C,GACxC40C,GAAmBU,GAAc,SAAUf,GACzCv0C,EAASu0C,MAIb,SAASgB,GAAaD,EAAct1C,GAClCq1C,GAAmBC,GAAc,SAAUE,GACzCx1C,EAAS6zC,GAAS2B,OAgBtB,IAAIC,GAAmBvyE,EAAOwN,cAAgBxN,EAAOgM,WAcrD,SAASwmE,GAAWh+D,EAAQm9D,EAAMz7D,EAAOmB,EAAKylB,IACxC5mB,EAAQ,GAAKmB,EAAMs6D,EAAKntD,QAE1BmtD,EAVJ,SAAmBA,EAAMz7D,EAAOmB,GAC9B,OAAIs6D,EAAK7I,YACA6I,EAAK7I,YAAY5yD,EAAOmB,GAE1Bs6D,EAAK7tE,MAAMoS,EAAOmB,GAMhBo7D,CAAUd,EAAMz7D,EAAOmB,IA5BlC,SAA2Bs6D,EAAM70C,GAC/B,IAAI80C,EAAS,IAAIC,WACjBD,EAAOG,UAAY,SAAUxvE,GAC3B,IAAI0N,EAAS1N,EAAElB,OAAO4O,QAAU,IAAI6B,YAAY,GAChDgrB,EAAS7sB,IAEX2hE,EAAOM,kBAAkBP,GAwBzBO,CAAkBP,GAAM,SAAU92C,GAChCrmB,EAAO++C,OAAO14B,GACdiC,OAIJ,SAAS41C,GAAal+D,EAAQtJ,EAAQgL,EAAOmB,EAAKylB,IAC5C5mB,EAAQ,GAAKmB,EAAMnM,EAAO/F,UAE5B+F,EAASA,EAAOuqC,UAAUv/B,EAAOmB,IAEnC7C,EAAOg/C,aAAatoD,GACpB4xB,IAGF,SAAS61C,GAAU7wE,EAAMg7B,GACvB,IAAI81C,EAAgC,iBAAT9wE,EACvBoH,EAAM0pE,EAAgB9wE,EAAKqD,OAASrD,EAAK0iB,KACzCquD,EAAY1wE,KAAKY,IApCF,MAoCsBmG,GACrC4pE,EAAS3wE,KAAKyM,KAAK1F,EAAM2pE,GACzBE,EAAe,EACfv+D,EAASo+D,EAAgB,IAAI,IAAQ,IAAI,IAAI9gE,YAE7CyhD,EAASqf,EAAgBF,GAAeF,GAE5C,SAAS78D,IACP48D,GAAiBS,GAGnB,SAASp9D,IACP,IACI08D,EA/CR,SAAqBze,GACnB,OAAO8c,GAAS9c,GA8CDof,CADHz+D,EAAO6C,KAAI,IAErBylB,EAASw1C,GACT99D,EAAO0/C,UAGT,SAAS8e,IACP,IAAI98D,EAAQ68D,EAAeF,EACvBx7D,EAAMnB,EAAQ28D,EAClBE,IAEExf,EAAO/+C,EAAQ1S,EAAMoU,EAAOmB,EAD1B07D,EAAeD,EACgBn9D,EAEAC,GAGrCo9D,IAGF,SAASE,GAAUhoE,GACjB,OAAO,IAAI68C,KAAK78C,GAGlB,SAASlJ,GAAI2lE,EAAKwL,GAChB,IAAIC,EAAYlwC,EAAMykC,GACtB,OAAKwL,UAIEC,EAAUC,UACVH,GAAUv0B,KAAK4H,UAAU6sB,KAJvB,IAAOjX,KAAK7wD,QAAQ,KAAM,IAAIG,cAOzC,IAAI2wD,GAAO,IAAOD,GAOlB,SAASmX,GAAWC,GAMlB,IALA,IAAIC,EACAC,EACAC,EAEAvP,EADAwP,EAAUJ,EAASK,SAAS9vE,QAExBqgE,EAAOwP,EAAQ7pE,OAAQ,CAC7B,IAAI+pE,EAAO1P,EAAKmC,IACZwN,EAAWD,EAAK,GAChBp1B,EAAM0lB,EAAK1lB,IACf,GAAIq1B,EAAS3uE,OACX,IAAK,IAAInH,EAAI,EAAGkL,EAAM4qE,EAAS3uE,OAAQnH,EAAIkL,EAAKlL,IAC9C21E,EAAQxsE,KAAK,CAACs3C,IAAKA,EAAM,EAAG6nB,IAAKwN,EAAS91E,SAF9C,CAMA,IAAI+1E,IAAYF,EAAK,GAAGE,QACpBlyE,EAAKgyE,EAAK,GAETL,KAAcE,IAAmBK,EAAUL,EAC5CD,IAAeh1B,EAAMg1B,EAAah1B,EAAM+0B,EAAY3xE,KACtD2xE,EAAY3xE,EACZ4xE,EAAah1B,EACbi1B,EAAiBK,IAIrB,OAAON,EAAa,IAAMD,EAO5B,SAASQ,GAAgBC,EAAMn3C,GAI7B,IAHA,IAEIqnC,EAFAwP,EAAUM,EAAKnwE,QAGXqgE,EAAOwP,EAAQ7pE,OAMrB,IALA,IAAI20C,EAAM0lB,EAAK1lB,IACXo1B,EAAO1P,EAAKmC,IACZwN,EAAWD,EAAK,GAChBK,EACFp3C,EAA6B,IAApBg3C,EAAS3uE,OAAcs5C,EAAKo1B,EAAK,GAAI1P,EAAK/jE,IAAKyzE,EAAK,IACtD71E,EAAI,EAAGkL,EAAM4qE,EAAS3uE,OAAQnH,EAAIkL,EAAKlL,IAC9C21E,EAAQxsE,KAAK,CAACs3C,IAAKA,EAAM,EAAG6nB,IAAKwN,EAAS91E,GAAIoC,IAAK8zE,IAKzD,SAASC,GAAUjxE,EAAGyL,GACpB,OAAOzL,EAAEu7C,IAAM9vC,EAAE8vC,IAGnB,SAAS21B,GAAcH,GACrB,IAAII,EAAS,GACbL,GAAgBC,GAAM,SAAUK,EAAQ71B,EAAK58C,EAAI0yE,EAAKxtB,GAChDutB,GACFD,EAAOltE,KAAK,CAACnF,IAAKy8C,EAAM,IAAM58C,EAAI48C,IAAKA,EAAKsI,KAAMA,OAGtDstB,EAAO/gE,KAAK6gE,IAAWp9D,UACvB,IAAK,IAAI/Y,EAAI,EAAGkL,EAAMmrE,EAAOlvE,OAAQnH,EAAIkL,EAAKlL,WACrCq2E,EAAOr2E,GAAGygD,IAEnB,OAAO41B,EAMT,SAASG,GAAiBjB,GAIxB,IAHA,IAAIkB,EAAMnB,GAAWC,GACjBc,EAASD,GAAcb,EAASK,UAChCc,EAAY,GACP12E,EAAI,EAAGkL,EAAMmrE,EAAOlvE,OAAQnH,EAAIkL,EAAKlL,IAAK,CACjD,IAAI22E,EAAON,EAAOr2E,GACd22E,EAAK3yE,MAAQyyE,GAAQE,EAAK5tB,KAAKgtB,SACjCW,EAAUvtE,KAAKwtE,EAAK3yE,KAGxB,OAAO0yE,EAkBT,SAASE,GAAWX,GAIlB,IAHA,IAEI9P,EAFAp3C,EAAQ,GACR4mD,EAAUM,EAAKnwE,QAEXqgE,EAAOwP,EAAQ7pE,OAAQ,CAC7B,IAAI20C,EAAM0lB,EAAK1lB,IACXo1B,EAAO1P,EAAKmC,IACZzkE,EAAKgyE,EAAK,GACV9sB,EAAO8sB,EAAK,GACZC,EAAWD,EAAK,GAChBS,EAA6B,IAApBR,EAAS3uE,OAElB0vE,EAAU1Q,EAAK0Q,QAAU1Q,EAAK0Q,QAAQ/wE,QAAU,GACpD+wE,EAAQ1tE,KAAK,CAACtF,GAAIA,EAAIklD,KAAMA,IACxButB,GACFvnD,EAAM5lB,KAAK,CAACs3C,IAAMA,EAAM,EAAIo2B,EAAQ1vE,OAASmhE,IAAKuO,IAEpD,IAAK,IAAI72E,EAAI,EAAGkL,EAAM4qE,EAAS3uE,OAAQnH,EAAIkL,EAAKlL,IAC9C21E,EAAQxsE,KAAK,CAACs3C,IAAKA,EAAM,EAAG6nB,IAAKwN,EAAS91E,GAAI62E,QAASA,IAG3D,OAAO9nD,EAAMhW,UAKf,SAAS+9D,GAAY5xE,EAAGyL,GACtB,OAAOzL,EAAEu7C,IAAM9vC,EAAE8vC,IAoBnB,SAASs2B,GAAa9vE,EAAK+vE,EAAM9yD,GAC/B,IAAI8lC,EAjBN,SAAsB/iD,EAAK+vE,EAAM9yD,GAI/B,IAHA,IAEI4W,EAFAH,EAAM,EACNC,EAAO3zB,EAAIE,OAERwzB,EAAMC,GAEP1W,EAAWjd,EADf6zB,EAAOH,EAAMC,IAAU,GACEo8C,GAAQ,EAC/Br8C,EAAMG,EAAM,EAEZF,EAAOE,EAGX,OAAOH,EAKGs8C,CAAahwE,EAAK+vE,EAAM9yD,GAClCjd,EAAI2hB,OAAOohC,EAAK,EAAGgtB,GAMrB,SAASE,GAAWjkD,EAAMkkD,GAGxB,IAFA,IAAIl1D,EACA00D,EACK32E,EAAIm3E,EAAYjsE,EAAM+nB,EAAK9rB,OAAQnH,EAAIkL,EAAKlL,IAAK,CACxD,IAAImmE,EAAOlzC,EAAKjzB,GACZo3E,EAAc,CAACjR,EAAKtiE,GAAIsiE,EAAKpd,KAAM,IACnC4tB,GACFA,EAAK,GAAGxtE,KAAKiuE,GACbT,EAAOS,GAEPn1D,EAAO00D,EAAOS,EAGlB,OAAOn1D,EAIT,SAASo1D,GAAYnyE,EAAGyL,GACtB,OAAOzL,EAAE,GAAKyL,EAAE,IAAM,EAAI,EAK5B,SAAS2mE,GAAUC,EAAUC,GAG3B,IAFA,IAAIlnE,EAAQ,CAAC,CAACmnE,MAAOF,EAAUG,MAAOF,IAClCd,GAAY,EACTpmE,EAAMnJ,OAAS,GAAG,CACvB,IAAI6vE,EAAO1mE,EAAMxE,MACb2rE,EAAQT,EAAKS,MACbC,EAAQV,EAAKU,OAEbD,EAAM,GAAGtN,QAAUuN,EAAM,GAAGvN,UAC9BsN,EAAM,GAAGtN,OACe,cAArBsN,EAAM,GAAGtN,QACU,cAApBuN,EAAM,GAAGvN,OAA0B,YAAc,WAGrD,IAAK,IAAInqE,EAAI,EAAGA,EAAI03E,EAAM,GAAGvwE,OAAQnH,IACnC,GAAKy3E,EAAM,GAAG,GAAd,CAOA,IADA,IAAIE,GAAS,EACJhnB,EAAI,EAAGA,EAAI8mB,EAAM,GAAGtwE,OAAQwpD,IAC/B8mB,EAAM,GAAG9mB,GAAG,KAAO+mB,EAAM,GAAG13E,GAAG,KACjCsQ,EAAMnH,KAAK,CAACsuE,MAAOA,EAAM,GAAG9mB,GAAI+mB,MAAOA,EAAM,GAAG13E,KAChD23E,GAAS,GAGRA,IACHjB,EAAY,aACZK,GAAaU,EAAM,GAAIC,EAAM,GAAG13E,GAAIq3E,UAdpCX,EAAY,WACZe,EAAM,GAAG,GAAKC,EAAM,GAAG13E,GAiB7B,MAAO,CAAC02E,UAAWA,EAAWb,KAAM0B,GAGtC,SAASK,GAAQ/B,EAAM5iD,EAAM4kD,GAC3B,IAGI7lE,EAHA8lE,EAAU,GACVpB,GAAY,EACZiB,GAAS,EAGb,IAAK9B,EAAK1uE,OACR,MAAO,CAAC0uE,KAAM,CAAC5iD,GAAOyjD,UAAW,YAGnC,IAAK,IAAI12E,EAAI,EAAGkL,EAAM2qE,EAAK1uE,OAAQnH,EAAIkL,EAAKlL,IAAK,CAC/C,IAAI+3E,EAASlC,EAAK71E,GAClB,GAAI+3E,EAAOt3B,MAAQxtB,EAAKwtB,KAAOs3B,EAAOzP,IAAI,KAAOr1C,EAAKq1C,IAAI,GAGxDt2D,EAAMslE,GAAUS,EAAOzP,IAAKr1C,EAAKq1C,KACjCwP,EAAQ3uE,KAAK,CAACs3C,IAAKs3B,EAAOt3B,IAAK6nB,IAAKt2D,EAAI6jE,OACxCa,EAAYA,GAAa1kE,EAAI0kE,UAC7BiB,GAAS,OACJ,IAAmB,IAAfE,EAAqB,CAM9B,IAAIG,EAAKD,EAAOt3B,IAAMxtB,EAAKwtB,IAAMs3B,EAAS9kD,EACtCglD,EAAKF,EAAOt3B,IAAMxtB,EAAKwtB,IAAMxtB,EAAO8kD,EACpCG,EAAOD,EAAGx3B,IAAMu3B,EAAGv3B,IAEnB03B,EAAmB,GAEnBC,EAAQ,GAEZ,IADAA,EAAMjvE,KAAK,CAACm/D,IAAK0P,EAAG1P,IAAK4P,KAAMA,EAAMzjD,OAAQ,KAAM4jD,UAAW,OACvDD,EAAMjxE,OAAS,GAAG,CACvB,IAAI6vE,EAAOoB,EAAMtsE,MACjB,GAAkB,IAAdkrE,EAAKkB,KAOT,IADA,IAAII,EAAWtB,EAAK1O,IAAI,GACf3X,EAAI,EAAG4nB,EAAcD,EAASnxE,OAAQwpD,EAAI4nB,EAAa5nB,IAC9DynB,EAAMjvE,KAAK,CACTm/D,IAAKgQ,EAAS3nB,GACdunB,KAAMlB,EAAKkB,KAAO,EAClBzjD,OAAQuiD,EAAK1O,IACb+P,UAAW1nB,SAXTqmB,EAAK1O,IAAI,KAAO2P,EAAG3P,IAAI,IACzB6P,EAAiBhvE,KAAK6tE,GAe5B,IAAI9pB,EAAKirB,EAAiB,GAErBjrB,GAGHl7C,EAAMslE,GAAUpqB,EAAGob,IAAK2P,EAAG3P,KAC3Bpb,EAAGz4B,OAAO,GAAGy4B,EAAGmrB,WAAarmE,EAAI6jE,KACjCiC,EAAQ3uE,KAAK,CAACs3C,IAAKu3B,EAAGv3B,IAAK6nB,IAAK0P,EAAG1P,MACnCoO,EAAYA,GAAa1kE,EAAI0kE,UAC7BiB,GAAS,GANTG,EAAQ3uE,KAAK4uE,QASfD,EAAQ3uE,KAAK4uE,GAWjB,OANKJ,GACHG,EAAQ3uE,KAAK8pB,GAGf6kD,EAAQxiE,KAAKwhE,IAEN,CACLjB,KAAMiC,EACNpB,UAAWA,GAAa,iBA8D5B,SAASvrC,GAAM0qC,EAAM5iD,EAAMR,GACzB,IAAI+lD,EAAUZ,GAAQ/B,EAAM5iD,GACxBwlD,EA3DN,SAAc5C,EAAMpjD,GAMlB,IAJA,IACIimD,EAEAzmE,EAHA8c,EAAQ6nD,GAAWf,GAId71E,EAAI,EAAGkL,EAAM6jB,EAAM5nB,OAAQnH,EAAIkL,EAAKlL,IAAK,CAGhD,IAEImmE,EAFAlzC,EAAOlE,EAAM/uB,GACby4E,EAAUxlD,EAAKq1C,IAEnB,GAAImQ,EAAQtxE,OAASsrB,EAAO,CAErBimD,IACHA,EAAc,IAEhB,IAAIvB,EAAasB,EAAQtxE,OAASsrB,EAClC0zC,EAAO,CACL1lB,IAAKxtB,EAAKwtB,IAAM02B,EAChB7O,IAAK4O,GAAWuB,EAAStB,IAG3B,IAAK,IAAIp1E,EAAI,EAAGA,EAAIo1E,EAAYp1E,IAAK,CACnC,IAAIiC,EAAOivB,EAAKwtB,IAAM1+C,EAAK,IAAM02E,EAAQ12E,GAAG8B,GAC5C60E,EAAY10E,IAAO,QAGrBmiE,EAAO,CACL1lB,IAAKxtB,EAAKwtB,IACV6nB,IAAK4O,GAAWuB,EAAS,IAO3BxmE,EADEA,EACO2lE,GAAQ3lE,EAAQk0D,GAAM,GAAM0P,KAE5B,CAAC1P,GAYd,OAPIuS,GACF1C,GAAgB/jE,GAAQ,SAAUqkE,EAAQ71B,EAAKk4B,UAEtCD,EAAYj4B,EAAM,IAAMk4B,MAI5B,CACL9C,KAAM5jE,EACNgkE,KAAMyC,EAAch4E,OAAOwL,KAAKwsE,GAAe,IAMnCE,CAAKJ,EAAQ3C,KAAMpjD,GACjC,MAAO,CACLojD,KAAM4C,EAAQ5C,KACd6C,YAAaD,EAAQxC,KACrBS,UAAW8B,EAAQ9B,WAwBvB,SAASmC,GAAS1S,GAChB,OAAOA,EAAKmC,IAMd,SAASwQ,GAAUvD,EAAUvxE,GACtBA,IACHA,EAAMsxE,GAAWC,IAMnB,IAJA,IAGIM,EAHAhyE,EAAKG,EAAIyzC,UAAUzzC,EAAI0U,QAAQ,KAAO,GACtCi9D,EAAUJ,EAASK,SAAS98D,IAAI+/D,IAG5BhD,EAAOF,EAAQ7pE,OAAQ,CAC7B,GAAI+pE,EAAK,KAAOhyE,EACd,QAASgyE,EAAK,GAAGE,QAEnBJ,EAAUA,EAAQ7tE,OAAO+tE,EAAK,KAIlC,SAASkD,GAAUl1E,GACjB,MAAO,UAAY2J,KAAK3J,GAkD1B,SAASm1E,GAAUrM,EAAI5jB,EAAMjqB,GAC3B,eAAa3+B,KAAK4D,MAClB,IAAIK,EAAOL,KACXA,KAAK4oE,GAAKA,EAEV,IAAIsM,GADJlwB,EAAOA,EAAO7jB,EAAM6jB,GAAQ,IACRkwB,SAAW1tE,GAAK,SAAU7E,EAAKglE,GA9wBrD,IAAuBwN,EAAI52E,EA+wBnBoE,GA/wBmBpE,EAgxBG,SA/wBrB,kBADc42E,EAgxBC90E,GA/wBS80E,EAAG5uE,cAAchI,GACjB,eAAagI,cAAc4uE,EAAI52E,IA8wBvB,GACjC8B,EAAK6E,KAAK,QAASvC,IAGrBtC,EAAK6E,KAAK,WAAYyiE,GAExBtnE,EAAK6H,qBACL0gE,EAAGhjE,eAAe,YAAawvE,MAQjC,SAASA,IACP/0E,EAAKykC,SAPH/J,IACF16B,EAAKiH,GAAG,YAAY,SAAUqgE,GAC5B5sC,EAAS,KAAM4sC,MAEjBtnE,EAAKiH,GAAG,QAASyzB,IAKnB6tC,EAAGphE,KAAK,YAAa4tE,GAErBpwB,EAAKimB,SAAW,SAAUpX,EAAQhqD,EAASwrE,GAErCh1E,EAAKi1E,aAtCb,SAAkCj1E,EAAMwzD,EAAQhqD,EAASwrE,GAEvD,IACEh1E,EAAK6E,KAAK,SAAU2uD,EAAQhqD,EAASwrE,GACrC,MAAO70E,GACP6pE,EAAe,QAAS,oCAAqC7pE,IAoC7D+0E,CAAyBl1E,EAAMwzD,EAAQhqD,EAASwrE,IAGlD,IAAI5sB,EAAU,IAAIhiC,SAAQ,SAAUihD,EAASr7B,GAC3C2Y,EAAKkwB,SAAW,SAAUvyE,EAAKsL,GACzBtL,EACF0pC,EAAO1pC,GAEP+kE,EAAQz5D,OAId5N,EAAKmH,KAAK,UAAU,WAClBohE,EAAGhjE,eAAe,YAAawvE,GAC/BpwB,EAAKkwB,SAAS,KAAM,CAAC9O,OAAQ,iBAE/BpmE,KAAKqgD,KAAOoI,EAAQpI,KAAK5iD,KAAKgrD,GAC9BzoD,KAAY,MAAIyoD,EAAe,MAAEhrD,KAAKgrD,GACtCzoD,KAAKqgD,MAAK,SAAUnyC,GAClBgnE,EAAS,KAAMhnE,KACdgnE,GAIEtM,EAAGR,UAAUC,QAWhBhoE,EAAKm1E,gBAAgBxwB,GAVrB4jB,EAAGR,UAAUE,SAAQ,SAAUC,GACzBA,EACFvjB,EAAKkwB,SAAS3M,GACLloE,EAAKi1E,YACdj1E,EAAK6E,KAAK,UAEV7E,EAAKm1E,gBAAgBxwB,MAa7B,SAASywB,GAAc7P,EAAK4L,EAAUxsB,GACpC,IAAI0wB,EAAa,CAAC,CAACz1E,IAAK2lE,EAAIO,OACT,aAAfnhB,EAAKnK,QACP66B,EAAarD,GAAcb,EAASK,UACnC98D,KAAI,SAAUwvC,GAAK,MAAO,CAACtkD,IAAKskD,EAAEtkD,SAErC,IAAI4zD,EAAS,CACX/zD,GAAI0xE,EAAS1xE,GACbu5C,QAASq8B,EACT9P,IAAKA,GAYP,OATImP,GAAUvD,EAAU5L,EAAIO,QAC1BtS,EAAOme,SAAU,GAEfhtB,EAAK2tB,YACP9e,EAAO+R,IAAI+P,WAAalD,GAAiBjB,GACpC3d,EAAO+R,IAAI+P,WAAWvyE,eAClBywD,EAAO+R,IAAI+P,YAGf9hB,EAyFT,SAAS+hB,GAAQ1nB,EAAM2nB,GACrB,OAAO3nB,EAAO2nB,GAAS,EAAI3nB,EAAO2nB,EAAQ,EAAI,EAKhD,SAASC,GAAU/6C,EAAUyuC,GAC3B,OAAO,SAAU7mE,EAAK29C,GAChB39C,GAAQ29C,EAAQ,IAAMA,EAAQ,GAAGx9C,QACnCH,EAAMA,GAAO29C,EAAQ,IACjBkpB,MAAQA,EACZzuC,EAASp4B,IAETo4B,EAAS,KAAMulB,EAAQl9C,OAASk9C,EAAQ,GAAMA,IAwBpD,SAASy1B,GAAmB50E,EAAGyL,GAC7B,IAAIopE,EAAYJ,GAAQz0E,EAAE+kE,IAAKt5D,EAAEs5D,KACjC,OAAkB,IAAd8P,EACKA,EAIFJ,GAFMz0E,EAAE80E,WAAa90E,EAAE80E,WAAW9hE,MAAQ,EACpCvH,EAAEqpE,WAAarpE,EAAEqpE,WAAW9hE,MAAQ,GAmFnD,SAAS+hE,KAIP,IAAK,IAAIn4E,KAHT,eAAa3B,KAAK4D,MAGJk2E,GAAgBr4E,UACL,mBAAZmC,KAAKjC,KACdiC,KAAKjC,GAAKiC,KAAKjC,GAAGN,KAAKuC,OA6xB7B,SAASm2E,KACPn2E,KAAKqoE,SAAU,EACfroE,KAAKuoE,QAAS,EACdvoE,KAAKuM,MAAQ,GA2Gf,SAASg5D,GAAQ/oE,EAAMwoD,GAGrB,KAAMhlD,gBAAgBulE,IACpB,OAAO,IAAIA,GAAQ/oE,EAAMwoD,GAG3B,IAAI3kD,EAAOL,KAkBX,GAjBAglD,EAAOA,GAAQ,GAEXxoD,GAAwB,iBAATA,IAEjBA,GADAwoD,EAAOxoD,GACKA,YACLwoD,EAAKxoD,WAGkBgD,IAA5BwlD,EAAKosB,qBACPpsB,EAAKosB,oBAAqB,GAG5BpxE,KAAKo2E,OAASpxB,EAAO7jB,EAAM6jB,GAE3B3kD,EAAKg2E,gBAAkBrxB,EAAKqxB,gBAC5Bh2E,EAAKyzC,OAASyxB,GAAQzxB,OAEF,iBAATt3C,EACT,MAAM,IAAIiG,MAAM,2BAGlB,IACI6zE,EAvGN,SAAsB95E,EAAMwoD,GAC1B,IAAI7hC,EAAQ3mB,EAAK2mB,MAAM,sBACvB,GAAIA,EAEF,MAAO,CACL3mB,KAAM,SAASiN,KAAK0Z,EAAM,IAAMA,EAAM,GAAK,MAAQA,EAAM,GAAKA,EAAM,GACpEozD,QAASpzD,EAAM,IAInB,IAAIqzD,EAAWjR,GAAQiR,SACnBC,EAAoBlR,GAAQkR,kBAC5B3iC,EAASyxB,GAAQzxB,OACjB4iC,EAAc1xB,EAAKuxB,QAEvB,IAAKG,EACH,IAAK,IAAIz6E,EAAI,EAAGA,EAAIw6E,EAAkBrzE,SAIhB,SAHpBszE,EAAcD,EAAkBx6E,KAGH,WAAYu6E,GACrCtM,KAAqBF,aAAa,oBAAsBl2B,EAASt3C,MALvBP,EAO5CouE,EAAe,MAAO,2BAA6B7tE,EAAO,8EAQhE,IAAI+5E,EAAUC,EAASE,GAMvB,MAAO,CACLl6E,OAJe+5E,GAAW,eAAgBA,IAC1CA,EAAQI,WAGW7iC,EAASt3C,EAAQA,EACpC+5E,QAASG,GAgEGE,EADM5xB,EAAKlR,QAAU,IAAMt3C,EACAwoD,GASzC,GAPAA,EAAKxoD,KAAO85E,EAAQ95E,KACpBwoD,EAAKuxB,QAAUvxB,EAAKuxB,SAAWD,EAAQC,QAEvCl2E,EAAK7D,KAAOA,EACZ6D,EAAKw2E,SAAW7xB,EAAKuxB,QACrBhR,GAAQrgE,KAAK,QAAS,CAAC,UAAW,mBAAoB8/C,EAAKuxB,WAEtDhR,GAAQiR,SAASxxB,EAAKuxB,WACtBhR,GAAQiR,SAASxxB,EAAKuxB,SAASO,QAClC,MAAM,IAAIr0E,MAAM,oBAAsBuiD,EAAKuxB,SAG7CL,GAAgB95E,KAAKiE,GACrBA,EAAK+nE,UAAY,IAAI+N,GAErB91E,EAAKk2E,QAAUvxB,EAAKuxB,QAEpBhR,GAAQiR,SAASxxB,EAAKuxB,SAASn6E,KAAKiE,EAAM2kD,GAAM,SAAUriD,GACxD,GAAIA,EACF,OAAOtC,EAAK+nE,UAAU7J,KAAK57D,IAvEjC,SAA+BtC,GAE7B,SAAS02E,EAAYC,GACnB32E,EAAKuF,eAAe,SAAUqxE,GACzBD,GACH32E,EAAKkK,YAAYrF,KAAK,YAAa7E,EAAK7D,MAI5C,SAASy6E,IACP52E,EAAKuF,eAAe,YAAamxE,GACjC12E,EAAKkK,YAAYrF,KAAK,QAAS7E,GAGjCA,EAAKmH,KAAK,YAAauvE,GACvB12E,EAAKmH,KAAK,SAAUyvE,GACpB52E,EAAKkK,YAAYrF,KAAK,MAAO7E,GAyD3B62E,CAAsB72E,GAEtBA,EAAK6E,KAAK,UAAW7E,GACrBklE,GAAQrgE,KAAK,UAAW7E,EAAK7D,MAC7B6D,EAAK+nE,UAAU+O,MAAM92E,MA7wCzB,IAAS40E,GAAW,gBAiFpBA,GAAUp3E,UAAUinC,OAAS,WAC3B9kC,KAAKs1E,aAAc,EACft1E,KAAK4oE,GAAGR,UAAUC,SACpBroE,KAAKkF,KAAK,WA2Bd+vE,GAAUp3E,UAAU23E,gBAAkB,SAAUxwB,GAC9C,IAAIjqB,EAAWiqB,EAAKkwB,SAChB70E,EAAOL,KAGPulE,GAAQ6R,qBACV7R,GAAQ6R,qBAAqBtkE,SAASkyC,GAAM,SAAUriD,GACpD,GAAIA,EACF,OAAOo4B,EAASp4B,GAElBtC,EAAKg3E,UAAUryB,MAGjB3kD,EAAKg3E,UAAUryB,IAInBiwB,GAAUp3E,UAAUw5E,UAAY,SAAUryB,GACxC,IAAI3kD,EAAOL,KACP+6B,EAAWiqB,EAAKkwB,SAcpB,GAXI,SADJlwB,EAAO7jB,EAAM6jB,OACW,eAAgBA,KACtCA,EAAKsyB,WAAatyB,EAAKuyB,MAEzBvyB,EAAKywB,cAAgBA,GAEF,WAAfzwB,EAAK+lB,QACP/lB,EAAK+lB,MAAQ,OAEV/lB,EAAK+lB,QACR/lB,EAAK+lB,MAAQ,GAEI,QAAf/lB,EAAK+lB,MAAT,CAcA,GAAIxF,GAAQ6R,sBAEV,GADA7R,GAAQ6R,qBAAqBI,UAAUxyB,GACnCugB,GAAQ6R,qBAAqBK,aAAaz3E,KAAMglD,GAClD,OAAOugB,GAAQ6R,qBAAqB9iE,OAAOtU,KAAMglD,OAGnD,CAAC,UAAW,SAAU,WAAY,QAAQtwC,SAAQ,SAAUlX,GACtDA,KAAOwnD,GACTqlB,EAAe,OACb,QAAU7sE,EAAM,yKAQlB,eAAgBwnD,IACpBA,EAAK0yB,YAAa,GAIpB1yB,EAAKnY,MAAuB,IAAfmY,EAAKnY,MAAc,EAAImY,EAAKnY,MACzCmY,EAAKkwB,SAAWn6C,EAChB,IAAI48C,EAAa33E,KAAK4oE,GAAGgP,SAAS5yB,GAElC,GAAI2yB,GAA2C,mBAAtBA,EAAW7yC,OAAuB,CACzD,IAAIA,EAASzkC,EAAKykC,OAClBzkC,EAAKykC,OAAS,KAAa,SAAUnhC,GACnCg0E,EAAW7yC,SACXA,EAAO1iC,MAAMpC,KAAM2D,YA3CrB3D,KAAK4oE,GAAGnE,OAAOpkB,MAAK,SAAUokB,GAExBpkE,EAAKi1E,YACPv6C,EAAS,KAAM,CAACqrC,OAAQ,eAG1BphB,EAAK+lB,MAAQtG,EAAKoT,WAClBx3E,EAAKg3E,UAAUryB,MACdjqB,IAwKP,IAASm7C,GAAiB,gBAa1BA,GAAgBr4E,UAAUi6E,KACxBjQ,EAAW,QAAQ,SAAUjC,EAAK5gB,EAAMjqB,GAKxC,GAJoB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAEU,iBAAR4gB,GAAoB5jE,MAAM2lB,QAAQi+C,GAC3C,OAAO7qC,EAASuxC,GAAYJ,KAE9BlsE,KAAK+3E,SAAS,CAACjP,KAAM,CAAClD,IAAO5gB,EAAM8wB,GAAU/6C,EAAU6qC,EAAIM,SAG7DgQ,GAAgBr4E,UAAUooE,IAAM4B,EAAW,OAAO,SAAUjC,EAAK5gB,EAAMmD,GAKrE,GAJoB,mBAATnD,IACTmD,EAAKnD,EACLA,EAAO,IAEU,iBAAR4gB,GAAoB5jE,MAAM2lB,QAAQi+C,GAC3C,OAAOzd,EAAGmkB,GAAYJ,KAGxB,GADAkB,GAAexH,EAAIM,KACf8O,GAAUpP,EAAIM,MAAkC,mBAAnBlmE,KAAKg4E,UACpC,OAAIpS,EAAIqS,SACCj4E,KAAKk4E,aAAatS,EAAKzd,GAEvBnoD,KAAKg4E,UAAUpS,EAAKzd,GAG/B,IAYMqlB,EACA2K,EAGAC,EACAC,EAjBFh4E,EAAOL,KA0BX,SAASs4E,EAAO1kE,GACW,mBAAdvT,EAAKk4E,OAA0C,IAAnBvzB,EAAKwzB,UAC1Cn4E,EAAKk4E,KAAK3S,EAAK5gB,EAAMpxC,GAErBvT,EAAK03E,SAAS,CAACjP,KAAM,CAAClD,IAAO5gB,EAAM8wB,GAAUliE,EAAMgyD,EAAIM,MA7BvDlhB,EAAKyzB,OAAS7S,EAAIO,MAWhBqH,EAAQ5H,EAAIO,KAAKz9D,MAAM,KACvByvE,EAAW3K,EAAM,GAGjB4K,EAFYr6D,SAASyvD,EAAM,GAAI,IAEP,EACxB6K,EAAWp4E,KAEf2lE,EAAIqQ,WAAa,CACf9hE,MAAOikE,EACP7T,IAAK,CAAC8T,EAAUF,IAElBvS,EAAIO,KAAOiS,EAAY,IAAMC,EAC7BrzB,EAAKwzB,WAAY,EArBjBF,GAAO,SAAU31E,GACf,IAAIuL,EAASvL,EAAM,KAAO,CAACQ,IAAI,EAAMrD,GAAI8lE,EAAIM,IAAKjmE,IAAK2lE,EAAIO,MAC3Dhe,EAAGxlD,EAAKuL,OAGVoqE,EAAOnwB,MA2BX+tB,GAAgBr4E,UAAU66E,cACxB7Q,EAAW,iBAAiB,SAAU2B,EAAOmP,EAAcC,EACfhJ,EAAMrxE,GAClD,IAAIs6E,EAAM74E,KAiBV,SAAS84E,EAAiBlT,GACxB,IAAImT,EAAa,SAAUnT,EAAM7nD,SAAS6nD,EAAIO,KAAM,IAAM,EAO1D,OANAP,EAAIqH,aAAerH,EAAIqH,cAAgB,GACvCrH,EAAIqH,aAAa0L,GAAgB,CAC/BK,aAAcz6E,EACdwB,KAAM6vE,EACNqJ,SAAUF,GAELF,EAAI5S,IAAIL,GAGjB,MA3BoB,mBAATrnE,IACTA,EAAOqxE,EACPA,EAAOgJ,EACPA,EAAS,WAIS,IAATr6E,IACTA,EAAOqxE,EACPA,EAAOgJ,EACPA,EAAS,MAENr6E,GACH8rE,EAAe,OAAQ,aAAcsO,EAAc,cAAenP,EAAO,2BAcpEqP,EAAI/7E,IAAI0sE,GAAOnpB,MAAK,SAAUulB,GACnC,GAAIA,EAAIO,OAASyS,EACf,MAAMtM,GAAYb,GAGpB,OAAOqN,EAAiBlT,MACvB,SAAUjjE,GAGX,GAAIA,EAAIulD,SAAWsjB,EAAY5oE,QAC7B,OAAOk2E,EAAiB,CAAC5S,IAAKsD,IAE9B,MAAM7mE,QAKZuzE,GAAgBr4E,UAAUq7E,iBACxBrR,EAAW,oBAAoB,SAAU2B,EAAOmP,EAAcC,EACf79C,GAC/C,IAAI16B,EAAOL,KACXK,EAAKvD,IAAI0sE,GAAO,SAAU7mE,EAAKi+C,GAE7B,GAAIj+C,EACFo4B,EAASp4B,QAGX,GAAIi+C,EAAIulB,OAASyS,EAAjB,CAKA,IAAKh4B,EAAIqsB,aACP,OAAOlyC,WAEF6lB,EAAIqsB,aAAa0L,GACqB,IAAzCh8E,OAAOwL,KAAKy4C,EAAIqsB,cAAc7pE,eACzBw9C,EAAIqsB,aAEb5sE,EAAK4lE,IAAIrlB,EAAK7lB,QAXZA,EAASuxC,GAAYb,UAe3ByK,GAAgBr4E,UAAUyuC,OACxBu7B,EAAW,UAAU,SAAUsR,EAASC,EAAWp0B,EAAMjqB,GACzD,IAAI6qC,EACqB,iBAAdwT,GAETxT,EAAM,CACJM,IAAKiT,EACLhT,KAAMiT,GAEY,mBAATp0B,IACTjqB,EAAWiqB,EACXA,EAAO,MAIT4gB,EAAMuT,EACmB,mBAAdC,GACTr+C,EAAWq+C,EACXp0B,EAAO,KAEPjqB,EAAWiqB,EACXA,EAAOo0B,KAGXp0B,EAAOA,GAAQ,IACVq0B,YAAa,EAClB,IAAI9K,EAAS,CAACrI,IAAKN,EAAIM,IAAKC,KAAOP,EAAIO,MAAQnhB,EAAK/kD,IACpD,UAAkB,GAClB,GAAI+0E,GAAUzG,EAAOrI,MAAqC,mBAAtBlmE,KAAKk4E,aACvC,OAAOl4E,KAAKk4E,aAAatS,EAAK7qC,GAEhC/6B,KAAK+3E,SAAS,CAACjP,KAAM,CAACyF,IAAUvpB,EAAM8wB,GAAU/6C,EAAUwzC,EAAOrI,SAGnEgQ,GAAgBr4E,UAAUy7E,SACxBzR,EAAW,YAAY,SAAU6E,EAAK1nB,EAAMjqB,GACxB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAET,IAAIuf,EAAM5nE,OAAOwL,KAAKukE,GAEtB,IAAKnI,EAAInhE,OACP,OAAO23B,EAAS,KAAM,IAGxB,IAAIt1B,EAAQ,EACR8zE,EAAU,IAAI/S,EAElB,SAASgT,EAAa15E,EAAI25E,GACnBF,EAAQjxE,IAAIxI,IACfy5E,EAAQ9yE,IAAI3G,EAAI,CAACy5E,QAAS,KAE5BA,EAAQz8E,IAAIgD,GAAIy5E,QAAQn0E,KAAKq0E,GA4B/BlV,EAAIxvD,KAAI,SAAUjV,GAChBE,KAAK05E,iBAAiB55E,GAAI,SAAU6C,EAAKkvE,GACvC,GAAIlvE,GAAsB,MAAfA,EAAIyjE,QAAkC,YAAhBzjE,EAAIC,QACnC22E,EAAQ9yE,IAAI3G,EAAI,CAACy5E,QAAS7M,EAAI5sE,SACzB,IAAI6C,EAET,OAAOo4B,EAASp4B,IA/BtB,SAAoB7C,EAAI+xE,GAEtB,IAAI8H,EAAejN,EAAI5sE,GAAIiC,MAAM,GACjCkwE,GAAgBJ,GAAU,SAAUU,EAAQ71B,EAAKk4B,EAASv2E,EACxD2mD,GACE,IAAI4zB,EAASl8B,EAAM,IAAMk4B,EACrB3uB,EAAM0zB,EAAahlE,QAAQikE,IAClB,IAAT3yB,IAIJ0zB,EAAa90D,OAAOohC,EAAK,GAEL,cAAhBjB,EAAKohB,QACPoT,EAAa15E,EAAI84E,OAMvBe,EAAajlE,SAAQ,SAAUkkE,GAC7BY,EAAa15E,EAAI84E,MAYfgB,CAAW95E,EAAI+xE,GAGjB,KAAMpsE,IAAU8+D,EAAInhE,OAAQ,CAE1B,IAAIy2E,EAAa,GAIjB,OAHAN,EAAQ7kE,SAAQ,SAAUxX,EAAOM,GAC/Bq8E,EAAWr8E,GAAON,KAEb69B,EAAS,KAAM8+C,SAGzB75E,SAULk2E,GAAgBr4E,UAAU8qE,QACxBd,EAAW,WAAW,SAAU7iB,EAAMjqB,GACtC4tC,EAAQ3oE,KAAMglD,EAAMjqB,MAMtBm7C,GAAgBr4E,UAAUi8E,gBACxBjS,EAAW,mBAAmB,SAAU2B,EAAOuQ,EAAWh/C,GAC1D,IAAI16B,EAAOL,KACXA,KAAK05E,iBAAiBlQ,GAAO,SAAU7mE,EAAKq3E,GAE1C,GAAIr3E,EACF,OAAOo4B,EAASp4B,GAElB,IAAIs3E,EAhWR,SAAuB/H,GACrB,IAAI+H,EAAS,GACTC,EAAQ,GAoBZ,OAnBAjI,GAAgBC,GAAM,SAAUK,EAAQ71B,EAAK58C,EAAIq6E,GAC/C,IAAIvB,EAASl8B,EAAM,IAAM58C,EAOzB,OANIyyE,IACF0H,EAAOrB,GAAU,QAENp5E,IAAT26E,GACFD,EAAM90E,KAAK,CAACwS,KAAMuiE,EAAM/oB,GAAIwnB,IAEvBA,KAGTsB,EAAMllE,UACNklE,EAAMxlE,SAAQ,SAAU0lE,QACI56E,IAAtBy6E,EAAOG,EAAKxiE,MACdqiE,EAAOG,EAAKxiE,MAAQ,EAAIqiE,EAAOG,EAAKhpB,IAEpC6oB,EAAOG,EAAKxiE,MAAQxX,KAAKY,IAAIi5E,EAAOG,EAAKxiE,MAAO,EAAIqiE,EAAOG,EAAKhpB,QAG7D6oB,EA0UQI,CAAcL,GACvBM,EAAa,GACbpI,EAAO,GACXv1E,OAAOwL,KAAK8xE,GAAQvlE,SAAQ,SAAUkkE,GAChCqB,EAAOrB,GAAUmB,GACnBO,EAAWl1E,KAAKwzE,MAIpB3G,GAAgB+H,GAAS,SAAUzH,EAAQ71B,EAAKk4B,EAASv2E,EAAK2mD,GAC5D,IAAI4zB,EAASl8B,EAAM,IAAMk4B,EACL,cAAhB5vB,EAAKohB,SAA0D,IAAhCkU,EAAW3lE,QAAQikE,IACpD1G,EAAK9sE,KAAKwzE,MAGdv4E,EAAKk6E,cAAc/Q,EAAO0I,EAAMn3C,SAMpCm7C,GAAgBr4E,UAAUysC,QACxBu9B,EAAW,WAAW,SAAU7iB,EAAMjqB,GAClB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAITA,EAAOA,GAAQ,GADJhlD,KAGNw6E,iBAHMx6E,KAGkBw6E,kBAAoB,GAHtCx6E,KAINw6E,iBAAiBp1E,KAAK,CAAC4/C,KAAMA,EAAMjqB,SAAUA,IACb,IAL1B/6B,KAKFw6E,iBAAiBp3E,QAzV5B,SAASq3E,EAAiBp6E,GACxB,IAAIoM,EAAOpM,EAAKm6E,iBAAiB,GAC7Bx1B,EAAOv4C,EAAKu4C,KACZjqB,EAAWtuB,EAAKsuB,SACpB16B,EAAKvD,IAAI,qBAAqB49E,OAAM,WAClC,OAAO,KACNr6B,MAAK,SAAUulB,GACZA,GAAOA,EAAI+U,WACb31B,EAAK21B,SAAW/U,EAAI+U,UAEtBt6E,EAAKu6E,SAAS51B,GAAM,SAAUriD,EAAKsL,GAE7BtL,EACFo4B,EAASp4B,GAETo4B,EAAS,KAAM9sB,GAEjB,KAAU,WACR5N,EAAKm6E,iBAAiB3yE,QAClBxH,EAAKm6E,iBAAiBp3E,QACxBq3E,EAAiBp6E,YAsUvBo6E,CANSz6E,SASbk2E,GAAgBr4E,UAAU+8E,SAAW,SAAU51B,EAAMjqB,GACnD,IAAI16B,EAAOL,KACP6qE,EAAc,CAChBgQ,aAAa,EACbF,SAAU31B,EAAK21B,UAAY,GAEzBG,EAAW,GAmBfz6E,EAAKg5C,QAAQwxB,GACVvjE,GAAG,UAlBN,SAAkBq+D,GAChBmV,EAAS11E,KAAK/E,EAAKy5E,gBAAgBnU,EAAI7lE,GAAI,OAkB1CwH,GAAG,YAhBN,SAAoBqgE,GAClB,IAAI0N,EAAU1N,EAAKgT,SACnBl0D,QAAQk5C,IAAImb,GAAUz6B,MAAK,WACzB,OAAO+tB,GAAO/tE,EAAM,qBAAqB,SAAmBulE,GAC1D,QAAKA,EAAI+U,UAAY/U,EAAI+U,SAAWtF,KAClCzP,EAAI+U,SAAWtF,EACRzP,SAIVvlB,MAAK,WACNtlB,EAAS,KAAM,CAAC53B,IAAI,OACnBu3E,MAAM3/C,MAKRzzB,GAAG,QAASyzB,IAKjBm7C,GAAgBr4E,UAAUf,IAAM+qE,EAAW,OAAO,SAAU/nE,EAAIklD,EAAMmD,GAKpE,GAJoB,mBAATnD,IACTmD,EAAKnD,EACLA,EAAO,IAES,iBAAPllD,EACT,OAAOqoD,EAAGmkB,GAAYZ,IAExB,GAAIsJ,GAAUl1E,IAAiC,mBAAnBE,KAAK+6E,UAC/B,OAAO/6E,KAAK+6E,UAAUj7E,EAAIqoD,GAE5B,IAAImqB,EAAS,GAAIjyE,EAAOL,KAExB,SAASg7E,IACP,IAAI9sE,EAAS,GACTzI,EAAQ6sE,EAAOlvE,OAEnB,IAAKqC,EACH,OAAO0iD,EAAG,KAAMj6C,GAIlBokE,EAAO59D,SAAQ,SAAUk+D,GACvBvyE,EAAKvD,IAAIgD,EAAI,CACXG,IAAK2yE,EACLV,KAAMltB,EAAKktB,KACX+I,OAAQj2B,EAAKi2B,OACblO,YAAa/nB,EAAK+nB,YAClBkD,OAAQjrB,EAAKirB,SACZ,SAAUttE,EAAKijE,GAChB,GAAKjjE,EAaHuL,EAAO9I,KAAK,CAACm0E,QAAS3G,QAbd,CAGR,IADA,IAAI7tE,EACK9I,EAAI,EAAGC,EAAIgS,EAAO9K,OAAQnH,EAAIC,EAAGD,IACxC,GAAIiS,EAAOjS,GAAGkH,IAAM+K,EAAOjS,GAAGkH,GAAGgjE,OAASP,EAAIO,KAAM,CAClDphE,GAAW,EACX,MAGCA,GACHmJ,EAAO9I,KAAK,CAACjC,GAAIyiE,MAKrBngE,GAEE0iD,EAAG,KAAMj6C,SAMjB,IAAI82C,EAAK4kB,UA8BT,OAAO5pE,KAAKk7E,KAAKp7E,EAAIklD,GAAM,SAAUriD,EAAKuL,GACxC,GAAIvL,EAEF,OADAA,EAAI6mE,MAAQ1pE,EACLqoD,EAAGxlD,GAGZ,IAAIijE,EAAM13D,EAAO03D,IACb4L,EAAWtjE,EAAOsjE,SAClBnzE,EAAM6P,EAAO7P,IAEjB,GAAI2mD,EAAK2tB,UAAW,CAClB,IAAIA,EAAYF,GAAiBjB,GAC7BmB,EAAUvvE,SACZwiE,EAAI+P,WAAahD,GAQrB,GAJIoC,GAAUvD,EAAU5L,EAAIO,QAC1BP,EAAIqS,UAAW,GAGbjzB,EAAKktB,MAAQltB,EAAKm2B,UAAW,CAQ/B,IAPA,IAAIC,EAAcxV,EAAIO,KAAKz9D,MAAM,KAC7B2yE,EAAct9D,SAASq9D,EAAY,GAAI,IACvCxG,EAAcwG,EAAY,GAE1BpwD,EAAQ6nD,GAAWrB,EAASK,UAC5B3iD,EAAO,KAEFjzB,EAAI,EAAGA,EAAI+uB,EAAM5nB,OAAQnH,IAAK,CACrC,IAAIq/E,EAActwD,EAAM/uB,GACpBs/E,EAAYD,EAAY/W,IAAIxvD,KAAI,SAAUwvC,GAAK,OAAOA,EAAEzkD,MACzD6U,QAAQigE,IACa2G,IAAeF,EAAQ,IAEpBnsD,IAAuB,IAAfqsD,KACjCrsD,EAAOosD,GAKX,IAAKpsD,EAGH,OAFAvsB,EAAM,IAAIF,MAAM,qBACZ+mE,MAAQ1pE,EACLqoD,EAAGxlD,GAGZ,IAAI64E,EAAatsD,EAAKq1C,IAAIxvD,KAAI,SAAUwvC,GAAK,OAAOA,EAAEzkD,MACnD6U,QAAQixD,EAAIO,KAAKz9D,MAAM,KAAK,IAAM,EACjC+yE,EAAUvsD,EAAKq1C,IAAInhE,OAASo4E,EAYhC,GAXAtsD,EAAKq1C,IAAI1/C,OAAO22D,EAAYC,GAC5BvsD,EAAKq1C,IAAIvvD,UAELgwC,EAAKktB,OACPtM,EAAIqQ,WAAa,CACf9hE,MAAQ+a,EAAKwtB,IAAMxtB,EAAKq1C,IAAInhE,OAAU,EACtCmhE,IAAKr1C,EAAKq1C,IAAIxvD,KAAI,SAAU6jE,GAC1B,OAAOA,EAAO94E,QAIhBklD,EAAKm2B,UAAW,CAClB,IAAIz+B,EAAOxtB,EAAKwtB,IAAMxtB,EAAKq1C,IAAInhE,OAC/BwiE,EAAI8V,WAAaxsD,EAAKq1C,IAAIxvD,KAAI,SAAU6jE,GAEtC,MAAO,CACL34E,MAFFy8C,EAEa,IAAMk8B,EAAO94E,GACxBsmE,OAAQwS,EAAO5zB,KAAKohB,YAM5B,GAAIphB,EAAK+nB,aAAenH,EAAIqH,aAAc,CACxC,IAAIF,EAAcnH,EAAIqH,aAClBxnE,EAAQ9I,OAAOwL,KAAK4kE,GAAa3pE,OACrC,GAAc,IAAVqC,EACF,OAAO0iD,EAAG,KAAMyd,GAElBjpE,OAAOwL,KAAK4kE,GAAar4D,SAAQ,SAAUlX,GACzCwC,KAAK27E,eAAe/V,EAAIM,IAAK1oE,EAAKuvE,EAAYvvE,GAAM,CAIlDyC,IAAK2lE,EAAIO,KACT8J,OAAQjrB,EAAKirB,OACb5xE,IAAKA,IACJ,SAAUsE,EAAK5C,GAChB,IAAIitE,EAAMpH,EAAIqH,aAAazvE,GAC3BwvE,EAAIjtE,KAAOA,SACJitE,EAAIE,YACJF,EAAI5pE,SACJqC,GACL0iD,EAAG,KAAMyd,QAGZvlE,OACE,CACL,GAAIulE,EAAIqH,aACN,IAAK,IAAIzvE,KAAOooE,EAAIqH,aAEdrH,EAAIqH,aAAanvE,eAAeN,KAClCooE,EAAIqH,aAAazvE,GAAK0vE,MAAO,GAInC/kB,EAAG,KAAMyd,OAvIX,GAAuB,QAAnB5gB,EAAK4kB,UACP5pE,KAAK05E,iBAAiB55E,GAAI,SAAU6C,EAAKkvE,GAEvC,GAAIlvE,EACF,OAAOwlD,EAAGxlD,GAEZ2vE,EAASD,GAAcR,GAAU98D,KAAI,SAAU69D,GAC7C,OAAOA,EAAK3yE,OAEd+6E,WAEG,CACL,IAAIh5E,MAAM2lB,QAAQq9B,EAAK4kB,WAWrB,OAAOzhB,EAAGmkB,GAAYT,EAAe,oBAVrCyG,EAASttB,EAAK4kB,UACd,IAAK,IAAI3tE,EAAI,EAAGA,EAAIq2E,EAAOlvE,OAAQnH,IAAK,CACtC,IAAIC,EAAIo2E,EAAOr2E,GAEf,GAAqB,iBAAR,IAAoB,QAAQwN,KAAKvN,GAC5C,OAAOisD,EAAGmkB,GAAYF,KAG1B4O,QA0HR9E,GAAgBr4E,UAAU+9E,cACxB/T,EAAW,iBAAiB,SAAU2B,EAAOmP,EAAc3zB,EAAMjqB,GACjE,IAAI16B,EAAOL,KACPglD,aAAgBvlD,WAClBs7B,EAAWiqB,EACXA,EAAO,IAEThlD,KAAKk7E,KAAK1R,EAAOxkB,GAAM,SAAUriD,EAAKsL,GACpC,OAAItL,EACKo4B,EAASp4B,GAEdsL,EAAI23D,IAAIqH,cAAgBh/D,EAAI23D,IAAIqH,aAAa0L,IAC/C3zB,EAAK3mD,IAAM4P,EAAI5P,IACf2mD,EAAKirB,QAAS,OACd5vE,EAAKs7E,eAAenS,EAAOmP,EACP1qE,EAAI23D,IAAIqH,aAAa0L,GAAe3zB,EAAMjqB,IAEvDA,EAASuxC,GAAYd,UAKlC0K,GAAgBr4E,UAAU4nE,QACxBoC,EAAW,WAAW,SAAU7iB,EAAMjqB,GAYtC,GAXoB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAETA,EAAK/5B,UAA4B,IAAd+5B,EAAK/5B,KAAuB+5B,EAAK/5B,KAAO,EACvD+5B,EAAK62B,YACP72B,EAAK82B,SAAW92B,EAAK62B,WAEnB72B,EAAK+2B,UACP/2B,EAAKg3B,OAASh3B,EAAK+2B,SAEjB,SAAU/2B,EAAM,CAClB,IAAKhjD,MAAM2lB,QAAQq9B,EAAK78C,MACtB,OAAO4yB,EAAS,IAAIp6B,UAAU,kCAEhC,IAAIs7E,EACF,CAAC,WAAY,SAAU,OAAO3nE,QAAO,SAAU2nE,GAC/C,OAAOA,KAAmBj3B,KACzB,GACH,GAAIi3B,EAKF,YAJAlhD,EAASuxC,GAAYP,EACnB,oBAAsBkQ,EACtB,uCAIJ,IAAK5O,GAASrtE,QApoBlB,SAA0BglD,GACxB,IAAI78C,EAAS,UAAW68C,EACtBA,EAAK78C,KAAKpG,MAAMijD,EAAK/5B,KAAM+5B,EAAKnY,MAAQmY,EAAK/5B,MAC5C+5B,EAAK/5B,KAAO,EAAK+5B,EAAK78C,KAAKpG,MAAMijD,EAAK/5B,MAAQ+5B,EAAK78C,KACtD68C,EAAK78C,KAAOA,EACZ68C,EAAK/5B,KAAO,SACL+5B,EAAKnY,MACRmY,EAAK0yB,aACPvvE,EAAK6M,UACLgwC,EAAK0yB,YAAa,GA4nBhBwE,CAAiBl3B,GACQ,IAArBA,EAAK78C,KAAK/E,QACZ,OAAOpD,KAAKm8E,SAAS,CAACtvC,MAAO,GAAI9R,GAKvC,OAAO/6B,KAAKm8E,SAASn3B,EAAMjqB,MAG7Bm7C,GAAgBr4E,UAAUw7C,QAAU,SAAU2L,EAAMjqB,GAalD,MAZoB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,KAGTA,EAAOA,GAAQ,IAKV61B,YAAe,gBAAiB71B,EAAQA,EAAK61B,aAAe71B,EAAKuyB,KAE/D,IAAItC,GAAUj1E,KAAMglD,EAAMjqB,IAGnCm7C,GAAgBr4E,UAAUq9C,MAAQ2sB,EAAW,SAAS,SAAU9sC,GAG9D,OAFA/6B,KAAK8nE,SAAU,EACf9nE,KAAKkF,KAAK,UACHlF,KAAKo8E,OAAOrhD,MAGrBm7C,GAAgBr4E,UAAU4mE,KAAOoD,EAAW,QAAQ,SAAU9sC,GAC5D,IAAI16B,EAAOL,KACXA,KAAKq8E,OAAM,SAAU15E,EAAK8hE,GACxB,GAAI9hE,EACF,OAAOo4B,EAASp4B,GAGlB8hE,EAAK6X,QAAU7X,EAAK6X,SAAWj8E,EAAK7D,KACpCioE,EAAK4R,mBAAqBh2E,EAAKg2E,iBAAoBhJ,GAAShtE,IAC5DokE,EAAK8R,QAAUl2E,EAAKk2E,QACpBx7C,EAAS,KAAM0pC,SAInByR,GAAgBr4E,UAAUiC,GAAK+nE,EAAW,MAAM,SAAU9sC,GACxD,OAAO/6B,KAAKkmE,IAAInrC,MAIlBm7C,GAAgBr4E,UAAUU,KAAO,WAC/B,MAA8B,mBAAfyB,KAAKu8E,MAAwBv8E,KAAKu8E,QAAUv8E,KAAKu2E,SAGlEL,GAAgBr4E,UAAUk6E,SACxBlQ,EAAW,YAAY,SAAU6E,EAAK1nB,EAAMjqB,GAc5C,GAboB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAGTA,EAAOA,GAAQ,GAEXhjD,MAAM2lB,QAAQ+kD,KAChBA,EAAM,CACJ5D,KAAM4D,KAILA,IAAQA,EAAI5D,OAAS9mE,MAAM2lB,QAAQ+kD,EAAI5D,MAC1C,OAAO/tC,EAASuxC,GAAYf,IAG9B,IAAK,IAAItvE,EAAI,EAAGA,EAAIywE,EAAI5D,KAAK1lE,SAAUnH,EACrC,GAA2B,iBAAhBywE,EAAI5D,KAAK7sE,IAAmB+F,MAAM2lB,QAAQ+kD,EAAI5D,KAAK7sE,IAC5D,OAAO8+B,EAASuxC,GAAYJ,KAIhC,IAAIsQ,EAYJ,GAXA9P,EAAI5D,KAAKp0D,SAAQ,SAAUkxD,GACrBA,EAAIqH,cACNtwE,OAAOwL,KAAKy9D,EAAIqH,cAAcv4D,SAAQ,SAAUlY,GAC9CggF,EAAkBA,GA/qB1B,SAA6BhgF,GAC3B,MAAuB,MAAnBA,EAAKo+B,OAAO,IACPp+B,EAAO,0EA6qB2BigF,CAAoBjgF,GACpDopE,EAAIqH,aAAazwE,GAAMw8E,cAC1B3O,EAAe,OAAQ,aAAc7tE,EAAM,cAAeopE,EAAIM,IAAK,iCAMvEsW,EACF,OAAOzhD,EAASuxC,GAAYL,EAAauQ,IAGrC,cAAex3B,IAEjBA,EAAKwzB,YADH,cAAe9L,IACAA,EAAI8L,WAMzB,IAAIjC,EAAUv2E,KACTglD,EAAKwzB,WAAcnL,GAASkJ,IAG/B7J,EAAI5D,KAAKv3D,KAAKwkE,IAxyBlB,SAAmBjN,GACjB,IAAK,IAAI7sE,EAAI,EAAGA,EAAI6sE,EAAK1lE,OAAQnH,IAAK,CACpC,IAAI2pE,EAAMkD,EAAK7sE,GACf,GAAI2pE,EAAIqS,gBACCrS,EAAIqH,kBACN,GAAIrH,EAAIqH,aAGb,IADA,IAAIyP,EAAO//E,OAAOwL,KAAKy9D,EAAIqH,cAClBrgB,EAAI,EAAGA,EAAI8vB,EAAKt5E,OAAQwpD,IAAK,CACpC,IAAIogB,EAAM0P,EAAK9vB,GACfgZ,EAAIqH,aAAaD,GAAOtpD,EAAKkiD,EAAIqH,aAAaD,GAC5C,CAAC,OAAQ,SAAU,eAAgB,SAAU,SAAU,WAgyB/D2P,CAAUjQ,EAAI5D,MAKd,IAAIvE,EAAMmI,EAAI5D,KAAK/zD,KAAI,SAAU6wD,GAC/B,OAAOA,EAAIM,OAGb,OAAOlmE,KAAK48E,UAAUlQ,EAAK1nB,GAAM,SAAUriD,EAAKsL,GAC9C,GAAItL,EACF,OAAOo4B,EAASp4B,GASlB,GAPKqiD,EAAKwzB,YAERvqE,EAAMA,EAAIqG,QAAO,SAAUiwC,GACzB,OAAOA,EAAEzhD,WAIRuqE,GAASkJ,GACZ,IAAK,IAAIt6E,EAAI,EAAGC,EAAI+R,EAAI7K,OAAQnH,EAAIC,EAAGD,IACrCgS,EAAIhS,GAAG6D,GAAKmO,EAAIhS,GAAG6D,IAAMykE,EAAItoE,GAIjC8+B,EAAS,KAAM9sB,SAInBioE,GAAgBr4E,UAAUg/E,0BACxBhV,EAAW,6BAA6B,SAAUiV,EACM/hD,GACxD,IAAIgiD,EAAQ,IAAI/8E,KAAKuK,YAAYuyE,EAAa98E,KAAKo2E,QAUnDhI,GAAOpuE,KAAM,8BARb,SAAiB4lE,GAEf,OADAA,EAAIoX,aAAepX,EAAIoX,cAAgB,IACnCpX,EAAIoX,aAAaF,KAGrBlX,EAAIoX,aAAaF,IAAe,EACzBlX,MAGNvlB,MAAK,WACJtlB,EAAS,KAAM,CAAC6tC,GAAImU,OACnBrC,MAAM3/C,MAGbm7C,GAAgBr4E,UAAUs0D,QACxB0V,EAAW,WAAW,SAAU7iB,EAAMjqB,GAElB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAGT,IAAI3kD,EAAOL,KACPi9E,IAAY,eAAgB58E,IAAOA,EAAKs2E,WAE5C,SAASuG,IAEP78E,EAAK88E,SAASn4B,GAAM,SAAUriD,EAAKglE,GACjC,GAAIhlE,EACF,OAAOo4B,EAASp4B,GAElBtC,EAAK0nE,YAAa,EAClB1nE,EAAK6E,KAAK,aACV61B,EAAS,KAAM4sC,GAAQ,CAAE,IAAM,OAInC,GAAI0F,GAAShtE,GAEX,OAAO68E,IAGT78E,EAAKvD,IAAI,8BAA8B,SAAU6F,EAAKy6E,GACpD,GAAIz6E,EAEF,OAAmB,MAAfA,EAAIyjE,OACCrrC,EAASp4B,GAETu6E,IAGX,IAAIF,EAAeI,EAASJ,aACxBzX,EAAUllE,EAAKkK,YACf8yE,EAAa1gF,OAAOwL,KAAK60E,GAAcjoE,KAAI,SAAUvY,GAGvD,IAAI8gF,EAAWL,EACbzgF,EAAK+M,QAAQ,IAAIwQ,OAAO,IAAMwrD,EAAQzxB,QAAS,IAAMt3C,EACvD,OAAO,IAAI+oE,EAAQ+X,EAAUj9E,EAAK+1E,QAAQjkB,aAE5C1rC,QAAQk5C,IAAI0d,GAAYh9B,KAAK68B,EAAWniD,SAU5Co7C,GAAUt4E,UAAU0/E,QAAU,WAC5B,IAAI/hC,EACJ,GAAIx7C,KAAKuoE,OACP,KAAQ/sB,EAAMx7C,KAAKuM,MAAM1E,SACvB2zC,EAAIx7C,KAAKuoE,aAGX,KAAQ/sB,EAAMx7C,KAAKuM,MAAM1E,SACvB2zC,KAKN26B,GAAUt4E,UAAU0gE,KAAO,SAAU57D,GACnC3C,KAAKuoE,OAAS5lE,EACd3C,KAAKu9E,WAGPpH,GAAUt4E,UAAUs5E,MAAQ,SAAUvO,GACpC5oE,KAAKqoE,SAAU,EACfroE,KAAK4oE,GAAKA,EACV5oE,KAAKu9E,WAGPpH,GAAUt4E,UAAUyqE,QAAU,SAAU9sB,GACtCx7C,KAAKuM,MAAMnH,KAAKo2C,GACZx7C,KAAKuoE,QACPvoE,KAAKu9E,WA4ET,IAAShY,GAAS2Q,IAiElB,IAAI/0E,GAAgC,oBAApBq8E,gBACVA,gBACA,WAAc,MAAO,CAACC,MAAO,eAE/BC,GAAMC,MACNC,GAAIC,QAERtY,GAAQiR,SAAW,GACnBjR,GAAQkR,kBAAoB,GAE5BlR,GAAQzxB,OAAS,UAEjB,IAAIgqC,GAAe,IAAI,gBAEvB,SAA2BC,GACzBphF,OAAOwL,KAAK,eAAatK,WAAW6W,SAAQ,SAAUlX,GACT,mBAAhC,eAAaK,UAAUL,KAChCugF,EAAMvgF,GAAOsgF,GAAatgF,GAAKC,KAAKqgF,QAMxC,IAAIE,EAAoBD,EAAME,sBAAwB,IAAIzX,EAE1DuX,EAAMz2E,GAAG,OAAO,SAA0BshE,GACnCoV,EAAkB11E,IAAIsgE,EAAGpsE,OAC5BwhF,EAAkBv3E,IAAImiE,EAAGpsE,KAAM,IAEjCwhF,EAAkBlhF,IAAI8rE,EAAGpsE,MAAM4I,KAAKwjE,MAGtCmV,EAAMz2E,GAAG,SAAS,SAA4BshE,GAC5C,GAAKoV,EAAkB11E,IAAIsgE,EAAGpsE,MAA9B,CAGA,IAAI0hF,EAASF,EAAkBlhF,IAAI8rE,EAAGpsE,MAClCkgD,EAAMwhC,EAAOvpE,QAAQi0D,GACrBlsB,EAAM,IAIVwhC,EAAOr5D,OAAO63B,EAAK,GACfwhC,EAAO96E,OAAS,EAElB46E,EAAkBv3E,IAAImiE,EAAGpsE,KAAM0hF,GAE/BF,EAAkB/W,OAAO2B,EAAGpsE,WAIhCuhF,EAAMz2E,GAAG,aAAa,SAAgC9K,GACpD,GAAKwhF,EAAkB11E,IAAI9L,GAA3B,CAGA,IAAI0hF,EAASF,EAAkBlhF,IAAIN,GACnCwhF,EAAkB/W,OAAOzqE,GACzB0hF,EAAOxpE,SAAQ,SAAUk0D,GACvBA,EAAG1jE,KAAK,aAAY,UAK1Bi5E,CAAkB5Y,IAElBA,GAAQgR,QAAU,SAAUz2E,EAAI8gD,EAAKw9B,GAE/Bx9B,EAAIk2B,UACNvR,GAAQiR,SAAS12E,GAAM8gD,EACnBw9B,GACF7Y,GAAQkR,kBAAkBrxE,KAAKtF,KAKrCylE,GAAQ8Y,OAAS,SAAUz9B,GACzB,GAAmB,mBAARA,EACTA,EAAI2kB,QACC,IAAmB,iBAAR3kB,GAAgD,IAA5BjkD,OAAOwL,KAAKy4C,GAAKx9C,OACrD,MAAM,IAAIX,MAAM,wBAA0Bm+C,EAAM,uCAEhDjkD,OAAOwL,KAAKy4C,GAAKlsC,SAAQ,SAAU5U,GACjCylE,GAAQ1nE,UAAUiC,GAAM8gD,EAAI9gD,MAMhC,OAHIE,KAAKs+E,aACP/Y,GAAQ+Y,WAAanT,EAAsB,GAAInrE,KAAKs+E,aAE/C/Y,IAGTA,GAAQ9hD,SAAW,SAAU86D,GAC3B,SAASC,EAAShiF,EAAMwoD,GACtB,KAAMhlD,gBAAgBw+E,GACpB,OAAO,IAAIA,EAAShiF,EAAMwoD,GAG5BA,EAAOA,GAAQ,GAEXxoD,GAAwB,iBAATA,IAEjBA,GADAwoD,EAAOxoD,GACKA,YACLwoD,EAAKxoD,MAGdwoD,EAAOmmB,EAAsB,GAAIqT,EAASF,WAAYt5B,GACtDugB,GAAQnpE,KAAK4D,KAAMxD,EAAMwoD,GAgB3B,OAbA,IAASw5B,EAAUjZ,IAEnBiZ,EAAS/H,kBAAoBlR,GAAQkR,kBAAkB10E,QACvDpF,OAAOwL,KAAKo9D,IAAS7wD,SAAQ,SAAUlX,GAC/BA,KAAOghF,IACXA,EAAShhF,GAAO+nE,GAAQ/nE,OAM5BghF,EAASF,WAAanT,EAAsB,GAAInrE,KAAKs+E,WAAYC,GAE1DC,GAGTjZ,GAAQoY,MAAQ,SAAUpuB,EAAKvK,GAC7B,OAAO04B,GAAInuB,EAAKvK,IAQlB,SAASy5B,GAAgB7Y,EAAK8Y,GAE5B,IADA,IAAIxhF,EAAQ0oE,EACH3pE,EAAI,EAAGkL,EAAMu3E,EAAYt7E,OAAQnH,EAAIkL,EAAKlL,IAAK,CAGtD,KADAiB,EAAQA,EADEwhF,EAAYziF,KAGpB,MAGJ,OAAOiB,EAQT,SAASyhF,GAAWC,GAIlB,IAFA,IAAI3+B,EAAS,GACT3+B,EAAU,GACLrlB,EAAI,EAAGkL,EAAMy3E,EAAUx7E,OAAQnH,EAAIkL,EAAKlL,IAAK,CACpD,IAAIg/D,EAAK2jB,EAAU3iF,GACR,MAAPg/D,EACEh/D,EAAI,GAA0B,OAArB2iF,EAAU3iF,EAAI,GACzBqlB,EAAUA,EAAQoyB,UAAU,EAAGpyB,EAAQle,OAAS,GAAK,KAErD68C,EAAO76C,KAAKkc,GACZA,EAAU,IAGZA,GAAW25C,EAIf,OADAhb,EAAO76C,KAAKkc,GACL2+B,EAGT,IAAI4+B,GAAoB,CAAC,MAAO,OAAQ,QACxC,SAASC,GAAqB3/B,GAC5B,OAAO0/B,GAAkBlqE,QAAQwqC,IAAU,EAG7C,SAAS4/B,GAAOn+B,GACd,OAAOjkD,OAAOwL,KAAKy4C,GAAK,GAS1B,SAASo+B,GAAoBC,GAK3B,IAAIhxE,EAAM,GAqCV,OAnCAgxE,EAAUvqE,SAAQ,SAAUwqE,GAC1BviF,OAAOwL,KAAK+2E,GAAUxqE,SAAQ,SAAUyqC,GACtC,IAAIggC,EAAUD,EAAS//B,GAKvB,GAJuB,iBAAZggC,IACTA,EAAU,CAACC,IAAKD,IAGdL,GAAqB3/B,GAErBlxC,EAAIkxC,GADFggC,aAAmBn9E,MACRm9E,EAAQpqE,KAAI,SAAU1Y,GACjC,OAAO2iF,GAAoB,CAAC3iF,OAGjB2iF,GAAoB,CAACG,QAE/B,CACL,IAAIE,EAAgBpxE,EAAIkxC,GAASlxC,EAAIkxC,IAAU,GAC/CxiD,OAAOwL,KAAKg3E,GAASzqE,SAAQ,SAAUyoB,GACrC,IAAIjgC,EAAQiiF,EAAQhiD,GAEpB,MAAiB,QAAbA,GAAmC,SAAbA,EAqBpC,SAAoBA,EAAUjgC,EAAOmiF,GACnC,QAAiC,IAAtBA,EAAcD,IACvB,YAEgC,IAAvBC,EAAcC,KACN,SAAbniD,EACEjgC,EAAQmiF,EAAcC,OACxBD,EAAcC,KAAOpiF,GAGnBA,GAASmiF,EAAcC,cAClBD,EAAcC,KACrBD,EAAcE,IAAMriF,QAGc,IAAtBmiF,EAAcE,IACb,SAAbpiD,EACEjgC,EAAQmiF,EAAcE,aACjBF,EAAcE,IACrBF,EAAcC,KAAOpiF,GAGnBA,EAAQmiF,EAAcE,MACxBF,EAAcE,IAAMriF,GAIxBmiF,EAAcliD,GAAYjgC,EA/CXsiF,CAAWriD,EAAUjgC,EAAOmiF,GACb,QAAbliD,GAAmC,SAAbA,EAmD3C,SAAoBA,EAAUjgC,EAAOmiF,GACnC,QAAiC,IAAtBA,EAAcD,IACvB,YAEgC,IAAvBC,EAAcI,KACN,SAAbtiD,EACEjgC,EAAQmiF,EAAcI,OACxBJ,EAAcI,KAAOviF,GAGnBA,GAASmiF,EAAcI,cAClBJ,EAAcI,KACrBJ,EAAcK,IAAMxiF,QAGc,IAAtBmiF,EAAcK,IACb,SAAbviD,EACEjgC,EAAQmiF,EAAcK,aACjBL,EAAcK,IACrBL,EAAcI,KAAOviF,GAGnBA,EAAQmiF,EAAcK,MACxBL,EAAcK,IAAMxiF,GAIxBmiF,EAAcliD,GAAYjgC,EA7EXyiF,CAAWxiD,EAAUjgC,EAAOmiF,GACb,QAAbliD,EAiFrB,SAAiBjgC,EAAOmiF,GAClB,QAASA,EAEXA,EAAcO,IAAIx6E,KAAKlI,GAEvBmiF,EAAcO,IAAM,CAAC1iF,GArFN2iF,CAAQ3iF,EAAOmiF,GACA,QAAbliD,EAyFrB,SAAiBjgC,EAAOmiF,UAGfA,EAAcE,WACdF,EAAcC,YACdD,EAAcK,WACdL,EAAcI,YACdJ,EAAcO,IACrBP,EAAcD,IAAMliF,EAhGH4iF,CAAQ5iF,EAAOmiF,QAExBA,EAAcliD,GAAYjgC,aAM3B+Q,EA8HT,SAAS8xE,GAAgBp0D,GACvB,IAAIzd,EAASizB,EAAMxV,GACfq0D,GAAW,GAlBjB,SAASC,EAAgBr/B,EAAKs/B,GAC1B,IAAK,IAAIz4C,KAAQmZ,EAAK,CACL,SAATnZ,IACAy4C,GAAQ,GAEZ,IAAIhjF,EAAQ0jD,EAAInZ,GACK,iBAAVvqC,IACPgjF,EAAQD,EAAgB/iF,EAAOgjF,IAGvC,OAAOA,GAUHD,CAAgB/xE,GAAQ,KAEpB,SADJA,EAvCR,SAASiyE,EAA0Bv/B,GAC/B,IAAK,IAAInZ,KAAQmZ,EAAK,CAClB,GAAI5+C,MAAM2lB,QAAQi5B,GACd,IAAK,IAAI3kD,KAAK2kD,EACNA,EAAI3kD,GAAS,OACb2kD,EAAI3kD,GAAK+iF,GAAoBp+B,EAAI3kD,GAAS,OAItD,IAAIiB,EAAQ0jD,EAAInZ,GACK,iBAAVvqC,GACPijF,EAA0BjjF,GAGlC,OAAO0jD,EAyBMu/B,CAA0BjyE,MAE/BA,EAAS8wE,GAAoB9wE,EAAa,OAE9C8xE,GAAW,GAGjB,CAAC,MAAO,QAAQtrE,SAAQ,SAAU0rE,GAC5BA,KAAWlyE,GAGbA,EAAOkyE,GAAS1rE,SAAQ,SAAU2rE,GAEhC,IADA,IAAIpgC,EAAStjD,OAAOwL,KAAKk4E,GAChBpkF,EAAI,EAAGA,EAAIgkD,EAAO78C,OAAQnH,IAAK,CACtC,IAAIkjD,EAAQc,EAAOhkD,GACfkjF,EAAUkB,EAAYlhC,GACH,iBAAZggC,GAAoC,OAAZA,IACjCkB,EAAYlhC,GAAS,CAACigC,IAAKD,WAOjC,SAAUjxE,IAGZA,EAAa,KAAI8wE,GAAoB,CAAC9wE,EAAa,QAKrD,IAFA,IAAI+xC,EAAStjD,OAAOwL,KAAK+F,GAEhBjS,EAAI,EAAGA,EAAIgkD,EAAO78C,OAAQnH,IAAK,CACtC,IAAIkjD,EAAQc,EAAOhkD,GACfkjF,EAAUjxE,EAAOixC,GAEE,iBAAZggC,GAAoC,OAAZA,EACjCA,EAAU,CAACC,IAAKD,GACP,QAASA,IAAYa,IAG9Bb,EAAQS,IAAM,CAACT,EAAQS,MAEzB1xE,EAAOixC,GAASggC,EAGlB,OAAOjxE,EAsBT,SAASoyE,GAAQn/E,EAAGyL,GAElB,GAAIzL,IAAMyL,EACR,OAAO,EAGTzL,EAAIo/E,GAAap/E,GACjByL,EAAI2zE,GAAa3zE,GAEjB,IAAI4zE,EAAK7lB,GAAex5D,GACpBs/E,EAAK9lB,GAAe/tD,GACxB,GAAK4zE,EAAKC,GAAQ,EAChB,OAAOD,EAAKC,EAEd,cAAet/E,GACb,IAAK,SACH,OAAOA,EAAIyL,EACb,IAAK,UACH,OAAOzL,EAAIyL,GAAK,EAAI,EACtB,IAAK,SACH,OAsPN,SAAuBzL,EAAGyL,GAIxB,OAAQzL,IAAMyL,EAAK,EAAMzL,EAAIyL,EAAK,GAAK,EA1P5B8zE,CAAcv/E,EAAGyL,GAE5B,OAAO5K,MAAM2lB,QAAQxmB,GAyOvB,SAAsBA,EAAGyL,GAEvB,IADA,IAAIzF,EAAM/G,KAAKY,IAAIG,EAAEiC,OAAQwJ,EAAExJ,QACtBnH,EAAI,EAAGA,EAAIkL,EAAKlL,IAAK,CAC5B,IAAIsV,EAAO+uE,GAAQn/E,EAAElF,GAAI2Q,EAAE3Q,IAC3B,GAAa,IAATsV,EACF,OAAOA,EAGX,OAAQpQ,EAAEiC,SAAWwJ,EAAExJ,OAAU,EAC9BjC,EAAEiC,OAASwJ,EAAExJ,OAAU,GAAK,EAlPLu9E,CAAax/E,EAAGyL,GA0P5C,SAAuBzL,EAAGyL,GAGxB,IAFA,IAAIg0E,EAAKjkF,OAAOwL,KAAKhH,GAAI0/E,EAAKlkF,OAAOwL,KAAKyE,GACtCzF,EAAM/G,KAAKY,IAAI4/E,EAAGx9E,OAAQy9E,EAAGz9E,QACxBnH,EAAI,EAAGA,EAAIkL,EAAKlL,IAAK,CAE5B,IAAIsV,EAAO+uE,GAAQM,EAAG3kF,GAAI4kF,EAAG5kF,IAC7B,GAAa,IAATsV,EACF,OAAOA,EAIT,GAAa,KADbA,EAAO+uE,GAAQn/E,EAAEy/E,EAAG3kF,IAAK2Q,EAAEi0E,EAAG5kF,MAE5B,OAAOsV,EAIX,OAAQqvE,EAAGx9E,SAAWy9E,EAAGz9E,OAAU,EAChCw9E,EAAGx9E,OAASy9E,EAAGz9E,OAAU,GAAK,EA3Qc09E,CAAc3/E,EAAGyL,GAKlE,SAAS2zE,GAAa/iF,GACpB,cAAeA,GACb,IAAK,YACH,OAAO,KACT,IAAK,SACH,OAAIA,IAAQ+yB,KAAY/yB,KAAS+yB,KAAYrsB,MAAM1G,GAC1C,KAEFA,EACT,IAAK,SACH,IAAIujF,EAAUvjF,EACd,GAAIwE,MAAM2lB,QAAQnqB,GAAM,CACtB,IAAI2J,EAAM3J,EAAI4F,OACd5F,EAAM,IAAIwE,MAAMmF,GAChB,IAAK,IAAIlL,EAAI,EAAGA,EAAIkL,EAAKlL,IACvBuB,EAAIvB,GAAKskF,GAAaQ,EAAQ9kF,QAG3B,IAAIuB,aAAemmB,KACxB,OAAOnmB,EAAIg4C,SACN,GAAY,OAARh4C,EAET,IAAK,IAAI2yD,KADT3yD,EAAM,GACQujF,EACZ,GAAIA,EAAQjjF,eAAeqyD,GAAI,CAC7B,IAAIvnD,EAAMm4E,EAAQ5wB,QACC,IAARvnD,IACTpL,EAAI2yD,GAAKowB,GAAa33E,MAMlC,OAAOpL,EAGT,SAASwjF,GAASxjF,GAChB,GAAY,OAARA,EACF,cAAeA,GACb,IAAK,UACH,OAAOA,EAAM,EAAI,EACnB,IAAK,SACH,OA2PR,SAA8B6zD,GAE5B,GAAY,IAARA,EACF,MAAO,IAKT,IAAI4vB,EAAY5vB,EAAI6vB,gBAAgBx4E,MAAM,QACtCy4E,EAAYpjE,SAASkjE,EAAU,GAAI,IAEnCG,EAAM/vB,EAAM,EAEZnjD,EAASkzE,EAAM,IAAM,IAKrBC,GA1VW/8B,IAyVU88B,GAAOD,EAAYA,KApV1B,KAqVyBhzE,WA1VvBmzE,EA0VmC,IA1V1BC,EAMR,EAhBvB,SAAaj9B,EAAKg9B,EAASC,GAIzB,IAHA,IAAIhf,EAAU,GACVif,EAAeD,EAAaj9B,EAAIlhD,OAE7Bm/D,EAAQn/D,OAASo+E,GACtBjf,GAAW+e,EAEb,OAAO/e,EAIOxxB,CAAIuT,EAAKg9B,EAASC,GACfj9B,GAFnB,IAAiBA,EAAKg9B,EAASC,EA4V7BrzE,GArVQ,GAqVQmzE,EAGhB,IAAII,EAASrhF,KAAK82D,IAAIr5C,WAAWojE,EAAU,KAEvCG,IACFK,EAAS,GAAKA,GAGhB,IAAIC,EAAYD,EAAOE,QAAQ,IAO/B,OAJAD,EAAYA,EAAUn4E,QAAQ,SAAU,IAExC2E,GAnWQ,GAmWQwzE,EA7RHE,CAAqBpkF,GAC9B,IAAK,SAOH,OAAOA,EACJ+L,QAAQ,UAAW,MACnBA,QAAQ,UAAW,MACnBA,QAAQ,UAAW,MAExB,IAAK,SACH,IAAIoe,EAAU3lB,MAAM2lB,QAAQnqB,GACxB0F,EAAMykB,EAAUnqB,EAAMb,OAAOwL,KAAK3K,GAClCvB,GAAK,EACLkL,EAAMjE,EAAIE,OACV8K,EAAS,GACb,GAAIyZ,EACF,OAAS1rB,EAAIkL,GACX+G,GAAU2zE,GAAkB3+E,EAAIjH,SAGlC,OAASA,EAAIkL,GAAK,CAChB,IAAI26E,EAAS5+E,EAAIjH,GACjBiS,GAAU2zE,GAAkBC,GACxBD,GAAkBrkF,EAAIskF,IAG9B,OAAO5zE,EAGb,MAAO,GAMT,SAAS2zE,GAAkBrkF,GAGzB,OAAOm9D,GADPn9D,EAAM+iF,GAAa/iF,IA/GX,GAgH2BwjF,GAASxjF,GAFjC,KAKb,SAASukF,GAAYz9B,EAAKroD,GACxB,IACIo1D,EADA2wB,EAAc/lF,EAGlB,GADsB,MAAXqoD,EAAIroD,GAEbo1D,EAAM,EACNp1D,QACK,CACL,IAAImlF,EAAiB,MAAX98B,EAAIroD,GACdA,IACA,IAAIgmF,EAAc,GACdC,EAAc59B,EAAI5Q,UAAUz3C,EAAGA,EA/HhB,GAgIfklF,EAAYpjE,SAASmkE,EAAa,KAjItB,IAuIhB,IAJId,IACFD,GAAaA,GAEfllF,GArImB,IAsIN,CACX,IAAIg/D,EAAK3W,EAAIroD,GACb,GAAW,OAAPg/D,EACF,MAEAgnB,GAAehnB,EAEjBh/D,IAIAo1D,EADyB,KAD3B4wB,EAAcA,EAAYv5E,MAAM,MAChBtF,OACR2a,SAASkkE,EAAa,IAGtBpkE,WAAWokE,EAAY,GAAK,IAAMA,EAAY,IAGlDb,IACF/vB,GAAY,IAGI,IAAd8vB,IAIF9vB,EAAMxzC,WAAWwzC,EAAM,IAAM8vB,IAGjC,MAAO,CAAC9vB,IAAKA,EAAKjuD,OAASnH,EAAI+lF,GAKjC,SAASj6E,GAAIhF,EAAOu3D,GAClB,IAAI1Z,EAAM79C,EAAMgF,MAEhB,GAAIuyD,EAAUl3D,OAAQ,CACpB,IAAIm3D,EAAkBD,EAAUA,EAAUl3D,OAAS,GAC/Cw9C,IAAQ2Z,EAAgBnvD,UAE1BkvD,EAAUvyD,MACVwyD,EAAkBD,EAAUA,EAAUl3D,OAAS,IAEjD,IAAIgI,EAAUmvD,EAAgBnvD,QAC1BovD,EAAmBD,EAAgBzyD,MACvC,GAAI9F,MAAM2lB,QAAQvc,GAChBA,EAAQhG,KAAKw7C,QACR,GAAI4Z,IAAqBz3D,EAAMK,OAAS,EAAG,CAEhDgI,EADUrI,EAAMgF,OACD64C,OAEf79C,EAAMqC,KAAKw7C,IAiHjB,SAAS+Z,GAAepW,GACtB,IACI0B,EADK,CAAC,UAAW,SAAU,SAAU,UAC5BtxC,eAAe4vC,GAE5B,OAAK0B,EACO,OAAN1B,EACK,EAELviD,MAAM2lB,QAAQ48B,GACT,EAEF0B,EAAM,EAAKA,EAAM,EAAMA,EAAM,EAGlCjkD,MAAM2lB,QAAQ48B,GACT,OADT,EAyEF,SAAS49B,GAAqB7f,EAAM8f,EAAYC,GAK9C,GAJA/f,EAAOA,EAAKhuD,QAAO,SAAUqxD,GAC3B,OAAO2c,GAAU3c,EAAIC,IAAKwc,EAAWlD,SAAUmD,MAG7CD,EAAW7wE,KAAM,CAEnB,IAAIgxE,EA9BR,SAA2BhxE,GAEzB,SAASixE,EAAsB5c,GAC7B,OAAOr0D,EAAKwD,KAAI,SAAU0tE,GACxB,IACI/D,EAAcC,GADFI,GAAO0D,IAGvB,OADoBhE,GAAgB7Y,EAAK8Y,MAK7C,OAAO,SAAUgE,EAAMC,GACrB,IA7oBez0B,EAAM2nB,EA+oBjB+M,EAAYtC,GAFGkC,EAAsBE,EAAK9c,KAC3B4c,EAAsBG,EAAK/c,MAE9C,OAAkB,IAAdgd,EACKA,GAjpBM10B,EAopBEw0B,EAAK9c,IAAIM,IAppBL2P,EAopBU8M,EAAK/c,IAAIM,IAnpBnChY,EAAO2nB,GAAS,EAAI3nB,EAAO2nB,EAAQ,EAAI,IA8pB1BgN,CAAkBT,EAAW7wE,MAC/C+wD,EAAOA,EAAK/wD,KAAKgxE,GACiB,iBAAvBH,EAAW7wE,KAAK,IACU,UA/nBvBqvC,EA+nBDwhC,EAAW7wE,KAAK,IA9nBpBwtE,GAAOn+B,MA+nBd0hB,EAAOA,EAAKttD,WAhoBlB,IAAkB4rC,EAooBhB,GAAI,UAAWwhC,GAAc,SAAUA,EAAY,CAEjD,IAAIn3D,EAAOm3D,EAAWn3D,MAAQ,EAC1B4hB,GAAS,UAAWu1C,EAAaA,EAAWv1C,MAAQy1B,EAAKl/D,QAAU6nB,EACvEq3C,EAAOA,EAAKvgE,MAAMkpB,EAAM4hB,GAE1B,OAAOy1B,EAGT,SAASggB,GAAU1c,EAAKsZ,EAAUmD,GAChC,OAAOA,EAAejuE,OAAM,SAAU+qC,GACpC,IAAIggC,EAAUD,EAAS//B,GACnBu/B,EAAcC,GAAWx/B,GACzB2jC,EAAgBrE,GAAgB7Y,EAAK8Y,GACzC,OAAII,GAAqB3/B,GA0B7B,SAAmCA,EAAOggC,EAASvZ,GAEjD,GAAc,QAAVzmB,EACF,OAAOggC,EAAQjqE,MAAK,SAAU6tE,GAC5B,OAAOT,GAAU1c,EAAKmd,EAAYpmF,OAAOwL,KAAK46E,OAIlD,GAAc,SAAV5jC,EACF,OAAQmjC,GAAU1c,EAAKuZ,EAASxiF,OAAOwL,KAAKg3E,IAI9C,OAAQA,EAAQ5qE,MAAK,SAAUwuE,GAC7B,OAAOT,GAAU1c,EAAKmd,EAAYpmF,OAAOwL,KAAK46E,OAvCrCC,CAA0B7jC,EAAOggC,EAASvZ,GAG5Cqd,GAAc9D,EAASvZ,EAAK8Y,EAAaoE,MAIpD,SAASG,GAAc9D,EAASvZ,EAAK8Y,EAAaoE,GAChD,OAAK3D,IAMkB,iBAAZA,EACFxiF,OAAOwL,KAAKg3E,GAAS/qE,OAAM,SAAU8uE,GAC1C,IAAIC,EAAYhE,EAAQ+D,GACxB,OA2BN,SAAeA,EAActd,EAAKud,EAAWzE,EAAaoE,GACxD,IAAKM,GAASF,GACZ,MAAM,IAAIzgF,MAAM,qBAAuBygF,EACrC,sIAGJ,OAAOE,GAASF,GAActd,EAAKud,EAAWzE,EAAaoE,GAjChD3/D,CAAM+/D,EAActd,EAAKud,EAAWzE,EAAaoE,MAKrD3D,IAAY2D,GA+BrB,SAASO,GAAYP,GACnB,OAAO,MAAOA,EAGhB,SAASQ,GAAoBR,GAC3B,YAAgC,IAAlBA,EAyBhB,SAASS,GAAmBT,EAAeK,GACzC,OAAOA,EAAUjuE,MAAK,SAAUtM,GAC9B,OAAIk6E,aAAyB9gF,MACpB8gF,EAAcnuE,QAAQ/L,IAAQ,EAGhCk6E,IAAkBl6E,KA0C7B,IAAIw6E,GAAW,CAEb,WAAc,SAAUxd,EAAKud,EAAWzE,EAAaoE,GACnD,QAAK9gF,MAAM2lB,QAAQm7D,KAIU,IAAzBA,EAAc1/E,SAIc,iBAArB0/E,EAAc,GAChBA,EAAc5tE,MAAK,SAAUtM,GAClC,OAAO05E,GAAU15E,EAAKu6E,EAAWxmF,OAAOwL,KAAKg7E,OAI1CL,EAAc5tE,MAAK,SAAUtM,GAClC,OAAOq6E,GAAcE,EAAWvd,EAAK8Y,EAAa91E,SAItD,UAAa,SAAUg9D,EAAKud,EAAWzE,EAAaoE,GAClD,QAAK9gF,MAAM2lB,QAAQm7D,KAKU,IAAzBA,EAAc1/E,SAIc,iBAArB0/E,EAAc,GAChBA,EAAc1uE,OAAM,SAAUxL,GACnC,OAAO05E,GAAU15E,EAAKu6E,EAAWxmF,OAAOwL,KAAKg7E,OAI1CL,EAAc1uE,OAAM,SAAUxL,GACnC,OAAOq6E,GAAcE,EAAWvd,EAAK8Y,EAAa91E,SAItD,IAAO,SAAUg9D,EAAKud,EAAWzE,EAAaoE,GAC5C,OAAOQ,GAAoBR,IAAwD,IAAtCxC,GAAQwC,EAAeK,IAGtE,KAAQ,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC7C,OAAOQ,GAAoBR,IAAkBxC,GAAQwC,EAAeK,IAAc,GAGpF,IAAO,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC5C,OAAOQ,GAAoBR,IAAkBxC,GAAQwC,EAAeK,GAAa,GAGnF,KAAQ,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC7C,OAAOQ,GAAoBR,IAAkBxC,GAAQwC,EAAeK,IAAc,GAGpF,IAAO,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC5C,OAAOQ,GAAoBR,IAAkBxC,GAAQwC,EAAeK,GAAa,GAGnF,QAAW,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAEhD,OAAIK,EACKG,GAAoBR,IAGrBQ,GAAoBR,IAG9B,KAAQ,SAAUld,EAAKud,EAAWzE,EAAaoE,GAC7C,OAAOO,GAAYP,IA/IvB,SAAkBA,EAAeK,GAC/B,IAAIv5C,EAAUu5C,EAAU,GACpBK,EAAML,EAAU,GACpB,GAAgB,IAAZv5C,EACF,MAAM,IAAInnC,MAAM,sCAGlB,GAAIsb,SAAS6rB,EAAS,MAAQA,EAC5B,MAAM,IAAInnC,MAAM,6BAGlB,GAAIsb,SAASylE,EAAK,MAAQA,EACxB,MAAM,IAAI/gF,MAAM,6BAGlB,OAAIsb,SAAS+kE,EAAe,MAAQA,GAI7BA,EAAgBl5C,IAAY45C,EA4HIC,CAASX,EAAeK,IAG/D,IAAO,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC5C,OAAOK,EAAU/uE,OAAM,SAAUsvE,GAC/B,OAA2C,IAApCpD,GAAQwC,EAAeY,OAGlC,IAAO,SAAU9d,EAAKud,EAAWzE,EAAaoE,GAC5C,OAAOO,GAAYP,IAAkBS,GAAmBT,EAAeK,IAGzE,KAAQ,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC7C,OAAOO,GAAYP,KAAmBS,GAAmBT,EAAeK,IAG1E,MAAS,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC9C,OAAOO,GAAYP,IA1HvB,SAAmBA,EAAeK,GAChC,OAAOL,EAAc1/E,SAAW+/E,EAyHOQ,CAAUb,EAAeK,IAGhE,KAAQ,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC7C,OAAO9gF,MAAM2lB,QAAQm7D,IApIzB,SAAgCA,EAAeK,GAC7C,OAAOA,EAAU/uE,OAAM,SAAUxL,GAC/B,OAAOk6E,EAAcnuE,QAAQ/L,IAAQ,KAkIEg7E,CAAuBd,EAAeK,IAG/E,OAAU,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC/C,OAAOO,GAAYP,IA9HvB,SAAoBA,EAAeK,GAGjC,OAFS,IAAIppE,OAAOopE,GAEV15E,KAAKq5E,GA2HwBe,CAAWf,EAAeK,IAGjE,MAAS,SAAUvd,EAAKud,EAAWzE,EAAaoE,GAC9C,OA5HJ,SAAmBA,EAAeK,GAEhC,OAAQA,GACN,IAAK,OACH,OAAyB,OAAlBL,EACT,IAAK,UACH,MAAkC,kBAApB,EAChB,IAAK,SACH,MAAkC,iBAApB,EAChB,IAAK,SACH,MAAkC,iBAApB,EAChB,IAAK,QACH,OAAOA,aAAyB9gF,MAClC,IAAK,SACH,MAA6C,oBAAtC,GAAKmM,SAAS/R,KAAK0mF,GAG9B,MAAM,IAAIrgF,MAAM0gF,EAAY,8FA2GnBW,CAAUhB,EAAeK,KA4CpC,SAASrwE,GAASkyC,EAAMjqB,GACtB,GAAIiqB,EAAKk6B,UACHl6B,EAAK1wC,QAA0B,cAAhB0wC,EAAK1wC,OAAwB,CAC9C,IAAIyvE,EAAoC,iBAAhB/+B,EAAK1wC,OAC3B0wC,EAAK1wC,OAAS,WAChB,OAAOymB,EAAS,IAAIt4B,MAAM,gCAAkCshF,EAAa,MAG7EhpD,IAGF,SAASy8C,GAAUxyB,GACbA,EAAK9P,OAAS8P,EAAK1wC,SACrB0wC,EAAK1wC,OAAS,SAGZ0wC,EAAKk6B,WAAal6B,EAAK1wC,SACzB0wC,EAAK1wC,OAAS,aAGZ0wC,EAAK1wC,QAAiC,iBAAhB0wC,EAAK1wC,SACT,UAAhB0wC,EAAK1wC,OACP0wC,EAAK9P,KAAOu4B,GAA+BzoB,EAAK9P,MAEhD8P,EAAK1wC,OAASm5D,GAA+BzoB,EAAK1wC,SAKxD,SAASmjE,GAAauM,EAAgBh/B,GACpC,OAAOA,EAAK1wC,QAAiC,iBAAhB0wC,EAAK1wC,SAC/B0wC,EAAKi/B,UAAY5W,GAAS2W,EAAepb,IAG9C,SAASt0D,GAAO0vE,EAAgBh/B,GAC9B,IAAIjqB,EAAWiqB,EAAKkwB,SACpB,GAAoB,UAAhBlwB,EAAK1wC,OAAoB,CAC3B,IAAK0wC,EAAK9P,MAA6B,iBAAd8P,EAAK9P,KAAmB,CAC/C,IAAIvyC,EAAM2pE,GAAYL,EACpB,iDACF,OAAOlxC,EAASp4B,GAGlB,IAAIuhF,EAAW3W,GAA2BvoB,EAAK9P,MAC/C8uC,EAAepb,GAAG9rE,IAAI,WAAaonF,EAAS,IAAI,SAAUvhF,EAAKwhF,GAE7D,GAAIH,EAAe1O,YACjB,OAAOv6C,EAAS,KAAM,CAACqrC,OAAQ,cAGjC,GAAIzjE,EACF,OAAOo4B,EAASyxC,GAA0B7pE,IAE5C,IAAIyhF,EAASD,GAAQA,EAAKE,OAASF,EAAKE,MAAMH,EAAS,KACrDC,EAAKE,MAAMH,EAAS,IAAInvE,IAC1B,IAAKqvE,EACH,OAAOrpD,EAASuxC,GAAYd,EACzB2Y,EAAKE,MAAQ,qBAAuBH,EAAS,GAC5C,4BAENl/B,EAAK1wC,OA/DF65D,GAfI,CACT,yBACA,kBACA,yBACA,iCACA,sBACA,OACA,gBAuEyBiW,EAvEC,IAC1B,eACA,mBACA,mBACA,MACA,MACAr7E,KAAK,MAEgB,IAgEnBi7E,EAAe3M,UAAUryB,WAEtB,GAAIA,EAAKk6B,SACdl6B,EAAK1wC,OAAS,SAAUsxD,GACtB,OAxGN,SAAyBA,EAAKsZ,GAE5B,GAAwB,iBAAbA,EAET,MAAM,IAAIz8E,MAAM,0CAIlB,IAII6hF,EAAcnC,GAAqB,CAJ7B,CACR,IAAOvc,IAGqC,CAAE,SALhDsZ,EAAWa,GAAgBb,IAK6CviF,OAAOwL,KAAK+2E,IACpF,OAAOoF,GAAsC,IAAvBA,EAAYlhF,OA2FvBmhF,CAAgB3e,EAAK5gB,EAAKk6B,WAEnC8E,EAAe3M,UAAUryB,OACpB,CAEL,IAAI++B,EAAaxW,GAA2BvoB,EAAK1wC,QACjD0vE,EAAepb,GAAG9rE,IAAI,WAAainF,EAAW,IAAI,SAAUphF,EAAKwhF,GAE/D,GAAIH,EAAe1O,YACjB,OAAOv6C,EAAS,KAAM,CAACqrC,OAAQ,cAGjC,GAAIzjE,EACF,OAAOo4B,EAASyxC,GAA0B7pE,IAE5C,IAAI6hF,EAAYL,GAAQA,EAAKtlC,SAAWslC,EAAKtlC,QAAQklC,EAAW,IAChE,IAAKS,EACH,OAAOzpD,EAASuxC,GAAYd,EACxB2Y,GAAQA,EAAKtlC,QAAW,qBAAuBklC,EAAW,GACxD,8BAER/+B,EAAK1wC,OA5GF65D,GAAU,yBA4GYqW,EA5GuB,IAAK,IA6GrDR,EAAe3M,UAAUryB,OAmB/B,SAAS53C,GAASuS,GAChB,OAAOA,EAAMzO,QAAO,SAAU0vC,EAAKqyB,GAEjC,OADAryB,EAAIqyB,IAAQ,EACLryB,IACN,IARL2kB,GAAQ8Y,QAVR,SAAkC9Y,GAChCA,EAAQ6R,qBAAuB,CAC7BtkE,SAAUA,GACV0kE,UAAWA,GACXC,aAAcA,GACdnjE,OAAQA,OAOZixD,GAAQtkE,QAnkCM,QA4kCd,IAAIwjF,GAAgBr3E,GAAS,CAC3B,MACA,OACA,eACA,WACA,aACA,aACA,aACA,qBACA,aACA,YAEA,kBACA,qBACA,0BACA,4BACA,qBAEA,aAIEs3E,GAAYt3E,GAAS,CACvB,eAEA,kBACA,qBACA,0BACA,4BACA,uBAGF,SAASu3E,GAAkB/L,GACzB,IAAK,SAASnvE,KAAKmvE,GACjB,OAAOtM,GAAYF,IAErB,IAAInmB,EAAM2yB,EAAOjkE,QAAQ,KACrBu5C,EAAO0qB,EAAOllC,UAAU,EAAGuS,GAC3B4vB,EAAQ+C,EAAOllC,UAAUuS,EAAM,GACnC,MAAO,CACLnS,OAAQ/1B,SAASmwC,EAAM,IACvBpuD,GAAI+1E,GAsBR,SAAS+O,GAAShf,EAAKif,EAAUC,GAO/B,IAAIC,EACA1M,EACA2M,EARCF,IACHA,EAAS,CACP1T,oBAAoB,IAOxB,IAAIpsB,EAAO,CAACohB,OAAQ,aAKpB,GAJIR,EAAIqS,WACNjzB,EAAKgtB,SAAU,GAGb6S,EAKF,GAJKjf,EAAIM,MACPN,EAAIM,IAAM7L,MAEZge,EAAWp4E,GAAI2lE,EAAKkf,EAAO1T,oBACvBxL,EAAIO,KAAM,CAEZ,IADA6e,EAAUL,GAAkB/e,EAAIO,OACpBrjE,MACV,OAAOkiF,EAETpf,EAAI0L,UAAY,CAAC,CACf50B,IAAKsoC,EAAQlxC,OACbywB,IAAK,CAACygB,EAAQllF,GAAI,CAACsmE,OAAQ,WAAY,CAAC,CAACiS,EAAUrzB,EAAM,QAE3D+/B,EAAUC,EAAQlxC,OAAS,OAE3B8xB,EAAI0L,UAAY,CAAC,CACf50B,IAAK,EACL6nB,IAAM,CAAC8T,EAAUrzB,EAAM,MAEzB+/B,EAAU,OAQZ,GALInf,EAAIqQ,aACNrQ,EAAI0L,UAzDV,SAAkC2T,EAAWjgC,GAM3C,IALA,IAAItI,EAAMuoC,EAAU9wE,MAAQ8wE,EAAU1gB,IAAInhE,OAAS,EAE/C8hF,EAAcD,EAAU1gB,IACxBA,EAAM,CAAC2gB,EAAY,GAAIlgC,EAAM,IAExB/oD,EAAI,EAAGkL,EAAM+9E,EAAY9hF,OAAQnH,EAAIkL,EAAKlL,IACjDsoE,EAAM,CAAC2gB,EAAYjpF,GAAI,CAACmqE,OAAQ,WAAY,CAAC7B,IAG/C,MAAO,CAAC,CACN7nB,IAAKA,EACL6nB,IAAKA,IA6Ca4gB,CAAyBvf,EAAIqQ,WAAYjxB,GACzD+/B,EAAUnf,EAAIqQ,WAAW9hE,MACzBkkE,EAAWzS,EAAIqQ,WAAW1R,IAAI,KAE3BqB,EAAI0L,UAAW,CAElB,IADA0T,EAAUL,GAAkB/e,EAAIO,OACpBrjE,MACV,OAAOkiF,EAETD,EAAUC,EAAQlxC,OAClBukC,EAAW2M,EAAQllF,GACnB8lE,EAAI0L,UAAY,CAAC,CACf50B,IAAKqoC,EACLxgB,IAAK,CAAC8T,EAAUrzB,EAAM,MAK5BooB,GAAexH,EAAIM,KAEnBN,EAAIO,KAAO4e,EAAU,IAAM1M,EAE3B,IAAInqE,EAAS,CAACsjE,SAAW,GAAIzxE,KAAO,IACpC,IAAK,IAAIvC,KAAOooE,EAEd,GAAIjpE,OAAOkB,UAAUC,eAAe1B,KAAKwpE,EAAKpoE,GAAM,CAClD,IAAI4nF,EAAwB,MAAX5nF,EAAI,GACrB,GAAI4nF,IAAeX,GAAcjnF,GAAM,CACrC,IAAIsF,EAAQwpE,GAAYN,EAAgBxuE,GAExC,MADAsF,EAAMF,QAAUopE,EAAeppE,QAAU,KAAOpF,EAC1CsF,EACGsiF,IAAeV,GAAUlnF,GAClC0Q,EAAOsjE,SAASh0E,EAAIuE,MAAM,IAAM6jE,EAAIpoE,GAEpC0Q,EAAOnO,KAAKvC,GAAOooE,EAAIpoE,GAI7B,OAAO0Q,EAaT,SAASm3E,GAAiBrY,EAAKsY,EAAUvqD,GACvC,IAAIwqD,EAXN,SAAqBxlF,GACnB,IACE,OAAO2uE,GAAS3uE,GAChB,MAAOS,GAGP,MAAO,CAACsC,MAFEwpE,GAAYR,EACpB,6CAMW0Z,CAAYxY,EAAIjtE,MAC/B,GAAIwlF,EAASziF,MACX,OAAOi4B,EAASwqD,EAASziF,OAG3BkqE,EAAI5pE,OAASmiF,EAASniF,OAEpB4pE,EAAIjtE,KADW,SAAbulF,EACS/V,GAAmBgW,EAAUvY,EAAIgM,cACtB,WAAbsM,EACE1W,GAAS2W,GAETA,EAEb3U,GAAU2U,GAAU,SAAUr3E,GAC5B8+D,EAAIyY,OAAS,OAASv3E,EACtB6sB,OAyBJ,SAAS2qD,GAAqB1Y,EAAKsY,EAAUvqD,GAC3C,GAAIiyC,EAAIE,KACN,OAAOnyC,IAEe,iBAAbiyC,EAAIjtE,KACbslF,GAAiBrY,EAAKsY,EAAUvqD,GA1BpC,SAAwBiyC,EAAKsY,EAAUvqD,GACrC61C,GAAU5D,EAAIjtE,MAAM,SAAU4lF,GAC5B3Y,EAAIyY,OAAS,OAASE,EAEtB3Y,EAAI5pE,OAAS4pE,EAAIjtE,KAAK0iB,MAAQuqD,EAAIjtE,KAAKqD,QAAU,EAChC,WAAbkiF,EACFlV,GAAmBpD,EAAIjtE,MAAM,SAAUyvE,GACrCxC,EAAIjtE,KAAOyvE,EACXz0C,OAEoB,WAAbuqD,EACThV,GAAatD,EAAIjtE,MAAM,SAAU2vE,GAC/B1C,EAAIjtE,KAAO2vE,EACX30C,OAGFA,OAYF6qD,CAAe5Y,EAAKsY,EAAUvqD,GAkDlC,SAAS8qD,GAAUC,EAAUp/B,EAAMq/B,EAASzlC,EACzBrkD,EAAGksD,EAAI69B,EAAUnB,GAElC,GAlzFF,SAAmB3S,EAAMjyE,GAOvB,IANA,IAKImiE,EALAwP,EAAUM,EAAKnwE,QACfkkF,EAAWhmF,EAAIyI,MAAM,KACrBw9E,EAAYnoE,SAASkoE,EAAS,GAAI,IAClCE,EAAWF,EAAS,GAGhB7jB,EAAOwP,EAAQ7pE,OAAQ,CAC7B,GAAIq6D,EAAK1lB,MAAQwpC,GAAa9jB,EAAKmC,IAAI,KAAO4hB,EAC5C,OAAO,EAGT,IADA,IAAIpU,EAAW3P,EAAKmC,IAAI,GACftoE,EAAI,EAAGkL,EAAM4qE,EAAS3uE,OAAQnH,EAAIkL,EAAKlL,IAC9C21E,EAAQxsE,KAAK,CAACs3C,IAAK0lB,EAAK1lB,IAAM,EAAG6nB,IAAKwN,EAAS91E,KAGnD,OAAO,EAkyFHmqF,CAAU1/B,EAAKmrB,SAAUkU,EAAQvU,SAASvxE,OAAS4kF,EAErD,OADAvkC,EAAQrkD,GAAK8pF,EACN59B,IAIT,IAAIk+B,EAAqB3/B,EAAK6qB,YAAcA,GAAW7qB,GACnD4/B,EAAoB,YAAa5/B,EAAOA,EAAKsrB,QAC/C+C,GAAUruB,EAAM2/B,GACdrU,EAAU,YAAa+T,EAAQvU,SAAWuU,EAAQvU,SAASQ,QAC7D+C,GAAUgR,EAAQvU,UAChB+U,EAAS,MAAM98E,KAAKs8E,EAAQvU,SAASvxE,KAEzC,GAAIqmF,IAAsBtU,GAAW6S,GAAY0B,EAAQ,CACvD,IAAIhY,EAASwX,EAAQhmF,KACrBwuE,EAAOpI,KAAOkgB,EACd9X,EAAOrI,IAAM6f,EAAQvU,SAAS1xE,GAC9BimF,EAAUnB,GAASrW,EAAQsW,GAG7B,IAAIjR,EAASxsC,GAAMsf,EAAKmrB,SAAUkU,EAAQvU,SAASK,SAAS,GAAIiU,GAOhE,GALiBjB,IACdyB,GAAqBtU,GAAgC,aAArB4B,EAAOjB,YACtC2T,GAA0C,aAArB1S,EAAOjB,WAC7B2T,IAAsBtU,GAAgC,eAArB4B,EAAOjB,WAE3B,CACd,IAAIhwE,EAAM2pE,GAAYb,GAEtB,OADAnrB,EAAQrkD,GAAK0G,EACNwlD,IAGT,IAAIq+B,EAAST,EAAQvU,SAASvxE,IAC9B8lF,EAAQvU,SAASK,SAAW+B,EAAO9B,KACnCiU,EAAQpR,YAAcf,EAAOe,aAAe,GAExCjuB,EAAK+/B,UACPV,EAAQvU,SAASiV,QAAU//B,EAAK+/B,SAIlC,IAAIC,EAAgBnV,GAAWwU,EAAQvU,UACnCmV,EAAsB5R,GAAUgR,EAAQvU,SAAUkV,GAIlDE,EAASN,IAAsBK,EAAuB,EACxDL,EAAoBK,GAAuB,EAAI,EAWjDX,EAASD,EAASW,EAAeC,EAR7BH,IAAWE,EAEKC,EAGA5R,GAAUgR,EAAQvU,SAAUgV,IAI9C,EAAMI,EAAO3qF,EAAGksD,GAOpB,SAAS0+B,GAAYf,EAAUgB,EAAUjO,EAAKkO,EAAaC,EAAI1mC,EAC1C0lC,EAAUhhC,EAAMiiC,GAGnCnB,EAAWA,GAAY,IA0BvB,IAAIjB,EAAW7/B,EAAKwzB,UAChB0O,EAAY,IAAI1gB,EAEhB2gB,EAAW,EACXC,EAAWN,EAAS1jF,OAExB,SAASikF,MACDF,IAAaC,GAAYH,GAC7BA,IAIJH,EAASpyE,SAAQ,SAAU4yE,EAAYC,GAErC,GAAID,EAAWphB,KAAO8O,GAAUsS,EAAWphB,KAA3C,CACE,IAAI1qB,EAAM8rC,EAAWrP,SAAW,eAAiB,YACjDY,EAAIr9B,GAAK8rC,EAAY,CAACjpF,IAAK2oF,IAAK,SAAUrkF,EAAKsL,GAC7CqyC,EAAQinC,GAAc5kF,GAAOsL,EAC7Bo5E,WAJJ,CASA,IAAIvnF,EAAKwnF,EAAW9V,SAAS1xE,GACzBonF,EAAU5+E,IAAIxI,IAChBsnF,IACAF,EAAUpqF,IAAIgD,GAAIsF,KAAK,CAACkiF,EAAYC,KAEpCL,EAAUzgF,IAAI3G,EAAI,CAAC,CAACwnF,EAAYC,SAMpCL,EAAUxyE,SAAQ,SAAUo0D,EAAMhpE,GAChC,IAAImpE,EAAU,EAEd,SAASue,MACDve,EAAUH,EAAK1lE,OACnBqkF,IAEAJ,IAGJ,SAASI,IACP,IAAIvqF,EAAQ4rE,EAAKG,GACbqe,EAAapqF,EAAM,GACnBqqF,EAAarqF,EAAM,GAEvB,GAAI6pF,EAAYz+E,IAAIxI,GAClB+lF,GAAUC,EAAUiB,EAAYjqF,IAAIgD,GAAKwnF,EAAYhnC,EACnDinC,EAAYC,EAAYxB,EAAUnB,OAC/B,CAEL,IAAIjR,EAASxsC,GAAM,GAAIkgD,EAAW9V,SAASK,SAAS,GAAIiU,GACxDwB,EAAW9V,SAASK,SAAW+B,EAAO9B,KACtCwV,EAAW3S,YAAcf,EAAOe,aAAe,GAhFrD,SAAmBoR,EAASwB,EAAYxsD,GAEtC,IAAI2rD,EAAgBnV,GAAWwU,EAAQvU,UACnCQ,EAAU+C,GAAUgR,EAAQvU,SAAUkV,GAC1C,GAAI,eAAgB1hC,GAAQgtB,EAE1B,OADA1xB,EAAQinC,GAAcjb,GAAYd,EAAa,WACxCzwC,IAMT,GAFiB8pD,GApBrB,SAAuBkB,GACrB,MAAsD,YAA/CA,EAAQvU,SAASK,SAAS,GAAGtN,IAAI,GAAG6B,OAmBZshB,CAAc3B,GAE3B,CACd,IAAIpjF,EAAM2pE,GAAYb,GAEtB,OADAnrB,EAAQinC,GAAc5kF,EACfo4B,IAKTirD,EAASD,EAASW,EAAe1U,EAASA,GAAS,EAFvCA,EAAU,EAAI,EAGjBuV,EAAYxsD,GA4DjB4sD,CAAUL,EAAYC,EAAYC,IAGtCC,OAMJ,IAKIG,GAAY,iBAYZC,GAAa,aAkBjB,SAASC,GAAkBC,GACzB,IACE,OAAOnrC,KAAK4H,UAAUujC,GACtB,MAAOvnF,GAEP,OAAO,IAASgkD,UAAUujC,IAI9B,SAASC,GAASjtD,GAChB,OAAO,SAAUktD,GACf,IAAIrlF,EAAU,gBACVqlF,EAAI3oF,QAAU2oF,EAAI3oF,OAAOwD,QAC3BF,EAAUqlF,EAAI3oF,OAAOwD,MAAMtG,MAAQyrF,EAAI3oF,OAAOwD,MAAMF,SAEtDm4B,EAASuxC,GAAYH,GAAWvpE,EAASqlF,EAAI1pF,QAWjD,SAAS2pF,GAAe1W,EAAUD,EAAYS,GAC5C,MAAO,CACLjyE,KAAM+nF,GAAkBtW,GACxBD,WAAYA,EACZ4W,eAAgBnW,EAAU,IAAM,IAChClH,IAAK0G,EAAS1G,IACdhrE,GAAI0xE,EAAS1xE,IAIjB,SAASsoF,GAAeC,GACtB,IAAKA,EACH,OAAO,KAET,IAAI7W,EApDN,SAAuBltB,GAIrB,IACE,OAAO1H,KAAKC,MAAMyH,GAClB,MAAO9jD,GAEP,OAAO,IAASq8C,MAAMyH,IA4CTgkC,CAAcD,EAAatoF,MAI1C,OAHAyxE,EAASD,WAAa8W,EAAa9W,WACnCC,EAASQ,QAA0C,MAAhCqW,EAAaF,eAChC3W,EAAS1G,IAAMud,EAAavd,IACrB0G,EAKT,SAAS+W,GAAU3iB,GACjB,IAAKA,EACH,OAAOA,EAET,IAAI3f,EAAM2f,EAAI4iB,YAAYx3E,YAAY,KAItC,OAHA40D,EAAIM,IAAMN,EAAI4iB,YAAY90C,UAAU,EAAGuS,EAAM,GAC7C2f,EAAIO,KAAOP,EAAI4iB,YAAY90C,UAAUuS,EAAM,UACpC2f,EAAI4iB,YACJ5iB,EAMT,SAAS6iB,GAAaC,EAAMnqF,EAAMoqF,EAAQ5tD,GACpC4tD,EAIA5tD,EAHG2tD,EAEsB,iBAATA,EACPA,EAEAjZ,GAAaiZ,EAAMnqF,GAJnBuwE,GAAW,CAAC,IAAK,CAACvwE,KAAMA,KAO9BmqF,EAEsB,iBAATA,EAChB/Y,GAAmB+Y,GAAM,SAAUzY,GACjCl1C,EAAS6zC,GAASqB,OAGpBl1C,EAAS2tD,GANT3tD,EAAS,IAWf,SAAS6tD,GAA4BhjB,EAAK5gB,EAAM6jC,EAAK1gC,GACnD,IAAI4kB,EAAcpwE,OAAOwL,KAAKy9D,EAAIqH,cAAgB,IAClD,IAAKF,EAAY3pE,OACf,OAAO+kD,GAAMA,IAEf,IAAI8gB,EAAU,EAEd,SAASE,MACDF,IAAY8D,EAAY3pE,QAAU+kD,GACtCA,IAcJ4kB,EAAYr4D,SAAQ,SAAUs4D,GACxBhoB,EAAK+nB,aAAe/nB,EAAK0gB,aAX/B,SAAyBE,EAAKoH,GAC5B,IAAI8b,EAASljB,EAAIqH,aAAaD,GAC1ByY,EAASqD,EAAOrD,OACVoD,EAAIE,YA9HC,gBA8HyBjsF,IAAI2oF,GACxCuD,UAAY,SAAUxoF,GACxBsoF,EAAOJ,KAAOloF,EAAElB,OAAO4O,OAAOw6E,KAC9Bvf,KAMA8f,CAAgBrjB,EAAKoH,IAErBpH,EAAIqH,aAAaD,GAAKE,MAAO,EAC7B/D,QASN,SAAS+f,GAAuB5oC,EAASqoC,GACvC,OAAOliE,QAAQk5C,IAAIrf,EAAQvrC,KAAI,SAAU4wD,GACvC,GAAIA,EAAIC,KAAOD,EAAIC,IAAIqH,aAAc,CACnC,IAAIkc,EAAWxsF,OAAOwL,KAAKw9D,EAAIC,IAAIqH,cACnC,OAAOxmD,QAAQk5C,IAAIwpB,EAASp0E,KAAI,SAAUi4D,GACxC,IAAI8b,EAASnjB,EAAIC,IAAIqH,aAAaD,GAClC,GAAM,SAAU8b,EAAhB,CAGA,IAAIJ,EAAOI,EAAOJ,KACdnqF,EAAOuqF,EAAO9P,aAClB,OAAO,IAAIvyD,SAAQ,SAAUqZ,GAC3B2oD,GAAaC,EAAMnqF,EAAMoqF,GAAQ,SAAU5oF,GACzC4lE,EAAIC,IAAIqH,aAAaD,GAAO7B,EAC1BznD,EAAKolE,EAAQ,CAAC,SAAU,iBACxB,CAAC/oF,KAAMA,IAET+/B,oBAQZ,SAASspD,GAAYlX,EAAM1I,EAAOqf,GAEhC,IAAIQ,EAA0B,GAC1BC,EAAWT,EAAIE,YAjLF,eAkLbQ,EAAWV,EAAIE,YAhLF,gBAiLbS,EAAiBX,EAAIE,YA9KA,oBA+KrBtjF,EAAQysE,EAAK9uE,OAEjB,SAAS+lE,MACP1jE,GAMF,WACE,IAAK4jF,EAAwBjmF,OAC3B,OAEFimF,EAAwB30E,SAAQ,SAAU+wE,GACzB+D,EAAe1hF,MAAM,aAAarC,MAC/CgkF,YAAYttB,MACVspB,EAAS,KAAMA,EAAS,OAAY,GAAO,IACtCuD,UAAY,SAAUxoF,GACjBA,EAAElB,OAAO4O,QAGnBq7E,EAAStiB,OAAOwe,OAhBpBiE,GAsBJxX,EAAKx9D,SAAQ,SAAUkkE,GACrB,IAAI9wE,EAAQwhF,EAASxhF,MAAM,eACvBtK,EAAMgsE,EAAQ,KAAOoP,EACzB9wE,EAAMi3E,OAAOvhF,GAAKwrF,UAAY,SAAUxoF,GACtC,IAAIsqE,EAAMtqE,EAAElB,OAAO4O,OACnB,GAAmB,iBAAR48D,EACT,OAAO3B,IAETmgB,EAASriB,OAAO6D,GAEH0e,EAAe1hF,MAAM,OAC/B6hF,WAAWF,YAAYG,KAAK9e,IAExBke,UAAY,SAAUjyB,GAC3B,IAAI8yB,EAAS9yB,EAAMz3D,OAAO4O,OAC1B,GAAI27E,EAAQ,CACV,IAAIpE,EAASoE,EAAO3sF,MAAM4sF,UAAUphF,MAAM,MAAM,GAChD2gF,EAAwBjkF,KAAKqgF,GAC7B+D,EAAeviB,OAAO4iB,EAAOE,YAC7BF,EAAOG,gBAEP7gB,SAOV,SAAS8gB,GAAsBC,EAAKC,EAAQ/sF,GAC1C,IACE,MAAO,CACLyrF,IAAKqB,EAAIE,YAAYD,EAAQ/sF,IAE/B,MAAOuF,GACP,MAAO,CACLG,MAAOH,IAKb,IAAIqhF,GAAiB,IAAI7Z,EAEzB,SAASkgB,GAAYvF,EAAQpY,EAAK1nB,EAAM6zB,EAAKqR,EAAKnvD,GAWhD,IAVA,IACI8tD,EACAyB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EARA9D,EAAWpa,EAAI5D,KAUV7sE,EAAI,EAAGkL,EAAM2/E,EAAS1jF,OAAQnH,EAAIkL,EAAKlL,IAAK,CACnD,IAAI2pE,EAAMkhB,EAAS7qF,GACf2pE,EAAIM,KAAO8O,GAAUpP,EAAIM,OAG7BN,EAAMkhB,EAAS7qF,GAAK2oF,GAAShf,EAAK5gB,EAAKwzB,UAAWsM,IAC1ChiF,QAAU6nF,IAChBA,EAAe/kB,GAInB,GAAI+kB,EACF,OAAO5vD,EAAS4vD,GAGlB,IAAIE,GAAmB,EACnBC,EAAgB,EAChBxqC,EAAU,IAAIt+C,MAAM8kF,EAAS1jF,QAC7B2jF,EAAc,IAAIvgB,EAClBukB,GAAsB,EACtBzF,EAAWzM,EAAImS,MAAMC,YAAc,OAAS,SA6ChD,SAASC,IACPL,GAAmB,EACnBM,IAQF,SAASA,IACFP,GAAYC,IAKjBD,EAAQQ,UAAYN,EACpBJ,EAAUzkB,IAAI2kB,IAqChB,SAAS1V,IACH6V,IAIJ/G,GAAejmB,OAAO8a,EAAImS,MAAMxuF,MAChCu+B,EAAS,KAAMulB,IAsDjB,SAAS0lC,EAASD,EAASW,EAAeC,EAAqB0E,EAC7CC,EAAU1E,EAAOW,EAAYxsD,GAE7CgrD,EAAQvU,SAASD,WAAamV,EAC9BX,EAAQvU,SAASQ,QAAU2U,EAE3B,IAAI/gB,EAAMmgB,EAAQhmF,KAUlB,GATA6lE,EAAIM,IAAM6f,EAAQvU,SAAS1xE,GAC3B8lE,EAAIO,KAAO4f,EAAQvU,SAASvxE,IAExBorF,IACFzlB,EAAIqS,UAAW,GAGIrS,EAAIqH,cACvBtwE,OAAOwL,KAAKy9D,EAAIqH,cAAc7pE,OAE9B,OAqEJ,SAA0B2iF,EAASW,EAAeC,EACxB2E,EAAU/D,EAAYxsD,GAG9C,IAAI6qC,EAAMmgB,EAAQhmF,KAEdkpE,EAAU,EACV8D,EAAcpwE,OAAOwL,KAAKy9D,EAAIqH,cAElC,SAASse,IACHtiB,IAAY8D,EAAY3pE,QAC1BooF,EAAUzF,EAASW,EAAeC,EAChC2E,EAAU/D,EAAYxsD,GAI5B,SAAS0wD,IACPxiB,IACAsiB,IAGFxe,EAAYr4D,SAAQ,SAAUlX,GAC5B,IAAIwvE,EAAM+Y,EAAQhmF,KAAKktE,aAAazvE,GACpC,GAAKwvE,EAAIE,KAOPjE,IACAsiB,QARa,CACb,IAAIxrF,EAAOitE,EAAIjtE,YACRitE,EAAIjtE,KACXitE,EAAIiM,OAASl7D,SAAS2oE,EAAe,IAiD3C,SAAwBjB,EAAQ1lF,EAAMg7B,GAGpByvD,EAAY/kF,MAAMggF,GACxBuD,UAAY,SAAUxoF,GAE9B,GADYA,EAAElB,OAAO4O,OAEnB,OAAO6sB,IAET,IAAI2wD,EAAS,CACXjG,OAAQA,EACRiD,KAAM3oF,GAEKyqF,EAAYvkB,IAAIylB,GACtB1C,UAAYjuD,GA7DjB4wD,CADa3e,EAAIyY,OACM1lF,EAAM0rF,OAjGxBG,CAAiB7F,EAASW,EAAeC,EAC9C2E,EAAU/D,EAAYxsD,GAG1B+vD,GAAiBlE,EACjBuE,IAEAK,EAAUzF,EAASW,EAAeC,EAChC2E,EAAU/D,EAAYxsD,GAG1B,SAASywD,EAAUzF,EAASW,EAAeC,EACxB2E,EAAU/D,EAAYxsD,GAEvC,IAAI6qC,EAAMmgB,EAAQhmF,KACdyxE,EAAWuU,EAAQvU,SAMvB,SAASqa,EAAYrrF,GACnB,IAAIsrF,EAAe/F,EAAQpR,aAAe,GAEtC2W,GAAYzS,EAAIxC,kBAClByV,EAAeA,EAAa/nF,OAptHpC,SAAqBytE,GACnB,IAAIU,EAAO,GAQX,OAPAD,GAAgBT,EAASK,UAAU,SAAUU,EAAQ71B,EACRk4B,EAASv2E,EAAK2mD,GACrC,cAAhBA,EAAKohB,QAA2BmM,IAClCL,EAAK9sE,KAAKs3C,EAAM,IAAMk4B,GACtB5vB,EAAKohB,OAAS,cAGX8L,EA2sHkC6Z,CAAYhG,EAAQvU,YAGrDsa,GAAgBA,EAAa1oF,QAC/BgmF,GAAY0C,EAAc/F,EAAQvU,SAAS1xE,GAAI+oF,GAGjDrX,EAAS1G,IAAMtqE,EAAElB,OAAO4O,OAGxB,IAAI89E,EAAkB9D,GAAe1W,EAAUkV,EAC7CC,GACgB2D,EAASrkB,IAAI+lB,GACnBhD,UAAYiD,EAe1B,SAASA,IACP3rC,EAAQinC,GAAc,CACpBpkF,IAAI,EACJrD,GAAI0xE,EAAS1xE,GACbG,IAAKuxE,EAASvxE,KAEhB8mF,EAAYtgF,IAAIs/E,EAAQvU,SAAS1xE,GAAIimF,EAAQvU,UAgDjD,SAAkCuU,EAASjb,EAAK/vC,GAE9C,IAAImxD,EAAY,EACZC,EAAYxvF,OAAOwL,KAAK49E,EAAQhmF,KAAKktE,cAAgB,IAEzD,IAAKkf,EAAU/oF,OACb,OAAO23B,IAGT,SAASouC,MACD+iB,IAAcC,EAAU/oF,QAC5B23B,IAIJ,SAAS5R,EAAI6jD,GACX,IAAIyY,EAASM,EAAQhmF,KAAKktE,aAAaD,GAAKyY,OACxC/Y,EAAM+d,EAAkBxkB,IAAI,CAC9B6E,IAAKA,EACLgf,UAAWrE,EAAS,KAAO3a,IAG7B4B,EAAIsc,UAAY7f,EAChBuD,EAAI0f,QAAU,SAAU5rF,GAItBA,EAAE6rF,iBACF7rF,EAAE8rF,kBACFnjB,KAGJ,IAAK,IAAIltE,EAAI,EAAGA,EAAIkwF,EAAU/oF,OAAQnH,IACpCktB,EAAIgjE,EAAUlwF,IAhFdswF,CAAyBxG,EAASvU,EAAS1G,IAAK/vC,GA3ClD6qC,EAAI4iB,YAAchX,EAAS1xE,GAAK,KAAO0xE,EAASvxE,WACzC2lE,EAAIM,WACJN,EAAIO,KA4CX,IAAIqmB,EAASjC,EAAWtkB,IAAIL,GAE5B4mB,EAAOxD,UAAY6C,EACnBW,EAAOJ,QAzBP,SAA0B5rF,GAExBA,EAAE6rF,iBACF7rF,EAAE8rF,kBACU/B,EAAWziF,MAAM,eACPi3E,OAAOnZ,EAAI4iB,aACvBQ,UAAY,SAAUxoF,GACjB+pF,EAAWtkB,IAAIL,EAAKplE,EAAElB,OAAO4O,QACnC86E,UAAY6C,KArtB3B,SAA+B/E,EAAUxB,EAAUvqD,GAEjD,IAAK+rD,EAAS1jF,OACZ,OAAO23B,IAGT,IACI0xD,EADAC,EAAO,EA4BX,SAAS74E,IACP64E,IACI5F,EAAS1jF,SAAWspF,IAClBD,EACF1xD,EAAS0xD,GAET1xD,KA/BN+rD,EAASpyE,SAAQ,SAAUqxE,GACzB,IAAIhZ,EAAcgZ,EAAQhmF,MAAQgmF,EAAQhmF,KAAKktE,aAC7CtwE,OAAOwL,KAAK49E,EAAQhmF,KAAKktE,cAAgB,GACvC0f,EAAO,EAEX,IAAK5f,EAAY3pE,OACf,OAAOyQ,IAGT,SAAS+4E,EAAoBjqF,GAC3B8pF,EAAa9pF,IACbgqF,IACa5f,EAAY3pE,QACvByQ,IAIJ,IAAK,IAAIrW,KAAOuoF,EAAQhmF,KAAKktE,aACvB8Y,EAAQhmF,KAAKktE,aAAanvE,eAAeN,IAC3CkoF,GAAqBK,EAAQhmF,KAAKktE,aAAazvE,GAC7C8nF,EAAUsH,MAydlBC,CAAsB/F,EAAUxB,GAAU,SAAU3iF,GAClD,GAAIA,EACF,OAAOo4B,EAASp4B,IAKpB,WAEE,IAMImqF,EAAY7C,GAAsBC,EANzB,CACXtC,GApSa,cAEA,eASD,cANS,mBAkSrBC,IAEiD,aACnD,GAAIiF,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,QAE5B+lF,EAAMiE,EAAUjE,KACZkE,QAAU/E,GAASjtD,GACvB8tD,EAAImE,UAAYhF,GAASjtD,GACzB8tD,EAAIoE,WAAa/X,EACjBoV,EAAWzB,EAAIE,YAAYnB,IAC3B2C,EAAa1B,EAAIE,YAlTF,eAmTfyB,EAAc3B,EAAIE,YAjTH,gBAkTf0B,EAAoB5B,EAAIE,YA/SD,qBAgTvB2B,EAAY7B,EAAIE,YAAYlB,KAElB/qF,IAAI+qF,IAAYmB,UAAY,SAAUxoF,GAC9CoqF,EAAUpqF,EAAElB,OAAO4O,OACnBi9E,KA2FJ,SAA2B+B,GAGzB,IAAIC,EAAU,GAWd,GAVArG,EAASpyE,SAAQ,SAAUqxE,GACrBA,EAAQhmF,MAAQgmF,EAAQhmF,KAAKktE,cAC/BtwE,OAAOwL,KAAK49E,EAAQhmF,KAAKktE,cAAcv4D,SAAQ,SAAU04E,GACvD,IAAIpgB,EAAM+Y,EAAQhmF,KAAKktE,aAAamgB,GAChCpgB,EAAIE,MACNigB,EAAQ/nF,KAAK4nE,EAAIyY,eAKpB0H,EAAQ/pF,OACX,OAAO8pF,IAET,IACIvqF,EADAsmE,EAAU,EAQdkkB,EAAQz4E,SAAQ,SAAU+wE,IAzC5B,SAA0BA,EAAQ1qD,GAEtByvD,EAAY1tF,IAAI2oF,GACtBuD,UAAY,SAAUxoF,GACxB,GAAKA,EAAElB,OAAO4O,OAOZ6sB,QAPoB,CACpB,IAAIp4B,EAAM2pE,GAAYD,GACpB,uCACAoZ,GACF9iF,EAAIyjE,OAAS,IACbrrC,EAASp4B,KAiCX0qF,CAAiB5H,GAAQ,SAAU6H,GAC7BA,IAAW3qF,IACbA,EAAM2qF,KAPJrkB,IAAYkkB,EAAQ/pF,QACxB8pF,EAAOvqF,SA9GX4qF,EAAkB,SAAU5qF,GAC1B,GAAIA,EAEF,OADAooF,GAAsB,EACfhwD,EAASp4B,IA0BtB,WAEE,IAAKmkF,EAAS1jF,OACZ,OAGF,IAAIoqF,EAAa,EAEjB,SAASrkB,MACDqkB,IAAe1G,EAAS1jF,QAvBhCyjF,GAAY/B,EAAO2I,WAAY3G,EAAUjO,EAAKkO,EAClC8B,EAAKvoC,EAAS0lC,EAAUhhC,EAAMkmC,GA2B1C,SAASwC,EAAa32B,GACpB,IAAIya,EAAW4W,GAAerxB,EAAMz3D,OAAO4O,QAEvCsjE,GACFuV,EAAYtgF,IAAI+qE,EAAS1xE,GAAI0xE,GAE/BrI,IAGF,IAAK,IAAIltE,EAAI,EAAGkL,EAAM2/E,EAAS1jF,OAAQnH,EAAIkL,EAAKlL,IAAK,CACnD,IAAI8pF,EAAUe,EAAS7qF,GACvB,GAAI8pF,EAAQ7f,KAAO8O,GAAU+Q,EAAQ7f,KACnCiD,SAGQmhB,EAASxtF,IAAIipF,EAAQvU,SAAS1xE,IACpCkpF,UAAY0E,GAtDhBC,MAnCFC,MAiVJ,SAASC,GAAiB9E,EAAa+E,EAAUpW,EAAYqW,EAAWC,GAWtE,IAIIC,EACAC,EACAC,EAEJ,SAASC,EAAS5tF,GAChB0tF,EAAc1tF,EAAElB,OAAO4O,OACnB+/E,GACFD,EAAQC,EAAWC,EAAaC,GAIpC,SAASE,EAAa7tF,GACpBytF,EAAYztF,EAAElB,OAAO4O,OACjBggF,GACFF,EAAQC,EAAWC,EAAaC,GA8BpC,SAASG,EAAS9tF,GAChB,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OACtB,IAAK27E,EACH,OAAOmE,IAGTA,EAAQ,CAACnE,EAAOrsF,KAAM,CAACqsF,EAAO3sF,OAAQ2sF,IA/DrB,IAAfkE,IACFA,EAAY,KAQgC,mBAAvBhF,EAAYwF,QACC,mBAA3BxF,EAAY57D,YACnB4gE,EAAY,IAAMrW,GAwDlByW,EAAe,CAAC,SApClB,WACE,IAAKF,EAAU7qF,OACb,OAAO4qF,IAGT,IACIQ,EADAC,EAAUR,EAAUA,EAAU7qF,OAAS,GAE3C,GAAI0qF,GAAYA,EAAS1iE,MACvB,IACEojE,EAAc/E,YAAYttB,MAAMsyB,EAASX,EAAS1iE,OAChD,EAAM0iE,EAASY,WACjB,MAAOluF,GACP,GAAe,cAAXA,EAAEhE,MAAmC,IAAXgE,EAAEmuF,KAC9B,OAAOX,SAIXQ,EAAc/E,YAAYmF,WAAWH,GAAS,GAEhDX,EAAWU,EACXP,EAAY,KACZC,EAAc,KACdnF,EAAYwF,OAAOT,EAAUC,GAAW/E,UAAYoF,EACpDrF,EAAY57D,WAAW2gE,EAAUC,GAAW/E,UAAYqF,IAcxDtF,EAAYwF,OAAOT,EAAUC,GAAW/E,UAAYoF,EACpDrF,EAAY57D,WAAW2gE,EAAUC,GAAW/E,UAAYqF,GAC/C3W,EACTqR,EAAYY,WAAWmE,EAAU,QAAQ9E,UAAYsF,EAErDvF,EAAYY,WAAWmE,GAAU9E,UAAYsF,EA+EjD,SAASO,GAAW7pC,EAAMklC,EAAKnvD,GAC7B,IAQI+yD,EACAgB,EATA36E,EAAQ,aAAc6wC,GAAOA,EAAK82B,SAClCxmE,EAAM,WAAY0vC,GAAOA,EAAKg3B,OAC9Bx+E,EAAM,QAASwnD,GAAOA,EAAKxnD,IAC3B2K,EAAO,SAAU68C,GAAOA,EAAK78C,KAC7B8iB,EAAO+5B,EAAK/5B,MAAQ,EACpB4hB,EAA8B,iBAAfmY,EAAKnY,MAAqBmY,EAAKnY,OAAS,EACvDkiD,GAAsC,IAAvB/pC,EAAKgqC,cAIxB,IAAK7mF,IAEH2mF,GADAhB,EAzCJ,SAAwB35E,EAAOmB,EAAKy5E,EAAcvxF,EAAKk6E,GACrD,IACE,GAAIvjE,GAASmB,EACX,OAAIoiE,EACK+R,YAAYttB,MAAM7mD,EAAKnB,GAAQ46E,GAAc,GAE7CtF,YAAYttB,MAAMhoD,EAAOmB,GAAK,GAAQy5E,GAE1C,GAAI56E,EACT,OAAIujE,EACK+R,YAAYwF,WAAW96E,GAEvBs1E,YAAYmF,WAAWz6E,GAE3B,GAAImB,EACT,OAAIoiE,EACK+R,YAAYmF,WAAWt5E,GAAMy5E,GAE7BtF,YAAYwF,WAAW35E,GAAMy5E,GAEjC,GAAIvxF,EACT,OAAOisF,YAAYG,KAAKpsF,GAE1B,MAAOgD,GACP,MAAO,CAACsC,MAAOtC,GAEjB,OAAO,KAeM0uF,CAAe/6E,EAAOmB,EAAKy5E,EAAcvxF,EAAKwnD,EAAK0yB,cAClCoW,EAAShrF,SAEV,cAAvBgsF,EAActyF,MAA+C,IAAvBsyF,EAAcH,MAGtD,OAAO5zD,EAASuxC,GAAYH,GAC1B2iB,EAActyF,KAAMsyF,EAAclsF,UAIxC,IAAIunF,EAAS,CAACvC,GAhyBG,cAgyBsBC,IAEnC7iC,EAAK+nB,aACPod,EAAO/kF,KAjyBQ,gBAmyBjB,IAAI0nF,EAAY7C,GAAsBC,EAAKC,EAAQ,YACnD,GAAI2C,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAE5B,IAAI+lF,EAAMiE,EAAUjE,IACpBA,EAAIoE,WAgIJ,WACMjoC,EAAK+nB,YACPmc,GAAuB5oC,EAAS0E,EAAKirB,QAAQ5vB,KAAK8uC,GAElDA,KAnIJtG,EAAIkE,QAAU/E,GAASjtD,GACvB,IAKIqwD,EACAgE,EAekCp1B,EArBlCswB,EAAWzB,EAAIE,YAAYnB,IAC3B0B,EAAWT,EAAIE,YA7yBF,eA8yBb2B,EAAY7B,EAAIE,YAAYlB,IAC5BwH,EAAgB/F,EAASxhF,MAAM,eAC/Bw4C,EAAU,GAiDd,SAASgvC,EAAa5I,EAAelV,GACnC,IAAI7L,EAAM,CACR7lE,GAAI0xE,EAAS1xE,GACbtC,IAAKg0E,EAAS1xE,GACd5C,MAAO,CACL+C,IAAKymF,IAGKlV,EAASQ,QAEjB7pE,IACFm4C,EAAQl7C,KAAKugE,GAEbA,EAAIzoE,MAAM80E,SAAU,EACpBrM,EAAIC,IAAM,MAEH36C,KAAU,IACnBq1B,EAAQl7C,KAAKugE,GACT3gB,EAAK0gB,cAhCb,SAAgC8L,EAAU7L,EAAK+gB,GAC7C,IAAIlpF,EAAMg0E,EAAS1xE,GAAK,KAAO4mF,EAC/B2I,EAAcvyF,IAAIU,GAAKwrF,UAAa,SAAkBxoF,GAEpD,GADAmlE,EAAIC,IAAM2iB,GAAU/nF,EAAElB,OAAO4O,SAAW,GACpC82C,EAAK2tB,UAAW,CAClB,IAAIA,EAAYF,GAAiBjB,GAC7BmB,EAAUvvE,SACZuiE,EAAIC,IAAI+P,WAAahD,GAGzBiW,GAA4BjjB,EAAIC,IAAK5gB,EAAM6jC,IAuBzC0G,CAAuB/d,EAAU7L,EAAK+gB,IAK5C,SAAS3c,EAAaylB,GACpB,IAAK,IAAIvzF,EAAI,EAAGkL,EAAMqoF,EAAYpsF,OAAQnH,EAAIkL,GACxCm5C,EAAQl9C,SAAWypC,EAD0B5wC,IAAK,CAItD,IAAIwzF,EAAaD,EAAYvzF,GAC7B,GAAIwzF,EAAW3sF,OAASqF,EAEtBm4C,EAAQl7C,KAAKqqF,OAFf,CAKA,IAAIje,EAAW4W,GAAeqH,GAE9BH,EADoB9d,EAASD,WACDC,KAIhC,SAASwc,EAAQ0B,EAAWF,EAAa3F,GAClCA,IAGL9f,EAAaylB,GACTlvC,EAAQl9C,OAASypC,GACnBg9C,EAAOG,YAYX,SAASmF,IACP,IAAIQ,EAAY,CACdC,WAAYxE,EACZv4E,OAAQmyC,EAAK/5B,KACbq3C,KAAMhiB,GAIJ0E,EAAK6yB,iBAA4Br4E,IAAd4vF,IACrBO,EAAU9X,WAAauX,GAEzBr0D,EAAS,KAAM40D,GAYjB,OA/HAjF,EAAU5tF,IAAI+qF,IAAYmB,UAAY,SAAUxoF,GAC9C4qF,EAAW5qF,EAAElB,OAAO4O,OAAOk9E,UAIzBpmC,EAAK6yB,aAQ6B7d,EAPV,SAAUx5D,GAC9BA,EAAElB,OAAO4O,QAAU1N,EAAElB,OAAO4O,OAAO9K,OAAS,IAC9CgsF,EAAY5uF,EAAElB,OAAO4O,OAAO,KAFhBo7E,EAoBJK,WAAW,KAAM,QAAQX,UAZrC,SAAkBxoF,GAChB,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OAClB2hF,OAASrwF,EAIb,OAHIqqF,GAAUA,EAAOrsF,MACnBqyF,EAAShG,EAAOrsF,KAEXw8D,EAAU,CACf16D,OAAQ,CACN4O,OAAQ,CAAC2hF,QAyGbf,GAA2B,IAAVjiD,OAArB,EAGI1kC,EA7NN,SAAqBA,EAAMmiF,EAAU0D,GAEnC,IAAIE,EAAc,IAAIlsF,MAAMmG,EAAK/E,QAC7BqC,EAAQ,EACZ0C,EAAKuM,SAAQ,SAAUlX,EAAKsK,GAC1BwiF,EAASxtF,IAAIU,GAAKwrF,UAAY,SAAUjyB,GAClCA,EAAMz3D,OAAO4O,OACfggF,EAAYpmF,GAASivD,EAAMz3D,OAAO4O,OAElCggF,EAAYpmF,GAAS,CAACtK,IAAKA,EAAKsF,MAAO,eAEzC2C,IACc0C,EAAK/E,QACjB4qF,EAAQ7lF,EAAM+lF,EAAa,QAiNxB4B,CAAY9qC,EAAK78C,KAAMmiF,EAAU0D,IAE3B,IAAXnhD,EA1PN,SAAgBk8C,EAAa+E,EAAU9zB,GACrC,GAAkC,mBAAvB+uB,EAAYwF,OAAvB,CAMA,IAAI59E,EAAS,GAgBbo4E,EAAYY,WAAWmE,GAAU9E,UAdjC,SAAkBxoF,GAChB,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OAClB27E,GACFl5E,EAAOvL,KAAKykF,EAAO3sF,OACnB2sF,EAAOG,YAEPhwB,EAAU,CACR16D,OAAQ,CACN4O,OAAQyC,WAddo4E,EAAYwF,OAAOT,GAAU9E,UAAYhvB,EAwPlCu0B,CAAOjE,EAAUwD,GAtC1B,SAAkBttF,GAChB,IAAImQ,EAASnQ,EAAElB,OAAO4O,OAClB82C,EAAK0yB,aACP/mE,EAASA,EAAOqE,WAElB+0D,EAAap5D,WAqCfk9E,GAAiBvD,EAAUwD,EAAU9oC,EAAK0yB,WAAY7qC,EAAQ5hB,EAAM+iE,GAkDtE,IAAI+B,IAAU,EACVxjF,GAAQ,GAaZ,SAASyjF,MACHD,IAAYxjF,GAAMnJ,SAGtB2sF,IAAU,EACVxjF,GAAM1E,OAAN0E,IAgBF,SAAS8sC,GAAQ2L,EAAM6zB,EAAKnO,EAAQwf,GAGlC,IAFAllC,EAAO7jB,EAAM6jB,IAEJsyB,WAAY,CACnB,IAAIx3E,EAAK4qE,EAAS,IAAMrQ,KAGxB,OAFA2pB,GAAe38E,YAAYqjE,EAAQ5qE,EAAI+4E,EAAK7zB,GAC5Cg/B,GAAejmB,OAAO2M,GACf,CACL5lC,OAAQ,WACNk/C,GAAep+E,eAAe8kE,EAAQ5qE,KAK5C,IAAImwF,EAASjrC,EAAKi/B,SAAW,IAAI1d,EAAYvhB,EAAKi/B,SAElDj/B,EAAK+lB,MAAQ/lB,EAAK+lB,OAAS,EAC3B,IAAIsK,EAAUrwB,EAAK+lB,MAEfl+B,EAAQ,UAAWmY,EAAOA,EAAKnY,OAAS,EAC9B,IAAVA,IACFA,EAAQ,GAGV,IAKIg8C,EACA0B,EACAD,EACA+E,EARA/uC,EAAU,GACV4vC,EAAa,EACb57E,EAASm4D,GAAaznB,GACtBmrC,EAAmB,IAAI3pB,EA0F3B,SAAS4pB,EAAcxqB,EAAKkF,EAAK0G,EAAUrpB,GACzC,GAAIqpB,EAAS1G,MAAQA,EAEnB,OAAO3iB,IAGT,GAAIqpB,EAASD,aAAe3L,EAAIO,KAE9B,OAAOhe,EAAGqpB,EAAU5L,GAItB,IAAIyqB,EAAWzqB,EAAIM,IAAM,KAAOsL,EAASD,WAC/B8d,EAAcvyF,IAAIuzF,GACxBrH,UAAY,SAAUxoF,GACxB2nD,EAAGqpB,EAAU+W,GAAU/nF,EAAElB,OAAO4O,UAqBpC,SAASg/E,IACPloC,EAAKkwB,SAAS,KAAM,CAClB50B,QAASA,EACTq6B,SAAUtF,IAcd,IAAIib,EAAe,CAAC1I,GA7rCH,eA8rCb5iC,EAAK+nB,aACPujB,EAAalrF,KA7rCE,gBA+rCjB,IAAI0nF,EAAY7C,GAAsBC,EAAKoG,EAAc,YACzD,GAAIxD,EAAUhqF,MACZ,OAAOkiD,EAAKkwB,SAAS4X,EAAUhqF,QAEjC+lF,EAAMiE,EAAUjE,KACZkE,QAAU/E,GAAShjC,EAAKkwB,UAC5B2T,EAAIoE,WApBJ,YACOjoC,EAAKsyB,YAActyB,EAAK+nB,YAG3Bmc,GAAuB5oC,GAASD,KAAK6sC,GAErCA,KAgBJ3C,EAAa1B,EAAIE,YAzsCA,eA0sCjBuB,EAAWzB,EAAIE,YAAYnB,IAC3ByH,EAAgB9E,EAAWziF,MAAM,eAKjC+lF,GAAiBtD,EAHDvlC,EAAK+lB,QAAU/lB,EAAK0yB,WAClC+R,YAAYmF,WAAW5pC,EAAK+lB,OAAO,GAAQ,KAEN/lB,EAAK0yB,WAAY7qC,GA3JxD,SAAiB6iD,EAAWF,EAAa3F,GACvC,GAAKA,GAAW6F,EAAUtsF,OAA1B,CAIA,IAAImtF,EAAc,IAAIvuF,MAAM0tF,EAAUtsF,QAClCotF,EAAY,IAAIxuF,MAAM0tF,EAAUtsF,QA+DhC6lE,EAAU,EACdumB,EAAY96E,SAAQ,SAAUxX,EAAOjB,IAgCvC,SAAoC2pE,EAAKkF,EAAK3iB,GAC5C,GAAI8nC,IAAWA,EAAO3nF,IAAIs9D,EAAIM,KAC5B,OAAO/d,IAGT,IAAIqpB,EAAW2e,EAAiBrzF,IAAI8oE,EAAIM,KACxC,GAAIsL,EACF,OAAO4e,EAAcxqB,EAAKkF,EAAK0G,EAAUrpB,GAG3CmiC,EAASxtF,IAAI8oE,EAAIM,KAAK8iB,UAAY,SAAUxoF,GAC1CgxE,EAAW4W,GAAe5nF,EAAElB,OAAO4O,QACnCiiF,EAAiB1pF,IAAIm/D,EAAIM,IAAKsL,GAC9B4e,EAAcxqB,EAAKkF,EAAK0G,EAAUrpB,IA1ClCsoC,CAFUlI,GAAUrrF,GACVwyF,EAAUzzF,IACiB,SAAUu1E,EAAUkf,GACvDF,EAAUv0F,GAAKu1E,EACf+e,EAAYt0F,GAAKy0F,IACXznB,IAAYymB,EAAUtsF,QArChC,WAEE,IADA,IAAI03E,EAAW,GACN7+E,EAAI,EAAGkL,EAAMopF,EAAYntF,OAAQnH,EAAIkL,GACxC+oF,IAAerjD,EAD8B5wC,IAAK,CAItD,IAAIy0F,EAAaH,EAAYt0F,GAC7B,GAAKy0F,EAAL,CAGA,IAAIlf,EAAWgf,EAAUv0F,GACzB6+E,EAAS11E,KAAKurF,EAA6Bnf,EAAUkf,KAGvDjqE,QAAQk5C,IAAImb,GAAUz6B,MAAK,SAAUhH,GACnC,IAAK,IAAIp9C,EAAI,EAAGkL,EAAMkyC,EAAQj2C,OAAQnH,EAAIkL,EAAKlL,IACzCo9C,EAAQp9C,IACV+oD,EAAKimB,SAAS5xB,EAAQp9C,OAGzBy+E,MAAM11B,EAAKkwB,UAEVgb,IAAerjD,GACjBg9C,EAAOG,WAeL4G,SArEN,SAASD,EAA6Bnf,EAAUkf,GAC9C,IAAI78B,EAAS7O,EAAKywB,cAAcib,EAAYlf,EAAUxsB,GACtDqwB,EAAUxhB,EAAOiX,IAAM0G,EAAS1G,IAEhC,IAAI+lB,EAAWv8E,EAAOu/C,GACtB,MAAwB,iBAAbg9B,EACFpqE,QAAQ4lB,OAAOwkD,GAGnBA,GAGLX,IACIlrC,EAAK61B,aACPv6B,EAAQl7C,KAAKyuD,GAIX7O,EAAK+nB,aAAe/nB,EAAK0gB,aACpB,IAAIj/C,SAAQ,SAAUqZ,GAC3B8oD,GAA4B8H,EAAY1rC,EAAM6jC,GAAK,WACjDK,GAAuB,CAACr1B,GAAS7O,EAAKirB,QAAQ5vB,MAAK,WACjDvgB,EAAQ+zB,YAKPptC,QAAQqZ,QAAQ+zB,IAjBhBptC,QAAQqZ,cA4IvB,IACIgxD,GADAC,GAAY,IAAIvqB,EAEhBwqB,GAAc,IAAIxqB,EAEtB,SAASyqB,GAASjsC,EAAMjqB,GACtB,IAAI89C,EAAM74E,MAlNZ,SAAqBmK,EAAQ4wB,EAAUwqC,GACrCh5D,GAAMnH,MAAK,WACT+E,GAAO,SAAqBxH,EAAKsL,IArBrC,SAAiButC,EAAK74C,EAAKsL,EAAKs3D,GAC9B,IACE/pB,EAAI74C,EAAKsL,GACT,MAAOtL,GAIP4iE,EAAQrgE,KAAK,QAASvC,IAepBuuF,CAAQn2D,EAAUp4B,EAAKsL,EAAKs3D,GAC5BwqB,IAAU,EACV,KAAU,WACRC,cAINA,KA0MAmB,EAAY,SAAUC,IAKxB,SAAcvY,EAAK7zB,EAAMjqB,GAEvB,IAAI2vC,EAAS1lB,EAAKxoD,KAEd0tF,EAAM,KA4BV,SAASmH,EAAuBxI,EAAK9tD,GACnC,IAAIuvD,EAAWzB,EAAIE,YAAYnB,IAC/B0C,EAASgH,YAAY,iBAAkB,iBAAkB,CAACC,QAAS,IAEnEjH,EAASX,aAAaX,UAAY,SAAUjyB,GAC1C,IAAI8yB,EAAS9yB,EAAMz3D,OAAO4O,OAC1B,GAAI27E,EAAQ,CACV,IAAIrY,EAAWqY,EAAO3sF,MAClB80E,EAAU+C,GAAUvD,GACxBA,EAAS2W,eAAiBnW,EAAU,IAAM,IAC1CsY,EAASrkB,IAAIuL,GACbqY,EAAOG,gBAEPjvD,KAYN,SAASy2D,EAAkB3I,EAAK1gC,GAC9B,IAAIspC,EAAa5I,EAAIE,YA9wCP,eA+wCVuB,EAAWzB,EAAIE,YAAYnB,IAC3B0B,EAAWT,EAAIE,YA3xCJ,eA6xCFuB,EAASX,aACfX,UAAY,SAAUjyB,GAC3B,IAAI8yB,EAAS9yB,EAAMz3D,OAAO4O,OAC1B,GAAI27E,EAAQ,CACV,IAAIrY,EAAWqY,EAAO3sF,MAClBssE,EAAQgI,EAAS1xE,GACjB4xF,EAAQ1c,GAAUxL,GAClBoP,EAASrH,GAAWC,GACxB,GAAIkgB,EAAO,CACT,IAAIrB,EAAW7mB,EAAQ,KAAOoP,EAG1BzkE,EAAQq1D,EAAQ,KAChBl0D,EAAMk0D,EAAQ,MACd1hE,EAAQwhF,EAASxhF,MAAM,eACvBwhC,EAAQmgD,YAAYttB,MAAMhoD,EAAOmB,GAAK,GAAO,GAC7Cq8E,EAAY7pF,EAAM6hF,WAAWrgD,GACjCqoD,EAAU3I,UAAY,SAAUxoF,GAE9B,GADAmxF,EAAYnxF,EAAElB,OAAO4O,OAKd,CACL,IAAInO,EAAO4xF,EAAUz0F,MACjB6C,EAAKyoF,cAAgB6H,GACvBoB,EAAWxrB,IAAIlmE,GAEjBupF,EAASriB,OAAO0qB,EAAU5H,YAC1B4H,EAAU3H,gBARVM,EAASrjB,OAAO4iB,EAAOE,YACvBF,EAAOG,iBAWXH,EAAOG,gBAEA7hC,GACTA,KAcN,SAASypC,EAAmB/I,EAAK9tD,GAC/B,IAAIuuD,EAAWT,EAAIE,YAh1CJ,eAi1CXQ,EAAWV,EAAIE,YA/0CJ,gBAg1CXS,EAAiBX,EAAIE,YA70CF,oBAk1CbQ,EAAS9jF,QACfujF,UAAY,SAAUxoF,GAExB,IADYA,EAAElB,OAAO4O,OAEnB,OAAO6sB,IAGTuuD,EAASK,aAAaX,UAAY,SAAUxoF,GAC1C,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OACtB,IAAK27E,EACH,OAAO9uD,IAMT,IAJA,IAAI6qC,EAAMikB,EAAO3sF,MACb4tE,EAAM+e,EAAOE,WACbrN,EAAO//E,OAAOwL,KAAKy9D,EAAIqH,cAAgB,IACvC4kB,EAAY,GACPjlC,EAAI,EAAGA,EAAI8vB,EAAKt5E,OAAQwpD,IAAK,CAEpCilC,EADUjsB,EAAIqH,aAAayP,EAAK9vB,IAClB64B,SAAU,EAE1B,IAAI0H,EAAUxwF,OAAOwL,KAAK0pF,GAC1B,IAAKjlC,EAAI,EAAGA,EAAIugC,EAAQ/pF,OAAQwpD,IAAK,CACnC,IAAI64B,EAAS0H,EAAQvgC,GACrB48B,EAAevjB,IAAI,CACjB6E,IAAKA,EACLgf,UAAWrE,EAAS,KAAO3a,IAG/B+e,EAAOG,aAWb,SAAS8H,EAAgBjJ,GAavB,IAAI0B,EAAa1B,EAAIE,YA34CN,eA44CXuB,EAAWzB,EAAIE,YAAYnB,IAClB0C,EAASX,aACfX,UAAY,SAAUxoF,GAC3B,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OACtB,GAAK27E,EAAL,CAGA,IAnB4BxB,EAmBxB7W,GAnBwB6W,EAmBQwB,EAAO3sF,OAlBzB6C,KAKXqoF,GAAeC,IAHpBA,EAAarW,QAA0C,MAAhCqW,EAAaF,eAC7BE,GAqDT,GApCA7W,EAASD,WAAaC,EAASD,YAC7BA,GAAWC,GAmCTA,EAAS1G,IACX,OAAOinB,KAlCT,WAGE,IAAI59E,EAAQq9D,EAAS1xE,GAAK,KACtBwV,EAAMk8D,EAAS1xE,GAAK,MACpB4sE,EAAM6d,EAAWziF,MAAM,eAAe6hF,WACxCF,YAAYttB,MAAMhoD,EAAOmB,IAEvB08E,EAAc,EAClBtlB,EAAIsc,UAAY,SAAUxoF,GACxB,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OACtB,IAAK27E,EAEH,OADArY,EAAS1G,IAAMknB,EACRD,IAET,IAAIjnB,EAAM+e,EAAOE,WACbjf,EAAMknB,IACRA,EAAclnB,GAEhB+e,EAAOG,YAkBXiI,GAdA,SAASF,IACP,IAAI/F,EAAkB9D,GAAe1W,EACnCA,EAASD,WAAYC,EAASQ,SAEtBsY,EAASrkB,IAAI+lB,GACnBhD,UAAY,WACda,EAAOG,cAjNfnR,EAAImS,MAAQ,KA8NZnS,EAAIvL,SAAU,EACduL,EAAIt6E,KAAO,WACT,MAAO,OAGTs6E,EAAI3S,IAAMsB,GAAU,SAAUzsC,GAC5BA,EAAS,KAAM89C,EAAImS,MAAMkH,eAG3BrZ,EAAI+D,UAAY,SAAsBlQ,EAAKylB,EAASp3D,GAClDsvD,GAAYrlC,EAAM0nB,EAAKylB,EAAStZ,EAAKqR,EAAKnvD,IAK5C89C,EAAIqC,KAAO,SAAiBp7E,EAAIklD,EAAMjqB,GACpC,IAAI6qC,EACA4L,EACA7uE,EACAkmF,EAAM7jC,EAAK3mD,IACf,IAAKwqF,EAAK,CACR,IAAIiE,EAAY7C,GAAsBC,EACpC,CAACtC,GAx9CU,cAEA,gBAs9C8B,YAC3C,GAAIkF,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAE5B+lF,EAAMiE,EAAUjE,IAGlB,SAASqE,IACPnyD,EAASp4B,EAAK,CAACijE,IAAKA,EAAK4L,SAAUA,EAAUnzE,IAAKwqF,IAGpDA,EAAIE,YAAYnB,IAAW9qF,IAAIgD,GAAIkpF,UAAY,SAAUxoF,GAOvD,KANAgxE,EAAW4W,GAAe5nF,EAAElB,OAAO4O,SAQjC,OADAvL,EAAM2pE,GAAYd,EAAa,WACxB0hB,IAGT,IAAItU,EACJ,GAAK5zB,EAAK/kD,IAQR24E,EAAS5zB,EAAKi2B,OAt6ItB,SAAgBh7E,EAAKuxE,GAGnB,IAFA,IACIpP,EADAwP,EAAUJ,EAASK,SAAS9vE,QAExBqgE,EAAOwP,EAAQ7pE,OAAQ,CAC7B,IAAI20C,EAAM0lB,EAAK1lB,IACXo1B,EAAO1P,EAAKmC,IACZzkE,EAAKgyE,EAAK,GACV9sB,EAAO8sB,EAAK,GACZC,EAAWD,EAAK,GAChBS,EAA6B,IAApBR,EAAS3uE,OAElB0vE,EAAU1Q,EAAK0Q,QAAU1Q,EAAK0Q,QAAQ/wE,QAAU,GAGpD,GAFA+wE,EAAQ1tE,KAAK,CAACtF,GAAIA,EAAI48C,IAAKA,EAAKsI,KAAMA,IAElCutB,EACF,IAAK,IAAIt2E,EAAI,EAAGkL,EAAM2rE,EAAQ1vE,OAAQnH,EAAIkL,EAAKlL,IAAK,CAClD,IAAIm2F,EAActf,EAAQ72E,GAG1B,GAFiBm2F,EAAY11C,IAAM,IAAM01C,EAAYtyF,KAElCG,EAEjB,OAAOy8C,EAAM,IAAM58C,EAKzB,IAAK,IAAI8sD,EAAI,EAAG1wD,EAAI61E,EAAS3uE,OAAQwpD,EAAI1wD,EAAG0wD,IAC1CglB,EAAQxsE,KAAK,CAACs3C,IAAKA,EAAM,EAAG6nB,IAAKwN,EAASnlB,GAAIkmB,QAASA,IAK3D,MAAM,IAAIrwE,MAAM,4CAA8C+uE,EAAS1xE,GAAK,SAAWG,GAs4I1Dg7E,CAAOj2B,EAAK/kD,IAAKuxE,GAAYxsB,EAAK/kD,SALzD,GAFA24E,EAASpH,EAASD,WACJwD,GAAUvD,GAGtB,OADA7uE,EAAM2pE,GAAYd,EAAa,WACxB0hB,IAMX,IAAInE,EAAcF,EAAIE,YA3/CT,eA4/CTvrF,EAAMg0E,EAAS1xE,GAAK,KAAO84E,EAE/BmQ,EAAYjhF,MAAM,eAAehL,IAAIU,GAAKwrF,UAAY,SAAUxoF,GAK9D,IAJAolE,EAAMplE,EAAElB,OAAO4O,UAEb03D,EAAM2iB,GAAU3iB,KAEbA,EAEH,OADAjjE,EAAM2pE,GAAYd,EAAa,WACxB0hB,IAETA,OAKNrU,EAAI8C,eAAiB,SAAUnS,EAAO6oB,EAAUC,EAAYttC,EAAMjqB,GAChE,IAAI8tD,EACJ,GAAI7jC,EAAK3mD,IACPwqF,EAAM7jC,EAAK3mD,QACN,CACL,IAAIyuF,EAAY7C,GAAsBC,EACpC,CAACtC,GAlhDU,cAEA,gBAghD8B,YAC3C,GAAIkF,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAE5B+lF,EAAMiE,EAAUjE,IAElB,IAAIpD,EAAS6M,EAAW7M,OACpBlnF,EAAO+zF,EAAWtZ,aAEtB6P,EAAIE,YAzhDW,gBAyhDejsF,IAAI2oF,GAAQuD,UAAY,SAAUxoF,GAE9DioF,GADWjoF,EAAElB,OAAO4O,OAAOw6E,KACRnqF,EAAMymD,EAAKirB,QAAQ,SAAUsiB,GAC9Cx3D,EAAS,KAAMw3D,QAKrB1Z,EAAIwD,MAAQ,SAAkBthD,GAC5B,IAAIq0D,EACAhE,EAEA0B,EAAY7C,GAAsBC,EAAK,CAACrC,GAviD7B,eAuiDwD,YACvE,GAAIiF,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAE5B,IAAI+lF,EAAMiE,EAAUjE,IACpBA,EAAIE,YAAYlB,IAAY/qF,IAAI+qF,IAAYmB,UAAY,SAAUxoF,GAChE4qF,EAAW5qF,EAAElB,OAAO4O,OAAOk9E,UAE7BvC,EAAIE,YA/iDW,eA+iDeY,WAAW,KAAM,QAAQX,UAAY,SAAUxoF,GAC3E,IAAIqpF,EAASrpF,EAAElB,OAAO4O,OACtBkhF,EAAYvF,EAASA,EAAOrsF,IAAM,GAGpCqrF,EAAIoE,WAAa,WACflyD,EAAS,KAAM,CACby3D,UAAWpH,EACXvT,WAAYuX,EAEZqD,sBAAwB5Z,EAAImS,MAAMC,YAAc,SAAW,aAKjEpS,EAAIsD,SAAW,SAAqBn3B,EAAMjqB,GACxC8zD,GAAW7pC,EAAMklC,EAAKnvD,IAGxB89C,EAAIjB,SAAW,SAAoB5yB,GACjC,OAAO3L,GAAQ2L,EAAM6zB,EAAKnO,EAAQwf,IAGpCrR,EAAIuD,OAAS,SAAUrhD,GAGrBmvD,EAAIhvC,QACJ61C,GAAU9pB,OAAOyD,GACjB3vC,KAGF89C,EAAIa,iBAAmB,SAAUlQ,EAAOzuC,GACtC,IAAI+xD,EAAY7C,GAAsBC,EAAK,CAACtC,IAAY,YACxD,GAAIkF,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAElBgqF,EAAUjE,IACNE,YAAYnB,IAAW9qF,IAAI0sE,GACrCwf,UAAY,SAAUjyB,GACxB,IAAI6O,EAAMwiB,GAAerxB,EAAMz3D,OAAO4O,QACjC03D,EAGH7qC,EAAS,KAAM6qC,EAAIiM,UAFnB92C,EAASuxC,GAAYd,MAU3BqN,EAAI0B,cAAgB,SAAU/Q,EAAO0I,EAAMn3C,GACzC,IAMI+xD,EAAY7C,GAAsBC,EANzB,CACXtC,GApmDa,cAEA,eAGQ,oBAomD4B,aACnD,GAAIkF,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAE5B,IAAI+lF,EAAMiE,EAAUjE,IAELA,EAAIE,YAAYnB,IAEtB9qF,IAAI0sE,GAAOwf,UAAY,SAAUjyB,GACxC,IAAIya,EAAW4W,GAAerxB,EAAMz3D,OAAO4O,QAC3C+jE,GAAgBT,EAASK,UAAU,SAAUU,EAAQ71B,EACFk4B,EAASv2E,EAAK2mD,GAC/D,IAAI4zB,EAASl8B,EAAM,IAAMk4B,GACK,IAA1B1C,EAAKv9D,QAAQikE,KACf5zB,EAAKohB,OAAS,cAGlBgjB,GAAYlX,EAAM1I,EAAOqf,GACzB,IAAInC,EAAgBlV,EAASD,WACzBS,EAAUR,EAASQ,QACvB6W,EAAIE,YAAYnB,IAAW3hB,IACzBiiB,GAAe1W,EAAUkV,EAAe1U,KAE5C6W,EAAIkE,QAAU/E,GAASjtD,GACvB8tD,EAAIoE,WAAa,WACflyD,MAKJ89C,EAAIkC,UAAY,SAAUj7E,EAAIi7B,GAC5B,IAAI+xD,EAAY7C,GAAsBC,EAAK,CA7nD7B,eA6nD4C,YAC1D,GAAI4C,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,OAE5B,IACI4pE,EADKogB,EAAUjE,IACNE,YAloDC,eAkoDwBjsF,IAAIgD,GAE1C4sE,EAAI0f,QAAUpE,GAASjtD,GACvB2xC,EAAIsc,UAAY,SAAUxoF,GACxB,IAAIolE,EAAMplE,EAAElB,OAAO4O,OACd03D,UAGIA,EAAiB,YACxB7qC,EAAS,KAAM6qC,IAHf7qC,EAASuxC,GAAYd,MAQ3BqN,EAAIb,UAAY,SAAUpS,EAAK5gB,EAAMjqB,GACf,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,WAEF4gB,EAAIqQ,WACX,IAAIyc,EAAS9sB,EAAIO,KACbrmE,EAAK8lE,EAAIM,IAIXN,EAAIO,KAHDusB,EAGQ,MAAQ30E,SAAS20E,EAAOhqF,MAAM,KAAK,GAAI,IAAM,GAF7C,MAKb,IACItC,EADA4gF,EAAKhiC,EAAK3mD,IAEd,IAAK2oF,EAAI,CACP,IAAI8F,EAAY7C,GAAsBC,EAAK,CAjqD/B,eAiqD8C,aAC1D,GAAI4C,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,QAE5BkkF,EAAK8F,EAAUjE,KACZuD,QAAUpE,GAASjtD,GACtBisD,EAAGiG,WAAa,WACV7mF,GACF20B,EAAS,KAAM30B,IAKrB,IACIsmE,EADAimB,EAAS3L,EAAG+B,YA9qDF,eAgrDV2J,GACFhmB,EAAMimB,EAAO71F,IAAIgD,IACbkpF,UAAY,SAAUxoF,GACxB,IAAIoyF,EAASpyF,EAAElB,OAAO4O,OACjB0kF,GAAUA,EAAOzsB,OAASusB,EAGnBC,EAAO1sB,IAAIL,GACjBojB,UAAY,WACd5iF,EAAM,CAACjD,IAAI,EAAMrD,GAAI8lE,EAAIM,IAAKjmE,IAAK2lE,EAAIO,MACnCnhB,EAAK3mD,KACP08B,EAAS,KAAM30B,IANnB20B,EAASuxC,GAAYb,OAYzBiB,EAAMimB,EAAOxpE,IAAIy8C,IACbwmB,QAAU,SAAU5rF,GAEtBu6B,EAASuxC,GAAYb,IACrBjrE,EAAE6rF,iBACF7rF,EAAE8rF,mBAEJ5f,EAAIsc,UAAY,WACd5iF,EAAM,CAACjD,IAAI,EAAMrD,GAAI8lE,EAAIM,IAAKjmE,IAAK2lE,EAAIO,MACnCnhB,EAAK3mD,KACP08B,EAAS,KAAM30B,MAMvByyE,EAAIX,aAAe,SAAUtS,EAAK5gB,EAAMjqB,GAClB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAET,IAaI5+C,EAbA4gF,EAAKhiC,EAAK3mD,IACd,IAAK2oF,EAAI,CACP,IAAI8F,EAAY7C,GAAsBC,EAAK,CAxtD/B,eAwtD8C,aAC1D,GAAI4C,EAAUhqF,MACZ,OAAOi4B,EAAS+xD,EAAUhqF,QAE5BkkF,EAAK8F,EAAUjE,KACZoE,WAAa,WACV7mF,GACF20B,EAAS,KAAM30B,IAKrB,IAAItG,EAAK8lE,EAAIM,IACTysB,EAAS3L,EAAG+B,YAruDF,eAsuDVrc,EAAMimB,EAAO71F,IAAIgD,GAErB4sE,EAAI0f,QAAUpE,GAASjtD,GACvB2xC,EAAIsc,UAAY,SAAUxoF,GACxB,IAAIoyF,EAASpyF,EAAElB,OAAO4O,OACjB0kF,GAAUA,EAAOzsB,OAASP,EAAIO,MAGjCwsB,EAAO1rB,OAAOnnE,GACdsG,EAAM,CAACjD,IAAI,EAAMrD,GAAIA,EAAIG,IAAK,OAC1B+kD,EAAK3mD,KACP08B,EAAS,KAAM30B,IALjB20B,EAASuxC,GAAYd,MAW3BqN,EAAIsE,SAAW,SAAUn4B,EAAMjqB,GAC7BipD,GAAe97E,mBAAmBwiE,GAGlC,IAAImoB,EAAU7B,GAAYl0F,IAAI4tE,GAC1BmoB,GAAWA,EAAQ3kF,SACrB2kF,EAAQ3kF,OAAOgtC,QACf61C,GAAU9pB,OAAOyD,IAEnB,IAAIgC,EAAMomB,UAAUC,eAAeroB,GAEnCgC,EAAIsc,UAAY,WAEdgI,GAAY/pB,OAAOyD,GACfR,KAAsBQ,KAAUV,qBAC3BA,aAAaU,GAEtB3vC,EAAS,KAAM,CAAE,IAAM,KAGzB2xC,EAAI0f,QAAUpE,GAASjtD,IAGzB,IAAI76B,EAAS6wF,GAAUj0F,IAAI4tE,GAE3B,GAAIxqE,EAGF,OAFAgqF,EAAMhqF,EAAOgqF,IACbrR,EAAImS,MAAQ9qF,EAAOjC,OACZ,KAAU,WACf88B,EAAS,KAAM89C,MAInB,IAAInM,EAAMomB,UAAU93C,KAAK0vB,EA3yDL,GA4yDpBsmB,GAAYvqF,IAAIikE,EAAQgC,GAExBA,EAAIsmB,gBAAkB,SAAUxyF,GAC9B,IAAIooE,EAAKpoE,EAAElB,OAAO4O,OAClB,GAAI1N,EAAEyyF,WAAa,EACjB,OAlkBJ,SAAsBrqB,GACpB,IAAI0hB,EAAW1hB,EAAGsqB,kBAAkBtL,GAAW,CAACnuC,QAAU,OAC1DmvB,EAAGsqB,kBAzuCY,cAyuCoB,CAACC,eAAe,IAChD7B,YAAY,cAAe,cAAe,CAACC,QAAQ,IACtD3oB,EAAGsqB,kBAzuCY,eAyuCoB,CAACz5C,QAAS,WAC7CmvB,EAAGsqB,kBAAkBrL,GAAY,CAACpuC,QAAS,KAAM05C,eAAe,IAChEvqB,EAAGsqB,kBAhuCyB,uBAmuC5B5I,EAASgH,YAAY,iBAAkB,iBAAkB,CAACC,QAAS,IAGnE3oB,EAAGsqB,kBAxuCW,cAwuCoB,CAACz5C,QAAS,QAG5C,IAAI+vC,EAAiB5gB,EAAGsqB,kBAjvCD,mBAkvCrB,CAACC,eAAe,IAClB3J,EAAe8H,YAAY,MAAO,OAClC9H,EAAe8H,YAAY,YAAa,YAAa,CAACC,QAAQ,IAgjBrD6B,CAAaxqB,GAItB,IAAIigB,EAAMroF,EAAE6yF,cAAcjJ,YAItB5pF,EAAEyyF,WAAa,GA/hBrB,SAAgCrqB,GAC9BA,EAAGsqB,kBAxwCW,cAwwCoB,CAACz5C,QAAS,QACzC63C,YAAY,cAAe,cAAe,CAACC,QAAQ,IA8hBpD+B,CAAuB1qB,GAErBpoE,EAAEyyF,WAAa,GA7erB,SAA8BrqB,GAC5B,IAAI4gB,EAAiB5gB,EAAGsqB,kBAn0CD,mBAo0CrB,CAACC,eAAe,IAClB3J,EAAe8H,YAAY,MAAO,OAClC9H,EAAe8H,YAAY,YAAa,YAAa,CAACC,QAAQ,IA0e5DgC,CAAqB3qB,GAGvB,IAAI4qB,EAAa,CACfnC,EACAG,EACAI,EACAE,GAGE71F,EAAIuE,EAAEyyF,YAEV,SAASr/E,IACP,IAAI6/E,EAAYD,EAAWv3F,EAAI,GAC/BA,IACIw3F,GACFA,EAAU5K,EAAKj1E,GAInBA,IAGF84D,EAAIsc,UAAY,SAAUxoF,IAExB0pF,EAAM1pF,EAAElB,OAAO4O,QAEXwlF,gBAAkB,WACpBxJ,EAAIhvC,QACJ61C,GAAU9pB,OAAOyD,IAGnBwf,EAAI6C,QAAU,SAAUvsF,GACtB6pE,EAAe,QAAS,gCAAiC7pE,EAAElB,OAAOwD,OAClEonF,EAAIhvC,QACJ61C,GAAU9pB,OAAOyD,IAUnB,IAOIkgB,EACAQ,EACAH,EACAiH,EAVArJ,EAAMqB,EAAIE,YAAY,CACxBvC,GAt1D0B,sBAw1D1BD,IACC,aAEC+L,GAAgB,EAMpB,SAASC,SACoB,IAAhB3I,GAAgC0I,IAG3C9a,EAAImS,MAAQ,CACVxuF,KAAMkuE,EACNwnB,WAAYA,EACZjH,YAAaA,GAGf8F,GAAUtqF,IAAIikE,EAAQ,CACpBwf,IAAKA,EACLjsF,OAAQ46E,EAAImS,QAEdjwD,EAAS,KAAM89C,IAGjB,SAASgb,IACP,QAAwB,IAAbzI,QAA+C,IAAZR,EAA9C,CAGA,IAAIkJ,EAAcppB,EAAS,MACvBopB,KAAelJ,EACjBsH,EAAatH,EAAQkJ,GAErBlJ,EAAQkJ,GAAe5B,EAAa73B,KAEtCuwB,EAAQQ,SAAWA,EACnBvC,EAAIE,YAAYlB,IAAY5hB,IAAI2kB,IAMlC/B,EAAIE,YAAYlB,IAAY/qF,IAAI+qF,IAAYmB,UAAY,SAAUxoF,GAChEoqF,EAAUpqF,EAAElB,OAAO4O,QAAU,CAAEpO,GAAI+nF,IACnCgM,KA36BN,SAAmBhL,EAAK1gC,GACV0gC,EAAIE,YAAYnB,IAAW9/E,MAAM,kBACvCrC,MAAMgkF,YAAYG,KAAK,MAAMZ,UAAY,SAAUxoF,GACvD2nD,EAAG3nD,EAAElB,OAAO4O,SA86BZ6lF,CAAUlL,GAAK,SAAUpjF,GACvB2lF,EAAW3lF,EACXouF,OAMG/C,KAEHA,GAr9BN,SAA0BjI,GACxB,OAAO,IAAIpiE,SAAQ,SAAUqZ,GAC3B,IAAIk0D,EAAUllB,GAAW,CAAC,KACtBpC,EAAMmc,EAAIE,YAn8Bc,uBAm8ByB9iB,IAAI+tB,EAAS,OAElEtnB,EAAIsc,UAAY,WACd,IAAIiL,EAAgBnpC,UAAUC,UAAU5nC,MAAM,iBAC1C+wE,EAAcppC,UAAUC,UAAU5nC,MAAM,UAG5C2c,EAAQo0D,IAAgBD,GACtBl2E,SAASk2E,EAAc,GAAI,KAAO,KAGtCvnB,EAAI0f,QAAUvD,EAAIkE,QAAU,SAAUvsF,GAGpCA,EAAE6rF,iBACF7rF,EAAE8rF,kBACFxsD,GAAQ,OAET46C,OAAM,WACP,OAAO,KA+7BgByZ,CAAiBtL,IAGxCiI,GAAmBzwC,MAAK,SAAUz3C,GAChCqiF,EAAcriF,EACdgrF,OAKF/K,EAAIoE,WAAa,WACf0G,GAAgB,EAChBC,KAEF/K,EAAIkE,QAAU/E,GAASjtD,IAGzB2xC,EAAI0f,QAAU,WACZ,IAAI1zC,EAAM,8DACV2xB,EAAe,QAAS3xB,GACxB3d,EAASuxC,GAAYH,GAAWzzB,KA3tBhCt0C,CAAKy0E,EAAK7zB,EAAMosC,KACfr2D,EAAU89C,EAAItuE,aA8tBnB0mF,GAASna,MAAQ,WAMf,IAGE,MAA4B,oBAAdgc,WAAoD,oBAAhBrJ,YAClD,MAAOjpF,GACP,OAAO,IA4DX,IAKI4zF,GAAqB,GAEzB,SAASC,GAA8B1uB,GACrC,IAAIC,EAAMD,EAAIC,KAAOD,EAAIxiE,GACrBu5E,EAAO9W,GAAOA,EAAIqH,aACjByP,GAGL//E,OAAOwL,KAAKu0E,GAAMhoE,SAAQ,SAAU04E,GAClC,IAAIpgB,EAAM0P,EAAK0Q,GACfpgB,EAAIjtE,KAAO0vE,GAAazC,EAAIjtE,KAAMitE,EAAIgM,iBAI1C,SAASsb,GAAYx0F,GACnB,MAAI,WAAW2J,KAAK3J,GACX,WAAagxD,mBAAmBhxD,EAAGiC,MAAM,IAE9C,UAAU0H,KAAK3J,GACV,UAAYgxD,mBAAmBhxD,EAAGiC,MAAM,IAE1C+uD,mBAAmBhxD,GAG5B,SAASy0F,GAAwB3uB,GAC/B,OAAKA,EAAIqH,cAAiBtwE,OAAOwL,KAAKy9D,EAAIqH,cAInCxmD,QAAQk5C,IAAIhjE,OAAOwL,KAAKy9D,EAAIqH,cAAcl4D,KAAI,SAAUvX,GAC7D,IAAI80F,EAAa1sB,EAAIqH,aAAazvE,GAClC,GAAI80F,EAAWvyF,MAAmC,iBAApBuyF,EAAWvyF,KACvC,OAAO,IAAI0mB,SAAQ,SAAUqZ,GAC3BwwC,GAAagiB,EAAWvyF,KAAM+/B,MAC7BugB,MAAK,SAAUqvB,GAChB4iB,EAAWvyF,KAAO2vE,SATfjpD,QAAQqZ,UAyBnB,SAAS00D,GAAQh4F,EAAMwoD,GAErB,GAZF,SAAsBA,GACpB,IAAKA,EAAKlR,OACR,OAAO,EAET,IAAI+a,EAAW+e,GAAS5oB,EAAKlR,QAAQ+a,SACrC,MAAoB,SAAbA,GAAoC,UAAbA,EAO1B4lC,CAAazvC,GAAO,CACtB,IAAI0lB,EAAS1lB,EAAKxoD,KAAKuqD,OAAO/B,EAAKlR,OAAO1wC,QAG1C5G,EADawoD,EAAKlR,OAAOvqC,QAAQ,OAAQ,KACzBunD,mBAAmB4Z,GAGrC,IAAImD,EAAMD,GAASpxE,IACfqxE,EAAIlsB,MAAQksB,EAAIhe,YAClBge,EAAI7uB,KAAO,CAAC4Q,SAAUie,EAAIlsB,KAAMkO,SAAUge,EAAIhe,WAKhD,IAAI2d,EAAQK,EAAI3+C,KAAK3lB,QAAQ,aAAc,IAAIb,MAAM,KAUrD,OARAmlE,EAAIjF,GAAK4E,EAAMzlE,OAEc,IAAzB8lE,EAAIjF,GAAGj0D,QAAQ,OACjBk5D,EAAIjF,GAAK9X,mBAAmB+c,EAAIjF,KAGlCiF,EAAI3+C,KAAOs+C,EAAMzkE,KAAK,KAEf8kE,EAIT,SAAS6mB,GAAS1vC,EAAM91B,GACtB,OAAOylE,GAAO3vC,EAAMA,EAAK4jB,GAAK,IAAM15C,GAItC,SAASylE,GAAO3vC,EAAM91B,GAGpB,IAAI0lE,EAAW5vC,EAAK91B,KAAY,IAAL,GAI3B,OAAO81B,EAAK6J,SAAW,MAAQ7J,EAAK0K,MAC5B1K,EAAKyK,KAAQ,IAAMzK,EAAKyK,KAAQ,IACjC,IAAMzK,EAAK91B,KAAO0lE,EAAU1lE,EAGrC,SAAS2lE,GAAYC,GACnB,MAAO,IAAMn4F,OAAOwL,KAAK2sF,GAAQ//E,KAAI,SAAUo7C,GAC7C,OAAOA,EAAI,IAAMW,mBAAmBgkC,EAAO3kC,OAC1CpnD,KAAK,KAcV,SAASgsF,GAAU/vC,EAAMjqB,GAGvB,IAAI89C,EAAM74E,KAEN0vD,EAAO8kC,GAAQxvC,EAAKxoD,KAAMwoD,GAC1BgwC,EAAQN,GAAShlC,EAAM,IAE3B1K,EAAO7jB,EAAM6jB,GAEb,IAuFIiwC,EAvFAC,EAAW,SAAU3lC,EAAK5rB,GAO5B,IALAA,EAAUA,GAAW,IACbwxD,QAAUxxD,EAAQwxD,SAAW,IAAIvX,GAEzCj6C,EAAQyxD,YAAc,UAElBpwC,EAAKhG,MAAQ0Q,EAAK1Q,KAAM,CAC1B,IAAIq2C,EAAQrwC,EAAKhG,MAAQ0Q,EAAK1Q,KAC1BsF,EAAM+wC,EAAMzlC,SAAW,IAAMylC,EAAMxlC,SACnCpT,EAAQmyB,GAASh7B,SAASkd,mBAAmBxM,KACjD3gB,EAAQwxD,QAAQ1uF,IAAI,gBAAiB,SAAWg2C,GAGlD,IAAI04C,EAAUnwC,EAAKmwC,SAAW,GAW9B,OAVAx4F,OAAOwL,KAAKgtF,GAASzgF,SAAQ,SAAUlX,GACrCmmC,EAAQwxD,QAAQ3jC,OAAOh0D,EAAK23F,EAAQ33F,OArC1C,SAAyBwnD,GACvB,IAAIswC,EAA2B,oBAAdxqC,WAA6BA,UAAUC,UACpDD,UAAUC,UAAUrhD,cAAgB,GACpC6rF,GAA+B,IAAxBD,EAAG3gF,QAAQ,QAClB6gF,GAAuC,IAA3BF,EAAG3gF,QAAQ,WACvB8gF,GAAiC,IAAxBH,EAAG3gF,QAAQ,QACpB+gF,IAAU,WAAY1wC,IAAyB,QAAhBA,EAAKr6C,OACxC,OAAQ4qF,GAAQC,GAAaC,IAAWC,EAkClCC,CAAgBhyD,KAClB4rB,KAA8B,IAAtBA,EAAI56C,QAAQ,KAAc,IAAM,KAAO,UAAYgP,KAAK7hB,QAGnDkjD,EAAK24B,OAASD,IACbnuB,EAAK5rB,IAGvB,SAASiyD,EAAcp5F,EAAMg/C,GAC3B,OAAOqsB,EAAWrrE,EAAM,KAAa,SAAUmH,GAC7CkyF,IAAQx1C,MAAK,WACX,OAAO7E,EAAIp5C,MAAMpC,KAAM2D,MACtB+2E,OAAM,SAAUl6E,GACFmD,EAAKoE,KACpBgzB,CAASv6B,UAET/C,KAAKo7E,GAGX,SAASid,EAAUvmC,EAAK5rB,EAAS5I,GAE/B,IAAI7sB,EAAS,GAYb,OAVAy1B,EAAUA,GAAW,IACbwxD,QAAUxxD,EAAQwxD,SAAW,IAAIvX,GAEpCj6C,EAAQwxD,QAAQr4F,IAAI,iBACvB6mC,EAAQwxD,QAAQ1uF,IAAI,eAAgB,oBAEjCk9B,EAAQwxD,QAAQr4F,IAAI,WACvB6mC,EAAQwxD,QAAQ1uF,IAAI,SAAU,oBAGzByuF,EAAS3lC,EAAK5rB,GAAS0c,MAAK,SAAU01C,GAG3C,OAFA7nF,EAAO/K,GAAK4yF,EAAS5yF,GACrB+K,EAAOk4D,OAAS2vB,EAAS3vB,OAClB2vB,EAAShO,UACf1nC,MAAK,SAAU0nC,GAEhB,GADA75E,EAAOnO,KAAOgoF,GACT75E,EAAO/K,GAAI,CACd+K,EAAOnO,KAAKqmE,OAASl4D,EAAOk4D,OAC5B,IAAIzjE,EAAM6pE,GAA0Bt+D,EAAOnO,MAC3C,GAAIg7B,EACF,OAAOA,EAASp4B,GAEhB,MAAMA,EAcV,GAVIX,MAAM2lB,QAAQzZ,EAAOnO,QACvBmO,EAAOnO,KAAOmO,EAAOnO,KAAKgV,KAAI,SAAUgC,GACtC,OAAIA,EAAEjU,OAASiU,EAAEwiE,QACR/M,GAA0Bz1D,GAE1BA,OAKTgkB,EAGF,OAAO7sB,EAFP6sB,EAAS,KAAM7sB,EAAOnO,SAS5B,SAAS81F,IACP,OAAI7wC,EAAKgxC,WACAvvE,QAAQqZ,UAMbm1D,KAIJA,EAAea,EAAUd,GAAOta,OAAM,SAAU/3E,GAC9C,OAAIA,GAAOA,EAAIyjE,QAAyB,MAAfzjE,EAAIyjE,QAE3BqE,EAAa,IAAK,mDACXqrB,EAAUd,EAAO,CAACrqF,OAAQ,SAE1B8b,QAAQ4lB,OAAO1pC,MAEvB+3E,OAAM,SAAU/3E,GAIjB,SAAIA,IAAOA,EAAIyjE,QAAyB,MAAfzjE,EAAIyjE,SAGtB3/C,QAAQ4lB,OAAO1pC,OAGX+3E,OAAM,WACjBua,EAAe,QAGVA,GA2TT,SAASgB,EAAmBtd,GAC1B,OAAOA,EAAajwE,MAAM,KAAKqM,IAAI+7C,oBAAoB/nD,KAAK,KAzT9D,KAAU,WACRgyB,EAAS,KAAM89C,MAGjBA,EAAIvL,SAAU,EAGduL,EAAIt6E,KAAO,WACT,MAAO,QAGTs6E,EAAI/4E,GAAK81F,EAAc,MAAM,SAAU76D,GACrCm6D,EAASP,GAAOjlC,EAAM,KAAKrP,MAAK,SAAU01C,GACxC,OAAOA,EAAShO,UACfrN,OAAM,WACP,MAAO,MACNr6B,MAAK,SAAUnyC,GAEhB,IAAIgoF,EAAWhoF,GAAUA,EAAOmsD,KAC3BnsD,EAAOmsD,KAAO3K,EAAKkZ,GAAM8rB,GAAShlC,EAAM,IAC7C30B,EAAS,KAAMm7D,SAMnBrd,EAAIvuC,QAAUsrD,EAAc,WAAW,SAAU5wC,EAAMjqB,GACjC,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAETA,EAAO7jB,EAAM6jB,GAEb8wC,EAAUpB,GAAShlC,EAAM,YAAa,CAAC/kD,OAAQ,SAAS01C,MAAK,YAC3D,SAAS81C,IACPtd,EAAIpU,MAAK,SAAU9hE,EAAKsL,GAIlBA,IAAQA,EAAImoF,gBACdr7D,EAAS,KAAM,CAAC53B,IAAI,IAEpB8G,WAAWksF,EAAMnxC,EAAKqxC,UAAY,QAKxCF,SAIJtd,EAAIlQ,QAAUd,EAAW,WAAW,SAAU7iB,EAAMjqB,GAClD,IAAI16B,EAAOL,KAEX,SAASs2F,EAAUnuC,GACjB,IAAI2sC,EAAS,GACT9vC,EAAKktB,OACP4iB,EAAO5iB,MAAO,GAEZltB,EAAK+nB,cAEP+nB,EAAO/nB,aAAc,GAEnB/nB,EAAKi2B,SACP6Z,EAAO7Z,QAAS,GAElB6a,EAAUpB,GAAShlC,EAAM,YAAcmlC,GAAYC,IAAU,CAC3DnqF,OAAQ,OACR+9E,KAAM9rC,KAAK4H,UAAU,CAAEskB,KAAM9jB,EAAK8jB,SACjCzoB,MAAK,SAAUnyC,GACZ82C,EAAK+nB,aAAe/nB,EAAKirB,QAC3B/hE,EAAOnO,KAAKugD,QAAQ5rC,SAAQ,SAAUzG,GACpCA,EAAI66D,KAAKp0D,QAAQ2/E,OAGrBlsC,EAAG,KAAMj6C,EAAOnO,SACf26E,MAAMvyB,GAIX,SAASouC,IAEP,IACIC,EAAap2F,KAAKyM,KAAKm4C,EAAK8jB,KAAK1lE,OAlVf,IAmVlB6lE,EAAU,EACV3oB,EAAU,IAAIt+C,MAAMw0F,GAExB,SAASC,EAASC,GAChB,OAAO,SAAU/zF,EAAKsL,GAEpBqyC,EAAQo2C,GAAYzoF,EAAIqyC,UAClB2oB,IAAYutB,GAChBz7D,EAAS,KAAM,CAACulB,QAAS/gB,GAAQ+gB,MAKvC,IAAK,IAAIrkD,EAAI,EAAGA,EAAIu6F,EAAYv6F,IAAK,CACnC,IAAI06F,EAAUjzE,EAAKshC,EAAM,CAAC,OAAQ,cAAe,SAAU,WAC3D2xC,EAAQ7tB,KAAO9jB,EAAK8jB,KAAK/mE,MAlWL,GAkWW9F,EAC7BmE,KAAKY,IAAIgkD,EAAK8jB,KAAK1lE,OAnWD,IAmWUnH,EAAI,KAClC0sE,EAAQtoE,EAAMs2F,EAASF,EAASx6F,KAKpC,IAAI+4F,EAAQL,GAAOjlC,EAAM,IACrBknC,EAAkBxC,GAAmBY,GAGV,kBAApB4B,EAETN,GAAU,SAAU3zF,EAAKsL,GACnBtL,GACFyxF,GAAmBY,IAAS,EAC5BvqB,EACE9nE,EAAIyjE,OACJ,uEAGFmwB,MAEAnC,GAAmBY,IAAS,EAC5Bj6D,EAAS,KAAM9sB,OAGV2oF,EACTN,EAAUv7D,GAEVw7D,OAOJ1d,EAAIwD,MAAQ,SAAUthD,GACpB86D,IAAQx1C,MAAK,WACX,OAAO60C,EAASR,GAAShlC,EAAM,QAC9BrP,MAAK,SAAU01C,GAChB,OAAOA,EAAShO,UACf1nC,MAAK,SAAUokB,GAChBA,EAAK/U,KAAOglC,GAAShlC,EAAM,IAC3B30B,EAAS,KAAM0pC,MACdiW,MAAM3/C,IAGX89C,EAAI8E,MAAQ,SAAUzuD,EAAMyU,GAC1B,OAAOkyD,IAAQx1C,MAAK,WAClB,IAAIkP,EAA+B,MAAzBrgC,EAAKwkB,UAAU,EAAG,GAC1BihD,GAAOjlC,EAAMxgC,EAAKwkB,UAAU,IAC5BghD,GAAShlC,EAAMxgC,GACjB,OAAOgmE,EAAS3lC,EAAK5rB,OAOzBk1C,EAAI/7E,IAAM84F,EAAc,OAAO,SAAU91F,EAAIklD,EAAMjqB,GAE7B,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAKT,IAAI8vC,EAAS,GAoCb,SAAS+B,EAAiBjxB,GACxB,IAAI8W,EAAO9W,EAAIqH,aACX6pB,EAAYpa,GAAQ//E,OAAOwL,KAAKu0E,GACpC,GAAKA,GAASoa,EAAU1zF,OA4CxB,OA3iBN,SAAc2zF,EAAkBlqD,GAC9B,OAAO,IAAIpmB,SAAQ,SAAUqZ,EAASuM,GACpC,IAII1pC,EAJAotF,EAAU,EACVzuE,EAAU,EACVzN,EAAO,EACP1M,EAAM4vF,EAAiB3zF,OAQ3B,SAAS4zF,MACDnjF,IAAS1M,EAETxE,EACF0pC,EAAO1pC,GAEPm9B,IAGFm3D,IAIJ,SAASj9B,IACP+1B,IACAiH,IAIF,SAASE,EAAQC,GACfpH,IACAptF,EAAMA,GAAOw0F,EACbH,IAGF,SAASC,IACP,KAAOlH,EAAUljD,GAASvrB,EAAUna,GA9BpC4oF,IACAgH,EAAiBz1E,OAAa++B,KAAK2Z,EAAWk9B,GAkChDD,OA+fSG,CARgBN,EAAU/hF,KAAI,SAAUq4E,GAC7C,OAAO,WACL,OA/BJ,SAAmBA,GACjB,IAAIpgB,EAAM0P,EAAK0Q,GACXl+D,EAAOolE,GAAY1uB,EAAIM,KAAO,IAAM+vB,EAAmB7I,GACvD,QAAUxnB,EAAIO,KAClB,OAAO+uB,EAASR,GAAShlC,EAAMxgC,IAAOmxB,MAAK,SAAU01C,GACnD,YAAuB,IAAZv3E,GAA4BA,EAAQo/B,QAItCm4C,EAASnmB,OAHTmmB,EAAStjF,YAKjB4tC,MAAK,SAAUuvB,GAChB,OAAI5qB,EAAKirB,aAEgB,IAAZzxD,GAA4BA,EAAQo/B,UAC7CgyB,EAAKrxE,KAAOyuE,EAAIgM,cAEXpJ,GAEF,IAAInpD,SAAQ,SAAUqZ,GAC3BwwC,GAAaV,EAAM9vC,SAEpBugB,MAAK,SAAUtgD,UACTitE,EAAIE,YACJF,EAAI5pE,OACX4pE,EAAIjtE,KAAOA,KAMJs3F,CAAUjK,OAMS,IAtFhCpoC,EAAO7jB,EAAM6jB,IAKJktB,OACP4iB,EAAO5iB,MAAO,GAGZltB,EAAKm2B,YACP2Z,EAAO3Z,WAAY,GAGjBn2B,EAAKi2B,SACP6Z,EAAO7Z,QAAS,GAGdj2B,EAAK4kB,YACgB,QAAnB5kB,EAAK4kB,YACP5kB,EAAK4kB,UAAYhtB,KAAK4H,UAAUQ,EAAK4kB,YAEvCkrB,EAAOlrB,UAAY5kB,EAAK4kB,WAGtB5kB,EAAK/kD,MACP60F,EAAO70F,IAAM+kD,EAAK/kD,KAGhB+kD,EAAK2tB,YACPmiB,EAAOniB,UAAY3tB,EAAK2tB,WAItB3tB,EAAK6yB,aACPid,EAAOjd,WAAa7yB,EAAK6yB,YAG3B/3E,EAAKw0F,GAAYx0F,GAgEjBg2F,EADUpB,GAAShlC,EAAM5vD,EAAK+0F,GAAYC,KAC3Bz0C,MAAK,SAAUpyC,GAC5B,OAAOwY,QAAQqZ,UAAUugB,MAAK,WAC5B,GAAI2E,EAAK+nB,YACP,OAfuBuqB,EAeIrpF,EAAIlO,KAd/BiC,MAAM2lB,QAAQ2vE,GACT7wE,QAAQk5C,IAAI23B,EAAUviF,KAAI,SAAU6wD,GACzC,GAAIA,EAAIziE,GACN,OAAO0zF,EAAiBjxB,EAAIziE,QAI3B0zF,EAAiBS,GAR1B,IAA6BA,KAiBxBj3C,MAAK,WACNtlB,EAAS,KAAM9sB,EAAIlO,YAEpB26E,OAAM,SAAUl6E,GACjBA,EAAEgpE,MAAQ1pE,EACVi7B,EAASv6B,SAMbq4E,EAAIvsC,OAASspD,EAAc,UAAU,SAAUzc,EAASC,EAAWp0B,EAAMmD,GACvE,IAAIyd,EACqB,iBAAdwT,GAETxT,EAAM,CACJM,IAAKiT,EACLhT,KAAMiT,GAEY,mBAATp0B,IACTmD,EAAKnD,EACLA,EAAO,MAIT4gB,EAAMuT,EACmB,mBAAdC,GACTjxB,EAAKixB,EACLp0B,EAAO,KAEPmD,EAAKnD,EACLA,EAAOo0B,IAIX,IAAIR,EAAUhT,EAAIO,MAAQnhB,EAAK/kD,IAG/B61F,EAFUpB,GAAShlC,EAAM4kC,GAAY1uB,EAAIM,MAAQ,QAAU0S,EAE5C,CAACjuE,OAAQ,UAAWw9C,GAAIuyB,MAAMvyB,MAQ/C0wB,EAAI+C,cAAgBga,EAAc,iBAAiB,SAAUpsB,EAAOmP,EACV3zB,EAAMjqB,GAC1C,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAET,IAGIuyC,EAHAzC,EAAS9vC,EAAK/kD,IAAO,QAAU+kD,EAAK/kD,IAAO,GAC3CsvD,EAAMmlC,GAAShlC,EAAM4kC,GAAY9qB,IAAU,IAC3CysB,EAAmBtd,GAAgBmc,EAEvCI,EAAS3lC,EAAK,CAAC5kD,OAAQ,QAAQ01C,MAAK,SAAU01C,GAE5C,GADAwB,EAAcxB,EAASZ,QAAQr4F,IAAI,gBAC9Bi5F,EAAS5yF,GAGZ,YAAuB,IAAZqb,GAA4BA,EAAQo/B,QAItCm4C,EAASnmB,OAHTmmB,EAAStjF,SAHlB,MAAMsjF,KASP11C,MAAK,SAAUuvB,QAEO,IAAZpxD,GAA4BA,EAAQo/B,UAC7CgyB,EAAKrxE,KAAOg5F,GAEdx8D,EAAS,KAAM60C,MACd8K,OAAM,SAAU/3E,GACjBo4B,EAASp4B,SAKbk2E,EAAIK,iBAAoB0c,EAAc,oBAAoB,SAAUpsB,EACHmP,EACAC,EACA79C,GAG/D+6D,EAFUpB,GAAShlC,EAAM4kC,GAAY9qB,GAAS,IAC3BysB,EAAmBtd,IAAiB,QAAUC,EAClD,CAACjuE,OAAQ,UAAWowB,GAAU2/C,MAAM3/C,MAMrD89C,EAAIH,cAAgBkd,EAAc,iBAAiB,SAAUpsB,EAAOmP,EACVC,EAAQhJ,EACRrxE,EAAMw8B,GAC1C,mBAATx8B,IACTw8B,EAAWx8B,EACXA,EAAOqxE,EACPA,EAAOgJ,EACPA,EAAS,MAEX,IAAI94E,EAAKw0F,GAAY9qB,GAAS,IAAMysB,EAAmBtd,GACnDppB,EAAMmlC,GAAShlC,EAAM5vD,GAKzB,GAJI84E,IACFrpB,GAAO,QAAUqpB,GAGC,iBAAThJ,EAAmB,CAE5B,IAAIK,EACJ,IACEA,EAASvB,GAASkB,GAClB,MAAOjtE,GACP,OAAOo4B,EAASuxC,GAAYR,EACZ,4CAElB8D,EAAOK,EAASV,GAAmBU,EAAQ1xE,GAAQ,GAIrDu3F,EAAUvmC,EAAK,CACb4lC,QAAS,IAAIvX,GAAE,CAAC,eAAgBr/E,IAChCoM,OAAQ,MACR+9E,KAAM9Y,GACL70C,GAAU2/C,MAAM3/C,MAKrB89C,EAAI+D,UAAY,SAAUlQ,EAAK1nB,EAAMjqB,GAInC2xC,EAAI8L,UAAYxzB,EAAKwzB,UAErBqd,IAAQx1C,MAAK,WACX,OAAO55B,QAAQk5C,IAAI+M,EAAI5D,KAAK/zD,IAAIw/E,QAC/Bl0C,MAAK,WAEN,OAAOy1C,EAAUpB,GAAShlC,EAAM,cAAe,CAC7C/kD,OAAQ,OACR+9E,KAAM9rC,KAAK4H,UAAUkoB,IACpB3xC,MACF2/C,MAAM3/C,IAKX89C,EAAIN,KAAO,SAAU3S,EAAK5gB,EAAMjqB,GAC9B86D,IAAQx1C,MAAK,WACX,OAAOk0C,GAAwB3uB,MAC9BvlB,MAAK,WACN,OAAOy1C,EAAUpB,GAAShlC,EAAM4kC,GAAY1uB,EAAIM,MAAO,CACrDv7D,OAAQ,MACR+9E,KAAM9rC,KAAK4H,UAAUohB,QAEtBvlB,MAAK,SAAUnyC,GAChB6sB,EAAS,KAAM7sB,EAAOnO,SACrB26E,OAAM,SAAU/3E,GACjBA,EAAI6mE,MAAQ5D,GAAOA,EAAIM,IACvBnrC,EAASp4B,OAObk2E,EAAIpT,QAAUmwB,EAAc,WAAW,SAAU5wC,EAAMjqB,GACjC,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAKT,IACI0jC,EADAoM,EAAS,GAETnqF,EAAS,OALbq6C,EAAO7jB,EAAM6jB,IAOJ2tB,YACPmiB,EAAOniB,WAAY,GAIjB3tB,EAAK6yB,aACPid,EAAOjd,YAAa,GAGlB7yB,EAAK0yB,aACPod,EAAOpd,YAAa,GAGlB1yB,EAAK0gB,eACPovB,EAAOpvB,cAAe,GAIpB1gB,EAAK+nB,cACP+nB,EAAO/nB,aAAc,GAGnB/nB,EAAKxnD,MACPs3F,EAAOt3F,IAAMo/C,KAAK4H,UAAUQ,EAAKxnD,MAG/BwnD,EAAK62B,YACP72B,EAAK82B,SAAW92B,EAAK62B,WAGnB72B,EAAK82B,WACPgZ,EAAOhZ,SAAWl/B,KAAK4H,UAAUQ,EAAK82B,WAGpC92B,EAAK+2B,UACP/2B,EAAKg3B,OAASh3B,EAAK+2B,SAGjB/2B,EAAKg3B,SACP8Y,EAAO9Y,OAASp/B,KAAK4H,UAAUQ,EAAKg3B,cAGJ,IAAvBh3B,EAAKgqC,gBACd8F,EAAO9F,gBAAkBhqC,EAAKgqC,oBAGN,IAAfhqC,EAAKnY,QACdioD,EAAOjoD,MAAQmY,EAAKnY,YAGG,IAAdmY,EAAK/5B,OACd6pE,EAAO7pE,KAAO+5B,EAAK/5B,MAGrB,IAAIusE,EAAW3C,GAAYC,QAEF,IAAd9vC,EAAK78C,OACdwC,EAAS,OACT+9E,EAAO,CAACvgF,KAAM68C,EAAK78C,OAGrB2tF,EAAUpB,GAAShlC,EAAM,YAAc8nC,GAAW,CAC/C7sF,OAAQA,EACT+9E,KAAM9rC,KAAK4H,UAAUkkC,KACpBroC,MAAK,SAAUnyC,GACZ82C,EAAK0gB,cAAgB1gB,EAAK+nB,aAAe/nB,EAAKirB,QAChD/hE,EAAOnO,KAAKuiE,KAAK5tD,QAAQ2/E,IAE3Bt5D,EAAS,KAAM7sB,EAAOnO,SACrB26E,MAAM3/C,MAMX89C,EAAIjB,SAAW,SAAU5yB,GAMvB,IAAI+oC,EAAY,eAAgB/oC,EAAOA,EAAKyyC,WAnxBvB,KAqxBrBzyC,EAAO7jB,EAAM6jB,IAEJsyB,YAAgB,cAAetyB,IACtCA,EAAK0yC,UArxBa,KAwxBpB,IAAIC,EAAkB,YAAa3yC,EAAQA,EAAKzH,QAAU,IAGtD,YAAayH,GAAQA,EAAKzH,SAC3Bo6C,EAAiB3yC,EAAKzH,QA7xBA,MA8xBrBo6C,EAAiB3yC,EAAKzH,QA9xBD,KAkyBrB,cAAeyH,GAAQA,EAAK0yC,WAC5BC,EAAiB3yC,EAAK0yC,UAnyBD,MAoyBrBC,EAAiB3yC,EAAK0yC,UApyBD,KAuyBzB,IAAI5C,EAAS,GACT,YAAa9vC,GAAQA,EAAKzH,UAC5Bu3C,EAAOv3C,QAAUyH,EAAKzH,SAGxB,IAAI1Q,OAA+B,IAAfmY,EAAKnY,OAAyBmY,EAAKnY,MACnD+qD,EAAc/qD,EAqDlB,GAnDImY,EAAKnK,QACPi6C,EAAOj6C,MAAQmK,EAAKnK,QAGlBmK,EAAK0gB,cAAgB1gB,EAAK1wC,QAAiC,mBAAhB0wC,EAAK1wC,UAClDwgF,EAAOpvB,cAAe,GAGpB1gB,EAAK+nB,cACP+nB,EAAO/nB,aAAc,GAGnB/nB,EAAKsyB,aACPwd,EAAO+C,KAAO,YAGZ7yC,EAAK8yC,eACPhD,EAAOgD,aAAe9yC,EAAK8yC,cAGzB9yC,EAAK2tB,YACPmiB,EAAOniB,WAAY,GAGjB3tB,EAAK0yB,aACPod,EAAOpd,YAAa,GAIlB1yB,EAAK6yB,aACPid,EAAOjd,YAAa,GAGlB,cAAe7yB,GAEbA,EAAK0yC,YACP5C,EAAO4C,UAAY1yC,EAAK0yC,WAIxB1yC,EAAK1wC,QAAiC,iBAAhB0wC,EAAK1wC,SAC7BwgF,EAAOxgF,OAAS0wC,EAAK1wC,QAGnB0wC,EAAK9P,MAA6B,iBAAd8P,EAAK9P,OAC3B4/C,EAAOxgF,OAAS,QAChBwgF,EAAO5/C,KAAO8P,EAAK9P,MAKjB8P,EAAK4nB,cAA6C,iBAAtB5nB,EAAK4nB,aACnC,IAAK,IAAImrB,KAAc/yC,EAAK4nB,aAEtB5nB,EAAK4nB,aAAa9uE,eAAei6F,KACnCjD,EAAOiD,GAAc/yC,EAAK4nB,aAAamrB,IAK7C,IACIrP,EADA/9E,EAAS,MAGTq6C,EAAKi/B,SAGP6Q,EAAOxgF,OAAS,WAChB3J,EAAS,OACT+9E,EAAO,CAACzE,QAASj/B,EAAKi/B,UAGfj/B,EAAKk6B,WAEZ4V,EAAOxgF,OAAS,YAChB3J,EAAS,OACT+9E,EAAO,CAACxJ,SAAUl6B,EAAKk6B,WAGzB,IACI8Y,EADAC,EAAa,IAAI92F,GAKjBk2F,EAAY,SAAUtsB,EAAOhwC,GAC/B,IAAIiqB,EAAKkzC,QAAT,CAGApD,EAAO/pB,MAAQA,EAGa,iBAAjB+pB,EAAO/pB,QAChB+pB,EAAO/pB,MAAQnuB,KAAK4H,UAAUswC,EAAO/pB,QAGnC/lB,EAAK0yB,WACH7qC,IACFioD,EAAOjoD,MAAQ+qD,GAGjB9C,EAAOjoD,OAAUA,GAAS+qD,EAAc7J,EACtCA,EAAY6J,EAIhB,IAAIroC,EAAMmlC,GAAShlC,EAAM,WAAamlC,GAAYC,IAC9CqD,EAAY,CACdC,OAAQH,EAAWG,OACnBztF,OAAQA,EACR+9E,KAAM9rC,KAAK4H,UAAUkkC,IAEvBsP,EAAiBjtB,EAGb/lB,EAAKkzC,SAKTrC,IAAQx1C,MAAK,WACX,OAAOy1C,EAAUvmC,EAAK4oC,EAAWp9D,MAChC2/C,MAAM3/C,KAMPulB,EAAU,CAACA,QAAS,IAEpB+3C,EAAU,SAAU11F,EAAKsL,GAC3B,IAAI+2C,EAAKkzC,QAAT,CAGA,IAAII,EAAqB,EAEzB,GAAIrqF,GAAOA,EAAIqyC,QAAS,CACtBg4C,EAAqBrqF,EAAIqyC,QAAQl9C,OACjCk9C,EAAQq6B,SAAW1sE,EAAI0sE,SACvB,IAAI9wE,EAAU,KACVwrE,EAAU,KAGa,iBAAhBpnE,EAAIpE,UACbA,EAAUoE,EAAIpE,SAEgB,iBAArBy2C,EAAQq6B,UAAqD,iBAArBr6B,EAAQq6B,WACzDtF,EAAU/0B,EAAQq6B,UAIR31B,EAAK4nB,aACjB3+D,EAAIqyC,QAAUryC,EAAIqyC,QAAQhsC,QAAO,SAAUhY,GACzCs7F,IACA,IAAIxxF,EAAMqmE,GAAaznB,EAAbynB,CAAmBnwE,GAU7B,OATI8J,IACE4+C,EAAK0gB,cAAgB1gB,EAAK+nB,aAAe/nB,EAAKirB,QAChDokB,GAA8B/3F,GAE5B0oD,EAAK61B,aACPv6B,EAAQA,QAAQl7C,KAAK9I,GAEvB0oD,EAAKimB,SAAS3uE,EAAGuN,EAASwrE,IAErBjvE,UAEJ,GAAIzD,EAKT,OAFAqiD,EAAKkzC,SAAU,OACflzC,EAAKkwB,SAASvyE,GAMZsL,GAAOA,EAAI0sE,WACbqd,EAAiB/pF,EAAI0sE,UAGvB,IAAI4d,EAAY1rD,GAAS+qD,GAAe,GACrC3pF,GAAOqqF,EAAqBvK,GAC5B/oC,EAAe,aAEbA,EAAKsyB,YAAgBzqC,GAAS+qD,GAAe,IAAQW,EAKxDvzC,EAAKkwB,SAAS,KAAM50B,GAHpB,KAAU,WAAc+2C,EAAUW,EAAgBK,QAUtD,OAHAhB,EAAUryC,EAAK+lB,OAAS,EAAGstB,GAGpB,CACLvzD,OAAQ,WACNkgB,EAAKkzC,SAAU,EACfD,EAAWxa,WAQjB5E,EAAIS,SAAWsc,EAAc,YAAY,SAAUlpB,EAAK1nB,EAAMjqB,GAExC,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,IAIT8wC,EAAUpB,GAAShlC,EAAM,cAAe,CACtC/kD,OAAQ,OACR+9E,KAAM9rC,KAAK4H,UAAUkoB,IACpB3xC,GAAU2/C,MAAM3/C,MAGrB89C,EAAIuD,OAAS,SAAUrhD,GACrBA,KAGF89C,EAAIsE,SAAW,SAAUx5C,EAAS5I,GAChC+6D,EAAUpB,GAAShlC,EAAM,IAAK,CAAC/kD,OAAQ,WAAW01C,MAAK,SAAU0nC,GAC/DhtD,EAAS,KAAMgtD,MACdrN,OAAM,SAAU/3E,GAEE,MAAfA,EAAIyjE,OACNrrC,EAAS,KAAM,CAAC53B,IAAI,IAEpB43B,EAASp4B,OAgBjB,SAAS61F,GAAgB51F,GACvB5C,KAAKomE,OAAS,IACdpmE,KAAKxD,KAAO,oBACZwD,KAAK4C,QAAUA,EACf5C,KAAK8C,OAAQ,EACb,IACEL,MAAMg2F,kBAAkBz4F,KAAMw4F,IAC9B,MAAOh4F,KAKX,SAASk4F,GAAc91F,GACrB5C,KAAKomE,OAAS,IACdpmE,KAAKxD,KAAO,YACZwD,KAAK4C,QAAUA,EACf5C,KAAK8C,OAAQ,EACb,IACEL,MAAMg2F,kBAAkBz4F,KAAM04F,IAC9B,MAAOl4F,KAKX,SAASm4F,GAAa/1F,GACpB5C,KAAKomE,OAAS,IACdpmE,KAAKxD,KAAO,gBACZwD,KAAK4C,QAAUA,EACf5C,KAAK8C,OAAQ,EACb,IACEL,MAAMg2F,kBAAkBz4F,KAAM24F,IAC9B,MAAOn4F,KAKX,SAASo4F,GAAiBnwC,EAAS1tB,GAYjC,OAXIA,GACF0tB,EAAQpI,MAAK,SAAUpyC,GACrB,KAAU,WACR8sB,EAAS,KAAM9sB,SAEhB,SAAUi6C,GACX,KAAU,WACRntB,EAASmtB,SAIRO,EA2BT,SAASowC,GAActsF,EAAOusF,GAC5B,OAAO,WACL,IAAIn1F,EAAOtB,UACPqC,EAAO1E,KACX,OAAOuM,EAAM4c,KAAI,WACf,OAAO2vE,EAAe12F,MAAMsC,EAAMf,OAOxC,SAAS8pC,GAAKvqC,GACZ,IAAI61F,EAAS,IAAIxyB,EAAYrjE,GACzBgL,EAAS,IAAIlM,MAAM+2F,EAAOt2E,MAC1B3a,GAAS,EAIb,OAHAixF,EAAOrkF,SAAQ,SAAUxX,GACvBgR,IAASpG,GAAS5K,KAEbgR,EAGT,SAAS8qF,GAAejkF,GACtB,IAAI7G,EAAS,IAAIlM,MAAM+S,EAAI0N,MACvB3a,GAAS,EAIb,OAHAiN,EAAIL,SAAQ,SAAUxX,EAAOM,GAC3B0Q,IAASpG,GAAStK,KAEb0Q,EAGT,SAAS+qF,GAAmBz8F,GAI1B,OAAO,IAAIm8F,GAHG,WAAan8F,EACzB,gEAKJ,SAASu1C,GAAIphC,GAEX,IADA,IAAIzC,EAAS,EACJjS,EAAI,EAAGkL,EAAMwJ,EAAOvN,OAAQnH,EAAIkL,EAAKlL,IAAK,CACjD,IAAIo1D,EAAM1gD,EAAO1U,GACjB,GAAmB,iBAARo1D,EAAkB,CAC3B,IAAIrvD,MAAM2lB,QAAQ0pC,GAchB,MAAM4nC,GAAmB,QAZzB/qF,EAA2B,iBAAXA,EAAsB,CAACA,GAAUA,EACjD,IAAK,IAAI0+C,EAAI,EAAGssC,EAAO7nC,EAAIjuD,OAAQwpD,EAAIssC,EAAMtsC,IAAK,CAChD,IAAIusC,EAAO9nC,EAAIzE,GACf,GAAoB,iBAATusC,EACT,MAAMF,GAAmB,aACK,IAAd/qF,EAAO0+C,GACvB1+C,EAAO9I,KAAK+zF,GAEZjrF,EAAO0+C,IAAMusC,OAMQ,iBAAXjrF,EAChBA,GAAUmjD,EAEVnjD,EAAO,IAAMmjD,EAGjB,OAAOnjD,EArJT6mF,GAAUje,MAAQ,WAChB,OAAO,GAkBT,IAAS0hB,GAAiB/1F,OAY1B,IAASi2F,GAAej2F,OAYxB,IAASk2F,GAAcl2F,OA6GvB,IAAIN,GAAMkoE,EAAe5sE,KAAK,KAAM,OAChCkqB,GAAU3lB,MAAM2lB,QAChB6tB,GAASoH,KAAKC,MAElB,SAASu8C,GAAqBpvF,EAAM9E,GAClC,OAAOipE,GACL,WAAankE,EAAKT,QAAQ,QAAS,IAAM,KACzC,CACErE,KAAMA,EACN6sC,IAAKA,GACL5vC,IAAKA,GACLwlB,QAASA,GACT6tB,OAAQA,KAWd,SAAS6jD,KACPr5F,KAAKyoD,QAAU,IAAIhiC,SAAQ,SAAUihD,GAAUA,OAcjD,SAASljB,GAAU74B,GACjB,IAAKA,EACH,MAAO,YAIT,cAAeA,GACb,IAAK,WAGL,IAAK,SAEH,OAAOA,EAAMxd,WACf,QAEE,OAAOyuC,KAAK4H,UAAU74B,IAU5B,SAAS2tE,GAAWC,EAAUrV,EAAUE,EAAQoV,EAAWC,EAAWC,GACpE,IAEIC,EAFAC,EANN,SAA6BxV,EAAQoV,GAEnC,OAAOh1C,GAAU4/B,GAAU5/B,GAAUg1C,GAAa,YAI9BK,CAAoBzV,EAAQoV,GAGhD,IAAKC,IAEHE,EAAcJ,EAASO,aAAeP,EAASO,cAAgB,IAC/CF,GACd,OAAOD,EAAYC,GAIvB,IAAIG,EAAiBR,EAAS90B,OAAOpkB,MAAK,SAAUokB,GAElD,IAAIu1B,EAAYv1B,EAAK6X,QAAU,YAC5Bmd,EAAY,OAAStoB,GAAUyoB,IAkBlC,OAAOxrB,GAAOmrB,EAAU,UAAYG,GAdpC,SAAsB9zB,GACpBA,EAAIye,MAAQze,EAAIye,OAAS,GACzB,IAAI4V,EAAe/V,GACgB,IAA/B+V,EAAatlF,QAAQ,OACvBslF,EAAe/V,EAAW,IAAMA,GAElC,IAAIgW,EAASt0B,EAAIye,MAAM4V,GAAgBr0B,EAAIye,MAAM4V,IAAiB,GAElE,IAAIC,EAAOF,GAIX,OADAE,EAAOF,IAAa,EACbp0B,KAEuDvlB,MAAK,WACnE,OAAOk5C,EAAS1c,0BAA0Bmd,GAAW35C,MAAK,SAAUpyC,GAClE,IAAI26D,EAAK36D,EAAI26D,GACbA,EAAGyN,iBAAkB,EACrB,IAAInhC,EAAO,CACT14C,KAAMw9F,EACNpxB,GAAIA,EACJ2wB,SAAUA,EACVhjB,QAASgjB,EAAShjB,QAClB6N,OAAQA,EACRoV,UAAWA,GAEb,OAAOtkD,EAAK0zB,GAAG9rE,IAAI,kBAAkB49E,OAAM,SAAU/3E,GAEnD,GAAmB,MAAfA,EAAIyjE,OACN,MAAMzjE,KAEP09C,MAAK,SAAU85C,GAOhB,OANAjlD,EAAK41B,IAAMqvB,EAAaA,EAAWrvB,IAAM,EACrC6uB,GACFzkD,EAAK0zB,GAAGphE,KAAK,aAAa,kBACjBmyF,EAAYC,MAGhB1kD,cASf,OAHIykD,IACFA,EAAYC,GAAiBG,GAExBA,EAvGTV,GAAYx7F,UAAUsrB,IAAM,SAAU2vE,GAMpC,OALA94F,KAAKyoD,QAAUzoD,KAAKyoD,QAAQiyB,OAAM,eAE/Br6B,MAAK,WACN,OAAOy4C,OAEF94F,KAAKyoD,SAEd4wC,GAAYx7F,UAAUqvF,OAAS,WAC7B,OAAOltF,KAAKyoD,SAiGd,IAAI2xC,GAAmB,GACnBC,GAAgB,IAAIhB,GAGxB,SAASiB,GAAc99F,GAGrB,OAA8B,IAAvBA,EAAKmY,QAAQ,KAAc,CAACnY,EAAMA,GAAQA,EAAKkM,MAAM,KAS9D,SAAS6xF,GAAU3xB,EAAIpoE,GACrB,IACEooE,EAAG1jE,KAAK,QAAS1E,GACjB,MAAOmC,GACP0nE,EAAe,QACb,qMAIFA,EAAe,QAAS7pE,IA+4B5B,IAAIg6F,GACI,SAAUryF,EAAMwI,GACpB,OAAOohC,GAAIphC,IAFX6pF,GAKM,SAAUryF,EAAMwI,GACtB,OAAOA,EAAOvN,QANdo3F,GASM,SAAUryF,EAAMwI,GAWtB,MAAO,CACLohC,IAAUA,GAAIphC,GACd3P,IAAUZ,KAAKY,IAAIoB,MAAM,KAAMuO,GAC/BsV,IAAU7lB,KAAK6lB,IAAI7jB,MAAM,KAAMuO,GAC/BlL,MAAUkL,EAAOvN,OACjBq3F,OAbF,SAAgB9pF,GAEd,IADA,IAAI+pF,EAAU,EACLz+F,EAAI,EAAGkL,EAAMwJ,EAAOvN,OAAQnH,EAAIkL,EAAKlL,IAAK,CACjD,IAAIo1D,EAAM1gD,EAAO1U,GACjBy+F,GAAYrpC,EAAMA,EAEpB,OAAOqpC,EAOED,CAAO9pF,KA+CtB,IACIgqF,GA17BJ,SAAiCjB,EAAckB,EAAQC,EAASC,GAE9D,SAASC,EAAOnyB,EAAIptB,EAAKoqB,GAGvB,IACEpqB,EAAIoqB,GACJ,MAAOplE,GACP+5F,GAAU3xB,EAAIpoE,IAIlB,SAASw6F,EAAUpyB,EAAIptB,EAAKrzC,EAAMwI,EAAQsqF,GAKxC,IACE,MAAO,CAAC70C,OAAS5K,EAAIrzC,EAAMwI,EAAQsqF,IACnC,MAAOz6F,GAEP,OADA+5F,GAAU3xB,EAAIpoE,GACP,CAACsC,MAAOtC,IAInB,SAAS06F,EAAmB32C,EAAGwX,GAC7B,IAAIo/B,EAAa7a,GAAQ/7B,EAAE/mD,IAAKu+D,EAAEv+D,KAClC,OAAsB,IAAf29F,EAAmBA,EAAa7a,GAAQ/7B,EAAErnD,MAAO6+D,EAAE7+D,OAG5D,SAASk+F,EAAa96C,EAASzT,EAAO5hB,GAEpC,OADAA,EAAOA,GAAQ,EACM,iBAAV4hB,EACFyT,EAAQv+C,MAAMkpB,EAAM4hB,EAAQ5hB,GAC1BA,EAAO,EACTq1B,EAAQv+C,MAAMkpB,GAEhBq1B,EAGT,SAAS+6C,EAAW11B,GAClB,IAAI/8D,EAAM+8D,EAAIzoE,MAId,OADa0L,GAAsB,iBAARA,GAAoBA,EAAIs9D,KAAQP,EAAI7lE,GAiBjE,SAASw7F,EAAuBt2C,GAC9B,OAAO,SAAU/2C,GAIf,OAHI+2C,EAAK0gB,cAAgB1gB,EAAK+nB,aAAe/nB,EAAKirB,QAftD,SAAuChiE,GACrCA,EAAIq0D,KAAK5tD,SAAQ,SAAUixD,GACzB,IAAI+W,EAAO/W,EAAIC,KAAOD,EAAIC,IAAIqH,aACzByP,GAGL//E,OAAOwL,KAAKu0E,GAAMhoE,SAAQ,SAAU04E,GAClC,IAAIpgB,EAAM0P,EAAK0Q,GACf1Q,EAAK0Q,GAAUrtF,KAAO0vE,GAAazC,EAAIjtE,KAAMitE,EAAIgM,oBAQjDqb,CAA8BpmF,GAEzBA,GAIX,SAASstF,EAAaC,EAAWx2C,EAAM8vC,EAAQ2G,GAE7C,IAAI7yF,EAAMo8C,EAAKw2C,QACI,IAAR5yF,IACL6yF,IACF7yF,EAAMkoD,mBAAmBlU,KAAK4H,UAAU57C,KAE1CksF,EAAO1vF,KAAKo2F,EAAY,IAAM5yF,IAIlC,SAAS8yF,EAAcC,GACrB,QAAgC,IAArBA,EAAkC,CAC3C,IAAIC,EAAW33F,OAAO03F,GAEtB,OAAKz3F,MAAM03F,IAAaA,IAAa79E,SAAS49E,EAAkB,IAGvDA,EAFAC,GA2Bb,SAASC,EAAqBl4D,EAAS6X,GACrC,IAAIsgD,EAAen4D,EAAQ+zC,WAAa,SAAW,WAC/CqkB,EAAap4D,EAAQ+zC,WAAa,WAAa,SAEnD,QAAqC,IAA1B/zC,EAAQm4D,SACc,IAAxBn4D,EAAQo4D,IACfzb,GAAQ38C,EAAQm4D,GAAen4D,EAAQo4D,IAAe,EACtD,MAAM,IAAIvD,GAAgB,mGAErB,GAAIh9C,EAAItqC,SAA6B,IAAnByyB,EAAQzyB,OAAkB,CACjD,GAAIyyB,EAAQ+hC,aACV,MAAM,IAAI8yB,GAAgB,6CACrB,GAAI70D,EAAQx7B,MAAQw7B,EAAQx7B,KAAK/E,OAAS,IAC9CugC,EAAQvB,QAAUuB,EAAQq4D,YAC3B,MAAM,IAAIxD,GAAgB,6DAI9B,CAAC,cAAe,QAAS,QAAQ9jF,SAAQ,SAAUunF,GACjD,IAAIn5F,EAhCR,SAA8BooB,GAC5B,GAAIA,EAAQ,CACV,GAAsB,iBAAXA,EACT,OAAQ,IAAIstE,GAAgB,+BAC1BttE,EAAS,KAEb,GAAIA,EAAS,EACX,OAAO,IAAIstE,GAAgB,wCACnBttE,EAAS,MAwBPgxE,CAAqBv4D,EAAQs4D,IACzC,GAAIn5F,EACF,MAAMA,KA+IZ,SAASq5F,EAAWj/F,GAClB,OAAO,SAAUgrD,GAEf,GAAsB,MAAlBA,EAAOke,OACT,OAAOlpE,EAEP,MAAMgrD,GAQZ,SAASk0C,EAAiB5yB,EAAOt0B,EAAMmnD,GACrC,IAAIC,EAAY,cAAgB9yB,EAC5B+yB,EAAiB,CAACr2B,IAAKo2B,EAAWn0F,KAAM,IACxCq0F,EAAUH,EAAwBv/F,IAAI0sE,GACtCizB,EAA2BD,EAAQ,GA+DvC,OAnZJ,SAAkBnjD,GAGhB,OAA0B,IAAnBA,EAAQj2C,QAAgB,MAAMqG,KAAK4vC,EAAQ,GAAGp5C,KAqV7Cy8F,CAHQF,EAAQ,IAMX/1E,QAAQqZ,QAAQy8D,GAElBrnD,EAAK0zB,GAAG9rE,IAAIw/F,GAAW5hB,MAAMyhB,EAAWI,KAsD7Bl8C,MAAK,SAAUuqC,GACjC,OApDF,SAAyBA,GACvB,OAAKA,EAAQziF,KAAK/E,OAIX8xC,EAAK0zB,GAAGnD,QAAQ,CACrBt9D,KAAMyiF,EAAQziF,KACdu9D,cAAc,IAJPj/C,QAAQqZ,QAAQ,CAACwiC,KAAM,KAiDzBq6B,CAAgB/R,GAASvqC,MAAK,SAAUu8C,GAC7C,OA1CJ,SAA6BhS,EAASgS,GAIpC,IAHA,IAAIC,EAAS,GACTC,EAAU,IAAIv2B,EAETtqE,EAAI,EAAGkL,EAAMy1F,EAAUt6B,KAAKl/D,OAAQnH,EAAIkL,EAAKlL,IAAK,CACzD,IACI2pE,EADMg3B,EAAUt6B,KAAKrmE,GACX2pE,IACd,GAAKA,IAGLi3B,EAAOz3F,KAAKwgE,GACZk3B,EAAQ3zE,IAAIy8C,EAAIM,KAChBN,EAAIqS,UAAYwkB,EAAyBn0F,IAAIs9D,EAAIM,MAC5CN,EAAIqS,UAAU,CACjB,IAAI8kB,EAAWN,EAAyB3/F,IAAI8oE,EAAIM,KAC5C,UAAW62B,IACbn3B,EAAI1oE,MAAQ6/F,EAAS7/F,QAI3B,IAAI8/F,EAAUhE,GAAeyD,GAiB7B,OAhBAO,EAAQtoF,SAAQ,SAAUlX,GACxB,IAAKs/F,EAAQx0F,IAAI9K,GAAM,CAErB,IAAIy/F,EAAQ,CACV/2B,IAAK1oE,GAEHu/F,EAAWN,EAAyB3/F,IAAIU,GACxC,UAAWu/F,IACbE,EAAM//F,MAAQ6/F,EAAS7/F,OAEzB2/F,EAAOz3F,KAAK63F,OAGhBrS,EAAQziF,KAAOslC,GAAKuvD,EAAQj5F,OAAO6mF,EAAQziF,OAC3C00F,EAAOz3F,KAAKwlF,GAELiS,EAKEK,CAAoBtS,EAASgS,SAyB1C,SAASO,EAASjoD,GAChB,IAAIgvC,EAA2B,iBAAThvC,EAAoBA,EAAOA,EAAK14C,KAClD+P,EAAQ6tF,GAAiBlW,GAI7B,OAHK33E,IACHA,EAAQ6tF,GAAiBlW,GAAY,IAAImV,IAEpC9sF,EAGT,SAAS6wF,EAAWloD,GAClB,OAAO2jD,GAAcsE,EAASjoD,IAAO,WACnC,OAIJ,SAA2BA,GAEzB,IAAImoD,EACAz3B,EAYJ,IAAIwe,EAASwW,EAAO1lD,EAAKkvC,QAVzB,SAAc5mF,EAAKN,GACjB,IAAIkpD,EAAS,CAACtmD,GAAI8lE,EAAIM,IAAK1oE,IAAK+iF,GAAa/iF,IAGzC,MAAON,IACTkpD,EAAOlpD,MAAQqjF,GAAarjF,IAE9BmgG,EAAWj4F,KAAKghD,MAKdk3C,EAAapoD,EAAK41B,KAAO,EAE7B,SAAS2K,EAAc4mB,EAAyBvxB,GAC9C,OAAO,WACL,OAtDN,SAAuB51B,EAAMmnD,EAAyBvxB,GAEpD,OAAO51B,EAAK0zB,GAAG9rE,IADA,kBAEZ49E,MAAMyhB,EAAW,CAACj2B,IAFN,iBAEqB4E,IAAK,KACtCzqB,MAAK,SAAU85C,GACd,IAAIlK,EAAS+I,GAAeqD,GAC5B,OAAO51E,QAAQk5C,IAAIswB,EAAOl7E,KAAI,SAAUy0D,GACtC,OAAO4yB,EAAiB5yB,EAAOt0B,EAAMmnD,OACnCh8C,MAAK,SAAUk9C,GACjB,IAAIC,EAAgBj+D,GAAQg+D,GAI5B,OAHApD,EAAWrvB,IAAMA,EACjB0yB,EAAcp4F,KAAK+0F,GAEZjlD,EAAK0zB,GAAGmP,SAAS,CAACjP,KAAO00B,UAyC3BC,CAAcvoD,EAAMmnD,EAAyBvxB,IAIxD,IAAIv+D,EAAQ,IAAI8sF,GAEhB,SAASqE,IACP,OAAOxoD,EAAKqkD,SAASlgD,QAAQ,CAC3BwhC,aAAa,EACblI,WAAW,EACXjN,cAAc,EACd7qB,MAAO,WACPkwB,MAAOuyB,EACPzwD,MAvemB,KAwelBwT,KAAK0pB,GAGV,SAASA,EAAagsB,GACpB,IAAIz1C,EAAUy1C,EAASz1C,QACvB,GAAKA,EAAQl9C,OAAb,CAGA,IAAIi5F,EAQN,SAAuC/7C,GAErC,IADA,IAAI+7C,EAA0B,IAAI71B,EACzBvqE,EAAI,EAAGkL,EAAMm5C,EAAQl9C,OAAQnH,EAAIkL,EAAKlL,IAAK,CAClD,IAAI43D,EAASvT,EAAQrkD,GACrB,GAA0B,MAAtB43D,EAAO+R,IAAIM,IAAI,GAAY,CAC7Bm3B,EAAa,IACbz3B,EAAM/R,EAAO+R,KAEJqS,UACP8iB,EAAO7lD,EAAKqkD,SAAUnV,EAAQxe,GAEhCy3B,EAAW9rF,KAAK2pF,GAEhB,IAAIuB,EAA2BkB,EAA+BN,GAC9DhB,EAAwB51F,IAAIotD,EAAO+R,IAAIM,IAAK,CAC1Cu2B,EACA5oC,EAAOxa,UAGXikD,EAAazpC,EAAOiX,IAEtB,OAAOuxB,EA7BuBuB,CAA8Bt9C,GAE5D,GADA/zC,EAAM4c,IAAIssD,EAAc4mB,EAAyBiB,MAC7Ch9C,EAAQl9C,OAlfS,IAqfrB,OAAOs6F,KA2BT,SAASC,EAA+BN,GAGtC,IAFA,IACI5O,EADAgO,EAA2B,IAAIj2B,EAE1BvqE,EAAI,EAAGkL,EAAMk2F,EAAWj6F,OAAQnH,EAAIkL,EAAKlL,IAAK,CACrD,IAAI4hG,EAAkBR,EAAWphG,GAC7B6hG,EAAa,CAACD,EAAgBrgG,IAAKqgG,EAAgB/9F,IACnD7D,EAAI,GAA+C,IAA1CqkF,GAAQud,EAAgBrgG,IAAKixF,IACxCqP,EAAW14F,KAAKnJ,GAElBwgG,EAAyBh2F,IAAIo7E,GAAkBic,GAAaD,GAC5DpP,EAAUoP,EAAgBrgG,IAE5B,OAAOi/F,EAGT,OAAOiB,IAAmBr9C,MAAK,WAC7B,OAAO9zC,EAAM2gF,YACZ7sC,MAAK,WACNnL,EAAK41B,IAAMwyB,KAjGJS,CAAkB7oD,KADpB2jD,GAwJT,SAASmF,EAAU9oD,EAAM8P,GACvB,OAAO6zC,GAAcsE,EAASjoD,IAAO,WACnC,OAIJ,SAA0BA,EAAM8P,GAC9B,IAAIi5C,EACAC,EAAehpD,EAAKskD,YAA6B,IAAhBx0C,EAAK9zC,OACtC+Z,EAAO+5B,EAAK/5B,MAAQ,OACC,IAAd+5B,EAAK78C,MAAyB68C,EAAK78C,KAAK/E,SAEjD4hD,EAAKnY,MAAQ,SACNmY,EAAK78C,MAGd,SAASg2F,EAAcC,GAErB,OADAA,EAAS14B,cAAe,EACjBxwB,EAAK0zB,GAAGnD,QAAQ24B,GAAU/9C,MAAK,SAAUpyC,GAE9C,OADAgwF,EAAYhwF,EAAI2hF,WACT3hF,EAAIq0D,KAAKvtD,KAAI,SAAU7G,GAM5B,GAAI,UAAWA,EAAO03D,KAAmC,iBAArB13D,EAAO03D,IAAI1oE,OACxB,OAArBgR,EAAO03D,IAAI1oE,MAAgB,CAC3B,IAAIiL,EAAOxL,OAAOwL,KAAK+F,EAAO03D,IAAI1oE,OAAOqU,OAGrC8sF,EAAe,CAAC,KAAM,MAAO,SACjC,KAAMl2F,EAAOk2F,GAAgBl2F,EAAOk2F,GAClC,OAAOnwF,EAAO03D,IAAI1oE,MAItB,IAAIohG,EA38Jd,SAA8Bh6C,GAM5B,IALA,IAAIvhD,EAAQ,GACRu3D,EAAY,GACZr+D,EAAI,IAGK,CACX,IAAI0+D,EAAiBrW,EAAIroD,KACzB,GAAuB,OAAnB0+D,EAQJ,OAAQA,GACN,IAAK,IACH53D,EAAMqC,KAAK,MACX,MACF,IAAK,IACHrC,EAAMqC,KAAgB,MAAXk/C,EAAIroD,IACfA,IACA,MACF,IAAK,IACH,IAAI2+D,EAAYmnB,GAAYz9B,EAAKroD,GACjC8G,EAAMqC,KAAKw1D,EAAUvJ,KACrBp1D,GAAK2+D,EAAUx3D,OACf,MACF,IAAK,IAGH,IAFA,IAAIm7F,EAAY,KAEH,CACX,IAAItjC,EAAK3W,EAAIroD,GACb,GAAW,OAAPg/D,EACF,MAEFsjC,GAAatjC,EACbh/D,IAKFsiG,EAAYA,EAAUh1F,QAAQ,gBAAiB,MAC5CA,QAAQ,gBAAiB,KACzBA,QAAQ,gBAAiB,KAE5BxG,EAAMqC,KAAKm5F,GACX,MACF,IAAK,IACH,IAAIrjC,EAAe,CAAE9vD,QAAS,GAAItD,MAAO/E,EAAMK,QAC/CL,EAAMqC,KAAK81D,EAAa9vD,SACxBkvD,EAAUl1D,KAAK81D,GACf,MACF,IAAK,IACH,IAAIC,EAAa,CAAE/vD,QAAS,GAAItD,MAAO/E,EAAMK,QAC7CL,EAAMqC,KAAK+1D,EAAW/vD,SACtBkvD,EAAUl1D,KAAK+1D,GACf,MAEF,QACE,MAAM,IAAI14D,MACR,4DACEk4D,OAvDR,CACE,GAAqB,IAAjB53D,EAAMK,OACR,OAAOL,EAAMgF,MAEbA,GAAIhF,EAAOu3D,KA+7JekkC,CAAqBtwF,EAAO03D,IAAIM,KACxD,MAAO,CACL1oE,IAAK8gG,EAAkB,GACvBx+F,GAAIw+F,EAAkB,GACtBphG,MAAQ,UAAWgR,EAAO03D,IAAM13D,EAAO03D,IAAI1oE,MAAQ,YAM3D,SAASuhG,EAAkBn8B,GACzB,IAAIo8B,EAcJ,GAZEA,EADER,EAnGR,SAAoBhpD,EAAMoL,EAAS3c,GACL,IAAxBA,EAAQq4D,oBACHr4D,EAAQq4D,YAGjB,IAAI2C,EAAch7D,EAAQvB,OAASuB,EAAQq4D,YAEvCxC,EAAYqB,EAAQ3lD,EAAKskD,WAEzB1vC,EAAS,GACT80C,EAAM16F,MAAMy/B,EAAQq4D,aAAe/3F,OAAO46F,kBAC5Cl7D,EAAQq4D,YACV17C,EAAQ5rC,SAAQ,SAAUlU,GACxB,IAAImwB,EAAOm5B,EAAOA,EAAO1mD,OAAS,GAC9B07F,EAAWH,EAAcn+F,EAAEhD,IAAM,KAOrC,GAJImhG,GAAe38F,MAAM2lB,QAAQm3E,KAC/BA,EAAWA,EAAS/8F,MAAM,EAAG68F,IAG3BjuE,GAA6C,IAArC2vD,GAAQ3vD,EAAKmuE,SAAUA,GAGjC,OAFAnuE,EAAKxoB,KAAK/C,KAAK,CAAC5E,EAAEhD,IAAKgD,EAAEV,UACzB6wB,EAAKhgB,OAAOvL,KAAK5E,EAAEtD,OAGrB4sD,EAAO1kD,KAAK,CACV+C,KAAM,CAAC,CAAC3H,EAAEhD,IAAKgD,EAAEV,KACjB6Q,OAAQ,CAACnQ,EAAEtD,OACX4hG,SAAUA,OAGdx+C,EAAU,GACV,IAAK,IAAIrkD,EAAI,EAAGkL,EAAM2iD,EAAO1mD,OAAQnH,EAAIkL,EAAKlL,IAAK,CACjD,IAAIuE,EAAIspD,EAAO7tD,GACX8iG,EAAY/D,EAAU9lD,EAAKqkD,SAAUC,EAAWh5F,EAAE2H,KAAM3H,EAAEmQ,QAAQ,GACtE,GAAIouF,EAAUj8F,OAASi8F,EAAUj8F,iBAAiB61F,GAEhD,MAAMoG,EAAUj8F,MAElBw9C,EAAQl7C,KAAK,CAEXlI,MAAO6hG,EAAUj8F,MAAQ,KAAOi8F,EAAU34C,OAC1C5oD,IAAKgD,EAAEs+F,WAIX,MAAO,CAACx8B,KAAM84B,EAAa96C,EAAS3c,EAAQkJ,MAAOlJ,EAAQ1Y,OAqDxC+zE,CAAW9pD,EAAMotB,EAAMtd,GAEvB,CACb4qC,WAAYqO,EACZprF,OAAQoY,EACRq3C,KAAMA,GAINtd,EAAK6yB,aACP6mB,EAAa7mB,WAAa3iC,EAAK41B,KAE7B9lB,EAAK0gB,aAAc,CACrB,IAAIuqB,EAASxiD,GAAK60B,EAAKvtD,IAAIsmF,IAE3B,OAAOnmD,EAAKqkD,SAAS9zB,QAAQ,CAC3Bt9D,KAAM8nF,EACNvqB,cAAc,EACdiN,UAAW3tB,EAAK2tB,UAChB5F,YAAa/nB,EAAK+nB,YAClBkD,OAAQjrB,EAAKirB,SACZ5vB,MAAK,SAAU4+C,GAChB,IAAIC,EAAe,IAAI14B,EAWvB,OAVAy4B,EAAW38B,KAAK5tD,SAAQ,SAAUixD,GAChCu5B,EAAaz4F,IAAIk/D,EAAI7lE,GAAI6lE,EAAIC,QAE/BtD,EAAK5tD,SAAQ,SAAUixD,GACrB,IAAI6D,EAAQ6xB,EAAW11B,GACnBC,EAAMs5B,EAAapiG,IAAI0sE,GACvB5D,IACFD,EAAIC,IAAMA,MAGP84B,KAGT,OAAOA,EAIX,QAAyB,IAAd15C,EAAK78C,KAAsB,CACpC,IACIg3F,EADOn6C,EAAK78C,KACS4M,KAAI,SAAUvX,GACrC,IAAI4gG,EAAW,CACbtiB,SAAW+F,GAAkB,CAACrkF,IAC9Bw+E,OAAW6F,GAAkB,CAACrkF,EAAK,MAMrC,OAHIwnD,EAAK6yB,aACPumB,EAASvmB,YAAa,GAEjBsmB,EAAcC,MAEvB,OAAO33E,QAAQk5C,IAAIw/B,GAAe9+C,KAAK9gB,IAAS8gB,KAAKo+C,GAErD,IAOI3iB,EACAE,EARAoiB,EAAW,CACb1mB,WAAa1yB,EAAK0yB,YAyBpB,GAtBI1yB,EAAK6yB,aACPumB,EAASvmB,YAAa,GAIpB,cAAe7yB,IACjB82B,EAAW92B,EAAK62B,WAEd,aAAc72B,IAChB82B,EAAW92B,EAAK82B,UAEd,YAAa92B,IACfg3B,EAASh3B,EAAK+2B,SAEZ,WAAY/2B,IACdg3B,EAASh3B,EAAKg3B,aAEQ,IAAbF,IACTsiB,EAAStiB,SAAW92B,EAAK0yB,WACvBmK,GAAkB,CAAC/F,EAAU,KAC7B+F,GAAkB,CAAC/F,UAED,IAAXE,EAAwB,CACjC,IAAI+S,GAAsC,IAAvB/pC,EAAKgqC,cACpBhqC,EAAK0yB,aACPqX,GAAgBA,GAGlBqP,EAASpiB,OAAS6F,GAChBkN,EAAe,CAAC/S,EAAQ,IAAM,CAACA,IAEnC,QAAwB,IAAbh3B,EAAKxnD,IAAqB,CACnC,IAAI4hG,EAAWvd,GAAkB,CAAC78B,EAAKxnD,MACnC6hG,EAASxd,GAAkB,CAAC78B,EAAKxnD,IAAK,KACtC4gG,EAAS1mB,YACX0mB,EAASpiB,OAASojB,EAClBhB,EAAStiB,SAAWujB,IAEpBjB,EAAStiB,SAAWsjB,EACpBhB,EAASpiB,OAASqjB,GAStB,OANKnB,IACuB,iBAAfl5C,EAAKnY,QACduxD,EAASvxD,MAAQmY,EAAKnY,OAExBuxD,EAASnzE,KAAOA,GAEXkzE,EAAcC,GAAU/9C,KAAKo+C,GA3J7Ba,CAAiBpqD,EAAM8P,KADzB6zC,GA+NT,SAAS0G,EAAc32B,EAAIptB,EAAKwJ,GAE9B,GAAyB,mBAAd4jB,EAAG42B,OACZ,OA1gBJ,SAAqB52B,EAAIptB,EAAKwJ,GAC5B,OAAO,IAAIv+B,SAAQ,SAAUqZ,EAASuM,GACpCu8B,EAAG42B,OAAOhkD,EAAKwJ,GAAM,SAAUriD,EAAKsL,GAClC,GAAItL,EACF,OAAO0pC,EAAO1pC,GAEhBm9B,EAAQ7xB,SAogBHwxF,CAAY72B,EAAIptB,EAAKwJ,GAE9B,GAAIqoB,GAASzE,GACX,OA9nBJ,SAAmBA,EAAIptB,EAAKwJ,GAE1B,IACI0jC,EAEAvlF,EAAIijE,EAHJ0uB,EAAS,GAETnqF,EAAS,MA+Bb,GAxBA4wF,EAAa,SAAUv2C,EAAM8vC,GAC7ByG,EAAa,eAAgBv2C,EAAM8vC,GACnCyG,EAAa,cAAev2C,EAAM8vC,GAClCyG,EAAa,QAASv2C,EAAM8vC,GAC5ByG,EAAa,aAAcv2C,EAAM8vC,GACjCyG,EAAa,QAASv2C,EAAM8vC,GAC5ByG,EAAa,cAAev2C,EAAM8vC,GAClCyG,EAAa,OAAQv2C,EAAM8vC,GAC3ByG,EAAa,QAASv2C,EAAM8vC,GAC5ByG,EAAa,YAAav2C,EAAM8vC,GAChCyG,EAAa,WAAYv2C,EAAM8vC,GAAQ,GACvCyG,EAAa,YAAav2C,EAAM8vC,GAAQ,GACxCyG,EAAa,SAAUv2C,EAAM8vC,GAAQ,GACrCyG,EAAa,UAAWv2C,EAAM8vC,GAAQ,GACtCyG,EAAa,gBAAiBv2C,EAAM8vC,GACpCyG,EAAa,MAAOv2C,EAAM8vC,GAAQ,GAClCyG,EAAa,aAAcv2C,EAAM8vC,GAIjCA,EAAoB,MADpBA,EAASA,EAAO/rF,KAAK,MACI,GAAK,IAAM+rF,OAIX,IAAd9vC,EAAK78C,KAAsB,CACpC,IAIIu3F,EACF,QAAU5uC,mBAAmBlU,KAAK4H,UAAUQ,EAAK78C,OAC/Cu3F,EAAat8F,OAAS0xF,EAAO1xF,OAAS,GANrB,IASnB0xF,IAAyB,MAAdA,EAAO,GAAa,IAAM,KAAO4K,GAE5C/0F,EAAS,OACU,iBAAR6wC,EACTktC,EAAO,CAACvgF,KAAM68C,EAAK78C,MAEnBqzC,EAAIrzC,KAAO68C,EAAK78C,MAMtB,GAAmB,iBAARqzC,EAAkB,CAC3B,IAAIgyB,EAAQ8sB,GAAc9+C,GAC1B,OAAOotB,EAAG+U,MAAM,WAAanQ,EAAM,GAAK,UAAYA,EAAM,GAAKsnB,EAAQ,CACrEK,QAAS,IAAIvX,GAAE,CAAC,eAAgB,qBAChCjzE,OAAQA,EACR+9E,KAAM9rC,KAAK4H,UAAUkkC,KACpBroC,MAAK,SAAU01C,GAGhB,OAFA5yF,EAAK4yF,EAAS5yF,GACdijE,EAAS2vB,EAAS3vB,OACX2vB,EAAShO,UACf1nC,MAAK,SAAUnyC,GAChB,IAAK/K,EAEH,MADA+K,EAAOk4D,OAASA,EACVoG,GAA0Bt+D,GASlC,OANAA,EAAOo0D,KAAK5tD,SAAQ,SAAUixD,GAE5B,GAAIA,EAAIzoE,OAASyoE,EAAIzoE,MAAM4F,OAA6B,yBAApB6iE,EAAIzoE,MAAM4F,MAC5C,MAAM,IAAIL,MAAMkjE,EAAIzd,WAGjBh6C,KACNmyC,KAAKi7C,EAAuBt2C,IAajC,OATA0jC,EAAOA,GAAQ,GACf/rF,OAAOwL,KAAKqzC,GAAK9mC,SAAQ,SAAUlX,GAC7BwE,MAAM2lB,QAAQ6zB,EAAIh+C,IACpBkrF,EAAKlrF,GAAOg+C,EAAIh+C,GAEhBkrF,EAAKlrF,GAAOg+C,EAAIh+C,GAAK2Q,cAIlBy6D,EAAG+U,MAAM,aAAemX,EAAQ,CACrCK,QAAS,IAAIvX,GAAE,CAAC,eAAgB,qBAChCjzE,OAAQ,OACR+9E,KAAM9rC,KAAK4H,UAAUkkC,KACpBroC,MAAK,SAAU01C,GAGhB,OAFE5yF,EAAK4yF,EAAS5yF,GACdijE,EAAS2vB,EAAS3vB,OACb2vB,EAAShO,UACf1nC,MAAK,SAAUnyC,GAChB,IAAK/K,EAEH,MADA+K,EAAOk4D,OAASA,EACVoG,GAA0Bt+D,GAElC,OAAOA,KACNmyC,KAAKi7C,EAAuBt2C,IAmhBtB26C,CAAU/2B,EAAIptB,EAAKwJ,GAG5B,GAAmB,iBAARxJ,EAoBT,OAlBAqgD,EAAqB72C,EAAMxJ,GAE3B6+C,GAAclxE,KAAI,WAQhB,OAPwBmwE,GACP1wB,EACA,sBACFptB,EAAIzmC,IACDymC,EAAItqC,QACJ,EACGwoF,GACIr5C,MAAK,SAAUnL,GACtC,OApiCGuT,EAoiCQ20C,EAAWloD,GAAMmL,MAAK,WAC/B,OAAO29C,EAAU9oD,EAAM8P,MAriCb46C,EAsiCR,WACF,OAAO1qD,EAAK0zB,GAAGzW,WAtiClB1J,EAAQpI,MAAK,SAAUpyC,GAC5B,OAAO2xF,IAAsBv/C,MAAK,WAChC,OAAOpyC,QAER,SAAUi6C,GACX,OAAO03C,IAAsBv/C,MAAK,WAChC,MAAM6H,QAPZ,IAAaO,EAASm3C,QA2iCTvF,GAAcnN,SAGrB,IAAI+M,EAAez+C,EACfgyB,EAAQ8sB,GAAcL,GACtB4F,EAAgBryB,EAAM,GACtB0W,EAAW1W,EAAM,GACrB,OAAO5E,EAAG9rE,IAAI,WAAa+iG,GAAex/C,MAAK,SAAUulB,GACvD,IAAIpqB,EAAMoqB,EAAIye,OAASze,EAAIye,MAAMH,GAEjC,IAAK1oC,EAEH,MAAM,IAAIk9C,GAAc,QAAU9yB,EAAIM,IAAM,sBAC1Cge,GAaJ,OAVA4W,EAAcl1B,EAAKse,GACnB2X,EAAqB72C,EAAMxJ,GAEH89C,GACP1wB,EACAqxB,EACFz+C,EAAIzmC,IACDymC,EAAItqC,QACJ,EACGwoF,GACIr5C,MAAK,SAAUnL,GACtC,MAAmB,OAAf8P,EAAK86C,OAAiC,iBAAf96C,EAAK86C,OACX,iBAAf96C,EAAK86C,OACP,KAAU,WACR1C,EAAWloD,MAGR8oD,EAAU9oD,EAAM8P,IAEhBo4C,EAAWloD,GAAMmL,MAAK,WAC3B,OAAO29C,EAAU9oD,EAAM8P,YA2BnC,IAtnCmBxJ,EAkoCnB,MAAO,CACLgT,MAhCF,SAAuBhT,EAAKwJ,EAAMjqB,GAChC,IAAI6tC,EAAK5oE,KACW,mBAATglD,IACTjqB,EAAWiqB,EACXA,EAAO,IAETA,EAAOA,EArvBT,SAAuBA,GAIrB,OAHAA,EAAKg3C,YAAcN,EAAc12C,EAAKg3C,aACtCh3C,EAAKnY,MAAQ6uD,EAAc12C,EAAKnY,OAChCmY,EAAK/5B,KAAOywE,EAAc12C,EAAK/5B,MACxB+5B,EAivBO+6C,CAAc/6C,GAAQ,GAEjB,mBAARxJ,IACTA,EAAM,CAACzmC,IAAMymC,IAGf,IAAIiN,EAAUhiC,QAAQqZ,UAAUugB,MAAK,WACnC,OAAOk/C,EAAc32B,EAAIptB,EAAKwJ,MAGhC,OADA4zC,GAAiBnwC,EAAS1tB,GACnB0tB,GAiBPu3C,aApoCiBxkD,EAsnCmB,WACpC,IAAIotB,EAAK5oE,KAET,MAA+B,mBAApB4oE,EAAGq3B,aAxlBhB,SAA2Br3B,GACzB,OAAO,IAAIniD,SAAQ,SAAUqZ,EAASuM,GACpCu8B,EAAGq3B,cAAa,SAAUt9F,EAAKsL,GAC7B,GAAItL,EACF,OAAO0pC,EAAO1pC,GAEhBm9B,EAAQ7xB,SAmlBHiyF,CAAkBt3B,GAEvByE,GAASzE,GAjKf,SAAyBA,GACvB,OAAOA,EAAG+U,MAAM,gBAAiB,CAC/BwX,QAAS,IAAIvX,GAAE,CAAC,eAAgB,qBAChCjzE,OAAQ,SACP01C,MAAK,SAAU01C,GAChB,OAAOA,EAAShO,UA6JToY,CAAgBv3B,GAzJ3B,SAA0BA,GACxB,OAAOA,EAAG9rE,IAAI,UAAY48F,GAAcr5C,MAAK,SAAUuqC,GACrD,IAAIwV,EAAc,IAAI55B,EACtB7pE,OAAOwL,KAAKyiF,EAAQvG,OAAO3vE,SAAQ,SAAUulF,GAC3C,IAAIzsB,EAAQ8sB,GAAcL,GACtB4F,EAAgB,WAAaryB,EAAM,GACnC0W,EAAW1W,EAAM,GACjB6W,EAAQ+b,EAAYtjG,IAAI+iG,GACvBxb,IACHA,EAAQ,IAAI9d,EACZ65B,EAAY35F,IAAIo5F,EAAexb,IAEjCA,EAAMl7D,IAAI+6D,MAEZ,IAAIl/B,EAAO,CACT78C,KAAO6wF,GAAeoH,GACtB16B,cAAe,GAEjB,OAAOkD,EAAGnD,QAAQzgB,GAAM3E,MAAK,SAAUpyC,GACrC,IAAIoyF,EAAgB,GACpBpyF,EAAIq0D,KAAK5tD,SAAQ,SAAUixD,GACzB,IAAI26B,EAAW36B,EAAInoE,IAAIk2C,UAAU,GACjC0sD,EAAYtjG,IAAI6oE,EAAInoE,KAAKkX,SAAQ,SAAUwvE,GACzC,IAAI+V,EAAeqG,EAAW,IAAMpc,EAE/B0G,EAAQvG,MAAM4V,KAGjBA,EAAe/V,GAEjB,IAAIqc,EAAc5jG,OAAOwL,KAAKyiF,EAAQvG,MAAM4V,IAExCuG,EAAe76B,EAAIC,KAAOD,EAAIC,IAAIye,OACpC1e,EAAIC,IAAIye,MAAMH,GAChBqc,EAAY7rF,SAAQ,SAAU+rF,GAC5BJ,EAAcI,GACZJ,EAAcI,IAAeD,WAIrC,IAEIE,EAFc/jG,OAAOwL,KAAKk4F,GAAe/rF,QAC3C,SAAUmsF,GAAc,OAAQJ,EAAcI,MACd1rF,KAAI,SAAU0rF,GAC9C,OAAO5H,GAAcsE,EAASsD,IAAa,WACzC,OAAO,IAAI73B,EAAGr+D,YAAYk2F,EAAY73B,EAAGwN,QAAQjkB,YAD5C0mC,MAIT,OAAOpyE,QAAQk5C,IAAI+gC,GAAiBrgD,MAAK,WACvC,MAAO,CAACl9C,IAAI,WAGfg5F,EAAW,CAACh5F,IAAI,KAwGZw9F,CAAiB/3B,IA9nCnB,KAAa,SAAUjlE,GAC5B,IAAIwkD,EAAKxkD,EAAKoE,MACV0gD,EAAUjN,EAAIp5C,MAAMpC,KAAM2D,GAI9B,MAHkB,mBAAPwkD,GACTywC,GAAiBnwC,EAASN,GAErBM,OA0sCIm4C,CADI,WA9BnB,SAAgBxc,EAAQl/E,GAEtB,GAAsB,mBAAXk/E,GAA2C,IAAlBA,EAAOhhF,OAAc,CACvD,IAAIy9F,EAAUzc,EACd,OAAO,SAAUxe,GACf,OAAOi7B,EAAQj7B,EAAK1gE,IAGtB,OAAOk0F,GAAqBhV,EAAOj2E,WAAYjJ,MAInD,SAAiBs0F,GACf,IAAIsH,EAAkBtH,EAAUrrF,WAC5B4yF,EA1BN,SAAoBD,GAClB,GAAI,QAAQr3F,KAAKq3F,GACf,OAAOtG,GACF,GAAI,UAAU/wF,KAAKq3F,GACxB,OAAOtG,GACF,GAAI,UAAU/wF,KAAKq3F,GACxB,OAAOtG,GACF,GAAI,KAAK/wF,KAAKq3F,GACnB,MAAM,IAAIr+F,MAAMq+F,EAAkB,wCAkBtBE,CAAWF,GACzB,OAAIC,GAGK3H,GAAqB0H,MAIhC,SAAuB3c,EAAMD,GAC3B,IAAI1oC,EAAM2oC,EAAKE,OAASF,EAAKE,MAAMH,GACnC,GAAuB,iBAAZ1oC,EAAIzmC,IACb,MAAM,IAAI2jF,GAAc,QAAUvU,EAAKje,IAAM,6BAC3Cge,EAAW,0CAA4C1oC,EAAIzmC,QAejE,IAAIksF,GAAY,CACdzyC,MATF,SAAehT,EAAKwJ,EAAMjqB,GACxB,OAAO4/D,GAASnsC,MAAMpyD,KAAK4D,KAAMw7C,EAAKwJ,EAAMjqB,IAS5CilE,YANF,SAAqBjlE,GACnB,OAAO4/D,GAASqF,YAAY5jG,KAAK4D,KAAM+6B,KAQzC,SAASmmE,GAAWtoB,GAClB,MAAO,MAAMnvE,KAAKmvE,GASpB,SAASuoB,GAAkBv4B,EAAIhD,GAC7B,IAAIkxB,EAAYn6F,OAAOwL,KAAKy9D,EAAIqH,cAChC,OAAOxmD,QAAQk5C,IAAIm3B,EAAU/hF,KAAI,SAAUq4E,GACzC,OAAOxkB,EAAGgT,cAAchW,EAAIM,IAAKknB,EAAU,CAACntF,IAAK2lE,EAAIO,WAuDzD,SAASi7B,GAAQvrF,EAAKvW,EAAQ+hG,EAAOt7F,GACnCs7F,EAAQlgE,EAAMkgE,GAEd,IAAIC,EAAa,GACbn+F,GAAK,EA2DT,SAASo+F,EAAqBh9B,GAG5B,OAAO1uD,EAAI4vD,QAAQ,CACjBt9D,KAAMo8D,EACNmB,cAAc,EACdiN,WAAW,IACVtyB,MAAK,SAAUpyC,GAChB,GAAIlI,EAAMilE,UACR,MAAM,IAAIvoE,MAAM,aAElBwL,EAAIq0D,KAAK5tD,SAAQ,SAAUixD,GAnB/B,IAAwBC,EAoBdD,EAAIqM,UAAYrM,EAAIC,MAAQs7B,GAAWv7B,EAAIzoE,MAAM+C,OApBnC2lE,EAqBCD,EAAIC,IApBpBA,EAAIqH,cAAgBtwE,OAAOwL,KAAKy9D,EAAIqH,cAAc7pE,OAAS,IAGpE,SAAsBwiE,GACpB,OAAOA,EAAI+P,YAAc/P,EAAI+P,WAAWvyE,OAAS,EAgBdo+F,CAAa77B,EAAIC,OAO5CD,EAAIC,IAAI+P,mBACHhQ,EAAIC,IAAI+P,WAIjB2rB,EAAWl8F,KAAKugE,EAAIC,YACby7B,EAAM17B,EAAI7lE,WAqBvB,OAAO2mB,QAAQqZ,UACZugB,MAjBH,WAGE,IAAIkkB,EAAM5nE,OAAOwL,KAAKk5F,GAAO/sF,QAAO,SAAUxU,GAC5C,IAAIy5E,EAAU8nB,EAAMvhG,GAAIy5E,QACxB,OAA0B,IAAnBA,EAAQn2E,QAAgB89F,GAAW3nB,EAAQ,OAEpD,GAAIhV,EAAInhE,OAAS,EACf,OAAOm+F,EAAqBh9B,MAU7BlkB,MA1GH,WAEE,IAAIohD,EAjCR,SAA2BJ,GACzB,IAAIx4B,EAAW,GAWf,OAVAlsE,OAAOwL,KAAKk5F,GAAO3sF,SAAQ,SAAU5U,GACjBuhG,EAAMvhG,GAAIy5E,QAChB7kE,SAAQ,SAAUgtF,GAC5B74B,EAASzjE,KAAK,CACZtF,GAAIA,EACJG,IAAKyhG,UAKJ,CACL54B,KAAMD,EACNqJ,MAAM,EACN+I,QAAQ,GAkBU0mB,CAAkBN,GAEpC,GAAKI,EAAY34B,KAAK1lE,OAItB,OAAOyS,EAAI8yD,QAAQ84B,GAAaphD,MAAK,SAAUuhD,GAE7C,GAAI77F,EAAMilE,UACR,MAAM,IAAIvoE,MAAM,aAElB,OAAOgkB,QAAQk5C,IAAIiiC,EAAgBthD,QAAQvrC,KAAI,SAAU8sF,GACvD,OAAOp7E,QAAQk5C,IAAIkiC,EAAY/4B,KAAK/zD,KAAI,SAAU6wD,GAChD,IAAIk8B,EAAYl8B,EAAIziE,GAQpB,OANIyiE,EAAI9iE,QAGNK,GAAK,GAGF2+F,GAAcA,EAAU70B,aAhFvC,SAA6C3tE,EAAQuW,EAAK+vD,GACxD,IAAIm8B,EAA6B10B,GAASx3D,KAASw3D,GAAS/tE,GACxDw3F,EAAYn6F,OAAOwL,KAAKy9D,EAAIqH,cAEhC,OAAK80B,EAIEziG,EAAOxC,IAAI8oE,EAAIM,KAAK7lB,MAAK,SAAU+8B,GACxC,OAAO32D,QAAQk5C,IAAIm3B,EAAU/hF,KAAI,SAAUq4E,GACzC,OAvBN,SAAwBhQ,EAAU0kB,EAAW1U,GAC3C,OAAQhQ,EAASnQ,eACTmQ,EAASnQ,aAAamgB,IACvBhQ,EAASnQ,aAAamgB,GAAU3H,SAAWqc,EAAU70B,aAAamgB,GAAU3H,OAoB3Euc,CAAe5kB,EAAUxX,EAAKwnB,GACzBv3E,EAAI+lE,cAAchW,EAAIM,IAAKknB,GAG7B9tF,EAAOs8E,cAAcwB,EAASlX,IAAKknB,UAE3C1S,OAAM,SAAU53E,GAEjB,GAAqB,MAAjBA,EAAMsjE,OACR,MAAMtjE,EAGR,OAAOq+F,GAAkBtrF,EAAK+vD,MAjBvBu7B,GAAkBtrF,EAAK+vD,GA+EjBq8B,CAAoC3iG,EAAQuW,EAAKisF,GAC9CzhD,MAAK,SAAU0sB,GACR,IAAI+pB,EAAYn6F,OAAOwL,KAAK25F,EAAU70B,cAS3B,OARXF,EACGr4D,SAAQ,SAAU49E,EAAYr2F,GACpB,IAAI+wE,EAAM80B,EAAU70B,aAAa6pB,EAAU76F,WACpC+wE,EAAIE,YACJF,EAAI5pE,OACX4pE,EAAIjtE,KAAOuyF,KAGNwP,KAd1BA,UAmBZzhD,MAAK,SAAUC,GACdghD,EAAaA,EAAWv9F,OAAOw7B,GAAQ+gB,GAAShsC,OAAO4tF,mBA+D1D7hD,MAPH,WACE,MAAO,CAAEl9C,GAAGA,EAAI2lE,KAAKw4B,MAqBzB,SAASa,GAAiBv5B,EAAI9oE,EAAIsiG,EAAYC,EAASC,GACrD,OAAO15B,EAAG9rE,IAAIgD,GAAI46E,OAAM,SAAU/3E,GAChC,GAAmB,MAAfA,EAAIyjE,OAMN,MALmB,SAAfwC,EAAG2N,SAAqC,UAAf3N,EAAG2N,SAC9B9L,EACE,IAAK,2DAGF,CACL83B,WAAYF,EACZn8B,IAAKpmE,EACLgzE,QAAS,GACT0vB,WAvBS,UAwBTvhG,QAzBiB,GA4BrB,MAAM0B,KACL09C,MAAK,SAAUulB,GAChB,IAAI08B,EAAYt3B,WAKZpF,EAAI+U,WAAaynB,EA0BrB,OArBAx8B,EAAIkN,SAAWlN,EAAIkN,SAAW,IAAIx+D,QAAO,SAAU2+D,GACjD,OAAOA,EAAKsvB,aAAeF,KAI7Bz8B,EAAIkN,QAAQ3tE,QAAQ,CAClBw1E,SAAUynB,EACVG,WAAYF,IAMdz8B,EAAIkN,QAAUlN,EAAIkN,QAAQ/wE,MAAM,EA5CN,GA8C1B6jE,EAAI3kE,QAvDiB,EAwDrB2kE,EAAI48B,WAvDS,UAyDb58B,EAAI28B,WAAaF,EACjBz8B,EAAI+U,SAAWynB,EAERx5B,EAAG3C,IAAIL,GAAK8U,OAAM,SAAU/3E,GACjC,GAAmB,MAAfA,EAAIyjE,OAEN,OAAO+7B,GAAiBv5B,EAAI9oE,EAAIsiG,EAAYC,EAASC,GAEvD,MAAM3/F,QAKZ,SAAS8/F,GAAa5sF,EAAKvW,EAAQQ,EAAIwiG,EAAat9C,GAClDhlD,KAAK6V,IAAMA,EACX7V,KAAKV,OAASA,EACdU,KAAKF,GAAKA,EACVE,KAAKsiG,YAAcA,EACnBtiG,KAAKglD,KAAOA,GAAQ,GAGtBy9C,GAAa5kG,UAAU6kG,gBAAkB,SAAUN,EAAYC,GAC7D,IAAIhiG,EAAOL,KACX,OAAOA,KAAK2iG,aAAaP,EAAYC,GAAShiD,MAAK,WACjD,OAAOhgD,EAAKuiG,aAAaR,EAAYC,OAIzCI,GAAa5kG,UAAU8kG,aAAe,SAAUP,EAAYC,GAC1D,OAAIriG,KAAKglD,KAAK69C,sBACLV,GAAiBniG,KAAKV,OAAQU,KAAKF,GAAIsiG,EAC5CC,EAASriG,KAAKsiG,aAET77E,QAAQqZ,SAAQ,IAI3B2iE,GAAa5kG,UAAU+kG,aAAe,SAAUR,EAAYC,GAC1D,GAAIriG,KAAKglD,KAAK89C,sBAAuB,CACnC,IAAIziG,EAAOL,KACX,OAAOmiG,GAAiBniG,KAAK6V,IAAK7V,KAAKF,GAAIsiG,EACzCC,EAASriG,KAAKsiG,aACb5nB,OAAM,SAAU/3E,GACf,GAAIogG,GAAiBpgG,GAEnB,OADAtC,EAAK2kD,KAAK89C,uBAAwB,GAC3B,EAET,MAAMngG,KAGV,OAAO8jB,QAAQqZ,SAAQ,IAI3B,IAAIkjE,GAAc,CAChB,UAAa,SAAUC,EAAWC,GAEhC,OAAwD,IAApD5iB,GAAQ2iB,EAAUtoB,SAAUuoB,EAAUvoB,UACjCuoB,EAAUvoB,SAGZ,GAET,EAAK,SAAUsoB,EAAWC,GAExB,OAyEJ,SAAgCC,EAAQC,GACtC,GAAID,EAAOZ,aAAea,EAAOb,WAC/B,MAAO,CACL5nB,SAAUwoB,EAAOxoB,SACjB7H,QAASqwB,EAAOrwB,SAIpB,OAGF,SAASuwB,EAA0BC,EAAeC,GAGhD,IAAItkG,EAAIqkG,EAAc,GAClBE,EAAaF,EAAcvhG,MAAM,GACjCs8C,EAAIklD,EAAc,GAClBE,EAAaF,EAAcxhG,MAAM,GAErC,IAAK9C,GAA8B,IAAzBskG,EAAcngG,OACtB,MAAO,CACLu3E,SA/MW,EAgNX7H,QAAS,IAMb,GAAI4wB,GAFWzkG,EAAEsjG,WAEUgB,GACzB,MAAO,CACL5oB,SAAU17E,EAAE07E,SACZ7H,QAASwwB,GAKb,GAAII,GADWrlD,EAAEkkD,WACUiB,GACzB,MAAO,CACL7oB,SAAUt8B,EAAEs8B,SACZ7H,QAAS2wB,GAIb,OAAOJ,EAA0BG,EAAYC,GAnCtCJ,CAA0BF,EAAOrwB,QAASswB,EAAOtwB,SAjF/C6wB,CAAuBT,EAAWD,GAAWtoB,WAuHxD,SAAS+oB,GAAaE,EAAW9wB,GAC/B,IAAIpxD,EAAQoxD,EAAQ,GAChBvmC,EAAOumC,EAAQ/wE,MAAM,GAEzB,SAAK6hG,GAAgC,IAAnB9wB,EAAQ1vE,UAItBwgG,IAAcliF,EAAM6gF,YAIjBmB,GAAaE,EAAWr3D,IAGjC,SAASw2D,GAAiBpgG,GACxB,MAA6B,iBAAfA,EAAIyjE,QAAwD,IAAjChmE,KAAK0M,MAAMnK,EAAIyjE,OAAS,KAnInEq8B,GAAa5kG,UAAUgmG,cAAgB,WACrC,IAAIxjG,EAAOL,KAEX,OAAIK,EAAK2kD,MAAQ3kD,EAAK2kD,KAAK89C,wBAA0BziG,EAAK2kD,KAAK69C,sBACtDxiG,EAAKwV,IAAI/Y,IAAIuD,EAAKP,IAAIugD,MAAK,SAAU6iD,GAC1C,OAAOA,EAAUvoB,UA1HN,KA2HVD,OAAM,SAAU/3E,GAEjB,GAAmB,MAAfA,EAAIyjE,OACN,MAAMzjE,EAER,OAhIW,KAoIRtC,EAAKf,OAAOxC,IAAIuD,EAAKP,IAAIugD,MAAK,SAAU4iD,GAC7C,OAAI5iG,EAAK2kD,MAAQ3kD,EAAK2kD,KAAK69C,wBAA0BxiG,EAAK2kD,KAAK89C,sBACtDG,EAAUtoB,UAtIN,EAyINt6E,EAAKwV,IAAI/Y,IAAIuD,EAAKP,IAAIugD,MAAK,SAAU6iD,GAI1C,OAAID,EAAUhiG,UAAYiiG,EAAUjiG,QA7IzB,GAmJTA,EADEgiG,EAAUhiG,QACFgiG,EAAUhiG,QAAQkN,WAElB,eAGG60F,GACNA,GAAY/hG,GAASgiG,EAAWC,GAzJ9B,EAiJX,IAAIjiG,KAYH,SAAU0B,GACX,GAAmB,MAAfA,EAAIyjE,QAAkB68B,EAAUtoB,SAClC,OAAOt6E,EAAKwV,IAAIowD,IAAI,CAClBC,IAAK7lE,EAAKP,GACV66E,SAjKO,IAkKNt6B,MAAK,WACN,OAnKO,KAoKN,SAAU19C,GACX,OAAIogG,GAAiBpgG,IACnBtC,EAAK2kD,KAAK89C,uBAAwB,EAC3BG,EAAUtoB,UAvKZ,KA6KX,MAAMh4E,QAEP+3E,OAAM,SAAU/3E,GACjB,GAAmB,MAAfA,EAAIyjE,OACN,MAAMzjE,EAER,OAnLa,MAmSjB,SAASmhG,GAAsBjuF,EAAKvW,EAAQ0lD,GAC1C,IAAIirC,EAASjrC,EAAKi/B,QAAUj/B,EAAKi/B,QAAQ1yE,KAAK+uE,IAAW,GACrDkE,EAAYx/B,EAAK1wC,OAAS0wC,EAAK1wC,OAAOnG,WAAa,GACnD41F,EAAc,GACdC,EAAkB,GAClB9kB,EAAW,GAiBf,OAZIl6B,EAAKk6B,WACPA,EAAWtiC,KAAK4H,UAAUQ,EAAKk6B,WAG7Bl6B,EAAK1wC,QAAU0wC,EAAK4nB,eACtBm3B,EAAcnnD,KAAK4H,UAxBvB,SAAmCu/C,GACjC,OAAOpnG,OAAOwL,KAAK47F,GAAaxyF,KAAK+uE,IAASpvE,QAAO,SAAUhD,EAAQ1Q,GAErE,OADA0Q,EAAO1Q,GAAOumG,EAAYvmG,GACnB0Q,IACN,IAoB4B+1F,CAA0Bj/C,EAAK4nB,gBAG1D5nB,EAAK1wC,QAA0B,UAAhB0wC,EAAK1wC,SACtB0vF,EAAiBh/C,EAAK9P,KAAK/mC,YAGtBsY,QAAQk5C,IAAI,CAAC9pD,EAAI/V,KAAMR,EAAOQ,OAAOugD,MAAK,SAAUpyC,GACzD,IAAIi2F,EAAYj2F,EAAI,GAAKA,EAAI,GAAKu2E,EAAYwf,EAC5CD,EAAc9T,EAAS/Q,EACzB,OAAO,IAAIz4D,SAAQ,SAAUqZ,GAC3B8wC,GAAUszB,EAAWpkE,SAEtBugB,MAAK,SAAU8jD,GAKhB,MAAO,WADPA,EAASA,EAAO56F,QAAQ,MAAO,KAAKA,QAAQ,MAAO,SAKvD,SAAS66F,GAAUvuF,EAAKvW,EAAQ0lD,EAAMs9C,EAAap0F,GACjD,IACIm2F,EAgBAC,EACAC,EAlBAC,EAAU,GAEVC,EAAe,CACjB35B,IAAK,EACLzxB,QAAS,GACTyvB,KAAM,IAEJ47B,GAAoB,EACpBC,GAAmB,EACnBC,GAAuB,EACvBjqB,EAAW,EACXrD,EAAatyB,EAAKsyB,YAActyB,EAAKuyB,OAAQ,EAC7CkgB,EAAazyC,EAAKyyC,YAAc,IAChCoN,EAAgB7/C,EAAK6/C,eAAiB,GACtCC,GAAiB,EACjB7gB,EAAUj/B,EAAKi/B,QACf/E,EAAWl6B,EAAKk6B,SAGhB6lB,EAAc,GAEd1C,EAAUhoC,KAEdnsD,EAASA,GAAU,CACjB/K,IAAI,EACJ6hG,YAAY,IAAIrhF,MAAO0jD,cACvB49B,UAAW,EACXC,aAAc,EACdC,mBAAoB,EACpBC,OAAQ,IAGV,IAAIv6B,EAAc,GAGlB,SAASw6B,IACP,OAAId,EACK99E,QAAQqZ,UAEVgkE,GAAsBjuF,EAAKvW,EAAQ0lD,GAAM3E,MAAK,SAAUpyC,GAC7Dq2F,EAAQr2F,EAER,IAAIq3F,EAAiB,GAEnBA,GADsB,IAApBtgD,EAAKo9C,WACU,CAAEU,uBAAuB,EAAOD,uBAAuB,GAC3C,WAApB79C,EAAKo9C,WACG,CAAEU,uBAAuB,EAAMD,uBAAuB,GAC1C,WAApB79C,EAAKo9C,WACG,CAAEU,uBAAuB,EAAOD,uBAAuB,GAEvD,CAAEC,uBAAuB,EAAMD,uBAAuB,GAGzE0B,EAAe,IAAI9B,GAAa5sF,EAAKvW,EAAQglG,EAAOhC,EAAagD,MAIrE,SAASC,IAGP,GAFAR,EAAc,GAEmB,IAA7BV,EAAav7B,KAAK1lE,OAAtB,CAGA,IAAI0lE,EAAOu7B,EAAav7B,KACpB08B,EAAW,CAACjoD,QAASyH,EAAKzH,SAC9B,OAAOj+C,EAAOy4E,SAAS,CAACjP,KAAMA,EAAM0P,WAAW,GAAQgtB,GAAUnlD,MAAK,SAAUpyC,GAE9E,GAAIq0F,EAAYt3B,UAEd,MADAy6B,IACM,IAAIhjG,MAAM,aAKlB,IAAIijG,EAAa/oG,OAAOY,OAAO,MAC/B0Q,EAAIyG,SAAQ,SAAUzG,GAChBA,EAAInL,QACN4iG,EAAWz3F,EAAInO,IAAMmO,MAIzB,IAAI03F,EAAWhpG,OAAOwL,KAAKu9F,GAAYtiG,OACvC8K,EAAOi3F,oBAAsBQ,EAC7Bz3F,EAAOg3F,cAAgBp8B,EAAK1lE,OAASuiG,EAErC78B,EAAKp0D,SAAQ,SAAUkxD,GACrB,IAAI9iE,EAAQ4iG,EAAW9/B,EAAIM,KAC3B,GAAIpjE,EAAO,CACToL,EAAOk3F,OAAOhgG,KAAKtC,GAEnB,IAAI8iG,GAAa9iG,EAAMtG,MAAQ,IAAIkN,cACnC,GAAkB,iBAAdk8F,GAA8C,cAAdA,EAGlC,MAAM9iG,EAFNw/F,EAAYp9F,KAAK,SAAUi8B,EAAMr+B,SAKnCiiG,EAAY3/F,KAAKwgE,SAIpB,SAAUjjE,GAEX,MADAuL,EAAOi3F,oBAAsBr8B,EAAK1lE,OAC5BT,MAIV,SAASkjG,IACP,GAAIxB,EAAavhG,MACf,MAAM,IAAIL,MAAM,qCAElByL,EAAOysE,SAAWA,EAAW0pB,EAAav5B,IAC1C,IAAIg7B,EAAY3kE,EAAMjzB,GAYtB,OAXI62F,EAAY3hG,SACd0iG,EAAUh9B,KAAOi8B,EAGmB,iBAAzBV,EAAax6F,UACtBi8F,EAAUj8F,QAAUw6F,EAAax6F,eAC1Bw6F,EAAax6F,SAEtBy4F,EAAYp9F,KAAK,SAAU4gG,IAE7BpB,GAAoB,EACbH,EAAa7B,gBAAgB2B,EAAav5B,IAC7Cu3B,GAAShiD,MAAK,WAGhB,GAFAqkD,GAAoB,EAEhBpC,EAAYt3B,UAEd,MADAy6B,IACM,IAAIhjG,MAAM,aAElB4hG,OAAe7kG,EACfumG,OACCrrB,OAAM,SAAU/3E,GAEjB,MADAqjG,EAAkBrjG,GACZA,KA2BV,SAASsjG,IACP,OAAO7E,GAAQvrF,EAAKvW,EAAQ+kG,EAAahD,MAAOiB,GAAajiD,MAAK,SAAU6lD,GAC1E7B,EAAavhG,OAASojG,EAAI/iG,GAC1B+iG,EAAIp9B,KAAKp0D,SAAQ,SAAUkxD,UAClBy+B,EAAahD,MAAMz7B,EAAIM,KAC9Bh4D,EAAO+2F,YACPZ,EAAav7B,KAAK1jE,KAAKwgE,SAK7B,SAASugC,IAlCT,IACMhyB,EAkCAmuB,EAAYt3B,WAAaq5B,IAGN,IAAnBG,EAAQphG,QAIZihG,EAAeG,EAAQ38F,SAzCnBssE,EAAO,GACXkwB,EAAahrD,QAAQ3kC,SAAQ,SAAUm/C,GAGnB,WAAdA,EAAO/zD,KAGXq0E,EAAKtgB,EAAO/zD,IAAM+zD,EAAOxa,QAAQtkC,KAAI,SAAUwvC,GAC7C,OAAOA,EAAEtkD,WAGNX,EAAOg6E,SAASnF,GAAM9zB,MAAK,SAAUghD,GAE1C,GAAIiB,EAAYt3B,UAEd,MADAy6B,IACM,IAAIhjG,MAAM,aAGlB4hG,EAAahD,MAAQA,MAyBpBhhD,KAAK4lD,GACL5lD,KAAKklD,GACLllD,KAAKwlD,GACLxlD,KAAK8lD,GACLzrB,OAAM,SAAU/3E,GACfyjG,EAAiB,yCAA0CzjG,OAV7D0jG,GAAoB,IAexB,SAASA,EAAoBC,GACS,IAAhC7B,EAAaprD,QAAQj2C,QAavBkjG,GACA3B,GACAF,EAAaprD,QAAQj2C,QAAUq0F,KAE/B+M,EAAQp/F,KAAKq/F,GACbA,EAAe,CACb35B,IAAK,EACLzxB,QAAS,GACTyvB,KAAM,IAEkB,YAAtBw5B,EAAYv8F,OAA6C,YAAtBu8F,EAAYv8F,QACjDu8F,EAAYv8F,MAAQ,SACpBu8F,EAAYp9F,KAAK,WAEnBihG,KA1BuB,IAAnB3B,EAAQphG,QAAiBihG,KACtB/sB,GAAczM,EAAY0M,MAASotB,KACtCrC,EAAYv8F,MAAQ,UACpBu8F,EAAYp9F,KAAK,WAEfy/F,GACFc,KAyBR,SAASW,EAAiBl+C,EAAQvlD,GAC5BiiG,IAGCjiG,EAAIC,UACPD,EAAIC,QAAUslD,GAEhBh6C,EAAO/K,IAAK,EACZ+K,EAAOk4D,OAAS,WAChBo+B,EAAU,GACVC,EAAe,CACb35B,IAAK,EACLzxB,QAAS,GACTyvB,KAAM,IAER28B,EAAoB9iG,IAItB,SAAS8iG,EAAoBc,GAC3B,KAAI3B,GAIAtC,EAAYt3B,YACd98D,EAAOk4D,OAAS,YACZs+B,IASN,GALAx2F,EAAOk4D,OAASl4D,EAAOk4D,QAAU,WACjCl4D,EAAOs4F,UAAW,IAAI7iF,MAAO0jD,cAC7Bn5D,EAAOysE,SAAWA,EAClBiqB,GAAuB,EAEnB2B,EAAY,EAEdA,EAAaj6B,GAAYi6B,IACdr4F,OAASA,EAGpB,IAAI03F,GAAaW,EAAW/pG,MAAQ,IAAIkN,cACtB,iBAAdk8F,GAA8C,cAAdA,GAClCtD,EAAYp9F,KAAK,QAASqhG,GAC1BjE,EAAYp6F,sBA3VpB,SAAiB88C,EAAMs9C,EAAax/F,EAAOi4B,GACzC,IAAmB,IAAfiqB,EAAKyhD,MAGP,OAFAnE,EAAYp9F,KAAK,QAASpC,QAC1Bw/F,EAAYp6F,qBAQd,GAJsC,mBAA3B88C,EAAK0hD,oBACd1hD,EAAK0hD,kBAAoBp8B,GAE3Bg4B,EAAYp9F,KAAK,eAAgBpC,GACP,WAAtBw/F,EAAYv8F,OAA4C,YAAtBu8F,EAAYv8F,MAAqB,CACrEu8F,EAAYp9F,KAAK,SAAUpC,GAC3Bw/F,EAAYv8F,MAAQ,UACpB,IAAI4gG,EAAa,WACf3hD,EAAK4hD,iBAjBa,GAsBpBtE,EAAY96F,KAAK,UAHS,WACxB86F,EAAY18F,eAAe,SAAU+gG,MAGvCrE,EAAY96F,KAAK,SAAUm/F,GAG7B3hD,EAAK4hD,iBAAmB5hD,EAAK4hD,kBA1BP,EA2BtB5hD,EAAK4hD,iBAAmB5hD,EAAK0hD,kBAAkB1hD,EAAK4hD,kBACpD38F,WAAW8wB,EAAUiqB,EAAK4hD,kBAmUpBC,CAAQ7hD,EAAMs9C,EAAaiE,GAAY,WACrCnC,GAAUvuF,EAAKvW,EAAQ0lD,EAAMs9C,WAIjCA,EAAYp9F,KAAK,WAAYgJ,GAC7Bo0F,EAAYp6F,qBAKhB,SAAS+iE,EAASpX,EAAQhqD,EAASwrE,GAEjC,GAAIitB,EAAYt3B,UACd,OAAOy6B,IAIc,iBAAZ57F,IACT46F,EAAa56F,QAAUA,GAGZ4iE,GAAaznB,EAAbynB,CAAmB5Y,KAIhC4wC,EAAa35B,IAAMjX,EAAOiX,KAAOuK,EACjCovB,EAAaprD,QAAQj0C,KAAKyuD,GAC1B,KAAU,WACRwyC,EAAuC,IAAnB7B,EAAQphG,QAAgBynE,EAAY0M,UAK5D,SAASuvB,EAAkBztD,GAGzB,GAFAyrD,GAAiB,EAEbxC,EAAYt3B,UACd,OAAOy6B,IAKT,GAAIpsD,EAAQiH,QAAQl9C,OAAS,EAC3BynE,EAAYE,MAAQ1xB,EAAQiH,QAAQjH,EAAQiH,QAAQl9C,OAAS,GAAG0nE,IAChEi7B,IACAM,GAAoB,OACf,CAEL,IAAInxB,EAAW,WACToC,GACFzM,EAAY0M,MAAO,EACnBwuB,KAEApB,GAAmB,EAErB0B,GAAoB,IAIjBhC,GAA2C,IAA3BhrD,EAAQiH,QAAQl9C,OAUnC8xE,KATAwvB,GAAoB,EACpBH,EAAa7B,gBAAgBrpD,EAAQshC,SACjC0nB,GAAShiD,MAAK,WAChBqkD,GAAoB,EACpBx2F,EAAOysE,SAAWA,EAAWthC,EAAQshC,SACrCzF,OAEDwF,MAAMsrB,KAQb,SAASe,EAAepkG,GAGtB,GAFAmiG,GAAiB,EAEbxC,EAAYt3B,UACd,OAAOy6B,IAETW,EAAiB,mBAAoBzjG,GAIvC,SAASojG,IACP,IACGjB,IACAH,GACDH,EAAQphG,OAASyhG,EAHnB,CAOAC,GAAiB,EAQbxC,EAAY1qB,WACd0qB,EAAY18F,eAAe,SAAU08F,EAAY0E,eACjD1E,EAAY1qB,SAAS9yC,UAEvBw9D,EAAY96F,KAAK,SAAUy/F,GAE3B,IAAI5tD,EAAUxjC,EAAIwjC,QAAQwxB,GACvBvjE,GAAG,SAAU2jE,GAChB5xB,EAAQgH,KAAKz6C,EAAgBA,GAC7ByzC,EAAQgH,KAAKymD,GACVpsB,MAAMqsB,GAEL/hD,EAAKyhD,QAEPnE,EAAY1qB,SAAWv+B,EACvBipD,EAAY0E,cAAgBC,GAtB9B,SAASA,IACP5tD,EAAQvU,SAEV,SAASl/B,IACP08F,EAAY18F,eAAe,SAAUqhG,IAuBzC,SAASC,IACP7B,IAAmBhlD,MAAK,WAEtB,IAAIiiD,EAAYt3B,UAIhB,OAAOu5B,EAAaV,gBAAgBxjD,MAAK,SAAU+hD,GAEjDv3B,EAAc,CACZE,MAFF4P,EAAWynB,EAGTv1D,MAAO4qD,EACPA,WAAYA,EACZ58C,MAAO,WACPopC,QAASA,EACT/E,SAAUA,EACVrE,aAAa,GAEX71B,EAAK1wC,SACoB,iBAAhB0wC,EAAK1wC,OAEdu2D,EAAYnF,cAAe,EAE3BmF,EAAYv2D,OAAS0wC,EAAK1wC,QAG1B,cAAe0wC,IACjB6lB,EAAY6sB,UAAY1yC,EAAK0yC,WAE3B,YAAa1yC,IACf6lB,EAAYttB,QAAUyH,EAAKzH,SAEzByH,EAAK4nB,eACP/B,EAAY+B,aAAe5nB,EAAK4nB,cAE9B5nB,EAAK9P,OACP21B,EAAY31B,KAAO8P,EAAK9P,MAE1B6wD,OAlCAN,OAoCD/qB,OAAM,SAAU/3E,GACjByjG,EAAiB,+BAAgCzjG,MAKrD,SAASqjG,EAAkBrjG,GACzB+hG,GAAoB,EACpB0B,EAAiB,uCAAwCzjG,GA1Z3D2/F,EAAYnrB,MAAMthE,EAAKvW,GA8ZnBgjG,EAAYt3B,UACdy6B,KAIGnD,EAAY6E,kBACf7E,EAAY96F,KAAK,SAAUi+F,GAEE,mBAAlBzgD,EAAKkwB,WACdotB,EAAY96F,KAAK,QAASw9C,EAAKkwB,UAC/BotB,EAAY96F,KAAK,YAAY,SAAU0G,GACrC82C,EAAKkwB,SAAS,KAAMhnE,OAGxBo0F,EAAY6E,iBAAkB,QAGN,IAAfniD,EAAK+lB,MACdm8B,IAEA7B,IAAmBhlD,MAAK,WAEtB,OADAqkD,GAAoB,EACbH,EAAa7B,gBAAgB19C,EAAK+lB,MAAOs3B,MAC/ChiD,MAAK,WACNqkD,GAAoB,EAEhBpC,EAAYt3B,UACdy6B,KAGF9qB,EAAW31B,EAAK+lB,MAChBm8B,QACCxsB,MAAMsrB,IAOb,SAASoB,KACP,eAAahrG,KAAK4D,MAClBA,KAAKgrE,WAAY,EACjBhrE,KAAK+F,MAAQ,UACb,IAAI1F,EAAOL,KACPyoD,EAAU,IAAIhiC,SAAQ,SAAUihD,EAASr7B,GAC3ChsC,EAAKmH,KAAK,WAAYkgE,GACtBrnE,EAAKmH,KAAK,QAAS6kC,MAErBhsC,EAAKggD,KAAO,SAAUvgB,EAASuM,GAC7B,OAAOoc,EAAQpI,KAAKvgB,EAASuM,IAE/BhsC,EAAKq6E,MAAQ,SAAUruC,GACrB,OAAOoc,EAAQiyB,MAAMruC,IAIvBhsC,EAAKq6E,OAAM,eA4Bb,SAAS2sB,GAAQz+B,EAAI5jB,GACnB,IAAIsiD,EAAmBtiD,EAAKsiD,iBAC5B,MAAkB,iBAAP1+B,EACF,IAAI0+B,EAAiB1+B,EAAI5jB,GAEzB4jB,EAIX,SAAS2+B,GAAiB1xF,EAAKvW,EAAQ0lD,EAAMjqB,GAU3C,GARoB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,SAEW,IAATA,IACTA,EAAO,IAGLA,EAAKi/B,UAAYjiF,MAAM2lB,QAAQq9B,EAAKi/B,SACtC,MAAM3X,GAAYL,EACC,6CAGrBjnB,EAAKkwB,SAAWn6C,GAChBiqB,EAAO7jB,EAAM6jB,IACRsyB,WAAatyB,EAAKsyB,YAActyB,EAAKuyB,KAC1CvyB,EAAKyhD,MAAS,UAAWzhD,GAAQA,EAAKyhD,MAEtCzhD,EAAKsiD,iBAAmBtiD,EAAKsiD,kBAAoBtnG,KACjD,IAAIwnG,EAAe,IAAIJ,GAAYpiD,GAInC,OADAo/C,GAFeiD,GAAQxxF,EAAKmvC,GACVqiD,GAAQ/nG,EAAQ0lD,GACDA,EAAMwiD,GAChCA,EAIT,SAAS7wD,GAAK9gC,EAAKvW,EAAQ0lD,EAAMjqB,GAa/B,MAZoB,mBAATiqB,IACTjqB,EAAWiqB,EACXA,EAAO,SAEW,IAATA,IACTA,EAAO,KAETA,EAAO7jB,EAAM6jB,IAERsiD,iBAAmBtiD,EAAKsiD,kBAAoBtnG,KAG1C,IAAIynG,GAFX5xF,EAAMwxF,GAAQxxF,EAAKmvC,GACnB1lD,EAAS+nG,GAAQ/nG,EAAQ0lD,GACIA,EAAMjqB,GAGrC,SAAS0sE,GAAK5xF,EAAKvW,EAAQ0lD,EAAMjqB,GAC/B,IAAI16B,EAAOL,KACXA,KAAK0nG,UAAW,EAEhB,IAAIC,EAAW3iD,EAAK5/C,KAAO+lE,EAAsB,GAAInmB,EAAMA,EAAK5/C,MAAQ4/C,EACpE4iD,EAAW5iD,EAAKnjB,KAAOspC,EAAsB,GAAInmB,EAAMA,EAAKnjB,MAAQmjB,EAQxE,SAAS6iD,EAAWh0C,GAClBxzD,EAAK6E,KAAK,SAAU,CAClB4iG,UAAW,OACXj0C,OAAQA,IAGZ,SAASk0C,EAAWl0C,GAClBxzD,EAAK6E,KAAK,SAAU,CAClB4iG,UAAW,OACXj0C,OAAQA,IAGZ,SAASm0C,EAAWpiC,GAClBvlE,EAAK6E,KAAK,SAAU,CAClB4iG,UAAW,OACXliC,IAAKA,IAGT,SAASqiC,EAAWriC,GAClBvlE,EAAK6E,KAAK,SAAU,CAClB4iG,UAAW,OACXliC,IAAKA,IAGT,SAASsiC,IACP7nG,EAAK6nG,YAAa,EAEd7nG,EAAK8nG,YACP9nG,EAAK6E,KAAK,UAGd,SAASijG,IACP9nG,EAAK8nG,YAAa,EAEd9nG,EAAK6nG,YACP7nG,EAAK6E,KAAK,UAGd,SAASkjG,IACP/nG,EAAK6nG,YAAa,EAEd7nG,EAAK8nG,YACP9nG,EAAK6E,KAAK,SAAU,CAClB4iG,UAAW,SAIjB,SAASO,IACPhoG,EAAK8nG,YAAa,EAEd9nG,EAAK6nG,YACP7nG,EAAK6E,KAAK,SAAU,CAClB4iG,UAAW,SA1DjB9nG,KAAKoF,KAAOmiG,GAAiB1xF,EAAKvW,EAAQqoG,GAC1C3nG,KAAK6hC,KAAO0lE,GAAiBjoG,EAAQuW,EAAK+xF,GAE1C5nG,KAAKkoG,YAAa,EAClBloG,KAAKmoG,YAAa,EA2DlB,IAAIG,EAAU,GAEd,SAASC,EAAUhqG,GACjB,OAAO,SAAUw4D,EAAO/sD,IACG,WAAV+sD,IACZ/sD,IAAS69F,GAAc79F,IAAS+9F,IACV,WAAVhxC,IACZ/sD,IAASi+F,GAAcj+F,IAASg+F,IACV,WAAVjxC,IACZ/sD,IAASm+F,GAAcn+F,IAASk+F,IACV,WAAVnxC,IACZ/sD,IAASq+F,GAAcr+F,IAASo+F,MAG3BrxC,KAASuxC,IACbA,EAAQvxC,GAAS,IAEnBuxC,EAAQvxC,GAAOx4D,IAAQ,EACoB,IAAvC5B,OAAOwL,KAAKmgG,EAAQvxC,IAAQ3zD,QAE9B/C,EAAK6H,mBAAmB6uD,KAWhC,SAASyxC,EAAerzB,EAAIpe,EAAOnyD,IACa,GAA1CuwE,EAAG/tE,UAAU2vD,GAAOpiD,QAAQ/P,IAC9BuwE,EAAG7tE,GAAGyvD,EAAOnyD,GAPbogD,EAAKuyB,OACPv3E,KAAKoF,KAAKkC,GAAG,WAAYjH,EAAKwhC,KAAKiD,OAAOrnC,KAAK4C,EAAKwhC,OACpD7hC,KAAK6hC,KAAKv6B,GAAG,WAAYjH,EAAK+E,KAAK0/B,OAAOrnC,KAAK4C,EAAK+E,QAStDpF,KAAKsH,GAAG,eAAe,SAAUyvD,GACjB,WAAVA,GACFyxC,EAAenoG,EAAKwhC,KAAM,SAAUgmE,GACpCW,EAAenoG,EAAK+E,KAAM,SAAU2iG,IACjB,WAAVhxC,GACTyxC,EAAenoG,EAAKwhC,KAAM,SAAUomE,GACpCO,EAAenoG,EAAK+E,KAAM,SAAU4iG,IACjB,WAAVjxC,GACTyxC,EAAenoG,EAAKwhC,KAAM,SAAUwmE,GACpCG,EAAenoG,EAAK+E,KAAM,SAAUgjG,IACjB,WAAVrxC,IACTyxC,EAAenoG,EAAKwhC,KAAM,SAAUsmE,GACpCK,EAAenoG,EAAK+E,KAAM,SAAU8iG,OAIxCloG,KAAKsH,GAAG,kBAAkB,SAAUyvD,GACpB,WAAVA,GACF12D,EAAKwhC,KAAKj8B,eAAe,SAAUiiG,GACnCxnG,EAAK+E,KAAKQ,eAAe,SAAUmiG,IAChB,WAAVhxC,GACT12D,EAAKwhC,KAAKj8B,eAAe,SAAUqiG,GACnC5nG,EAAK+E,KAAKQ,eAAe,SAAUoiG,IAChB,WAAVjxC,GACT12D,EAAKwhC,KAAKj8B,eAAe,SAAUyiG,GACnChoG,EAAK+E,KAAKQ,eAAe,SAAUwiG,IAChB,WAAVrxC,IACT12D,EAAKwhC,KAAKj8B,eAAe,SAAUuiG,GACnC9nG,EAAK+E,KAAKQ,eAAe,SAAUsiG,OAIvCloG,KAAK6hC,KAAKv6B,GAAG,iBAAkBihG,EAAU,SACzCvoG,KAAKoF,KAAKkC,GAAG,iBAAkBihG,EAAU,SAEzC,IAAI9/C,EAAUhiC,QAAQk5C,IAAI,CACxB3/D,KAAKoF,KACLpF,KAAK6hC,OACJwe,MAAK,SAAUsnB,GAChB,IAAIjpE,EAAM,CACR0G,KAAMuiE,EAAK,GACX9lC,KAAM8lC,EAAK,IAOb,OALAtnE,EAAK6E,KAAK,WAAYxG,GAClBq8B,GACFA,EAAS,KAAMr8B,GAEjB2B,EAAK6H,qBACExJ,KACN,SAAUiE,GAaX,GAZAtC,EAAKykC,SACD/J,EAGFA,EAASp4B,GAKTtC,EAAK6E,KAAK,QAASvC,GAErBtC,EAAK6H,qBACD6yB,EAEF,MAAMp4B,KAIV3C,KAAKqgD,KAAO,SAAUooD,EAAS9lG,GAC7B,OAAO8lD,EAAQpI,KAAKooD,EAAS9lG,IAG/B3C,KAAK06E,MAAQ,SAAU/3E,GACrB,OAAO8lD,EAAQiyB,MAAM/3E,IAxRzB,IAASykG,GAAa,gBAqBtBA,GAAYvpG,UAAUinC,OAAS,WAC7B9kC,KAAKgrE,WAAY,EACjBhrE,KAAK+F,MAAQ,YACb/F,KAAKkF,KAAK,WAGZkiG,GAAYvpG,UAAUs5E,MAAQ,SAAUthE,EAAKvW,GAC3C,IAAIe,EAAOL,KAMX,SAASo1E,IACP/0E,EAAKykC,SANHzkC,EAAKqoG,eAGTroG,EAAKqoG,cAAe,EAKpB7yF,EAAIrO,KAAK,YAAa4tE,GACtB91E,EAAOkI,KAAK,YAAa4tE,GAKzB/0E,EAAKmH,KAAK,YAJV,WACEqO,EAAIjQ,eAAe,YAAawvE,GAChC91E,EAAOsG,eAAe,YAAawvE,QA0CvC,IAASqyB,GAAM,gBAyMfA,GAAK5pG,UAAUinC,OAAS,WACjB9kC,KAAK0nG,WACR1nG,KAAK0nG,UAAW,EAChB1nG,KAAKoF,KAAK0/B,SACV9kC,KAAK6hC,KAAKiD,WA8BdygC,GAAQ8Y,QAjqHR,SAAmB9Y,GACjBA,EAAQgR,QAAQ,MAAO0a,IAAU,MAiqHhC5S,QAvkFH,SAAsB9Y,GACpBA,EAAQgR,QAAQ,OAAQwe,IAAW,GACnCxvB,EAAQgR,QAAQ,QAASwe,IAAW,MAskFnC1W,OAAO4iB,IACP5iB,QA7BH,SAAqB9Y,GACnBA,EAAQ6+B,UAAYmD,GACpBhiC,EAAQ5uB,KAAOA,GAEfh6C,OAAOC,eAAe2oE,EAAQ1nE,UAAW,YAAa,CACpDf,IAAK,WACH,IAAIuD,EAAOL,KAWX,YAVqC,IAA1BA,KAAK2oG,mBACd3oG,KAAK2oG,iBAAmB,CACtB/wF,KAAM,SAAUkY,EAAOk1B,EAAMjqB,GAC3B,OAAO16B,EAAKkK,YAAY65F,UAAUt0E,EAAOzvB,EAAM2kD,EAAMjqB,IAEvDq2B,GAAI,SAAUthC,EAAOk1B,EAAMjqB,GACzB,OAAO16B,EAAKkK,YAAY65F,UAAU/jG,EAAMyvB,EAAOk1B,EAAMjqB,MAIpD/6B,KAAK2oG,oBAIhBpjC,EAAQ1nE,UAAU84C,KAAO,SAAU+zB,EAAQ1lB,EAAMjqB,GAC/C,OAAO/6B,KAAKuK,YAAYosC,KAAK32C,KAAM0qE,EAAQ1lB,EAAMjqB,OAWtC,S,ySCvgUM6tE,E,WACnB,WAAa90D,I,4FAAQ,SACnB9zC,KAAK8zC,OAASA,E,sDAId,OAAO9zC,KAAK6oG,e,aAGFx6C,GACVruD,KAAK6oG,cAAgBx6C,I,2BAGXy6C,K,eAKV,IAEE,OADYC,IAAU/oG,KAAKgpG,cACdC,QACb,MAAOtmG,GACPhB,EAAQW,KAAK,uB,4BAMf,OAAOtC,KAAKkpG,O,aAGHC,GACTnpG,KAAKkpG,MAAQC,I,uCAIb,OAAOnpG,KAAKopG,iB,aAGQC,GACpBrpG,KAAKopG,gBAAkBC,I,0BAGd5sD,GACTz8C,KAAKspG,YAAc7sD,G,eAInB,OAAOz8C,KAAKspG,c,iCAGIC,GAChBvpG,KAAKy8C,MAAQ,GACbz8C,KAAKwpG,oBAAsBD,EACC,oBAAjBv/B,cAETA,aAAaC,QAAb,UAAwBjqE,KAAK8zC,OAA7B,YAA+Cy1D,I,eAKjD,GAAIvpG,KAAKwpG,oBACP,OAAOxpG,KAAKwpG,oBAEd,GAA4B,oBAAjBx/B,aAA8B,CAEvC,IAAMy/B,EAAKz/B,aAAapF,QAAb,UAAwB5kE,KAAK8zC,OAA7B,aACX,GAAI21D,EACF,OAAOA,EAGX,OAAO,O,kCAGUC,GACjB1pG,KAAK2pG,qBAAuBD,EACA,oBAAjB1/B,cAETA,aAAaC,QAAb,UAAwBjqE,KAAK8zC,OAA7B,mBAAsD8I,KAAK4H,UAAUklD,K,eAKvE,GAAI1pG,KAAK2pG,qBACP,OAAO3pG,KAAK2pG,qBAEd,GAA4B,oBAAjB3/B,aAET,IACE,OAAOptB,KAAKC,MAAMmtB,aAAapF,QAAb,UAAwB5kE,KAAK8zC,OAA7B,qBAClB,MAAOnxC,GACPhB,EAAQW,KAAK,gCAAiCK,GAGlD,OAAO,U,moBC7FUinG,E,WACnB,WAAalrD,I,4FAAI,SACf1+C,KAAKg4C,OAAS0G,EACd1+C,KAAKkgD,OAASxB,EAAGwB,OACjBlgD,KAAKY,MAAQ89C,EAAG99C,MAChBZ,KAAK03C,SAAWgH,EAAGhH,S,uEAYnB,OAAO13C,KAAKY,MAAM67C,Q,qCAGJA,GACdz8C,KAAKY,MAAM67C,MAAQ,GACnBz8C,KAAKY,MAAM67C,MAAQA,I,wCAInB,OAAOz8C,KAAKY,MAAMooG,e,sCAGHvsD,GACfz8C,KAAKY,MAAM67C,MAAQ,GACnBz8C,KAAKY,MAAMooG,aAAevsD,I,+BAGlBotD,GAAc,WACtB,OAAO7pG,KAAKkgD,OAAOC,QAAQ,OAAQ,YAAa0pD,GAAc,GAC3DxpD,MACC,SAACtgD,GAQC,OAPA,EAAKa,MAAM67C,MAAQ18C,EAAK+pG,aAAartD,MACrC,EAAK77C,MAAMooG,aAAejpG,EAAKgqG,cAActtD,MAC7C,EAAK77C,MAAMopG,cAAgBjqG,EAAKkqG,eAChC,EAAKrpG,MAAMspG,OAASnqG,EAAK4hD,KAAK7hD,GAC9B,EAAK43C,SAASyyD,eAAe,CAC3BD,OAAQnqG,EAAK4hD,KAAK7hD,KAEbC,KAETsgD,MAAK,SAAAtgD,GAAI,OAAI,IAAI2hD,IAAK3hD,EAAK4hD,W,4BAY1BlF,EAAO2tD,EAAWv6C,GAAU,WAC3Bna,EAAU,CACd+G,QACA4tD,WAAYD,EACZE,UAAW,CACTz6C,aAIJ,OAAO7vD,KAAKkgD,OAAOC,QAAQ,OAAQ,iBAAkBzK,GAAS,GAAO2K,MACnE,SAACtgD,GACC,GAAK8vD,EAaH,OARA,EAAKjvD,MAAM67C,MAAQ18C,EAAK+pG,aAAartD,MACrC,EAAK77C,MAAMooG,aAAejpG,EAAKgqG,cAActtD,MAC7C,EAAK77C,MAAMopG,cAAgBjqG,EAAKkqG,eAChC,EAAKrpG,MAAMspG,OAASnqG,EAAK4hD,KAAK7hD,GAC9B,EAAK43C,SAASyyD,eAAe,CAC3BD,OAAQnqG,EAAK4hD,KAAK7hD,GAClBogD,OAAQ,EAAKA,SAERngD,EAZP,IAAM+C,EAAQ,IAAIL,MAAM,gCAExB,MADAK,EAAM6rF,KAAO,iBACP7rF,KAaVu9C,MAAK,SAAAtgD,GAAI,OAAI,IAAI2hD,IAAK3hD,EAAK4hD,W,iCASnBe,GAAS,WACbhN,EAAU,CACd+G,MAAOiG,EACP2nD,WAAY,YAEd,OAAOrqG,KAAKkgD,OAAOC,QAAQ,OAAQ,iBAAkBzK,GAAS,GAAO2K,MACnE,SAACtgD,GAOC,OANA,EAAKa,MAAM67C,MAAQ18C,EAAK+pG,aAAartD,MACrC,EAAK77C,MAAMooG,aAAejpG,EAAKgqG,cAActtD,MAC7C,EAAK77C,MAAMopG,cAAgBjqG,EAAKkqG,eAChC,EAAKvyD,SAASyyD,eAAe,CAC3BD,OAAQnqG,EAAK4hD,KAAK7hD,KAEbC,KAETsgD,MAAK,SAAAtgD,GAAI,OAAI,IAAI2hD,IAAK3hD,EAAK4hD,W,mCAGjBxB,GAGZ,OAAOngD,KAAKkgD,OAAOC,QAAQ,OAAQ,kBAAmBA,GAAS,K,qCASjDzK,GAEd,OAAO11C,KAAKkgD,OAAOC,QAAQ,MAAO,WAAYzK,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAI,IAAI2hD,IAAK3hD,Q,iCASzE8tC,GACV,OAAO7tC,KAAKkgD,OAAOC,QAAQ,QAAS,WAAYtS,GAAQ,K,sCASxD,OAAO7tC,KAAKkgD,OAAOC,QAAQ,MAAO,kBAAmB,IAAI,K,sCAU1CoqD,GACf,OAAOvqG,KAAKkgD,OAAOC,QAAQ,OAAQ,wBAAyBoqD,GAAc,K,oCAU7D9tD,EAAO2tD,GACpB,IAAM10D,EAAU,CACd+G,QACA4tD,WAAYD,GAEd,OAAOpqG,KAAKkgD,OAAOC,QAAQ,OAAQ,uBAAwBzK,GAAS,K,4CAW/C+G,EAAO2tD,GAC5B,IAAM10D,EAAU,CACd+G,QACA4tD,WAAYD,GAEd,OAAOpqG,KAAKkgD,OAAOC,QAAQ,OAAQ,oCAAqCzK,GAAS,K,sCASjF,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAAQ,iBAAkB,IAAI,GAAOE,MAAK,SAAAtgD,GAAI,OAAIA,EAAK2qC,WAAWiY,c,+BASpE,WAAnB6nD,EAAmB,wDAIzB,GAHAxqG,KAAKg4C,OAAO9yC,KAAK,UACjBlF,KAAKg4C,OAAOC,WAAWiD,QACvBv5C,EAAQQ,IAAI,qBACRqoG,EAKF,OAAOxqG,KAAKkgD,OAAOC,QAAQ,OAAQ,kBAAmB,IAAI,GAAME,MAAK,WACnE,EAAKz/C,MAAM67C,MAAQ,GACnB,EAAK77C,MAAMooG,aAAe,GAC1B,EAAKtxD,SAASyyD,eAAe,SAHxB,OAIE,SAACxnG,GAKR,MAJAhB,EAAQW,KAAKK,GACb,EAAK/B,MAAM67C,MAAQ,GACnB,EAAK77C,MAAMooG,aAAe,GAC1B,EAAKtxD,SAASyyD,eAAe,MACvBxnG,KAbR3C,KAAKY,MAAM67C,MAAQ,GACnBz8C,KAAKY,MAAMooG,aAAe,GAC1BhpG,KAAK03C,SAASyyD,eAAe,Q,0CAqBZ56C,GAInB,IAHA,IAAMk7C,EAAKzqG,KAAKY,MAAMopG,cAChBU,EAAQD,EAAGrnG,OACXwyE,EAAU+0B,IAASp7C,GAChBtzD,EAAI,EAAGA,EAAIyuG,EAAOzuG,GAAK,EAAG,CACjC,IAAM2uG,EAAcD,IAASF,EAAGxuG,GAAG4xE,KACnC,GAAI+H,EAAQjmB,WAAai7C,EAAYj7C,SAAU,CAE7C,IAAMk7C,EAAcjB,EAAQkB,UAAUL,EAAGxuG,GAAGygE,YAC5C,gBAAUnN,EAAV,YAAiBs7C,IAGrB,OAAOt7C,I,mCAGK7Z,GASZ,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAAQ,kBAAmBzK,GAAS,K,sCAGhDq1D,GACf,OAAO/qG,KAAKkgD,OAAOC,QAAQ,MAApB,0BAA8C4qD,EAA9C,YAAiE,MAAM,K,sCAQ/DA,GACf,OAAO/qG,KAAKkgD,OAAOC,QAAQ,SAApB,0BAAiD4qD,GAAW,MAAM,K,oEAQtDr1D,G,6FACXw0D,EAAWlqG,KAAKY,MAAhBspG,O,kBACDlqG,KAAKkgD,OAAOC,QAAQ,OAApB,oBAAyC+pD,EAAzC,gBAA+Dx0D,GAAS,I,yKAGrDw0D,G,yGACnBlqG,KAAKkgD,OAAOC,QAAQ,MAApB,oBAAwC+pD,GAAU,IAAI,I,wRAWxDlqG,KAAKY,MAAMoqG,M,sBAAa,IAAIvoG,MAAM,wD,UAGjCwoG,EAAU7qG,KAAKkmB,SAASnY,SAAS,IAAI44C,OAAO,GAG5CmkD,EAAc,0CACdr9B,E,gEAA+D7tE,KAAKY,MAAMoqG,M,yBAAsBl6C,mBAAmBo6C,G,4BAAgCD,GAGnJE,EAAYhrG,OAAO66C,KAAK6yB,EAAK,SAAU,6D,sBAErC,IAAIprE,MAAM,6C,cAGd2oG,GAAkB,EAClBC,EAAiB,KACjBC,EAAc,KACZ7iD,EAAU,IAAIhiC,SAAQ,SAACqZ,EAASuM,GACpCg/D,EAAiBvrE,EACjBwrE,EAAcj/D,KAIVk/D,EAAe93C,aAAY,WAE/B,IAAK03C,EAAUK,OAAQ,OAAO,EAG9B53C,cAAc23C,GAGTH,GAAiBC,GAAe,KACpC,KAGGI,E,4CAAkB,WAAOjrG,GAAP,iGAEL,4BAAbA,EAAEunD,OAFgB,0CAE6B,GAF7B,UAKlBvnD,EAAET,KAAKgG,QAAUklG,EALC,0CAKe,GALf,UAQA,mBAAlBzqG,EAAET,KAAKoK,OARW,0CAQyB,GARzB,UAStBxI,EAAQQ,IAAI3B,EAAET,OAEVS,EAAET,KAAK4uF,KAXW,wBAYhB+c,EAAW,CACb,WAAc,qBACd,UAAa,EAAK1zD,OAAOp3C,MAAMoqG,MAC/B,KAAQxqG,EAAET,KAAK4uF,KACf,aAAgBuc,GAhBE,UAkBL,EAAKlzD,OAAOkI,OAAOC,QAAQ,OAAQ,kBAAmBurD,GAAU,GAlB3D,eAkBhBC,EAlBgB,OAoBpB,EAAKC,gBAAgBD,EAAG5B,cAActtD,OACtC,EAAK77C,MAAM67C,MAAQkvD,EAAG7B,aAAartD,MArBf,UAwBE,EAAKovD,iBAxBP,eAwBdC,EAxBc,OAyBpB,EAAKlrG,MAAMspG,OAAS4B,EAAQhsG,GAzBR,UA4BS,EAAKogD,OAAOC,QAAQ,MAAO,2BAA4B,MAAM,GA5BtE,QA4Bd4rD,EA5Bc,OA6BpB,EAAKnrG,MAAMopG,cAAgB+B,EAAe9B,eAG1C,EAAKvyD,SAASyyD,eAAe,CAC3BD,OAAQ4B,EAAQhsG,KAIlBsrG,GAAkB,EAClBC,GAAe,GAtCK,yBAyCd1oG,EAAM,IAAIF,MAAMjC,EAAET,KAAKisG,YAAc,qBACvCrd,KAAOnuF,EAAET,KAAK+C,MAClBsoG,GAAkB,EAClBE,EAAY3oG,GA5CQ,eAgDtBwoG,EAAUjwD,QACV/6C,OAAOo4C,oBAAoB,UAAWkzD,GACtC73C,cAAc23C,GAlDQ,mBAmDf,GAnDe,4C,sDAuDxBprG,OAAOg4C,iBAAiB,UAAWszD,G,kBAG5BhjD,G,mKAIayiD,EAAavc,G,mGAC7B+c,EAAW,CACb,WAAc,qBACd,UAAa1rG,KAAKY,MAAMoqG,MACxB,KAAQrc,EACR,aAAgBuc,G,SAEHlrG,KAAKg4C,OAAOkI,OAAOC,QAAQ,OAAQ,kBAAmBurD,GAAU,G,cAA3EC,E,OAEJ3rG,KAAK4rG,gBAAgBD,EAAG5B,cAActtD,OACtCz8C,KAAKY,MAAM67C,MAAQkvD,EAAG7B,aAAartD,M,SAGbz8C,KAAK6rG,iB,cAArBC,E,OACN9rG,KAAKY,MAAMspG,OAAS4B,EAAQhsG,G,UAGCE,KAAKkgD,OAAOC,QAAQ,MAAO,2BAA4B,MAAM,G,QAApF4rD,E,OACN/rG,KAAKY,MAAMopG,cAAgB+B,EAAe9B,eAG1CjqG,KAAK03C,SAASyyD,eAAe,CAC3BD,OAAQ4B,EAAQhsG,K,qIA1LFpD,GAChB,OAAOC,OAAOwL,KAAKzL,GAAGqY,KAAI,SAAAvX,GAAG,gBAAOA,EAAP,YAAcd,EAAEc,OAAQuL,KAAK,Q,qxCCpO9D,IAAMkjG,EAAa,CACjBC,EAAG,eACHC,GAAI,iBACJC,IAAK,oBACLC,IAAK,kBACLC,IAAK,kBACLC,IAAK,oBACLC,IAAK,sBACLC,KAAM,0BACNC,KAAM,qBACNC,KAAM,mBACNC,KAAM,mDACNC,KAAM,wBACNC,KAAM,iCACNC,KAAM,gBACNC,KAAM,uBACNC,KAAM,0CACNC,KAAM,mDACNC,KAAM,2BACNC,KAAM,mBACNC,KAAM,8BACNC,KAAM,0BACNC,KAAM,4BACNC,KAAM,0BACNC,KAAM,4BACNC,KAAM,qBACNC,KAAM,gBACNC,KAAM,wBAGaC,E,YAEnB,WAAanvD,GAAI,a,4FAAA,UACf,2BACK1G,OAAS0G,EACd,EAAK99C,MAAQ89C,EAAG99C,MAHD,E,qUAeF+J,EAAQmjG,EAAUp4D,EAASsJ,EAAMm2C,G,oFAE1Cn2C,E,gCAAYh/C,KAAK+tG,a,cAGhB5Y,IAASA,EAAU,IACxBA,EAAQ,UAAYn1F,KAAKY,MAAMoqG,MAC3BhsD,IAAMm2C,EAAO,cAAP,iBAAqCn1F,KAAKY,MAAM67C,Q,kBAGnDz8C,KAAKguG,YAAYrjG,EAAQmjG,EAAUp4D,EAASy/C,I,wKAIlCxqF,EAAQmjG,EAAUp4D,EAASy/C,G,mHAGxC8Y,EAAKC,YAAYpsG,MACjBqsG,EAAW/tG,KAAKkmB,SAASnY,SAAS,IAAI44C,OAAO,GACjD/mD,KAAKkF,KAAK,oBAAqB,CAC7BqqD,IAAKvvD,KAAKY,MAAMwtG,OAASN,EACzBnjG,SACAosD,MAAO,QACPo3C,WACA3rG,KAAMyrG,IAIJvlB,EAAO,KACNhzC,EAG0B,oBAAb24D,UAA4B34D,aAAmB24D,SAE/D3lB,EAAOhzC,EACkB,WAAhB,EAAOgzC,IAEhBA,EAAO9rC,KAAK4H,UAAU9O,GACtBy/C,EAAQ,gBAAkB,qBAG1BzM,EAAOhzC,EACF44D,aAAa,kBAAiBnZ,EAAQ,gBAAkB,qBAX7DzM,OAAOlpF,EAeLu2F,EAAW,KACXhO,EAAO,K,mBAIQpK,IAAM39E,KAAKY,MAAMwtG,OAASN,EAAU,CAAEnjG,SAAQ+9E,OAAMyM,Y,eAArEY,E,iBAGaA,EAAShO,O,QAAtBA,E,OAGI9T,EAAKi6B,YAAYpsG,MACrB9B,KAAKkF,KAAK,kBAAmB,CAC3BqqD,IAAKvvD,KAAKY,MAAMwtG,OAASN,EACzBnjG,SACA4jG,aAAct6B,EAAKg6B,EACnBE,WACAp3C,MAAO,Q,wDAMLkd,EAAKi6B,YAAYpsG,MACrB9B,KAAKkF,KAAK,kBAAmB,CAC3BqqD,IAAKvvD,KAAKY,MAAMwtG,OAASN,EACzBnjG,SACA4jG,aAAct6B,EAAKg6B,EACnBE,WACAp3C,MAAO,Q,qBASUv3D,IAAjBuoF,EAAKryC,SAAwC,OAAfqyC,EAAKjlF,M,uBAO/B0rG,EAAa,wCAAwCjuG,KAAKw1F,EAASnzF,SACrE6rG,EAAc,IAAI9qF,KAAK6qF,IAGrB1rG,EAAQ,IAAIL,MAAJ,gDAAmDgsG,KAC3D9f,KAAO5G,EAAKjlF,OAASizF,EAAS3vB,QAAU,EAC9CtjE,EAAM4rG,WAAa3Y,EAAS3vB,OAC5BtjE,EAAM6rG,UAAY5mB,EAAK6mB,WACvB9rG,EAAM+rG,cAAgB9mB,EAAKnlF,QAC3BE,EAAM2rG,YAAcA,EACd3rG,E,YAEGilF,QAAyBvoF,IAAjBuoF,EAAKryC,SAA4C,KAAnBqgD,EAAS3vB,O,iBAIxD2hB,EAAO,CACLryC,QAASqyC,G,gCAGevoF,IAAjBuoF,EAAKryC,Q,uBAGR5yC,EAAQ,IAAIL,MAAMwpG,EAAWlW,EAASjzF,QAAUilF,EAAKnlF,SAAW,yCAChE+rF,KAAO5G,EAAKjlF,OAASizF,EAAS3vB,QAAU,EAC9CtjE,EAAM4rG,WAAa3Y,EAAS3vB,OAC5BtjE,EAAM6rG,UAAY5mB,EAAK6mB,WACvB9rG,EAAM+rG,cAAgB9mB,EAAKnlF,QACrBE,E,aAKJilF,EAAKryC,SAAWqyC,EAAKryC,QAAQo5D,MAAQ/mB,EAAKryC,QAAQo5D,KAAKhsG,O,uBAErDH,EAAMolF,EAAKryC,QAAQo5D,KAAKhsG,MAAMisG,MAAQhZ,EAAS3vB,QAAU,GACvDtjE,EAAQ,IAAIL,MAAMwpG,EAAWtpG,IAAQolF,EAAKryC,QAAQo5D,KAAKhsG,MAAMksG,KAAO,sCACpErgB,KAAOhsF,EACbG,EAAM+rG,cAAgB9mB,EAAKryC,QAAQo5D,KAAKhsG,MAAMksG,KAAO,GACrDlsG,EAAM4rG,WAAa3Y,EAAS3vB,OAC5BtjE,EAAM6rG,UAAY5mB,EAAK6mB,WACjB9rG,E,iCAIDilF,EAAKryC,S,mJAOE,WAGd,OAAI11C,KAAKivG,kBACAjvG,KAAKivG,mBAGdjvG,KAAKivG,kBAAoBjvG,KAAKmgD,QAAQ,OAAQ,mBAAoB,IAAI,EAAO,CAC3E+uD,cAAe,UAAF,OAAYlvG,KAAKY,MAAMooG,gBACnC3oD,MAAK,SAAAtgD,GAGN,EAAKa,MAAM67C,MAAQ18C,EAAK+pG,aAAartD,MACrC,EAAKwyD,kBAAoB,QANF,OAQhB,SAAAtsG,GAQP,MALAhB,EAAQW,KAAK,yDAA0DK,GACvE,EAAKssG,kBAAoB,MACT,QAAZtsG,EAAIgsF,MAAkBhsF,EAAIC,QAAQiS,SAAS,eAC7C,EAAKmjC,OAAOm3D,YAAYC,QAAO,GAE3BzsG,KAKD3C,KAAKivG,qB,uKAiBVI,EAAetG,IAAU/oG,KAAKY,MAAM67C,OACpC6yD,EAAqC,IAAnBD,EAAa1wG,MACrBglB,KAAK7hB,MAGA,IAAQwtG,G,sBAAsB,IAAI7sG,MAAM,kB,gFAGhDzC,KAAKgpG,gB,kCAIP,G,8IAzNyB7kG,K,4EC7CpC,IAAItC,OAAS,oBAAQ,KAEjB87E,MAoBJ,SAAS4xB,YACP,MAAyB,oBAAXpvG,OAnBZovG,aACF1tG,OAAO2tG,WACUhwG,IAAfW,OAAOw9E,MACP,CACE,qEACA,wCACA,yHACA50E,KAAK,OAET40E,MAAQx9E,OAAOw9E,MAAMlgF,KAAK0C,SAI1Bw9E,MAAQna,KAAK,UAALA,CAAgB,cAG1BxnE,OAAOD,QAAU4hF,O,4/BCTI1lC,E,YACnB,WAAar3C,EAAOs/C,EAAQmO,GAAS,a,4FAAA,UACnC,2BACKztD,MAAQA,EACb,EAAKs/C,OAASA,EACd,EAAKmO,QAAUA,EAGf,EAAKtW,OAAS,KAGd,EAAK03D,UAAY,IAGjB,EAAKC,aAAc,EAbgB,E,4ZA4BnC1vG,KAAK0vG,aAAc,GAGf1vG,KAAK+3C,O,yCACA/3C,M,gCAKDA,KAAKkgD,OAAO6tD,a,8DAElBpsG,EAAQW,KAAK,4DACbtC,KAAK2vG,kB,kBACE3vG,M,YAILA,KAAK+3C,O,0CACA/3C,M,eAIHuvD,E,UAASvvD,KAAKquD,Q,sBAAqByC,mBAAmB9wD,KAAKY,MAAMoqG,O,kBAAgBl6C,mBAAmB9wD,KAAKY,MAAM67C,QACrHz8C,KAAK+3C,OAAS,IAAI63D,UAAUrgD,GAC5BvvD,KAAK+3C,OAAOI,iBAAiB,OAAQn4C,KAAK6vG,gBAAgBpyG,KAAKuC,OAC/DA,KAAK+3C,OAAOI,iBAAiB,UAAWn4C,KAAK8vG,cAAcryG,KAAKuC,OAChEA,KAAK+3C,OAAOI,iBAAiB,QAASn4C,KAAK+vG,YAAYtyG,KAAKuC,OAC5DA,KAAK+3C,OAAOI,iBAAiB,QAASn4C,KAAKgwG,YAAYvyG,KAAKuC,O,kBAGrDA,M,uTAOIiwG,GACPjwG,KAAK+3C,QAAqC,IAA3B/3C,KAAK+3C,OAAOm4D,WAC7BlwG,KAAK+3C,OAAOo4D,KAAKvzD,KAAK4H,UAAUyrD,IAEhCtuG,EAAQW,KAAK,2E,oCAWF9B,GACb,IAAM4vG,EAAKxzD,KAAKC,MAAMr8C,EAAET,MACxBC,KAAKqwG,QAAQ,gBAAiBD,GAGV,QAAhBA,EAAGx3D,UACL54C,KAAKqwG,QAAQ,gBAAiBD,GAGZ,iBAAhBA,EAAGx3D,UACL54C,KAAKqwG,QAAQ,cAAeD,GAIV,cAAhBA,EAAGx3D,UACL54C,KAAKqwG,QAAQ,YAAaD,GAIR,cAAhBA,EAAGx3D,UACL54C,KAAKqwG,QAAQ,WAAYD,GAIP,SAAhBA,EAAGx3D,UACL54C,KAAKqwG,QAAQ,OAAQD,GAGnBA,GACFpwG,KAAKqwG,QAAQ,MAAOD,K,sCAUP5vG,GACfR,KAAKyvG,UAAY,IACjBzvG,KAAKqwG,QAAQ,YAAa7vG,K,wCAST,WAEbR,KAAKswG,YACPlrF,aAAaplB,KAAKswG,YAIpBtwG,KAAKswG,WAAarmG,YAAW,WAE3B,EAAKqmG,WAAa,KAGb,EAAKZ,cAKN,EAAKD,UAAY,MACnB,EAAKA,WAAa,GAIpB,EAAKv3D,aACJl4C,KAAKyvG,a,kCAQG9sG,GACX3C,KAAK+3C,OAAS,KACdp2C,EAAQW,KAAK,kCAAoCK,EAAIC,W,oCASrD5C,KAAK+3C,OAAS,KACd/3C,KAAK2vG,oB,8BAUL3vG,KAAK0vG,aAAc,EAGf1vG,KAAKswG,aACPlrF,aAAaplB,KAAKswG,YAClBtwG,KAAKswG,WAAa,MAIhBtwG,KAAK+3C,SACP/3C,KAAK+3C,OAAOmD,QACZl7C,KAAK+3C,OAAS,Q,6BAhLhB,OAAO/3C,KAAK+3C,QAAqC,IAA3B/3C,KAAK+3C,OAAOm4D,gB,qCAnBE/rG,K,yFCbxC,YAEA,EAAQ,KAER,IAEgCy8C,EAF5B2vD,GAE4B3vD,EAFK,EAAQ,OAEQA,EAAIvjD,WAAaujD,EAAM,CAAE,QAAWA,GAErF2vD,EAAiB,QAAEC,qBAAqC,IAAZ7uG,GAA2BA,EAAQW,MACjFX,EAAQW,KAAK,+SAGfiuG,EAAiB,QAAEC,gBAAiB,I,gCCZpCx0G,EAAOD,QAAU,SAAkB2K,GACjC,OAAOA,GAAsB,iBAARA,GACI,mBAAbA,EAAIF,MACS,mBAAbE,EAAI2N,MACc,mBAAlB3N,EAAI+pG,Y,cCJW,mBAAlB9zG,OAAOY,OAEhBvB,EAAOD,QAAU,SAAkBqO,EAAMC,GACvCD,EAAKE,OAASD,EACdD,EAAKvM,UAAYlB,OAAOY,OAAO8M,EAAUxM,UAAW,CAClD0M,YAAa,CACXrN,MAAOkN,EACPvN,YAAY,EACZ2N,UAAU,EACVC,cAAc,MAMpBzO,EAAOD,QAAU,SAAkBqO,EAAMC,GACvCD,EAAKE,OAASD,EACd,IAAIK,EAAW,aACfA,EAAS7M,UAAYwM,EAAUxM,UAC/BuM,EAAKvM,UAAY,IAAI6M,EACrBN,EAAKvM,UAAU0M,YAAcH,I,8BCpBjC,YAEA,IAAIsmG,EAAe,EAAQ;;;;;;GAW3B,SAAS96B,EAAQz0E,EAAGyL,GAClB,GAAIzL,IAAMyL,EACR,OAAO,EAMT,IAHA,IAAI23C,EAAIpjD,EAAEiC,OACN24D,EAAInvD,EAAExJ,OAEDnH,EAAI,EAAGkL,EAAM/G,KAAKY,IAAIujD,EAAGwX,GAAI9/D,EAAIkL,IAAOlL,EAC/C,GAAIkF,EAAElF,KAAO2Q,EAAE3Q,GAAI,CACjBsoD,EAAIpjD,EAAElF,GACN8/D,EAAInvD,EAAE3Q,GACN,MAIJ,OAAIsoD,EAAIwX,GACE,EAENA,EAAIxX,EACC,EAEF,EAET,SAAS5+B,EAAS/Y,GAChB,OAAI3O,EAAOumB,QAA4C,mBAA3BvmB,EAAOumB,OAAOmB,SACjC1nB,EAAOumB,OAAOmB,SAAS/Y,KAEjB,MAALA,IAAaA,EAAE+jG,WA+B3B,IAAI/uG,EAAO,EAAQ,IACfgvG,EAASj0G,OAAOkB,UAAUC,eAC1B+yG,EAAS7uG,MAAMnE,UAAUkE,MACzB+uG,EACgC,QAA3B,aAAkBt0G,KAE3B,SAASu0G,EAAWnwD,GAClB,OAAOjkD,OAAOkB,UAAUsQ,SAAS/R,KAAKwkD,GAExC,SAASowD,EAAOC,GACd,OAAItrF,EAASsrF,KAGqB,mBAAvBhzG,EAAO8R,cAGgB,mBAAvBA,YAAYihG,OACdjhG,YAAYihG,OAAOC,KAEvBA,IAGDA,aAAkBhhG,aAGlBghG,EAAOx+F,QAAUw+F,EAAOx+F,kBAAkB1C,gBAShD,IAAIlO,EAAS7F,EAAOD,QAAUoH,EAO1B+tG,EAAQ,8BAEZ,SAASC,EAAQnnG,GACf,GAAKpI,EAAKkH,WAAWkB,GAArB,CAGA,GAAI8mG,EACF,OAAO9mG,EAAKxN,KAEd,IACI2mB,EADMnZ,EAAKmE,WACCgV,MAAM+tF,GACtB,OAAO/tF,GAASA,EAAM,IAyCxB,SAASowB,EAASv1C,EAAGN,GACnB,MAAiB,iBAANM,EACFA,EAAEoF,OAAS1F,EAAIM,EAAIA,EAAE+D,MAAM,EAAGrE,GAE9BM,EAGX,SAASgF,EAAQouG,GACf,GAAIN,IAAuBlvG,EAAKkH,WAAWsoG,GACzC,OAAOxvG,EAAKoB,QAAQouG,GAEtB,IAAIC,EAAUF,EAAQC,GAEtB,MAAO,aADIC,EAAU,KAAOA,EAAU,IACT,IAmB/B,SAAS9yC,EAAK+yC,EAAQC,EAAU3uG,EAASu6B,EAAUq0E,GACjD,MAAM,IAAI3vG,EAAO4vG,eAAe,CAC9B7uG,QAASA,EACT0uG,OAAQA,EACRC,SAAUA,EACVp0E,SAAUA,EACVq0E,mBAAoBA,IAcxB,SAASruG,EAAGjG,EAAO0F,GACZ1F,GAAOqhE,EAAKrhE,GAAO,EAAM0F,EAAS,KAAMf,EAAOsB,IAoCtD,SAASuuG,EAAWJ,EAAQC,EAAUI,EAAQC,GAE5C,GAAIN,IAAWC,EACb,OAAO,EACF,GAAI5rF,EAAS2rF,IAAW3rF,EAAS4rF,GACtC,OAAqC,IAA9B37B,EAAQ07B,EAAQC,GAIlB,GAAI3vG,EAAKod,OAAOsyF,IAAW1vG,EAAKod,OAAOuyF,GAC5C,OAAOD,EAAOO,YAAcN,EAASM,UAKhC,GAAIjwG,EAAKwd,SAASkyF,IAAW1vG,EAAKwd,SAASmyF,GAChD,OAAOD,EAAO9yG,SAAW+yG,EAAS/yG,QAC3B8yG,EAAOrzG,SAAWszG,EAAStzG,QAC3BqzG,EAAO9nD,YAAc+nD,EAAS/nD,WAC9B8nD,EAAOtuF,YAAcuuF,EAASvuF,WAC9BsuF,EAAO/nD,aAAegoD,EAAShoD,WAIjC,GAAgB,OAAX+nD,GAAqC,iBAAXA,GACb,OAAbC,GAAyC,iBAAbA,EASjC,IAAIP,EAAOM,IAAWN,EAAOO,IACzBR,EAAUO,KAAYP,EAAUQ,MAC9BD,aAAkBQ,cAClBR,aAAkBS,cAC7B,OACoD,IAD7Cn8B,EAAQ,IAAIhmE,WAAW0hG,EAAO7+F,QACtB,IAAI7C,WAAW2hG,EAAS9+F,SAQlC,GAAIkT,EAAS2rF,KAAY3rF,EAAS4rF,GACvC,OAAO,EAIP,IAAIS,GAFJJ,EAAQA,GAAS,CAACN,OAAQ,GAAIC,SAAU,KAEhBD,OAAO38F,QAAQ28F,GACvC,OAAqB,IAAjBU,GACEA,IAAgBJ,EAAML,SAAS58F,QAAQ48F,KAK7CK,EAAMN,OAAOlsG,KAAKksG,GAClBM,EAAML,SAASnsG,KAAKmsG,GAUxB,SAAkBpwG,EAAGyL,EAAG+kG,EAAQM,GAC9B,GAAI9wG,eAAiCyL,EACnC,OAAO,EAET,GAAIhL,EAAK0lD,YAAYnmD,IAAMS,EAAK0lD,YAAY16C,GAC1C,OAAOzL,IAAMyL,EACf,GAAI+kG,GAAUh1G,OAAOiK,eAAezF,KAAOxE,OAAOiK,eAAegG,GAC/D,OAAO,EACT,IAAIslG,EAAUzoF,EAAYtoB,GACtBgxG,EAAU1oF,EAAY7c,GAC1B,GAAKslG,IAAYC,IAAcD,GAAWC,EACxC,OAAO,EACT,GAAID,EAGF,OAFA/wG,EAAI0vG,EAAOz0G,KAAK+E,GAChByL,EAAIikG,EAAOz0G,KAAKwQ,GACT8kG,EAAWvwG,EAAGyL,EAAG+kG,GAE1B,IAEIn0G,EAAKvB,EAFLm2G,EAAKC,EAAWlxG,GAChBmxG,EAAKD,EAAWzlG,GAIpB,GAAIwlG,EAAGhvG,SAAWkvG,EAAGlvG,OACnB,OAAO,EAKT,IAHAgvG,EAAG7gG,OACH+gG,EAAG/gG,OAEEtV,EAAIm2G,EAAGhvG,OAAS,EAAGnH,GAAK,EAAGA,IAC9B,GAAIm2G,EAAGn2G,KAAOq2G,EAAGr2G,GACf,OAAO,EAIX,IAAKA,EAAIm2G,EAAGhvG,OAAS,EAAGnH,GAAK,EAAGA,IAE9B,GADAuB,EAAM40G,EAAGn2G,IACJy1G,EAAWvwG,EAAE3D,GAAMoP,EAAEpP,GAAMm0G,EAAQM,GACtC,OAAO,EAEX,OAAO,EA/CEM,CAASjB,EAAQC,EAAUI,EAAQC,IApC1C,OAAOD,EAASL,IAAWC,EAAWD,GAAUC,EAwCpD,SAAS9nF,EAAY9rB,GACnB,MAAiD,sBAA1ChB,OAAOkB,UAAUsQ,SAAS/R,KAAKuB,GAgFxC,SAAS60G,EAAkBlB,EAAQC,GACjC,IAAKD,IAAWC,EACd,OAAO,EAGT,GAAgD,mBAA5C50G,OAAOkB,UAAUsQ,SAAS/R,KAAKm1G,GACjC,OAAOA,EAAS9nG,KAAK6nG,GAGvB,IACE,GAAIA,aAAkBC,EACpB,OAAO,EAET,MAAO/wG,IAIT,OAAIiC,MAAMgwG,cAAclB,KAIa,IAA9BA,EAASn1G,KAAK,GAAIk1G,GAa3B,SAASoB,EAAQC,EAAaC,EAAOrB,EAAU3uG,GAC7C,IAAI0uG,EAEJ,GAAqB,mBAAVsB,EACT,MAAM,IAAIjyG,UAAU,uCAGE,iBAAb4wG,IACT3uG,EAAU2uG,EACVA,EAAW,MAGbD,EAtBF,SAAmBsB,GACjB,IAAI9vG,EACJ,IACE8vG,IACA,MAAOpyG,GACPsC,EAAQtC,EAEV,OAAOsC,EAeE+vG,CAAUD,GAEnBhwG,GAAW2uG,GAAYA,EAAS/0G,KAAO,KAAO+0G,EAAS/0G,KAAO,KAAO,MAC1DoG,EAAU,IAAMA,EAAU,KAEjC+vG,IAAgBrB,GAClB/yC,EAAK+yC,EAAQC,EAAU,6BAA+B3uG,GAGxD,IAAIkwG,EAAyC,iBAAZlwG,EAE7BmwG,GAAyBJ,GAAerB,IAAWC,EASvD,KAV2BoB,GAAe/wG,EAAKkkC,QAAQwrE,IAInDwB,GACAN,EAAkBlB,EAAQC,IAC1BwB,IACFx0C,EAAK+yC,EAAQC,EAAU,yBAA2B3uG,GAG/C+vG,GAAerB,GAAUC,IACzBiB,EAAkBlB,EAAQC,KAAgBoB,GAAerB,EAC5D,MAAMA,EAvVVzvG,EAAO4vG,eAAiB,SAAwB9tE,GAC9C3jC,KAAKxD,KAAO,iBACZwD,KAAKsxG,OAAS3tE,EAAQ2tE,OACtBtxG,KAAKuxG,SAAW5tE,EAAQ4tE,SACxBvxG,KAAKm9B,SAAWwG,EAAQxG,SACpBwG,EAAQ/gC,SACV5C,KAAK4C,QAAU+gC,EAAQ/gC,QACvB5C,KAAKgzG,kBAAmB,IAExBhzG,KAAK4C,QA6CT,SAAoBvC,GAClB,OAAOkzC,EAASvwC,EAAQ3C,EAAKixG,QAAS,KAAO,IACtCjxG,EAAK88B,SAAW,IAChBoW,EAASvwC,EAAQ3C,EAAKkxG,UAAW,KAhDvB0B,CAAWjzG,MAC1BA,KAAKgzG,kBAAmB,GAE1B,IAAIxB,EAAqB7tE,EAAQ6tE,oBAAsBjzC,EACvD,GAAI97D,MAAMg2F,kBACRh2F,MAAMg2F,kBAAkBz4F,KAAMwxG,OACzB,CAEL,IAAI7uG,EAAM,IAAIF,MACd,GAAIE,EAAII,MAAO,CACb,IAAIrE,EAAMiE,EAAII,MAGVmwG,EAAU/B,EAAQK,GAClBvrD,EAAMvnD,EAAIiW,QAAQ,KAAOu+F,GAC7B,GAAIjtD,GAAO,EAAG,CAGZ,IAAIktD,EAAYz0G,EAAIiW,QAAQ,KAAMsxC,EAAM,GACxCvnD,EAAMA,EAAIg1C,UAAUy/D,EAAY,GAGlCnzG,KAAK+C,MAAQrE,KAMnBkD,EAAKkmD,SAASjmD,EAAO4vG,eAAgBhvG,OA6CrCZ,EAAO08D,KAAOA,EAYd18D,EAAOsB,GAAKA,EAMZtB,EAAOuxG,MAAQ,SAAe9B,EAAQC,EAAU3uG,GAC1C0uG,GAAUC,GAAUhzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,KAAMf,EAAOuxG,QAMvEvxG,EAAOwxG,SAAW,SAAkB/B,EAAQC,EAAU3uG,GAChD0uG,GAAUC,GACZhzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,KAAMf,EAAOwxG,WAOjDxxG,EAAOyxG,UAAY,SAAmBhC,EAAQC,EAAU3uG,GACjD8uG,EAAWJ,EAAQC,GAAU,IAChChzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,YAAaf,EAAOyxG,YAIxDzxG,EAAO0xG,gBAAkB,SAAyBjC,EAAQC,EAAU3uG,GAC7D8uG,EAAWJ,EAAQC,GAAU,IAChChzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,kBAAmBf,EAAO0xG,kBAuH9D1xG,EAAO2xG,aAAe,SAAsBlC,EAAQC,EAAU3uG,GACxD8uG,EAAWJ,EAAQC,GAAU,IAC/BhzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,eAAgBf,EAAO2xG,eAI3D3xG,EAAO4xG,mBACP,SAASA,EAAmBnC,EAAQC,EAAU3uG,GACxC8uG,EAAWJ,EAAQC,GAAU,IAC/BhzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,qBAAsB6wG,IAQ1D5xG,EAAO6xG,YAAc,SAAqBpC,EAAQC,EAAU3uG,GACtD0uG,IAAWC,GACbhzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,MAAOf,EAAO6xG,cAOlD7xG,EAAO8xG,eAAiB,SAAwBrC,EAAQC,EAAU3uG,GAC5D0uG,IAAWC,GACbhzC,EAAK+yC,EAAQC,EAAU3uG,EAAS,MAAOf,EAAO8xG,iBA+ElD9xG,EAAO+xG,OAAS,SAAShB,EAAmB9vG,EAAmBF,GAC7D8vG,GAAQ,EAAME,EAAO9vG,EAAOF,IAI9Bf,EAAOgyG,aAAe,SAASjB,EAAmB9vG,EAAmBF,GACnE8vG,GAAQ,EAAOE,EAAO9vG,EAAOF,IAG/Bf,EAAOiyG,QAAU,SAASnxG,GAAO,GAAIA,EAAK,MAAMA,GAMhDd,EAAO8vG,OAASjB,GAHhB,SAASiB,EAAOz0G,EAAO0F,GAChB1F,GAAOqhE,EAAKrhE,GAAO,EAAM0F,EAAS,KAAM+uG,KAEV9vG,EAAQ,CAC3CuxG,MAAOvxG,EAAO6xG,YACdJ,UAAWzxG,EAAO0xG,gBAClBF,SAAUxxG,EAAO8xG,eACjBH,aAAc3xG,EAAO4xG,qBAEvB5xG,EAAO8vG,OAAOA,OAAS9vG,EAAO8vG,OAE9B,IAAIU,EAAa11G,OAAOwL,MAAQ,SAAUy4C,GACxC,IAAIz4C,EAAO,GACX,IAAK,IAAI3K,KAAOojD,EACVgwD,EAAOx0G,KAAKwkD,EAAKpjD,IAAM2K,EAAK/C,KAAK5H,GAEvC,OAAO2K,K;;;;;EChfT,IAAItE,EAAwBlH,OAAOkH,sBAC/B/F,EAAiBnB,OAAOkB,UAAUC,eAClCi2G,EAAmBp3G,OAAOkB,UAAU+mB,qBAExC,SAASxX,EAASxE,GACjB,GAAIA,QACH,MAAM,IAAIjI,UAAU,yDAGrB,OAAOhE,OAAOiM,GA+Cf5M,EAAOD,QA5CP,WACC,IACC,IAAKY,OAAO6pC,OACX,OAAO,EAMR,IAAIwtE,EAAQ,IAAIzuG,OAAO,OAEvB,GADAyuG,EAAM,GAAK,KACkC,MAAzCr3G,OAAOmH,oBAAoBkwG,GAAO,GACrC,OAAO,EAKR,IADA,IAAIC,EAAQ,GACHh4G,EAAI,EAAGA,EAAI,GAAIA,IACvBg4G,EAAM,IAAM1uG,OAAO0rD,aAAah1D,IAAMA,EAKvC,GAAwB,eAHXU,OAAOmH,oBAAoBmwG,GAAOl/F,KAAI,SAAUrX,GAC5D,OAAOu2G,EAAMv2G,MAEHqL,KAAK,IACf,OAAO,EAIR,IAAImrG,EAAQ,GAIZ,MAHA,uBAAuBxrG,MAAM,IAAIgM,SAAQ,SAAUy/F,GAClDD,EAAMC,GAAUA,KAGf,yBADEx3G,OAAOwL,KAAKxL,OAAO6pC,OAAO,GAAI0tE,IAAQnrG,KAAK,IAM9C,MAAOpG,GAER,OAAO,GAIQyxG,GAAoBz3G,OAAO6pC,OAAS,SAAUlnC,EAAQd,GAKtE,IAJA,IAAIoZ,EAEAy8F,EADAjjD,EAAKhkD,EAAS9N,GAGTtB,EAAI,EAAGA,EAAIqE,UAAUe,OAAQpF,IAAK,CAG1C,IAAK,IAAIR,KAFToa,EAAOjb,OAAO0F,UAAUrE,IAGnBF,EAAe1B,KAAKwb,EAAMpa,KAC7B4zD,EAAG5zD,GAAOoa,EAAKpa,IAIjB,GAAIqG,EAAuB,CAC1BwwG,EAAUxwG,EAAsB+T,GAChC,IAAK,IAAI3b,EAAI,EAAGA,EAAIo4G,EAAQjxG,OAAQnH,IAC/B83G,EAAiB33G,KAAKwb,EAAMy8F,EAAQp4G,MACvCm1D,EAAGijD,EAAQp4G,IAAM2b,EAAKy8F,EAAQp4G,MAMlC,OAAOm1D,I,cCxFRp1D,EAAOD,QAEP,WACI,OAAO,IAAI4nB,MAAOkuF,Y,6BCDtB,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,KAER,EAAQ,M,gBC5BR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR71G,EAAOD,QAAU,EAAQ,I,6BCxIzB,IAAIkC,EAAS,EAAQ,GACjBqK,EAAM,EAAQ,IACd6zC,EAAc,EAAQ,GACtB79C,EAAU,EAAQ,GAClBF,EAAW,EAAQ,IACnB04C,EAAO,EAAQ,IAAW3pC,IAC1BmnG,EAAS,EAAQ,GACjBvgD,EAAS,EAAQ,IACjB9I,EAAiB,EAAQ,IACzBpqD,EAAM,EAAQ,IACdmO,EAAM,EAAQ,GACdosD,EAAS,EAAQ,IACjBm5C,EAAY,EAAQ,KACpBC,EAAW,EAAQ,KACnB7sF,EAAU,EAAQ,IAClBvmB,EAAW,EAAQ,GACnBX,EAAW,EAAQ,GACnB2M,EAAW,EAAQ,IACnBJ,EAAY,EAAQ,IACpB1L,EAAc,EAAQ,IACtBqI,EAAa,EAAQ,IACrB8qG,EAAU,EAAQ,IAClBC,EAAU,EAAQ,KAClB/kG,EAAQ,EAAQ,IAChBglG,EAAQ,EAAQ,IAChBjlG,EAAM,EAAQ,IACd4qC,EAAQ,EAAQ,IAChBrtC,EAAO0C,EAAMnO,EACbD,EAAKmO,EAAIlO,EACTsN,EAAO4lG,EAAQlzG,EACf65D,EAAUp9D,EAAOjB,OACjB43G,EAAQ32G,EAAO2+C,KACfi4D,EAAaD,GAASA,EAAMpwD,UAE5BswD,EAAS9lG,EAAI,WACb+lG,EAAe/lG,EAAI,eACnB8sD,EAAS,GAAGl3C,qBACZowF,EAAiBjhD,EAAO,mBACxBkhD,EAAalhD,EAAO,WACpBmhD,EAAYnhD,EAAO,cACnB1Y,EAAc1+C,OAAgB,UAC9BghE,EAA+B,mBAAXtC,KAA2Bs5C,EAAMnzG,EACrD2zG,EAAUl3G,EAAOk3G,QAEjBl+F,GAAUk+F,IAAYA,EAAiB,YAAMA,EAAiB,UAAEC,UAGhEC,EAAgBl5D,GAAem4D,GAAO,WACxC,OAES,GAFFG,EAAQlzG,EAAG,GAAI,IAAK,CACzBzE,IAAK,WAAc,OAAOyE,EAAGvB,KAAM,IAAK,CAAE9C,MAAO,IAAKiE,MACpDA,KACD,SAAUT,EAAIlD,EAAKghD,GACtB,IAAI82D,EAAYroG,EAAKouC,EAAa79C,GAC9B83G,UAAkBj6D,EAAY79C,GAClC+D,EAAGb,EAAIlD,EAAKghD,GACR82D,GAAa50G,IAAO26C,GAAa95C,EAAG85C,EAAa79C,EAAK83G,IACxD/zG,EAEAysC,EAAO,SAAU5kC,GACnB,IAAImsG,EAAMN,EAAW7rG,GAAOqrG,EAAQp5C,EAAiB,WAErD,OADAk6C,EAAI1/C,GAAKzsD,EACFmsG,GAGLhnF,EAAWovC,GAAyC,iBAApBtC,EAAQ9nD,SAAuB,SAAU7S,GAC3E,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAOA,aAAc26D,GAGnB9F,EAAkB,SAAwB70D,EAAIlD,EAAKghD,GAKrD,OAJI99C,IAAO26C,GAAaka,EAAgB2/C,EAAW13G,EAAKghD,GACxDp9C,EAASV,GACTlD,EAAM8D,EAAY9D,GAAK,GACvB4D,EAASo9C,GACLl2C,EAAI2sG,EAAYz3G,IACbghD,EAAE3hD,YAIDyL,EAAI5H,EAAIo0G,IAAWp0G,EAAGo0G,GAAQt3G,KAAMkD,EAAGo0G,GAAQt3G,IAAO,GAC1DghD,EAAIi2D,EAAQj2D,EAAG,CAAE3hD,WAAY8M,EAAW,GAAG,OAJtCrB,EAAI5H,EAAIo0G,IAASvzG,EAAGb,EAAIo0G,EAAQnrG,EAAW,EAAG,KACnDjJ,EAAGo0G,GAAQt3G,IAAO,GAIX63G,EAAc30G,EAAIlD,EAAKghD,IACzBj9C,EAAGb,EAAIlD,EAAKghD,IAEnBg3D,EAAoB,SAA0B90G,EAAIvB,GACpDiC,EAASV,GAKT,IAJA,IAGIlD,EAHA2K,EAAOqsG,EAASr1G,EAAI6N,EAAU7N,IAC9BlD,EAAI,EACJC,EAAIiM,EAAK/E,OAENlH,EAAID,GAAGs5D,EAAgB70D,EAAIlD,EAAM2K,EAAKlM,KAAMkD,EAAE3B,IACrD,OAAOkD,GAKL+0G,EAAwB,SAA8Bj4G,GACxD,IAAIk4G,EAAI55C,EAAO1/D,KAAK4D,KAAMxC,EAAM8D,EAAY9D,GAAK,IACjD,QAAIwC,OAASq7C,GAAe/yC,EAAI2sG,EAAYz3G,KAAS8K,EAAI4sG,EAAW13G,QAC7Dk4G,IAAMptG,EAAItI,KAAMxC,KAAS8K,EAAI2sG,EAAYz3G,IAAQ8K,EAAItI,KAAM80G,IAAW90G,KAAK80G,GAAQt3G,KAAOk4G,IAE/FC,EAA4B,SAAkCj1G,EAAIlD,GAGpE,GAFAkD,EAAKsM,EAAUtM,GACflD,EAAM8D,EAAY9D,GAAK,GACnBkD,IAAO26C,IAAe/yC,EAAI2sG,EAAYz3G,IAAS8K,EAAI4sG,EAAW13G,GAAlE,CACA,IAAIghD,EAAIvxC,EAAKvM,EAAIlD,GAEjB,OADIghD,IAAKl2C,EAAI2sG,EAAYz3G,IAAU8K,EAAI5H,EAAIo0G,IAAWp0G,EAAGo0G,GAAQt3G,KAAOghD,EAAE3hD,YAAa,GAChF2hD,IAELo3D,EAAuB,SAA6Bl1G,GAKtD,IAJA,IAGIlD,EAHA89D,EAAQxsD,EAAK9B,EAAUtM,IACvBwN,EAAS,GACTjS,EAAI,EAEDq/D,EAAMl4D,OAASnH,GACfqM,EAAI2sG,EAAYz3G,EAAM89D,EAAMr/D,OAASuB,GAAOs3G,GAAUt3G,GAAOs5C,GAAM5oC,EAAO9I,KAAK5H,GACpF,OAAO0Q,GAEP2nG,GAAyB,SAA+Bn1G,GAM1D,IALA,IAIIlD,EAJAs4G,EAAQp1G,IAAO26C,EACfigB,EAAQxsD,EAAKgnG,EAAQZ,EAAYloG,EAAUtM,IAC3CwN,EAAS,GACTjS,EAAI,EAEDq/D,EAAMl4D,OAASnH,IAChBqM,EAAI2sG,EAAYz3G,EAAM89D,EAAMr/D,OAAU65G,IAAQxtG,EAAI+yC,EAAa79C,IAAc0Q,EAAO9I,KAAK6vG,EAAWz3G,IACxG,OAAO0Q,GAINyvD,IAYHv/D,GAXAi9D,EAAU,WACR,GAAIr7D,gBAAgBq7D,EAAS,MAAM16D,UAAU,gCAC7C,IAAIyI,EAAMvI,EAAIwB,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,GAChDmW,EAAO,SAAUzY,GACf8C,OAASq7C,GAAa1lC,EAAKvZ,KAAK84G,EAAWh4G,GAC3CoL,EAAItI,KAAM80G,IAAWxsG,EAAItI,KAAK80G,GAAS1rG,KAAMpJ,KAAK80G,GAAQ1rG,IAAO,GACrEisG,EAAcr1G,KAAMoJ,EAAKO,EAAW,EAAGzM,KAGzC,OADIi/C,GAAellC,GAAQo+F,EAAch6D,EAAajyC,EAAK,CAAEqB,cAAc,EAAMhE,IAAKkP,IAC/Eq4B,EAAK5kC,KAEY,UAAG,YAAY,WACvC,OAAOpJ,KAAK61D,MAGdlmD,EAAMnO,EAAIm0G,EACVjmG,EAAIlO,EAAI+zD,EACR,EAAQ,IAAkB/zD,EAAIkzG,EAAQlzG,EAAIo0G,EAC1C,EAAQ,IAAiBp0G,EAAIi0G,EAC7Bd,EAAMnzG,EAAIq0G,GAEN15D,IAAgB,EAAQ,KAC1B/9C,EAASi9C,EAAa,uBAAwBo6D,GAAuB,GAGvEr6C,EAAO55D,EAAI,SAAUhF,GACnB,OAAOwxC,EAAKh/B,EAAIxS,MAIpB8B,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAK8+D,EAAY,CAAE3gE,OAAQq+D,IAEnE,IAAK,IAAI06C,GAAa,iHAGpBrtG,MAAM,KAAMkkD,GAAI,EAAGmpD,GAAW3yG,OAASwpD,IAAG59C,EAAI+mG,GAAWnpD,OAE3D,IAAK,IAAIopD,GAAmB17D,EAAMtrC,EAAIpO,OAAQuvD,GAAI,EAAG6lD,GAAiB5yG,OAAS+sD,IAAIokD,EAAUyB,GAAiB7lD,OAE9G7xD,EAAQA,EAAQW,EAAIX,EAAQO,GAAK8+D,EAAY,SAAU,CAErD,IAAO,SAAUngE,GACf,OAAO8K,EAAI0sG,EAAgBx3G,GAAO,IAC9Bw3G,EAAex3G,GACfw3G,EAAex3G,GAAO69D,EAAQ79D,IAGpCy4G,OAAQ,SAAgBV,GACtB,IAAKhnF,EAASgnF,GAAM,MAAM50G,UAAU40G,EAAM,qBAC1C,IAAK,IAAI/3G,KAAOw3G,EAAgB,GAAIA,EAAex3G,KAAS+3G,EAAK,OAAO/3G,GAE1E04G,UAAW,WAAcj/F,GAAS,GAClCk/F,UAAW,WAAcl/F,GAAS,KAGpC3Y,EAAQA,EAAQW,EAAIX,EAAQO,GAAK8+D,EAAY,SAAU,CAErDpgE,OA/FY,SAAgBmD,EAAIvB,GAChC,YAAaK,IAANL,EAAkBs1G,EAAQ/zG,GAAM80G,EAAkBf,EAAQ/zG,GAAKvB,IAgGtEvC,eAAgB24D,EAEhB5M,iBAAkB6sD,EAElBtoG,yBAA0ByoG,EAE1B7xG,oBAAqB8xG,EAErB/xG,sBAAuBgyG,KAKzB,IAAIO,GAAsB9B,GAAO,WAAcK,EAAMnzG,EAAE,MAEvDlD,EAAQA,EAAQW,EAAIX,EAAQO,EAAIu3G,GAAqB,SAAU,CAC7DvyG,sBAAuB,SAA+BnD,GACpD,OAAOi0G,EAAMnzG,EAAE4L,EAAS1M,OAK5Bk0G,GAASt2G,EAAQA,EAAQW,EAAIX,EAAQO,IAAM8+D,GAAc22C,GAAO,WAC9D,IAAIr1G,EAAIo8D,IAIR,MAA0B,UAAnBw5C,EAAW,CAAC51G,KAA2C,MAAxB41G,EAAW,CAAE1zG,EAAGlC,KAAyC,MAAzB41G,EAAWl4G,OAAOsC,QACrF,OAAQ,CACXulD,UAAW,SAAmB9jD,GAI5B,IAHA,IAEI21G,EAAUC,EAFV3yG,EAAO,CAACjD,GACRzE,EAAI,EAEDoG,UAAUe,OAASnH,GAAG0H,EAAKyB,KAAK/C,UAAUpG,MAEjD,GADAq6G,EAAYD,EAAW1yG,EAAK,IACvBlD,EAAS41G,SAAoB72G,IAAPkB,KAAoB6tB,EAAS7tB,GAMxD,OALKinB,EAAQ0uF,KAAWA,EAAW,SAAU74G,EAAKN,GAEhD,GADwB,mBAAbo5G,IAAyBp5G,EAAQo5G,EAAUl6G,KAAK4D,KAAMxC,EAAKN,KACjEqxB,EAASrxB,GAAQ,OAAOA,IAE/ByG,EAAK,GAAK0yG,EACHxB,EAAWzyG,MAAMwyG,EAAOjxG,MAKnC03D,EAAiB,UAAE05C,IAAiB,EAAQ,GAAR,CAAmB15C,EAAiB,UAAG05C,EAAc15C,EAAiB,UAAE9zC,SAE5G0jC,EAAeoQ,EAAS,UAExBpQ,EAAe7qD,KAAM,QAAQ,GAE7B6qD,EAAehtD,EAAO2+C,KAAM,QAAQ,I,gBCrPpC5gD,EAAOD,QAAU,EAAQ,GAAR,CAAqB,4BAA6B0D,SAAS0O,W,gBCC5E,IAAIotD,EAAU,EAAQ,IAClBG,EAAO,EAAQ,IACf3uD,EAAM,EAAQ,IAClB/Q,EAAOD,QAAU,SAAU2E,GACzB,IAAIwN,EAASqtD,EAAQ76D,GACjB2rB,EAAaqvC,EAAKl6D,EACtB,GAAI6qB,EAKF,IAJA,IAGI7uB,EAHA62G,EAAUhoF,EAAW3rB,GACrBo7D,EAAS/uD,EAAIvL,EACbvF,EAAI,EAEDo4G,EAAQjxG,OAASnH,GAAO6/D,EAAO1/D,KAAKsE,EAAIlD,EAAM62G,EAAQp4G,OAAOiS,EAAO9I,KAAK5H,GAChF,OAAO0Q,I,gBCbX,IAAI5P,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,SAAU,CAAE1B,OAAQ,EAAQ,O,gBCF/C,IAAIe,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAIX,EAAQO,GAAK,EAAQ,GAAmB,SAAU,CAAEjC,eAAgB,EAAQ,IAAgB4E,K,gBCFhH,IAAIlD,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAIX,EAAQO,GAAK,EAAQ,GAAmB,SAAU,CAAE8pD,iBAAkB,EAAQ,Q,gBCDlG,IAAI37C,EAAY,EAAQ,IACpB2oG,EAA4B,EAAQ,IAAkBn0G,EAE1D,EAAQ,GAAR,CAAyB,4BAA4B,WACnD,OAAO,SAAkCd,EAAIlD,GAC3C,OAAOm4G,EAA0B3oG,EAAUtM,GAAKlD,Q,gBCLpD,IAAI4P,EAAW,EAAQ,IACnBmpG,EAAkB,EAAQ,IAE9B,EAAQ,GAAR,CAAyB,kBAAkB,WACzC,OAAO,SAAwB71G,GAC7B,OAAO61G,EAAgBnpG,EAAS1M,S,gBCLpC,IAAI0M,EAAW,EAAQ,IACnBktC,EAAQ,EAAQ,IAEpB,EAAQ,GAAR,CAAyB,QAAQ,WAC/B,OAAO,SAAc55C,GACnB,OAAO45C,EAAMltC,EAAS1M,S,gBCL1B,EAAQ,GAAR,CAAyB,uBAAuB,WAC9C,OAAO,EAAQ,KAAsBc,M,gBCDvC,IAAIf,EAAW,EAAQ,GACnB22C,EAAO,EAAQ,IAAWI,SAE9B,EAAQ,GAAR,CAAyB,UAAU,SAAUg/D,GAC3C,OAAO,SAAgB91G,GACrB,OAAO81G,GAAW/1G,EAASC,GAAM81G,EAAQp/D,EAAK12C,IAAOA,O,gBCLzD,IAAID,EAAW,EAAQ,GACnB22C,EAAO,EAAQ,IAAWI,SAE9B,EAAQ,GAAR,CAAyB,QAAQ,SAAUi/D,GACzC,OAAO,SAAc/1G,GACnB,OAAO+1G,GAASh2G,EAASC,GAAM+1G,EAAMr/D,EAAK12C,IAAOA,O,gBCLrD,IAAID,EAAW,EAAQ,GACnB22C,EAAO,EAAQ,IAAWI,SAE9B,EAAQ,GAAR,CAAyB,qBAAqB,SAAUk/D,GACtD,OAAO,SAA2Bh2G,GAChC,OAAOg2G,GAAsBj2G,EAASC,GAAMg2G,EAAmBt/D,EAAK12C,IAAOA,O,gBCL/E,IAAID,EAAW,EAAQ,GAEvB,EAAQ,GAAR,CAAyB,YAAY,SAAUk2G,GAC7C,OAAO,SAAkBj2G,GACvB,OAAOD,EAASC,MAAMi2G,GAAYA,EAAUj2G,Q,gBCJhD,IAAID,EAAW,EAAQ,GAEvB,EAAQ,GAAR,CAAyB,YAAY,SAAUm2G,GAC7C,OAAO,SAAkBl2G,GACvB,OAAOD,EAASC,MAAMk2G,GAAYA,EAAUl2G,Q,gBCJhD,IAAID,EAAW,EAAQ,GAEvB,EAAQ,GAAR,CAAyB,gBAAgB,SAAUo2G,GACjD,OAAO,SAAsBn2G,GAC3B,QAAOD,EAASC,MAAMm2G,GAAgBA,EAAcn2G,S,gBCJxD,IAAIpC,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAIX,EAAQO,EAAG,SAAU,CAAE2nC,OAAQ,EAAQ,Q,gBCF3D,IAAIloC,EAAU,EAAQ,GACtBA,EAAQA,EAAQW,EAAG,SAAU,CAAE60D,GAAI,EAAQ,Q,gBCD3C,IAAIx1D,EAAU,EAAQ,GACtBA,EAAQA,EAAQW,EAAG,SAAU,CAAEypD,eAAgB,EAAQ,IAAgBjiD,O,6BCAvE,IAAImI,EAAU,EAAQ,IAClBnF,EAAO,GACXA,EAAK,EAAQ,EAAR,CAAkB,gBAAkB,IACrCA,EAAO,IAAM,cACf,EAAQ,GAAR,CAAuB9M,OAAOkB,UAAW,YAAY,WACnD,MAAO,WAAa+Q,EAAQ5O,MAAQ,OACnC,I,gBCPL,IAAI1B,EAAU,EAAQ,GAEtBA,EAAQA,EAAQa,EAAG,WAAY,CAAE1B,KAAM,EAAQ,Q,gBCH/C,IAAI8D,EAAK,EAAQ,IAAgBC,EAC7Bs1G,EAASr3G,SAAS5B,UAClBk5G,EAAS,wBACF,SAGHD,GAAU,EAAQ,IAAqBv1G,EAAGu1G,EAHvC,OAGqD,CAC9DrsG,cAAc,EACd3N,IAAK,WACH,IACE,OAAQ,GAAKkD,MAAMmjB,MAAM4zF,GAAQ,GACjC,MAAOv2G,GACP,MAAO,Q,6BCXb,IAAIC,EAAW,EAAQ,GACnBmG,EAAiB,EAAQ,IACzBowG,EAAe,EAAQ,EAAR,CAAkB,eACjCC,EAAgBx3G,SAAS5B,UAEvBm5G,KAAgBC,GAAgB,EAAQ,IAAgBz1G,EAAEy1G,EAAeD,EAAc,CAAE95G,MAAO,SAAUuE,GAC9G,GAAmB,mBAARzB,OAAuBS,EAASgB,GAAI,OAAO,EACtD,IAAKhB,EAAST,KAAKnC,WAAY,OAAO4D,aAAazB,KAEnD,KAAOyB,EAAImF,EAAenF,IAAI,GAAIzB,KAAKnC,YAAc4D,EAAG,OAAO,EAC/D,OAAO,M,gBCXT,IAAInD,EAAU,EAAQ,GAClB+9D,EAAY,EAAQ,KAExB/9D,EAAQA,EAAQS,EAAIT,EAAQO,GAAKkf,UAAYs+C,GAAY,CAAEt+C,SAAUs+C,K,gBCHrE,IAAI/9D,EAAU,EAAQ,GAClBk+D,EAAc,EAAQ,KAE1Bl+D,EAAQA,EAAQS,EAAIT,EAAQO,GAAKgf,YAAc2+C,GAAc,CAAE3+C,WAAY2+C,K,6BCF3E,IAAIv+D,EAAS,EAAQ,GACjBqK,EAAM,EAAQ,IACd61C,EAAM,EAAQ,IACd+M,EAAoB,EAAQ,IAC5B5pD,EAAc,EAAQ,IACtB0H,EAAQ,EAAQ,GAChB8F,EAAO,EAAQ,IAAkBtN,EACjCyL,EAAO,EAAQ,IAAkBzL,EACjCD,EAAK,EAAQ,IAAgBC,EAC7B86D,EAAQ,EAAQ,IAAkBlpB,KAElC8jE,EAAUj5G,EAAa,OACvBwY,EAAOygG,EACPjjG,EAAQijG,EAAQr5G,UAEhBs5G,EALS,UAKIh5D,EAAI,EAAQ,GAAR,CAA4BlqC,IAC7CmjG,EAAO,SAAU7xG,OAAO1H,UAGxBigC,EAAW,SAAUu5E,GACvB,IAAI32G,EAAKY,EAAY+1G,GAAU,GAC/B,GAAiB,iBAAN32G,GAAkBA,EAAG0C,OAAS,EAAG,CAE1C,IACIk0G,EAAOnmE,EAAOomE,EADdtjE,GADJvzC,EAAK02G,EAAO12G,EAAG0yC,OAASkpB,EAAM57D,EAAI,IACnBsgC,WAAW,GAE1B,GAAc,KAAViT,GAA0B,KAAVA,GAElB,GAAc,MADdqjE,EAAQ52G,EAAGsgC,WAAW,KACQ,MAAVs2E,EAAe,OAAOhpD,SACrC,GAAc,KAAVra,EAAc,CACvB,OAAQvzC,EAAGsgC,WAAW,IACpB,KAAK,GAAI,KAAK,GAAImQ,EAAQ,EAAGomE,EAAU,GAAI,MAC3C,KAAK,GAAI,KAAK,IAAKpmE,EAAQ,EAAGomE,EAAU,GAAI,MAC5C,QAAS,OAAQ72G,EAEnB,IAAK,IAAoDiuF,EAAhD6oB,EAAS92G,EAAGqB,MAAM,GAAI9F,EAAI,EAAGC,EAAIs7G,EAAOp0G,OAAcnH,EAAIC,EAAGD,IAIpE,IAHA0yF,EAAO6oB,EAAOx2E,WAAW/kC,IAGd,IAAM0yF,EAAO4oB,EAAS,OAAOjpD,IACxC,OAAOvwC,SAASy5F,EAAQrmE,IAE5B,OAAQzwC,GAGZ,IAAKw2G,EAAQ,UAAYA,EAAQ,QAAUA,EAAQ,QAAS,CAC1DA,EAAU,SAAgBh6G,GACxB,IAAIwD,EAAK2B,UAAUe,OAAS,EAAI,EAAIlG,EAChCwH,EAAO1E,KACX,OAAO0E,aAAgBwyG,IAEjBC,EAAanuG,GAAM,WAAciL,EAAMsT,QAAQnrB,KAAKsI,MAxCjD,UAwC6Dy5C,EAAIz5C,IACpEwmD,EAAkB,IAAIz0C,EAAKqnB,EAASp9B,IAAMgE,EAAMwyG,GAAWp5E,EAASp9B,IAE5E,IAAK,IAMgBlD,EANZ2K,EAAO,EAAQ,GAAoB2G,EAAK2H,GAAQ,6KAMvD/N,MAAM,KAAMkkD,EAAI,EAAQzkD,EAAK/E,OAASwpD,EAAGA,IACrCtkD,EAAImO,EAAMjZ,EAAM2K,EAAKykD,MAAQtkD,EAAI4uG,EAAS15G,IAC5C+D,EAAG21G,EAAS15G,EAAKyP,EAAKwJ,EAAMjZ,IAGhC05G,EAAQr5G,UAAYoW,EACpBA,EAAM1J,YAAc2sG,EACpB,EAAQ,GAAR,CAAuBj5G,EAxDZ,SAwD4Bi5G,K,6BClEzC,IAAI54G,EAAU,EAAQ,GAClByC,EAAY,EAAQ,IACpB02G,EAAe,EAAQ,KACvBnmE,EAAS,EAAQ,IACjBomE,EAAW,GAAI/1B,QACf70E,EAAQ1M,KAAK0M,MACb/M,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACvB43G,EAAQ,wCAGR9tE,EAAW,SAAUnsC,EAAGpB,GAG1B,IAFA,IAAIL,GAAK,EACL27G,EAAKt7G,IACAL,EAAI,GACX27G,GAAMl6G,EAAIqC,EAAK9D,GACf8D,EAAK9D,GAAK27G,EAAK,IACfA,EAAK9qG,EAAM8qG,EAAK,MAGhBluE,EAAS,SAAUhsC,GAGrB,IAFA,IAAIzB,EAAI,EACJK,EAAI,IACCL,GAAK,GACZK,GAAKyD,EAAK9D,GACV8D,EAAK9D,GAAK6Q,EAAMxQ,EAAIoB,GACpBpB,EAAKA,EAAIoB,EAAK,KAGdm6G,EAAc,WAGhB,IAFA,IAAI57G,EAAI,EACJ+B,EAAI,KACC/B,GAAK,GACZ,GAAU,KAAN+B,GAAkB,IAAN/B,GAAuB,IAAZ8D,EAAK9D,GAAU,CACxC,IAAIkB,EAAIoI,OAAOxF,EAAK9D,IACpB+B,EAAU,KAANA,EAAWb,EAAIa,EAAIszC,EAAOl1C,KA1BzB,IA0BoC,EAAIe,EAAEiG,QAAUjG,EAE3D,OAAOa,GAEPm5D,EAAM,SAAU5S,EAAG7mD,EAAG80E,GACxB,OAAa,IAAN90E,EAAU80E,EAAM90E,EAAI,GAAM,EAAIy5D,EAAI5S,EAAG7mD,EAAI,EAAG80E,EAAMjuB,GAAK4S,EAAI5S,EAAIA,EAAG7mD,EAAI,EAAG80E,IAelFl0E,EAAQA,EAAQa,EAAIb,EAAQO,KAAO64G,IACV,UAAvB,KAAQ/1B,QAAQ,IACG,MAAnB,GAAIA,QAAQ,IACS,SAArB,MAAMA,QAAQ,IACuB,yBAArC,mBAAsBA,QAAQ,MAC1B,EAAQ,EAAR,EAAoB,WAExB+1B,EAASt7G,KAAK,QACX,SAAU,CACbulF,QAAS,SAAiBm2B,GACxB,IAIIt3G,EAAGu3G,EAAGnrD,EAAGuD,EAJT5L,EAAIkzD,EAAaz3G,KAAM23G,GACvBn2G,EAAIT,EAAU+2G,GACd95G,EAAI,GACJ3B,EA3DG,IA6DP,GAAImF,EAAI,GAAKA,EAAI,GAAI,MAAMmF,WAAWgxG,GAEtC,GAAIpzD,GAAKA,EAAG,MAAO,MACnB,GAAIA,IAAM,MAAQA,GAAK,KAAM,OAAOh/C,OAAOg/C,GAK3C,GAJIA,EAAI,IACNvmD,EAAI,IACJumD,GAAKA,GAEHA,EAAI,MAKN,GAHAwzD,GADAv3G,EArCI,SAAU+jD,GAGlB,IAFA,IAAI7mD,EAAI,EACJs6G,EAAKzzD,EACFyzD,GAAM,MACXt6G,GAAK,GACLs6G,GAAM,KAER,KAAOA,GAAM,GACXt6G,GAAK,EACLs6G,GAAM,EACN,OAAOt6G,EA2BDyE,CAAIoiD,EAAI4S,EAAI,EAAG,GAAI,IAAM,IACrB,EAAI5S,EAAI4S,EAAI,GAAI32D,EAAG,GAAK+jD,EAAI4S,EAAI,EAAG32D,EAAG,GAC9Cu3G,GAAK,kBACLv3G,EAAI,GAAKA,GACD,EAAG,CAGT,IAFAqpC,EAAS,EAAGkuE,GACZnrD,EAAIprD,EACGorD,GAAK,GACV/iB,EAAS,IAAK,GACd+iB,GAAK,EAIP,IAFA/iB,EAASstB,EAAI,GAAIvK,EAAG,GAAI,GACxBA,EAAIpsD,EAAI,EACDosD,GAAK,IACVljB,EAAO,GAAK,IACZkjB,GAAK,GAEPljB,EAAO,GAAKkjB,GACZ/iB,EAAS,EAAG,GACZH,EAAO,GACPrtC,EAAIw7G,SAEJhuE,EAAS,EAAGkuE,GACZluE,EAAS,IAAMrpC,EAAG,GAClBnE,EAAIw7G,IAAgBvmE,EAAOl1C,KA9FxB,IA8FmCoF,GAQxC,OAHAnF,EAFEmF,EAAI,EAEFxD,IADJmyD,EAAI9zD,EAAE+G,SACQ5B,EAAI,KAAO8vC,EAAOl1C,KAnG3B,IAmGsCoF,EAAI2uD,GAAK9zD,EAAIA,EAAE0F,MAAM,EAAGouD,EAAI3uD,GAAK,IAAMnF,EAAE0F,MAAMouD,EAAI3uD,IAE1FxD,EAAI3B,M,6BC7Gd,IAAIiC,EAAU,EAAQ,GAClBg2G,EAAS,EAAQ,GACjBmD,EAAe,EAAQ,KACvBQ,EAAe,GAAIC,YAEvB55G,EAAQA,EAAQa,EAAIb,EAAQO,GAAKy1G,GAAO,WAEtC,MAA2C,MAApC2D,EAAa77G,KAAK,OAAGoD,QACvB80G,GAAO,WAEZ2D,EAAa77G,KAAK,QACf,SAAU,CACb87G,YAAa,SAAqB75E,GAChC,IAAI35B,EAAO+yG,EAAaz3G,KAAM,6CAC9B,YAAqBR,IAAd6+B,EAA0B45E,EAAa77G,KAAKsI,GAAQuzG,EAAa77G,KAAKsI,EAAM25B,O,gBCdvF,IAAI//B,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,SAAU,CAAEk5G,QAAS/3G,KAAK+2D,IAAI,GAAI,O,gBCFrD,IAAI74D,EAAU,EAAQ,GAClB85G,EAAY,EAAQ,GAAavyF,SAErCvnB,EAAQA,EAAQW,EAAG,SAAU,CAC3B4mB,SAAU,SAAkBnlB,GAC1B,MAAoB,iBAANA,GAAkB03G,EAAU13G,O,gBCL9C,IAAIpC,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,SAAU,CAAE8mC,UAAW,EAAQ,Q,gBCFlD,IAAIznC,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,SAAU,CAC3BiF,MAAO,SAAegnB,GAEpB,OAAOA,GAAUA,M,gBCLrB,IAAI5sB,EAAU,EAAQ,GAClBynC,EAAY,EAAQ,KACpBmxB,EAAM92D,KAAK82D,IAEf54D,EAAQA,EAAQW,EAAG,SAAU,CAC3BgxC,cAAe,SAAuB/kB,GACpC,OAAO6a,EAAU7a,IAAWgsC,EAAIhsC,IAAW,qB,gBCN/C,IAAI5sB,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,SAAU,CAAEo5G,iBAAkB,oB,gBCFjD,IAAI/5G,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,SAAU,CAAEq5G,kBAAmB,oB,gBCHlD,IAAIh6G,EAAU,EAAQ,GAClBk+D,EAAc,EAAQ,KAE1Bl+D,EAAQA,EAAQW,EAAIX,EAAQO,GAAKoF,OAAO4Z,YAAc2+C,GAAc,SAAU,CAAE3+C,WAAY2+C,K,gBCH5F,IAAIl+D,EAAU,EAAQ,GAClB+9D,EAAY,EAAQ,KAExB/9D,EAAQA,EAAQW,EAAIX,EAAQO,GAAKoF,OAAO8Z,UAAYs+C,GAAY,SAAU,CAAEt+C,SAAUs+C,K,gBCFtF,IAAI/9D,EAAU,EAAQ,GAClBm+D,EAAQ,EAAQ,KAChB87C,EAAOn4G,KAAKm4G,KACZC,EAASp4G,KAAKq4G,MAElBn6G,EAAQA,EAAQW,EAAIX,EAAQO,IAAM25G,GAEW,KAAxCp4G,KAAK0M,MAAM0rG,EAAOv0G,OAAOy0G,aAEzBF,EAAOjoF,MAAaA,KACtB,OAAQ,CACTkoF,MAAO,SAAel0D,GACpB,OAAQA,GAAKA,GAAK,EAAI+J,IAAM/J,EAAI,kBAC5BnkD,KAAK+B,IAAIoiD,GAAKnkD,KAAKg3D,IACnBqF,EAAMlY,EAAI,EAAIg0D,EAAKh0D,EAAI,GAAKg0D,EAAKh0D,EAAI,Q,gBCd7C,IAAIjmD,EAAU,EAAQ,GAClBq6G,EAASv4G,KAAKw4G,MAOlBt6G,EAAQA,EAAQW,EAAIX,EAAQO,IAAM85G,GAAU,EAAIA,EAAO,GAAK,GAAI,OAAQ,CAAEC,MAL1E,SAASA,EAAMr0D,GACb,OAAQ1+B,SAAS0+B,GAAKA,IAAW,GAALA,EAAaA,EAAI,GAAKq0D,GAAOr0D,GAAKnkD,KAAK+B,IAAIoiD,EAAInkD,KAAKm4G,KAAKh0D,EAAIA,EAAI,IAAxDA,M,gBCJvC,IAAIjmD,EAAU,EAAQ,GAClBu6G,EAASz4G,KAAK04G,MAGlBx6G,EAAQA,EAAQW,EAAIX,EAAQO,IAAMg6G,GAAU,EAAIA,GAAQ,GAAK,GAAI,OAAQ,CACvEC,MAAO,SAAev0D,GACpB,OAAmB,IAAXA,GAAKA,GAAUA,EAAInkD,KAAK+B,KAAK,EAAIoiD,IAAM,EAAIA,IAAM,M,gBCN7D,IAAIjmD,EAAU,EAAQ,GAClB61D,EAAO,EAAQ,IAEnB71D,EAAQA,EAAQW,EAAG,OAAQ,CACzB85G,KAAM,SAAcx0D,GAClB,OAAO4P,EAAK5P,GAAKA,GAAKnkD,KAAK+2D,IAAI/2D,KAAK82D,IAAI3S,GAAI,EAAI,O,gBCLpD,IAAIjmD,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CACzB+5G,MAAO,SAAez0D,GACpB,OAAQA,KAAO,GAAK,GAAKnkD,KAAK0M,MAAM1M,KAAK+B,IAAIoiD,EAAI,IAAOnkD,KAAK64G,OAAS,O,gBCJ1E,IAAI36G,EAAU,EAAQ,GAClBK,EAAMyB,KAAKzB,IAEfL,EAAQA,EAAQW,EAAG,OAAQ,CACzBi6G,KAAM,SAAc30D,GAClB,OAAQ5lD,EAAI4lD,GAAKA,GAAK5lD,GAAK4lD,IAAM,M,gBCLrC,IAAIjmD,EAAU,EAAQ,GAClB81D,EAAS,EAAQ,IAErB91D,EAAQA,EAAQW,EAAIX,EAAQO,GAAKu1D,GAAUh0D,KAAKi0D,OAAQ,OAAQ,CAAEA,MAAOD,K,gBCHzE,IAAI91D,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CAAEk6G,OAAQ,EAAQ,Q,gBCF7C,IAAIhlD,EAAO,EAAQ,IACfgD,EAAM/2D,KAAK+2D,IACXghD,EAAUhhD,EAAI,GAAI,IAClBiiD,EAAYjiD,EAAI,GAAI,IACpBkiD,EAAQliD,EAAI,EAAG,MAAQ,EAAIiiD,GAC3BE,EAAQniD,EAAI,GAAI,KAMpBn7D,EAAOD,QAAUqE,KAAK+4G,QAAU,SAAgB50D,GAC9C,IAEIpjD,EAAG+M,EAFHqrG,EAAOn5G,KAAK82D,IAAI3S,GAChBi1D,EAAQrlD,EAAK5P,GAEjB,OAAIg1D,EAAOD,EAAcE,GAAwBD,EAAOD,EAAQF,EAPrD,EAAIjB,EAAU,EAAIA,GAOgDmB,EAAQF,GAErFlrG,GADA/M,GAAK,EAAIi4G,EAAYjB,GAAWoB,IAClBp4G,EAAIo4G,IAELF,GAASnrG,GAAUA,EAAesrG,GAAQjpF,KAChDipF,EAAQtrG,I,gBCpBjB,IAAI5P,EAAU,EAAQ,GAClB44D,EAAM92D,KAAK82D,IAEf54D,EAAQA,EAAQW,EAAG,OAAQ,CACzBw6G,MAAO,SAAeC,EAAQC,GAM5B,IALA,IAIIjzG,EAAKkzG,EAJL7nE,EAAM,EACN91C,EAAI,EACJuX,EAAOnR,UAAUe,OACjBy2G,EAAO,EAEJ59G,EAAIuX,GAELqmG,GADJnzG,EAAMwwD,EAAI70D,UAAUpG,QAGlB81C,EAAMA,GADN6nE,EAAMC,EAAOnzG,GACKkzG,EAAM,EACxBC,EAAOnzG,GAGPqrC,GAFSrrC,EAAM,GACfkzG,EAAMlzG,EAAMmzG,GACCD,EACDlzG,EAEhB,OAAOmzG,IAAStpF,IAAWA,IAAWspF,EAAOz5G,KAAKm4G,KAAKxmE,O,gBCrB3D,IAAIzzC,EAAU,EAAQ,GAClBw7G,EAAQ15G,KAAK25G,KAGjBz7G,EAAQA,EAAQW,EAAIX,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAClD,OAAgC,GAAzBi7G,EAAM,WAAY,IAA4B,GAAhBA,EAAM12G,UACzC,OAAQ,CACV22G,KAAM,SAAcx1D,EAAGwX,GACrB,IACIi+C,GAAMz1D,EACN01D,GAAMl+C,EACNm+C,EAHS,MAGKF,EACdG,EAJS,MAIKF,EAClB,OAAO,EAAIC,EAAKC,IALH,MAKmBH,IAAO,IAAMG,EAAKD,GALrC,MAKoDD,IAAO,KAAO,KAAO,O,gBCb1F,IAAI37G,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CACzBm7G,MAAO,SAAe71D,GACpB,OAAOnkD,KAAK+B,IAAIoiD,GAAKnkD,KAAKi6G,W,gBCJ9B,IAAI/7G,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CAAEw9D,MAAO,EAAQ,Q,gBCF5C,IAAIn+D,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CACzBq7G,KAAM,SAAc/1D,GAClB,OAAOnkD,KAAK+B,IAAIoiD,GAAKnkD,KAAKg3D,Q,gBCJ9B,IAAI94D,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CAAEk1D,KAAM,EAAQ,O,gBCF3C,IAAI71D,EAAU,EAAQ,GAClB+1D,EAAQ,EAAQ,IAChB11D,EAAMyB,KAAKzB,IAGfL,EAAQA,EAAQW,EAAIX,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAClD,OAA8B,QAAtBuB,KAAKm6G,MAAM,UACjB,OAAQ,CACVA,KAAM,SAAch2D,GAClB,OAAOnkD,KAAK82D,IAAI3S,GAAKA,GAAK,GACrB8P,EAAM9P,GAAK8P,GAAO9P,IAAM,GACxB5lD,EAAI4lD,EAAI,GAAK5lD,GAAK4lD,EAAI,KAAOnkD,KAAKs1G,EAAI,O,gBCX/C,IAAIp3G,EAAU,EAAQ,GAClB+1D,EAAQ,EAAQ,IAChB11D,EAAMyB,KAAKzB,IAEfL,EAAQA,EAAQW,EAAG,OAAQ,CACzBu7G,KAAM,SAAcj2D,GAClB,IAAIpjD,EAAIkzD,EAAM9P,GAAKA,GACf33C,EAAIynD,GAAO9P,GACf,OAAOpjD,GAAKovB,IAAW,EAAI3jB,GAAK2jB,KAAY,GAAKpvB,EAAIyL,IAAMjO,EAAI4lD,GAAK5lD,GAAK4lD,Q,gBCR7E,IAAIjmD,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CACzBw7G,MAAO,SAAe/5G,GACpB,OAAQA,EAAK,EAAIN,KAAK0M,MAAQ1M,KAAKyM,MAAMnM,O,gBCL7C,IAAIpC,EAAU,EAAQ,GAClBqQ,EAAkB,EAAQ,IAC1BsiD,EAAe1rD,OAAO0rD,aACtBypD,EAAiBn1G,OAAOo1G,cAG5Br8G,EAAQA,EAAQW,EAAIX,EAAQO,KAAO67G,GAA2C,GAAzBA,EAAet3G,QAAc,SAAU,CAE1Fu3G,cAAe,SAAuBp2D,GAKpC,IAJA,IAGIoqC,EAHA1gF,EAAM,GACNuF,EAAOnR,UAAUe,OACjBnH,EAAI,EAEDuX,EAAOvX,GAAG,CAEf,GADA0yF,GAAQtsF,UAAUpG,KACd0S,EAAgBggF,EAAM,WAAcA,EAAM,MAAMhoF,WAAWgoF,EAAO,8BACtE1gF,EAAI7I,KAAKupF,EAAO,MACZ19B,EAAa09B,GACb19B,EAAyC,QAA1B09B,GAAQ,QAAY,IAAcA,EAAO,KAAQ,QAEpE,OAAO1gF,EAAIlF,KAAK,Q,gBCpBtB,IAAIzK,EAAU,EAAQ,GAClB0O,EAAY,EAAQ,IACpBK,EAAW,EAAQ,GAEvB/O,EAAQA,EAAQW,EAAG,SAAU,CAE3B6yD,IAAK,SAAa8oD,GAMhB,IALA,IAAIC,EAAM7tG,EAAU4tG,EAAS9oD,KACzB3qD,EAAMkG,EAASwtG,EAAIz3G,QACnBoQ,EAAOnR,UAAUe,OACjB6K,EAAM,GACNhS,EAAI,EACDkL,EAAMlL,GACXgS,EAAI7I,KAAKG,OAAOs1G,EAAI5+G,OAChBA,EAAIuX,GAAMvF,EAAI7I,KAAKG,OAAOlD,UAAUpG,KACxC,OAAOgS,EAAIlF,KAAK,Q,6BCbtB,EAAQ,GAAR,CAA0B,QAAQ,SAAUuzD,GAC1C,OAAO,WACL,OAAOA,EAAMt8D,KAAM,Q,6BCHvB,IAAI86G,EAAM,EAAQ,GAAR,EAAwB,GAGlC,EAAQ,GAAR,CAA0Bv1G,OAAQ,UAAU,SAAUowD,GACpD31D,KAAKu7C,GAAKh2C,OAAOowD,GACjB31D,KAAK41D,GAAK,KAET,WACD,IAEImlD,EAFAt5G,EAAIzB,KAAKu7C,GACTzzC,EAAQ9H,KAAK41D,GAEjB,OAAI9tD,GAASrG,EAAE2B,OAAe,CAAElG,WAAOsC,EAAWqU,MAAM,IACxDknG,EAAQD,EAAIr5G,EAAGqG,GACf9H,KAAK41D,IAAMmlD,EAAM33G,OACV,CAAElG,MAAO69G,EAAOlnG,MAAM,Q,6BCd/B,IAAIvV,EAAU,EAAQ,GAClBw8G,EAAM,EAAQ,GAAR,EAAwB,GAClCx8G,EAAQA,EAAQa,EAAG,SAAU,CAE3B67G,YAAa,SAAqBt+D,GAChC,OAAOo+D,EAAI96G,KAAM08C,O,6BCJrB,IAAIp+C,EAAU,EAAQ,GAClB+O,EAAW,EAAQ,GACnBpG,EAAU,EAAQ,IAElBg0G,EAAY,GAAY,SAE5B38G,EAAQA,EAAQa,EAAIb,EAAQO,EAAI,EAAQ,GAAR,CAHhB,YAG0D,SAAU,CAClF+vC,SAAU,SAAkBymB,GAC1B,IAAI3wD,EAAOuC,EAAQjH,KAAMq1D,EALb,YAMR6lD,EAAc74G,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,EACpD2H,EAAMkG,EAAS3I,EAAKtB,QACpBkS,OAAsB9V,IAAhB07G,EAA4B/zG,EAAM/G,KAAKY,IAAIqM,EAAS6tG,GAAc/zG,GACxEssC,EAASluC,OAAO8vD,GACpB,OAAO4lD,EACHA,EAAU7+G,KAAKsI,EAAM+uC,EAAQn+B,GAC7B5Q,EAAK3C,MAAMuT,EAAMm+B,EAAOrwC,OAAQkS,KAASm+B,M,6BCfjD,IAAIn1C,EAAU,EAAQ,GAClB2I,EAAU,EAAQ,IAGtB3I,EAAQA,EAAQa,EAAIb,EAAQO,EAAI,EAAQ,GAAR,CAFjB,YAE0D,SAAU,CACjFgW,SAAU,SAAkBwgD,GAC1B,SAAUpuD,EAAQjH,KAAMq1D,EAJb,YAKR1gD,QAAQ0gD,EAAchzD,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,O,gBCTnE,IAAIlB,EAAU,EAAQ,GAEtBA,EAAQA,EAAQa,EAAG,SAAU,CAE3BmyC,OAAQ,EAAQ,O,6BCFlB,IAAIhzC,EAAU,EAAQ,GAClB+O,EAAW,EAAQ,GACnBpG,EAAU,EAAQ,IAElBk0G,EAAc,GAAc,WAEhC78G,EAAQA,EAAQa,EAAIb,EAAQO,EAAI,EAAQ,GAAR,CAHd,cAG0D,SAAU,CACpFizC,WAAY,SAAoBujB,GAC9B,IAAI3wD,EAAOuC,EAAQjH,KAAMq1D,EALX,cAMVvtD,EAAQuF,EAASjN,KAAKY,IAAIqB,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,EAAWkF,EAAKtB,SAChFqwC,EAASluC,OAAO8vD,GACpB,OAAO8lD,EACHA,EAAY/+G,KAAKsI,EAAM+uC,EAAQ3rC,GAC/BpD,EAAK3C,MAAM+F,EAAOA,EAAQ2rC,EAAOrwC,UAAYqwC,M,6BCbrD,EAAQ,GAAR,CAA0B,UAAU,SAAUvqC,GAC5C,OAAO,SAAgB1M,GACrB,OAAO0M,EAAWlJ,KAAM,IAAK,OAAQxD,Q,6BCFzC,EAAQ,GAAR,CAA0B,OAAO,SAAU0M,GACzC,OAAO,WACL,OAAOA,EAAWlJ,KAAM,MAAO,GAAI,S,6BCFvC,EAAQ,GAAR,CAA0B,SAAS,SAAUkJ,GAC3C,OAAO,WACL,OAAOA,EAAWlJ,KAAM,QAAS,GAAI,S,6BCFzC,EAAQ,GAAR,CAA0B,QAAQ,SAAUkJ,GAC1C,OAAO,WACL,OAAOA,EAAWlJ,KAAM,IAAK,GAAI,S,6BCFrC,EAAQ,GAAR,CAA0B,SAAS,SAAUkJ,GAC3C,OAAO,WACL,OAAOA,EAAWlJ,KAAM,KAAM,GAAI,S,6BCFtC,EAAQ,GAAR,CAA0B,aAAa,SAAUkJ,GAC/C,OAAO,SAAmBkyG,GACxB,OAAOlyG,EAAWlJ,KAAM,OAAQ,QAASo7G,Q,6BCF7C,EAAQ,GAAR,CAA0B,YAAY,SAAUlyG,GAC9C,OAAO,SAAkBuZ,GACvB,OAAOvZ,EAAWlJ,KAAM,OAAQ,OAAQyiB,Q,6BCF5C,EAAQ,GAAR,CAA0B,WAAW,SAAUvZ,GAC7C,OAAO,WACL,OAAOA,EAAWlJ,KAAM,IAAK,GAAI,S,6BCFrC,EAAQ,GAAR,CAA0B,QAAQ,SAAUkJ,GAC1C,OAAO,SAAcqmD,GACnB,OAAOrmD,EAAWlJ,KAAM,IAAK,OAAQuvD,Q,6BCFzC,EAAQ,GAAR,CAA0B,SAAS,SAAUrmD,GAC3C,OAAO,WACL,OAAOA,EAAWlJ,KAAM,QAAS,GAAI,S,6BCFzC,EAAQ,GAAR,CAA0B,UAAU,SAAUkJ,GAC5C,OAAO,WACL,OAAOA,EAAWlJ,KAAM,SAAU,GAAI,S,6BCF1C,EAAQ,GAAR,CAA0B,OAAO,SAAUkJ,GACzC,OAAO,WACL,OAAOA,EAAWlJ,KAAM,MAAO,GAAI,S,6BCFvC,EAAQ,GAAR,CAA0B,OAAO,SAAUkJ,GACzC,OAAO,WACL,OAAOA,EAAWlJ,KAAM,MAAO,GAAI,S,gBCHvC,IAAI1B,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,OAAQ,CAAE6C,IAAK,WAAc,OAAO,IAAI6hB,MAAOkuF,c,6BCFlE,IAAIvzG,EAAU,EAAQ,GAClB8O,EAAW,EAAQ,IACnB9L,EAAc,EAAQ,IAE1BhD,EAAQA,EAAQa,EAAIb,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAClD,OAAkC,OAA3B,IAAI8kB,KAAK2qC,KAAK9Y,UAC2D,IAA3E7xB,KAAK9lB,UAAU23C,OAAOp5C,KAAK,CAAEirE,YAAa,WAAc,OAAO,QAClE,OAAQ,CAEV7xB,OAAQ,SAAgBh4C,GACtB,IAAIiE,EAAI2L,EAASpN,MACbq7G,EAAK/5G,EAAYG,GACrB,MAAoB,iBAAN45G,GAAmBx1F,SAASw1F,GAAa55G,EAAE4lE,cAAT,S,gBCZpD,IAAI/oE,EAAU,EAAQ,GAClB+oE,EAAc,EAAQ,KAG1B/oE,EAAQA,EAAQa,EAAIb,EAAQO,GAAK8kB,KAAK9lB,UAAUwpE,cAAgBA,GAAc,OAAQ,CACpFA,YAAaA,K,6BCJf,IAAIr+D,EAAQ,EAAQ,GAChB6oG,EAAUluF,KAAK9lB,UAAUg0G,QACzByJ,EAAe33F,KAAK9lB,UAAUwpE,YAE9Bk0C,EAAK,SAAUlqD,GACjB,OAAOA,EAAM,EAAIA,EAAM,IAAMA,GAI/Br1D,EAAOD,QAAWiN,GAAM,WACtB,MAAiD,4BAA1CsyG,EAAal/G,KAAK,IAAIunB,MAAM,KAAO,SACrC3a,GAAM,WACXsyG,EAAal/G,KAAK,IAAIunB,KAAK2qC,SACvB,WACJ,IAAKzoC,SAASgsF,EAAQz1G,KAAK4D,OAAQ,MAAM2G,WAAW,sBACpD,IAAIpK,EAAIyD,KACJ+7D,EAAIx/D,EAAEi/G,iBACNn/G,EAAIE,EAAEk/G,qBACNz9G,EAAI+9D,EAAI,EAAI,IAAMA,EAAI,KAAO,IAAM,GACvC,OAAO/9D,GAAK,QAAUoC,KAAK82D,IAAI6E,IAAIh6D,MAAM/D,GAAK,GAAK,GACjD,IAAMu9G,EAAGh/G,EAAEm/G,cAAgB,GAAK,IAAMH,EAAGh/G,EAAEo/G,cAC3C,IAAMJ,EAAGh/G,EAAEq/G,eAAiB,IAAML,EAAGh/G,EAAEs/G,iBACvC,IAAMN,EAAGh/G,EAAEu/G,iBAAmB,KAAOz/G,EAAI,GAAKA,EAAI,IAAMk/G,EAAGl/G,IAAM,KACjEi/G,G,gBCzBJ,IAAIS,EAAYp4F,KAAK9lB,UAGjB2K,EAAYuzG,EAAmB,SAC/BlK,EAAUkK,EAAUlK,QACpB,IAAIluF,KAAK2qC,KAAO,IAJD,gBAKjB,EAAQ,GAAR,CAAuBytD,EAJT,YAI+B,WAC3C,IAAI7+G,EAAQ20G,EAAQz1G,KAAK4D,MAEzB,OAAO9C,GAAUA,EAAQsL,EAAUpM,KAAK4D,MARzB,mB,gBCDnB,IAAI+0G,EAAe,EAAQ,EAAR,CAAkB,eACjC9gG,EAAQ0P,KAAK9lB,UAEXk3G,KAAgB9gG,GAAQ,EAAQ,GAAR,CAAmBA,EAAO8gG,EAAc,EAAQ,O,6BCF9E,IAAI3zG,EAAW,EAAQ,GACnBE,EAAc,EAAQ,IAG1BtF,EAAOD,QAAU,SAAUigH,GACzB,GAAa,WAATA,GAHO,WAGcA,GAA4B,YAATA,EAAoB,MAAMr7G,UAAU,kBAChF,OAAOW,EAAYF,EAASpB,MAJjB,UAIwBg8G,K,gBCNrC,IAAI19G,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,QAAS,CAAE0oB,QAAS,EAAQ,O,6BCF/C,IAAItpB,EAAM,EAAQ,IACdC,EAAU,EAAQ,GAClB8O,EAAW,EAAQ,IACnBhR,EAAO,EAAQ,KACfyS,EAAc,EAAQ,IACtBxB,EAAW,EAAQ,GACnB4uG,EAAiB,EAAQ,IACzBltG,EAAY,EAAQ,IAExBzQ,EAAQA,EAAQW,EAAIX,EAAQO,GAAK,EAAQ,GAAR,EAA0B,SAAU0Y,GAAQvV,MAAM4V,KAAKL,MAAW,QAAS,CAE1GK,KAAM,SAAchC,GAClB,IAOIxS,EAAQ8K,EAAQoF,EAAMC,EAPtB9R,EAAI2L,EAASwI,GACb7C,EAAmB,mBAAR/S,KAAqBA,KAAOgC,MACvCwR,EAAOnR,UAAUe,OACjBqQ,EAAQD,EAAO,EAAInR,UAAU,QAAK7C,EAClCkU,OAAoBlU,IAAViU,EACV3L,EAAQ,EACR6L,EAAS5E,EAAUtN,GAIvB,GAFIiS,IAASD,EAAQpV,EAAIoV,EAAOD,EAAO,EAAInR,UAAU,QAAK7C,EAAW,IAEvDA,MAAVmU,GAAyBZ,GAAK/Q,OAAS6M,EAAY8E,GAMrD,IAAKzF,EAAS,IAAI6E,EADlB3P,EAASiK,EAAS5L,EAAE2B,SACSA,EAAS0E,EAAOA,IAC3Cm0G,EAAe/tG,EAAQpG,EAAO4L,EAAUD,EAAMhS,EAAEqG,GAAQA,GAASrG,EAAEqG,SANrE,IAAKyL,EAAWI,EAAOvX,KAAKqF,GAAIyM,EAAS,IAAI6E,IAAOO,EAAOC,EAASK,QAAQC,KAAM/L,IAChFm0G,EAAe/tG,EAAQpG,EAAO4L,EAAUtX,EAAKmX,EAAUE,EAAO,CAACH,EAAKpW,MAAO4K,IAAQ,GAAQwL,EAAKpW,OASpG,OADAgR,EAAO9K,OAAS0E,EACToG,M,6BCjCX,IAAI5P,EAAU,EAAQ,GAClB29G,EAAiB,EAAQ,IAG7B39G,EAAQA,EAAQW,EAAIX,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAClD,SAASA,KACT,QAASmD,MAAM2V,GAAGvb,KAAKyC,aAAcA,MACnC,QAAS,CAEX8Y,GAAI,WAIF,IAHA,IAAI7P,EAAQ,EACR0L,EAAOnR,UAAUe,OACjB8K,EAAS,IAAoB,mBAARlO,KAAqBA,KAAOgC,OAAOwR,GACrDA,EAAO1L,GAAOm0G,EAAe/tG,EAAQpG,EAAOzF,UAAUyF,MAE7D,OADAoG,EAAO9K,OAASoQ,EACTtF,M,6BCdX,IAAI5P,EAAU,EAAQ,GAClB0O,EAAY,EAAQ,IACpBqE,EAAY,GAAGtI,KAGnBzK,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,KAAiBlC,SAAW,EAAQ,GAAR,CAA4B0U,IAAa,QAAS,CACrHtI,KAAM,SAAc+L,GAClB,OAAOzD,EAAUjV,KAAK4Q,EAAUhN,WAAqBR,IAAdsV,EAA0B,IAAMA,O,6BCR3E,IAAIxW,EAAU,EAAQ,GAClBk4D,EAAO,EAAQ,IACfrY,EAAM,EAAQ,IACdxvC,EAAkB,EAAQ,IAC1BtB,EAAW,EAAQ,GACnBmE,EAAa,GAAGzP,MAGpBzD,EAAQA,EAAQa,EAAIb,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAC9C23D,GAAMhlD,EAAWpV,KAAKo6D,MACxB,QAAS,CACXz0D,MAAO,SAAesT,EAAOC,GAC3B,IAAInO,EAAMkG,EAASrN,KAAKoD,QACpBiU,EAAQ8mC,EAAIn+C,MAEhB,GADAsV,OAAc9V,IAAR8V,EAAoBnO,EAAMmO,EACnB,SAAT+B,EAAkB,OAAO7F,EAAWpV,KAAK4D,KAAMqV,EAAOC,GAM1D,IALA,IAAInB,EAAQxF,EAAgB0G,EAAOlO,GAC/BmiE,EAAO36D,EAAgB2G,EAAKnO,GAC5Bsb,EAAOpV,EAASi8D,EAAOn1D,GACvB+nG,EAAS,IAAIl6G,MAAMygB,GACnBxmB,EAAI,EACDA,EAAIwmB,EAAMxmB,IAAKigH,EAAOjgH,GAAc,UAATob,EAC9BrX,KAAK46B,OAAOzmB,EAAQlY,GACpB+D,KAAKmU,EAAQlY,GACjB,OAAOigH,M,6BCxBX,IAAI59G,EAAU,EAAQ,GAClBoO,EAAY,EAAQ,IACpBU,EAAW,EAAQ,IACnBpE,EAAQ,EAAQ,GAChBmzG,EAAQ,GAAG5qG,KACX9H,EAAO,CAAC,EAAG,EAAG,GAElBnL,EAAQA,EAAQa,EAAIb,EAAQO,GAAKmK,GAAM,WAErCS,EAAK8H,UAAK/R,QACLwJ,GAAM,WAEXS,EAAK8H,KAAK,WAEL,EAAQ,GAAR,CAA4B4qG,IAAS,QAAS,CAEnD5qG,KAAM,SAAc4D,GAClB,YAAqB3V,IAAd2V,EACHgnG,EAAM//G,KAAKgR,EAASpN,OACpBm8G,EAAM//G,KAAKgR,EAASpN,MAAO0M,EAAUyI,Q,6BCnB7C,IAAI7W,EAAU,EAAQ,GAClB89G,EAAW,EAAQ,GAAR,CAA4B,GACvCC,EAAS,EAAQ,GAAR,CAA4B,GAAG3nG,SAAS,GAErDpW,EAAQA,EAAQa,EAAIb,EAAQO,GAAKw9G,EAAQ,QAAS,CAEhD3nG,QAAS,SAAiB1G,GACxB,OAAOouG,EAASp8G,KAAMgO,EAAY3L,UAAU,Q,gBCRhD,IAAI5B,EAAW,EAAQ,GACnBknB,EAAU,EAAQ,IAClBy0B,EAAU,EAAQ,EAAR,CAAkB,WAEhCpgD,EAAOD,QAAU,SAAUusD,GACzB,IAAIv1C,EASF,OARE4U,EAAQ2gC,KAGM,mBAFhBv1C,EAAIu1C,EAAS/9C,cAEkBwI,IAAM/Q,QAAS2lB,EAAQ5U,EAAElV,aAAakV,OAAIvT,GACrEiB,EAASsS,IAED,QADVA,EAAIA,EAAEqpC,MACUrpC,OAAIvT,SAETA,IAANuT,EAAkB/Q,MAAQ+Q,I,6BCbrC,IAAIzU,EAAU,EAAQ,GAClB+T,EAAO,EAAQ,GAAR,CAA4B,GAEvC/T,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,GAAR,CAA4B,GAAGkW,KAAK,GAAO,QAAS,CAEnFA,IAAK,SAAa/G,GAChB,OAAOqE,EAAKrS,KAAMgO,EAAY3L,UAAU,Q,6BCN5C,IAAI/D,EAAU,EAAQ,GAClBg+G,EAAU,EAAQ,GAAR,CAA4B,GAE1Ch+G,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,GAAR,CAA4B,GAAGyV,QAAQ,GAAO,QAAS,CAEtFA,OAAQ,SAAgBtG,GACtB,OAAOsuG,EAAQt8G,KAAMgO,EAAY3L,UAAU,Q,6BCN/C,IAAI/D,EAAU,EAAQ,GAClBi+G,EAAQ,EAAQ,GAAR,CAA4B,GAExCj+G,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,GAAR,CAA4B,GAAGqW,MAAM,GAAO,QAAS,CAEpFA,KAAM,SAAclH,GAClB,OAAOuuG,EAAMv8G,KAAMgO,EAAY3L,UAAU,Q,6BCN7C,IAAI/D,EAAU,EAAQ,GAClBk+G,EAAS,EAAQ,GAAR,CAA4B,GAEzCl+G,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,GAAR,CAA4B,GAAGuV,OAAO,GAAO,QAAS,CAErFA,MAAO,SAAepG,GACpB,OAAOwuG,EAAOx8G,KAAMgO,EAAY3L,UAAU,Q,6BCN9C,IAAI/D,EAAU,EAAQ,GAClBm+G,EAAU,EAAQ,KAEtBn+G,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,GAAR,CAA4B,GAAGqS,QAAQ,GAAO,QAAS,CAEtFA,OAAQ,SAAgBlD,GACtB,OAAOyuG,EAAQz8G,KAAMgO,EAAY3L,UAAUe,OAAQf,UAAU,IAAI,O,6BCNrE,IAAI/D,EAAU,EAAQ,GAClBm+G,EAAU,EAAQ,KAEtBn+G,EAAQA,EAAQa,EAAIb,EAAQO,GAAK,EAAQ,GAAR,CAA4B,GAAGuS,aAAa,GAAO,QAAS,CAE3FA,YAAa,SAAqBpD,GAChC,OAAOyuG,EAAQz8G,KAAMgO,EAAY3L,UAAUe,OAAQf,UAAU,IAAI,O,6BCNrE,IAAI/D,EAAU,EAAQ,GAClBo+G,EAAW,EAAQ,GAAR,EAA6B,GACxCznD,EAAU,GAAGtgD,QACbgoG,IAAkB1nD,GAAW,EAAI,CAAC,GAAGtgD,QAAQ,GAAI,GAAK,EAE1DrW,EAAQA,EAAQa,EAAIb,EAAQO,GAAK89G,IAAkB,EAAQ,GAAR,CAA4B1nD,IAAW,QAAS,CAEjGtgD,QAAS,SAAiBC,GACxB,OAAO+nG,EAEH1nD,EAAQ7yD,MAAMpC,KAAMqC,YAAc,EAClCq6G,EAAS18G,KAAM4U,EAAevS,UAAU,Q,6BCXhD,IAAI/D,EAAU,EAAQ,GAClB0O,EAAY,EAAQ,IACpBjM,EAAY,EAAQ,IACpBsM,EAAW,EAAQ,GACnB4nD,EAAU,GAAGjkD,YACb2rG,IAAkB1nD,GAAW,EAAI,CAAC,GAAGjkD,YAAY,GAAI,GAAK,EAE9D1S,EAAQA,EAAQa,EAAIb,EAAQO,GAAK89G,IAAkB,EAAQ,GAAR,CAA4B1nD,IAAW,QAAS,CAEjGjkD,YAAa,SAAqB4D,GAEhC,GAAI+nG,EAAe,OAAO1nD,EAAQ7yD,MAAMpC,KAAMqC,YAAc,EAC5D,IAAIZ,EAAIuL,EAAUhN,MACdoD,EAASiK,EAAS5L,EAAE2B,QACpB0E,EAAQ1E,EAAS,EAGrB,IAFIf,UAAUe,OAAS,IAAG0E,EAAQ1H,KAAKY,IAAI8G,EAAO/G,EAAUsB,UAAU,MAClEyF,EAAQ,IAAGA,EAAQ1E,EAAS0E,GAC1BA,GAAS,EAAGA,IAAS,GAAIA,KAASrG,GAAOA,EAAEqG,KAAW8M,EAAe,OAAO9M,GAAS,EAC3F,OAAQ,M,gBClBZ,IAAIxJ,EAAU,EAAQ,GAEtBA,EAAQA,EAAQa,EAAG,QAAS,CAAE+U,WAAY,EAAQ,OAElD,EAAQ,GAAR,CAAiC,e,gBCJjC,IAAI5V,EAAU,EAAQ,GAEtBA,EAAQA,EAAQa,EAAG,QAAS,CAAEkV,KAAM,EAAQ,OAE5C,EAAQ,GAAR,CAAiC,S,6BCHjC,IAAI/V,EAAU,EAAQ,GAClBs+G,EAAQ,EAAQ,GAAR,CAA4B,GAEpC//C,GAAS,EADH,QAGC,IAAI76D,MAAM,GAAM,MAAE,WAAc66D,GAAS,KACpDv+D,EAAQA,EAAQa,EAAIb,EAAQO,EAAIg+D,EAAQ,QAAS,CAC/CtoD,KAAM,SAAcvG,GAClB,OAAO4uG,EAAM58G,KAAMgO,EAAY3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,MAGzE,EAAQ,GAAR,CATU,S,6BCFV,IAAIlB,EAAU,EAAQ,GAClBs+G,EAAQ,EAAQ,GAAR,CAA4B,GACpCzvG,EAAM,YACN0vD,GAAS,EAET1vD,IAAO,IAAInL,MAAM,GAAGmL,IAAK,WAAc0vD,GAAS,KACpDv+D,EAAQA,EAAQa,EAAIb,EAAQO,EAAIg+D,EAAQ,QAAS,CAC/CpoD,UAAW,SAAmBzG,GAC5B,OAAO4uG,EAAM58G,KAAMgO,EAAY3L,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,MAGzE,EAAQ,GAAR,CAAiC2N,I,gBCbjC,EAAQ,GAAR,CAA0B,U,gBCA1B,IAAIlP,EAAS,EAAQ,GACjBitD,EAAoB,EAAQ,IAC5B3pD,EAAK,EAAQ,IAAgBC,EAC7BsN,EAAO,EAAQ,IAAkBtN,EACjC4d,EAAW,EAAQ,IACnBy9F,EAAS,EAAQ,IACjBC,EAAU7+G,EAAO8b,OACjBtD,EAAOqmG,EACP7oG,EAAQ6oG,EAAQj/G,UAChBk4D,EAAM,KACNC,EAAM,KAEN+mD,EAAc,IAAID,EAAQ/mD,KAASA,EAEvC,GAAI,EAAQ,MAAuBgnD,GAAe,EAAQ,EAAR,EAAoB,WAGpE,OAFA/mD,EAAI,EAAQ,EAAR,CAAkB,WAAY,EAE3B8mD,EAAQ/mD,IAAQA,GAAO+mD,EAAQ9mD,IAAQA,GAA4B,QAArB8mD,EAAQ/mD,EAAK,SAC/D,CACH+mD,EAAU,SAAgB/+G,EAAGyD,GAC3B,IAAIw7G,EAAOh9G,gBAAgB88G,EACvBG,EAAO79F,EAASrhB,GAChBm/G,OAAY19G,IAANgC,EACV,OAAQw7G,GAAQC,GAAQl/G,EAAEwM,cAAgBuyG,GAAWI,EAAMn/G,EACvDmtD,EAAkB6xD,EAChB,IAAItmG,EAAKwmG,IAASC,EAAMn/G,EAAES,OAAST,EAAGyD,GACtCiV,GAAMwmG,EAAOl/G,aAAa++G,GAAW/+G,EAAES,OAAST,EAAGk/G,GAAQC,EAAML,EAAOzgH,KAAK2B,GAAKyD,GACpFw7G,EAAOh9G,KAAOiU,EAAO6oG,IAS3B,IAPA,IAAIK,EAAQ,SAAU3/G,GACpBA,KAAOs/G,GAAWv7G,EAAGu7G,EAASt/G,EAAK,CACjCiN,cAAc,EACd3N,IAAK,WAAc,OAAO2Z,EAAKjZ,IAC/BiJ,IAAK,SAAU/F,GAAM+V,EAAKjZ,GAAOkD,MAG5ByH,EAAO2G,EAAK2H,GAAOxa,EAAI,EAAGkM,EAAK/E,OAASnH,GAAIkhH,EAAMh1G,EAAKlM,MAChEgY,EAAM1J,YAAcuyG,EACpBA,EAAQj/G,UAAYoW,EACpB,EAAQ,GAAR,CAAuBhW,EAAQ,SAAU6+G,GAG3C,EAAQ,GAAR,CAA0B,W,6BCzC1B,EAAQ,KACR,IAAI17G,EAAW,EAAQ,GACnBy7G,EAAS,EAAQ,IACjB1gE,EAAc,EAAQ,GAEtB3zC,EAAY,IAAa,SAEzB40G,EAAS,SAAUzwG,GACrB,EAAQ,GAAR,CAAuBoN,OAAOlc,UAJhB,WAIsC8O,GAAI,IAItD,EAAQ,EAAR,EAAoB,WAAc,MAAsD,QAA/CnE,EAAUpM,KAAK,CAAEoC,OAAQ,IAAKs+D,MAAO,SAChFsgD,GAAO,WACL,IAAIx9G,EAAIwB,EAASpB,MACjB,MAAO,IAAI+D,OAAOnE,EAAEpB,OAAQ,IAC1B,UAAWoB,EAAIA,EAAEk9D,OAAS3gB,GAAev8C,aAAama,OAAS8iG,EAAOzgH,KAAKwD,QAAKJ,MAZtE,YAeLgJ,EAAUhM,MACnB4gH,GAAO,WACL,OAAO50G,EAAUpM,KAAK4D,U,6BCpB1B,IAAIoB,EAAW,EAAQ,GACnBiM,EAAW,EAAQ,GACnBgwG,EAAqB,EAAQ,KAC7BC,EAAa,EAAQ,IAGzB,EAAQ,GAAR,CAAyB,QAAS,GAAG,SAAUh6G,EAASgyD,EAAOioD,EAAQC,GACrE,MAAO,CAGL,SAAe5wF,GACb,IAAInrB,EAAI6B,EAAQtD,MACZ2M,EAAenN,MAAVotB,OAAsBptB,EAAYotB,EAAO0oC,GAClD,YAAc91D,IAAPmN,EAAmBA,EAAGvQ,KAAKwwB,EAAQnrB,GAAK,IAAIsY,OAAO6S,GAAQ0oC,GAAO/vD,OAAO9D,KAIlF,SAAUmrB,GACR,IAAI3e,EAAMuvG,EAAgBD,EAAQ3wF,EAAQ5sB,MAC1C,GAAIiO,EAAI4F,KAAM,OAAO5F,EAAI/Q,MACzB,IAAIugH,EAAKr8G,EAASwrB,GACd3tB,EAAIsG,OAAOvF,MACf,IAAKy9G,EAAGx/G,OAAQ,OAAOq/G,EAAWG,EAAIx+G,GACtC,IAAIy+G,EAAcD,EAAGh0D,QACrBg0D,EAAGz6F,UAAY,EAIf,IAHA,IAEI9U,EAFA0tD,EAAI,GACJl+D,EAAI,EAEgC,QAAhCwQ,EAASovG,EAAWG,EAAIx+G,KAAc,CAC5C,IAAI0+G,EAAWp4G,OAAO2I,EAAO,IAC7B0tD,EAAEl+D,GAAKigH,EACU,KAAbA,IAAiBF,EAAGz6F,UAAYq6F,EAAmBp+G,EAAGoO,EAASowG,EAAGz6F,WAAY06F,IAClFhgH,IAEF,OAAa,IAANA,EAAU,KAAOk+D,Q,6BClC9B,IAAIx6D,EAAW,EAAQ,GACnBgM,EAAW,EAAQ,IACnBC,EAAW,EAAQ,GACnBtM,EAAY,EAAQ,IACpBs8G,EAAqB,EAAQ,KAC7BC,EAAa,EAAQ,IACrBr3F,EAAM7lB,KAAK6lB,IACXjlB,EAAMZ,KAAKY,IACX8L,EAAQ1M,KAAK0M,MACb8wG,EAAuB,4BACvBC,EAAgC,oBAOpC,EAAQ,GAAR,CAAyB,UAAW,GAAG,SAAUv6G,EAASw6G,EAASC,EAAUP,GAC3E,MAAO,CAGL,SAAiBQ,EAAaC,GAC5B,IAAIx8G,EAAI6B,EAAQtD,MACZ2M,EAAoBnN,MAAfw+G,OAA2Bx+G,EAAYw+G,EAAYF,GAC5D,YAAct+G,IAAPmN,EACHA,EAAGvQ,KAAK4hH,EAAav8G,EAAGw8G,GACxBF,EAAS3hH,KAAKmJ,OAAO9D,GAAIu8G,EAAaC,IAI5C,SAAUrxF,EAAQqxF,GAChB,IAAIhwG,EAAMuvG,EAAgBO,EAAUnxF,EAAQ5sB,KAAMi+G,GAClD,GAAIhwG,EAAI4F,KAAM,OAAO5F,EAAI/Q,MAEzB,IAAIugH,EAAKr8G,EAASwrB,GACd3tB,EAAIsG,OAAOvF,MACXk+G,EAA4C,mBAAjBD,EAC1BC,IAAmBD,EAAe14G,OAAO04G,IAC9C,IAAIhgH,EAASw/G,EAAGx/G,OAChB,GAAIA,EAAQ,CACV,IAAIy/G,EAAcD,EAAGh0D,QACrBg0D,EAAGz6F,UAAY,EAGjB,IADA,IAAIs9B,EAAU,KACD,CACX,IAAIpyC,EAASovG,EAAWG,EAAIx+G,GAC5B,GAAe,OAAXiP,EAAiB,MAErB,GADAoyC,EAAQl7C,KAAK8I,IACRjQ,EAAQ,MAEI,KADFsH,OAAO2I,EAAO,MACRuvG,EAAGz6F,UAAYq6F,EAAmBp+G,EAAGoO,EAASowG,EAAGz6F,WAAY06F,IAIpF,IAFA,IAxCwBh9G,EAwCpBy9G,EAAoB,GACpBC,EAAqB,EAChBniH,EAAI,EAAGA,EAAIqkD,EAAQl9C,OAAQnH,IAAK,CACvCiS,EAASoyC,EAAQrkD,GASjB,IARA,IAAIoiH,EAAU94G,OAAO2I,EAAO,IACxBvG,EAAWse,EAAIjlB,EAAID,EAAUmN,EAAOpG,OAAQ7I,EAAEmE,QAAS,GACvDk7G,EAAW,GAMN1xD,EAAI,EAAGA,EAAI1+C,EAAO9K,OAAQwpD,IAAK0xD,EAASl5G,UAnDzC5F,KADckB,EAoD8CwN,EAAO0+C,IAnDvDlsD,EAAK6E,OAAO7E,IAoDhC,IAAI69G,EAAgBrwG,EAAO47C,OAC3B,GAAIo0D,EAAmB,CACrB,IAAIM,EAAe,CAACH,GAASt6G,OAAOu6G,EAAU32G,EAAU1I,QAClCO,IAAlB++G,GAA6BC,EAAap5G,KAAKm5G,GACnD,IAAIE,EAAcl5G,OAAO04G,EAAa77G,WAAM5C,EAAWg/G,SAEvDC,EAAcC,EAAgBL,EAASp/G,EAAG0I,EAAU22G,EAAUC,EAAeN,GAE3Et2G,GAAYy2G,IACdD,GAAqBl/G,EAAE8C,MAAMq8G,EAAoBz2G,GAAY82G,EAC7DL,EAAqBz2G,EAAW02G,EAAQj7G,QAG5C,OAAO+6G,EAAoBl/G,EAAE8C,MAAMq8G,KAKvC,SAASM,EAAgBL,EAAS/5D,EAAK38C,EAAU22G,EAAUC,EAAeE,GACxE,IAAIE,EAAUh3G,EAAW02G,EAAQj7G,OAC7B/G,EAAIiiH,EAASl7G,OACbixG,EAAUwJ,EAKd,YAJsBr+G,IAAlB++G,IACFA,EAAgBnxG,EAASmxG,GACzBlK,EAAUuJ,GAELG,EAAS3hH,KAAKqiH,EAAapK,GAAS,SAAUlxF,EAAO83C,GAC1D,IAAI2jD,EACJ,OAAQ3jD,EAAGrgC,OAAO,IAChB,IAAK,IAAK,MAAO,IACjB,IAAK,IAAK,OAAOyjF,EACjB,IAAK,IAAK,OAAO/5D,EAAIviD,MAAM,EAAG4F,GAC9B,IAAK,IAAK,OAAO28C,EAAIviD,MAAM48G,GAC3B,IAAK,IACHC,EAAUL,EAActjD,EAAGl5D,MAAM,GAAI,IACrC,MACF,QACE,IAAIrE,GAAKu9D,EACT,GAAU,IAANv9D,EAAS,OAAOylB,EACpB,GAAIzlB,EAAIrB,EAAG,CACT,IAAImF,EAAIsL,EAAMpP,EAAI,IAClB,OAAU,IAAN8D,EAAgB2hB,EAChB3hB,GAAKnF,OAA8BmD,IAApB8+G,EAAS98G,EAAI,GAAmBy5D,EAAGrgC,OAAO,GAAK0jF,EAAS98G,EAAI,GAAKy5D,EAAGrgC,OAAO,GACvFzX,EAETy7F,EAAUN,EAAS5gH,EAAI,GAE3B,YAAmB8B,IAAZo/G,EAAwB,GAAKA,U,6BChH1C,IAAIx9G,EAAW,EAAQ,GACnBy9G,EAAY,EAAQ,KACpBvB,EAAa,EAAQ,IAGzB,EAAQ,GAAR,CAAyB,SAAU,GAAG,SAAUh6G,EAASw7G,EAAQC,EAASvB,GACxE,MAAO,CAGL,SAAgB5wF,GACd,IAAInrB,EAAI6B,EAAQtD,MACZ2M,EAAenN,MAAVotB,OAAsBptB,EAAYotB,EAAOkyF,GAClD,YAAct/G,IAAPmN,EAAmBA,EAAGvQ,KAAKwwB,EAAQnrB,GAAK,IAAIsY,OAAO6S,GAAQkyF,GAAQv5G,OAAO9D,KAInF,SAAUmrB,GACR,IAAI3e,EAAMuvG,EAAgBuB,EAASnyF,EAAQ5sB,MAC3C,GAAIiO,EAAI4F,KAAM,OAAO5F,EAAI/Q,MACzB,IAAIugH,EAAKr8G,EAASwrB,GACd3tB,EAAIsG,OAAOvF,MACXg/G,EAAoBvB,EAAGz6F,UACtB67F,EAAUG,EAAmB,KAAIvB,EAAGz6F,UAAY,GACrD,IAAI9U,EAASovG,EAAWG,EAAIx+G,GAE5B,OADK4/G,EAAUpB,EAAGz6F,UAAWg8F,KAAoBvB,EAAGz6F,UAAYg8F,GAC9C,OAAX9wG,GAAmB,EAAIA,EAAOpG,Y,6BCzB3C,IAAIsX,EAAW,EAAQ,IACnBhe,EAAW,EAAQ,GACnB+N,EAAqB,EAAQ,IAC7BkuG,EAAqB,EAAQ,KAC7BhwG,EAAW,EAAQ,GACnB4xG,EAAiB,EAAQ,IACzBr1D,EAAa,EAAQ,KACrB5gD,EAAQ,EAAQ,GAChBk2G,EAAO9+G,KAAKY,IACZm+G,EAAQ,GAAG/5G,KAOXg6G,GAAcp2G,GAAM,WAAc+Q,OAHrB,WAGwC,QAGzD,EAAQ,GAAR,CAAyB,QAAS,GAAG,SAAUzW,EAAS+7G,EAAOC,EAAQ9B,GACrE,IAAI+B,EAkDJ,OAxCEA,EAR6B,KAA7B,OAAa,MAAE,QAAQ,IACe,GAAtC,OAAa,MAAE,QAAS,GAAS,QACE,GAAnC,KAAW,MAAE,WAAiB,QACK,GAAnC,IAAU,MAAE,YAAkB,QAC9B,IAAU,MAAE,QAAc,OAAI,GAC9B,GAAS,MAAE,MAAY,OAGP,SAAUzqG,EAAW+3B,GACnC,IAAI1jC,EAAS5D,OAAOvF,MACpB,QAAkBR,IAAdsV,GAAqC,IAAV+3B,EAAa,MAAO,GAEnD,IAAKztB,EAAStK,GAAY,OAAOwqG,EAAOljH,KAAK+M,EAAQ2L,EAAW+3B,GAWhE,IAVA,IASI1pB,EAAOH,EAAWw8F,EATlBp5D,EAAS,GACT0W,GAAShoD,EAAUy0C,WAAa,IAAM,KAC7Bz0C,EAAU00C,UAAY,IAAM,KAC5B10C,EAAU20C,QAAU,IAAM,KAC1B30C,EAAU40C,OAAS,IAAM,IAClC+1D,EAAgB,EAChBC,OAAuBlgH,IAAVqtC,EA5BN,WA4ByCA,IAAU,EAE1D8yE,EAAgB,IAAI5lG,OAAOjF,EAAUtW,OAAQs+D,EAAQ,MAElD35C,EAAQymC,EAAWxtD,KAAKujH,EAAex2G,QAC5C6Z,EAAY28F,EAAwB,WACpBF,IACdr5D,EAAOhhD,KAAK+D,EAAOpH,MAAM09G,EAAet8F,EAAMrb,QAC1Cqb,EAAY,OAAI,GAAKA,EAAMrb,MAAQqB,EAAa,QAAGg2G,EAAM/8G,MAAMgkD,EAAQjjC,EAAMphB,MAAM,IACvFy9G,EAAar8F,EAAM,GAAS,OAC5Bs8F,EAAgBz8F,EACZojC,EAAa,QAAKs5D,KAEpBC,EAAwB,YAAMx8F,EAAMrb,OAAO63G,EAAwB,YAKzE,OAHIF,IAAkBt2G,EAAa,QAC7Bq2G,GAAeG,EAAcl2G,KAAK,KAAK28C,EAAOhhD,KAAK,IAClDghD,EAAOhhD,KAAK+D,EAAOpH,MAAM09G,IACzBr5D,EAAa,OAAIs5D,EAAat5D,EAAOrkD,MAAM,EAAG29G,GAAct5D,GAG5D,IAAU,WAAE5mD,EAAW,GAAS,OACzB,SAAUsV,EAAW+3B,GACnC,YAAqBrtC,IAAdsV,GAAqC,IAAV+3B,EAAc,GAAKyyE,EAAOljH,KAAK4D,KAAM8U,EAAW+3B,IAGpEyyE,EAGX,CAGL,SAAexqG,EAAW+3B,GACxB,IAAIprC,EAAI6B,EAAQtD,MACZ4/G,EAAwBpgH,MAAbsV,OAAyBtV,EAAYsV,EAAUuqG,GAC9D,YAAoB7/G,IAAbogH,EACHA,EAASxjH,KAAK0Y,EAAWrT,EAAGorC,GAC5B0yE,EAAcnjH,KAAKmJ,OAAO9D,GAAIqT,EAAW+3B,IAO/C,SAAUjgB,EAAQigB,GAChB,IAAI5+B,EAAMuvG,EAAgB+B,EAAe3yF,EAAQ5sB,KAAM6sC,EAAO0yE,IAAkBD,GAChF,GAAIrxG,EAAI4F,KAAM,OAAO5F,EAAI/Q,MAEzB,IAAIugH,EAAKr8G,EAASwrB,GACd3tB,EAAIsG,OAAOvF,MACX+S,EAAI5D,EAAmBsuG,EAAI1jG,QAE3B8lG,EAAkBpC,EAAGh0D,QACrBqT,GAAS2gD,EAAGl0D,WAAa,IAAM,KACtBk0D,EAAGj0D,UAAY,IAAM,KACrBi0D,EAAGh0D,QAAU,IAAM,KACnB21D,EAAa,IAAM,KAI5BQ,EAAW,IAAI7sG,EAAEqsG,EAAa3B,EAAK,OAASA,EAAGj/G,OAAS,IAAKs+D,GAC7DgjD,OAAgBtgH,IAAVqtC,EAzFC,WAyFkCA,IAAU,EACvD,GAAY,IAARizE,EAAW,MAAO,GACtB,GAAiB,IAAb7gH,EAAEmE,OAAc,OAAuC,OAAhC67G,EAAeW,EAAU3gH,GAAc,CAACA,GAAK,GAIxE,IAHA,IAAIlB,EAAI,EACJgiH,EAAI,EACJnkD,EAAI,GACDmkD,EAAI9gH,EAAEmE,QAAQ,CACnBw8G,EAAS58F,UAAYo8F,EAAaW,EAAI,EACtC,IACIv/G,EADAu3G,EAAIkH,EAAeW,EAAUR,EAAangH,EAAIA,EAAE8C,MAAMg+G,IAE1D,GACQ,OAANhI,IACCv3G,EAAI0+G,EAAK7xG,EAASuyG,EAAS58F,WAAao8F,EAAa,EAAIW,IAAK9gH,EAAEmE,WAAarF,EAE9EgiH,EAAI1C,EAAmBp+G,EAAG8gH,EAAGF,OACxB,CAEL,GADAjkD,EAAEx2D,KAAKnG,EAAE8C,MAAMhE,EAAGgiH,IACdnkD,EAAEx4D,SAAW08G,EAAK,OAAOlkD,EAC7B,IAAK,IAAI3/D,EAAI,EAAGA,GAAK87G,EAAE30G,OAAS,EAAGnH,IAEjC,GADA2/D,EAAEx2D,KAAK2yG,EAAE97G,IACL2/D,EAAEx4D,SAAW08G,EAAK,OAAOlkD,EAE/BmkD,EAAIhiH,EAAIyC,GAIZ,OADAo7D,EAAEx2D,KAAKnG,EAAE8C,MAAMhE,IACR69D,Q,gBClIb,IAAI39D,EAAS,EAAQ,GACjB+hH,EAAY,EAAQ,KAAWv5G,IAC/Bw5G,EAAWhiH,EAAO8M,kBAAoB9M,EAAO+M,uBAC7CwT,EAAUvgB,EAAOugB,QACjBiI,EAAUxoB,EAAOwoB,QACjB+2C,EAAuC,WAA9B,EAAQ,GAAR,CAAkBh/C,GAE/BxiB,EAAOD,QAAU,WACf,IAAIylC,EAAM7Q,EAAMotC,EAEZh5B,EAAQ,WACV,IAAIrU,EAAQ/jB,EAEZ,IADI6wD,IAAW9sC,EAASlS,EAAQggD,SAAS9tC,EAAOkuC,OACzCp9B,GAAM,CACX70B,EAAK60B,EAAK70B,GACV60B,EAAOA,EAAK5tB,KACZ,IACEjH,IACA,MAAOnM,GAGP,MAFIghC,EAAMu8B,IACLptC,OAAOnxB,EACNgB,GAERmwB,OAAOnxB,EACLkxB,GAAQA,EAAOiuC,SAIrB,GAAInB,EACFO,EAAS,WACPv/C,EAAQrT,SAAS45B,SAGd,IAAIk7E,GAAchiH,EAAO6sD,WAAa7sD,EAAO6sD,UAAUo1D,WAQvD,GAAIz5F,GAAWA,EAAQqZ,QAAS,CAErC,IAAI2oB,EAAUhiC,EAAQqZ,aAAQtgC,GAC9Bu+D,EAAS,WACPtV,EAAQpI,KAAKtb,SASfg5B,EAAS,WAEPiiD,EAAU5jH,KAAK6B,EAAQ8mC,QAvBgD,CACzE,IAAIo7E,GAAS,EACT/9C,EAAO/2D,SAASC,eAAe,IACnC,IAAI20G,EAASl7E,GAAOx5B,QAAQ62D,EAAM,CAAE52D,eAAe,IACnDuyD,EAAS,WACPqE,EAAKriE,KAAOogH,GAAUA,GAsB1B,OAAO,SAAUxzG,GACf,IAAIF,EAAO,CAAEE,GAAIA,EAAIiH,UAAMpU,GACvBmxB,IAAMA,EAAK/c,KAAOnH,GACjB+0B,IACHA,EAAO/0B,EACPsxD,KACAptC,EAAOlkB,K,cClEbzQ,EAAOD,QAAU,SAAUwE,GACzB,IACE,MAAO,CAAEC,GAAG,EAAOuW,EAAGxW,KACtB,MAAOC,GACP,MAAO,CAAEA,GAAG,EAAMuW,EAAGvW,M,6BCHzB,IAAI4/G,EAAS,EAAQ,KACjBttG,EAAW,EAAQ,IAIvB9W,EAAOD,QAAU,EAAQ,GAAR,CAHP,OAGqC,SAAUe,GACvD,OAAO,WAAiB,OAAOA,EAAIkD,KAAMqC,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,MAC9E,CAED1C,IAAK,SAAaU,GAChB,IAAIsrB,EAAQs3F,EAAOhgD,SAASttD,EAAS9S,KAR/B,OAQ2CxC,GACjD,OAAOsrB,GAASA,EAAM/R,GAGxBtQ,IAAK,SAAajJ,EAAKN,GACrB,OAAOkjH,EAAO1kE,IAAI5oC,EAAS9S,KAbrB,OAayC,IAARxC,EAAY,EAAIA,EAAKN,KAE7DkjH,GAAQ,I,6BCjBX,IAAIA,EAAS,EAAQ,KACjBttG,EAAW,EAAQ,IAIvB9W,EAAOD,QAAU,EAAQ,GAAR,CAHP,OAGqC,SAAUe,GACvD,OAAO,WAAiB,OAAOA,EAAIkD,KAAMqC,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,MAC9E,CAED2pB,IAAK,SAAajsB,GAChB,OAAOkjH,EAAO1kE,IAAI5oC,EAAS9S,KARrB,OAQiC9C,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,KAEzEkjH,I,6BCZH,IAcIC,EAdApiH,EAAS,EAAQ,GACjB81C,EAAO,EAAQ,GAAR,CAA4B,GACnC31C,EAAW,EAAQ,IACnBg5C,EAAO,EAAQ,IACf5Q,EAAS,EAAQ,KACjB85E,EAAO,EAAQ,KACf7/G,EAAW,EAAQ,GACnBqS,EAAW,EAAQ,IACnBytG,EAAkB,EAAQ,IAC1BC,GAAWviH,EAAOwiH,eAAiB,kBAAmBxiH,EAEtDs5C,EAAUH,EAAKG,QACfP,EAAer6C,OAAOq6C,aACtBwpB,EAAsB8/C,EAAK3/C,QAG3BvqD,EAAU,SAAUtZ,GACtB,OAAO,WACL,OAAOA,EAAIkD,KAAMqC,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,KAIvD2rD,EAAU,CAEZruD,IAAK,SAAaU,GAChB,GAAIiD,EAASjD,GAAM,CACjB,IAAIuC,EAAOw3C,EAAQ/5C,GACnB,OAAa,IAATuC,EAAsBygE,EAAoB1tD,EAAS9S,KAjB9C,YAiB+DlD,IAAIU,GACrEuC,EAAOA,EAAKC,KAAK41D,SAAMp2D,IAIlCiH,IAAK,SAAajJ,EAAKN,GACrB,OAAOojH,EAAK5kE,IAAI5oC,EAAS9S,KAvBd,WAuB+BxC,EAAKN,KAK/CwjH,EAAW1kH,EAAOD,QAAU,EAAQ,GAAR,CA5BjB,UA4BoDqa,EAAS+0C,EAASm1D,GAAM,GAAM,GAG7FC,GAAmBC,IAErBh6E,GADA65E,EAAcC,EAAKx0D,eAAe11C,EAhCrB,YAiCMvY,UAAWstD,GAC9B/T,EAAKC,MAAO,EACZtD,EAAK,CAAC,SAAU,MAAO,MAAO,QAAQ,SAAUv2C,GAC9C,IAAIyW,EAAQysG,EAAS7iH,UACjB8M,EAASsJ,EAAMzW,GACnBY,EAAS6V,EAAOzW,GAAK,SAAU2D,EAAGyL,GAEhC,GAAInM,EAASU,KAAO61C,EAAa71C,GAAI,CAC9BnB,KAAKqgE,KAAIrgE,KAAKqgE,GAAK,IAAIggD,GAC5B,IAAInyG,EAASlO,KAAKqgE,GAAG7iE,GAAK2D,EAAGyL,GAC7B,MAAc,OAAPpP,EAAewC,KAAOkO,EAE7B,OAAOvD,EAAOvO,KAAK4D,KAAMmB,EAAGyL,W,6BCvDpC,IAAI0zG,EAAO,EAAQ,KACfxtG,EAAW,EAAQ,IAIvB,EAAQ,GAAR,CAHe,WAGoB,SAAUhW,GAC3C,OAAO,WAAqB,OAAOA,EAAIkD,KAAMqC,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,MAClF,CAED2pB,IAAK,SAAajsB,GAChB,OAAOojH,EAAK5kE,IAAI5oC,EAAS9S,KARd,WAQ+B9C,GAAO,KAElDojH,GAAM,GAAO,I,6BCZhB,IAAIhiH,EAAU,EAAQ,GAClB+P,EAAS,EAAQ,IACjBoE,EAAS,EAAQ,KACjBrR,EAAW,EAAQ,GACnBuN,EAAkB,EAAQ,IAC1BtB,EAAW,EAAQ,GACnB5M,EAAW,EAAQ,GACnBsP,EAAc,EAAQ,GAAaA,YACnCZ,EAAqB,EAAQ,IAC7BW,EAAe2C,EAAO1C,YACtBC,EAAYyC,EAAOxC,SACnB0wG,EAAUtyG,EAAOuI,KAAO7G,EAAYihG,OACpCt7F,EAAS5F,EAAajS,UAAUkE,MAChCqQ,EAAO/D,EAAO+D,KAGlB9T,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAKkR,IAAgBD,GAAe,CAAEC,YAAaD,IAE3FxR,EAAQA,EAAQW,EAAIX,EAAQO,GAAKwP,EAAO4D,OAJrB,cAI2C,CAE5D++F,OAAQ,SAAgBtwG,GACtB,OAAOigH,GAAWA,EAAQjgH,IAAOD,EAASC,IAAO0R,KAAQ1R,KAI7DpC,EAAQA,EAAQa,EAAIb,EAAQoB,EAAIpB,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAC9D,OAAQ,IAAIiR,EAAa,GAAG/N,MAAM,OAAGvC,GAAW4X,cAZ/B,cAaD,CAEhBrV,MAAO,SAAeoS,EAAOmB,GAC3B,QAAe9V,IAAXkW,QAAgClW,IAAR8V,EAAmB,OAAOI,EAAOtZ,KAAKgF,EAASpB,MAAOmU,GAQlF,IAPA,IAAIhN,EAAM/F,EAASpB,MAAMoX,WACrB68B,EAAQtlC,EAAgBwF,EAAOhN,GAC/By5G,EAAMjyG,OAAwBnP,IAAR8V,EAAoBnO,EAAMmO,EAAKnO,GACrD+G,EAAS,IAAKiB,EAAmBnP,KAAM8P,GAA9B,CAA6CzC,EAASuzG,EAAM3sE,IACrE4sE,EAAQ,IAAI7wG,EAAUhQ,MACtB8gH,EAAQ,IAAI9wG,EAAU9B,GACtBpG,EAAQ,EACLmsC,EAAQ2sE,GACbE,EAAM9nD,SAASlxD,IAAS+4G,EAAM3nD,SAASjlB,MACvC,OAAO/lC,KAIb,EAAQ,GAAR,CA9BmB,gB,gBCfnB,IAAI5P,EAAU,EAAQ,GACtBA,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAK,EAAQ,IAAY+X,IAAK,CACpE3G,SAAU,EAAQ,KAAmBA,Y,gBCFvC,EAAQ,GAAR,CAA0B,OAAQ,GAAG,SAAU7L,GAC7C,OAAO,SAAmBrE,EAAMyV,EAAYpS,GAC1C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,QAAS,GAAG,SAAUgB,GAC9C,OAAO,SAAoBrE,EAAMyV,EAAYpS,GAC3C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,QAAS,GAAG,SAAUgB,GAC9C,OAAO,SAA2BrE,EAAMyV,EAAYpS,GAClD,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,OAErC,I,gBCJH,EAAQ,GAAR,CAA0B,QAAS,GAAG,SAAUgB,GAC9C,OAAO,SAAoBrE,EAAMyV,EAAYpS,GAC3C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,SAAU,GAAG,SAAUgB,GAC/C,OAAO,SAAqBrE,EAAMyV,EAAYpS,GAC5C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,QAAS,GAAG,SAAUgB,GAC9C,OAAO,SAAoBrE,EAAMyV,EAAYpS,GAC3C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,SAAU,GAAG,SAAUgB,GAC/C,OAAO,SAAqBrE,EAAMyV,EAAYpS,GAC5C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,UAAW,GAAG,SAAUgB,GAChD,OAAO,SAAsBrE,EAAMyV,EAAYpS,GAC7C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCFxC,EAAQ,GAAR,CAA0B,UAAW,GAAG,SAAUgB,GAChD,OAAO,SAAsBrE,EAAMyV,EAAYpS,GAC7C,OAAOgB,EAAKpE,KAAMD,EAAMyV,EAAYpS,Q,gBCDxC,IAAI9E,EAAU,EAAQ,GAClBoO,EAAY,EAAQ,IACpBtL,EAAW,EAAQ,GACnB2/G,GAAU,EAAQ,GAAav9G,SAAW,IAAIpB,MAC9C4+G,EAASvhH,SAAS2C,MAEtB9D,EAAQA,EAAQW,EAAIX,EAAQO,GAAK,EAAQ,EAAR,EAAoB,WACnDkiH,GAAO,kBACL,UAAW,CACb3+G,MAAO,SAAe9C,EAAQ2hH,EAAcC,GAC1C,IAAI7iE,EAAI3xC,EAAUpN,GACd6hH,EAAI//G,EAAS8/G,GACjB,OAAOH,EAASA,EAAO1iE,EAAG4iE,EAAcE,GAAKH,EAAO5kH,KAAKiiD,EAAG4iE,EAAcE,O,gBCZ9E,IAAI7iH,EAAU,EAAQ,GAClBf,EAAS,EAAQ,IACjBmP,EAAY,EAAQ,IACpBtL,EAAW,EAAQ,GACnBX,EAAW,EAAQ,GACnBuI,EAAQ,EAAQ,GAChBvL,EAAO,EAAQ,KACf2jH,GAAc,EAAQ,GAAa59G,SAAW,IAAIy4D,UAIlDolD,EAAiBr4G,GAAM,WACzB,SAASnK,KACT,QAASuiH,GAAW,cAA6B,GAAIviH,aAAcA,MAEjEyiH,GAAYt4G,GAAM,WACpBo4G,GAAW,kBAGb9iH,EAAQA,EAAQW,EAAIX,EAAQO,GAAKwiH,GAAkBC,GAAW,UAAW,CACvErlD,UAAW,SAAmBslD,EAAQ59G,GACpC+I,EAAU60G,GACVngH,EAASuC,GACT,IAAI69G,EAAYn/G,UAAUe,OAAS,EAAIm+G,EAAS70G,EAAUrK,UAAU,IACpE,GAAIi/G,IAAaD,EAAgB,OAAOD,EAAWG,EAAQ59G,EAAM69G,GACjE,GAAID,GAAUC,EAAW,CAEvB,OAAQ79G,EAAKP,QACX,KAAK,EAAG,OAAO,IAAIm+G,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAO59G,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAI49G,EAAO59G,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAI49G,EAAO59G,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAI49G,EAAO59G,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAI89G,EAAQ,CAAC,MAEb,OADAA,EAAMr8G,KAAKhD,MAAMq/G,EAAO99G,GACjB,IAAKlG,EAAK2E,MAAMm/G,EAAQE,IAGjC,IAAIxtG,EAAQutG,EAAU3jH,UAClB2tD,EAAWjuD,EAAOkD,EAASwT,GAASA,EAAQtX,OAAOkB,WACnDqQ,EAASzO,SAAS2C,MAAMhG,KAAKmlH,EAAQ/1D,EAAU7nD,GACnD,OAAOlD,EAASyN,GAAUA,EAASs9C,M,gBC3CvC,IAAIjqD,EAAK,EAAQ,IACbjD,EAAU,EAAQ,GAClB8C,EAAW,EAAQ,GACnBE,EAAc,EAAQ,IAG1BhD,EAAQA,EAAQW,EAAIX,EAAQO,EAAI,EAAQ,EAAR,EAAoB,WAElD2E,QAAQ5G,eAAe2E,EAAGC,EAAE,GAAI,EAAG,CAAEtE,MAAO,IAAM,EAAG,CAAEA,MAAO,OAC5D,UAAW,CACbN,eAAgB,SAAwB0C,EAAQoiH,EAAaC,GAC3DvgH,EAAS9B,GACToiH,EAAcpgH,EAAYogH,GAAa,GACvCtgH,EAASugH,GACT,IAEE,OADApgH,EAAGC,EAAElC,EAAQoiH,EAAaC,IACnB,EACP,MAAOnhH,GACP,OAAO,O,gBClBb,IAAIlC,EAAU,EAAQ,GAClB2O,EAAO,EAAQ,IAAkBzL,EACjCJ,EAAW,EAAQ,GAEvB9C,EAAQA,EAAQW,EAAG,UAAW,CAC5B2iH,eAAgB,SAAwBtiH,EAAQoiH,GAC9C,IAAIxrG,EAAOjJ,EAAK7L,EAAS9B,GAASoiH,GAClC,QAAOxrG,IAASA,EAAKzL,sBAA8BnL,EAAOoiH,O,6BCN9D,IAAIpjH,EAAU,EAAQ,GAClB8C,EAAW,EAAQ,GACnBygH,EAAY,SAAUlsD,GACxB31D,KAAKu7C,GAAKn6C,EAASu0D,GACnB31D,KAAK41D,GAAK,EACV,IACIp4D,EADA2K,EAAOnI,KAAK61D,GAAK,GAErB,IAAKr4D,KAAOm4D,EAAUxtD,EAAK/C,KAAK5H,IAElC,EAAQ,IAAR,CAA0BqkH,EAAW,UAAU,WAC7C,IAEIrkH,EADA2K,EADOnI,KACK61D,GAEhB,GACE,GAJS71D,KAIA41D,IAAMztD,EAAK/E,OAAQ,MAAO,CAAElG,WAAOsC,EAAWqU,MAAM,YACnDrW,EAAM2K,EALPnI,KAKiB41D,SALjB51D,KAKgCu7C,KAC3C,MAAO,CAAEr+C,MAAOM,EAAKqW,MAAM,MAG7BvV,EAAQA,EAAQW,EAAG,UAAW,CAC5B6iH,UAAW,SAAmBxiH,GAC5B,OAAO,IAAIuiH,EAAUviH,O,gBCtBzB,IAAI2N,EAAO,EAAQ,IACfrG,EAAiB,EAAQ,IACzB0B,EAAM,EAAQ,IACdhK,EAAU,EAAQ,GAClBmC,EAAW,EAAQ,GACnBW,EAAW,EAAQ,GAcvB9C,EAAQA,EAAQW,EAAG,UAAW,CAAEnC,IAZhC,SAASA,EAAIwC,EAAQoiH,GACnB,IACIxrG,EAAMjC,EADNvQ,EAAWrB,UAAUe,OAAS,EAAI9D,EAAS+C,UAAU,GAEzD,OAAIjB,EAAS9B,KAAYoE,EAAiBpE,EAAOoiH,IAC7CxrG,EAAOjJ,EAAKzL,EAAElC,EAAQoiH,IAAqBp5G,EAAI4N,EAAM,SACrDA,EAAKhZ,WACQsC,IAAb0W,EAAKpZ,IACHoZ,EAAKpZ,IAAIV,KAAKsH,QACdlE,EACFiB,EAASwT,EAAQrN,EAAetH,IAAiBxC,EAAImX,EAAOytG,EAAah+G,QAA7E,M,gBChBF,IAAIuJ,EAAO,EAAQ,IACf3O,EAAU,EAAQ,GAClB8C,EAAW,EAAQ,GAEvB9C,EAAQA,EAAQW,EAAG,UAAW,CAC5BiO,yBAA0B,SAAkC5N,EAAQoiH,GAClE,OAAOz0G,EAAKzL,EAAEJ,EAAS9B,GAASoiH,O,gBCNpC,IAAIpjH,EAAU,EAAQ,GAClByjH,EAAW,EAAQ,IACnB3gH,EAAW,EAAQ,GAEvB9C,EAAQA,EAAQW,EAAG,UAAW,CAC5B2H,eAAgB,SAAwBtH,GACtC,OAAOyiH,EAAS3gH,EAAS9B,Q,gBCN7B,IAAIhB,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,UAAW,CAC5BqJ,IAAK,SAAahJ,EAAQoiH,GACxB,OAAOA,KAAepiH,M,gBCJ1B,IAAIhB,EAAU,EAAQ,GAClB8C,EAAW,EAAQ,GACnBy1G,EAAgBl6G,OAAOq6C,aAE3B14C,EAAQA,EAAQW,EAAG,UAAW,CAC5B+3C,aAAc,SAAsB13C,GAElC,OADA8B,EAAS9B,IACFu3G,GAAgBA,EAAcv3G,O,gBCPzC,IAAIhB,EAAU,EAAQ,GAEtBA,EAAQA,EAAQW,EAAG,UAAW,CAAE2E,QAAS,EAAQ,Q,gBCFjD,IAAItF,EAAU,EAAQ,GAClB8C,EAAW,EAAQ,GACnBs1G,EAAqB/5G,OAAOu6C,kBAEhC54C,EAAQA,EAAQW,EAAG,UAAW,CAC5Bi4C,kBAAmB,SAA2B53C,GAC5C8B,EAAS9B,GACT,IAEE,OADIo3G,GAAoBA,EAAmBp3G,IACpC,EACP,MAAOkB,GACP,OAAO,O,gBCXb,IAAIe,EAAK,EAAQ,IACb0L,EAAO,EAAQ,IACfrG,EAAiB,EAAQ,IACzB0B,EAAM,EAAQ,IACdhK,EAAU,EAAQ,GAClBqL,EAAa,EAAQ,IACrBvI,EAAW,EAAQ,GACnBX,EAAW,EAAQ,GAwBvBnC,EAAQA,EAAQW,EAAG,UAAW,CAAEwH,IAtBhC,SAASA,EAAInH,EAAQoiH,EAAaM,GAChC,IAEIC,EAAoBhuG,EAFpBvQ,EAAWrB,UAAUe,OAAS,EAAI9D,EAAS+C,UAAU,GACrD6/G,EAAUj1G,EAAKzL,EAAEJ,EAAS9B,GAASoiH,GAEvC,IAAKQ,EAAS,CACZ,GAAIzhH,EAASwT,EAAQrN,EAAetH,IAClC,OAAOmH,EAAIwN,EAAOytG,EAAaM,EAAGt+G,GAEpCw+G,EAAUv4G,EAAW,GAEvB,GAAIrB,EAAI45G,EAAS,SAAU,CACzB,IAAyB,IAArBA,EAAQ13G,WAAuB/J,EAASiD,GAAW,OAAO,EAC9D,GAAIu+G,EAAqBh1G,EAAKzL,EAAEkC,EAAUg+G,GAAc,CACtD,GAAIO,EAAmBnlH,KAAOmlH,EAAmBx7G,MAAuC,IAAhCw7G,EAAmBz3G,SAAoB,OAAO,EACtGy3G,EAAmB/kH,MAAQ8kH,EAC3BzgH,EAAGC,EAAEkC,EAAUg+G,EAAaO,QACvB1gH,EAAGC,EAAEkC,EAAUg+G,EAAa/3G,EAAW,EAAGq4G,IACjD,OAAO,EAET,YAAuBxiH,IAAhB0iH,EAAQz7G,MAA6By7G,EAAQz7G,IAAIrK,KAAKsH,EAAUs+G,IAAI,O,gBC5B7E,IAAI1jH,EAAU,EAAQ,GAClB6jH,EAAW,EAAQ,IAEnBA,GAAU7jH,EAAQA,EAAQW,EAAG,UAAW,CAC1CypD,eAAgB,SAAwBppD,EAAQ2U,GAC9CkuG,EAASnuD,MAAM10D,EAAQ2U,GACvB,IAEE,OADAkuG,EAAS17G,IAAInH,EAAQ2U,IACd,EACP,MAAOzT,GACP,OAAO,O,gBCXb,EAAQ,KACRxE,EAAOD,QAAU,EAAQ,GAAuBiG,MAAM6S,U,6BCCtD,IAAIvW,EAAU,EAAQ,GAClB8jH,EAAY,EAAQ,GAAR,EAA6B,GAE7C9jH,EAAQA,EAAQa,EAAG,QAAS,CAC1B0V,SAAU,SAAkBs0C,GAC1B,OAAOi5D,EAAUpiH,KAAMmpD,EAAI9mD,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,MAIrE,EAAQ,GAAR,CAAiC,a,gBCXjC,EAAQ,KACRxD,EAAOD,QAAU,EAAQ,GAAuBiG,MAAMkpC,S,6BCCtD,IAAI5sC,EAAU,EAAQ,GAClB+jH,EAAmB,EAAQ,KAC3Bj1G,EAAW,EAAQ,IACnBC,EAAW,EAAQ,GACnBX,EAAY,EAAQ,IACpB41G,EAAqB,EAAQ,KAEjChkH,EAAQA,EAAQa,EAAG,QAAS,CAC1B+rC,QAAS,SAAiBl9B,GACxB,IACIu0G,EAAW3mD,EADXn6D,EAAI2L,EAASpN,MAMjB,OAJA0M,EAAUsB,GACVu0G,EAAYl1G,EAAS5L,EAAE2B,QACvBw4D,EAAI0mD,EAAmB7gH,EAAG,GAC1B4gH,EAAiBzmD,EAAGn6D,EAAGA,EAAG8gH,EAAW,EAAG,EAAGv0G,EAAY3L,UAAU,IAC1Du5D,KAIX,EAAQ,GAAR,CAAiC,Y,6BCnBjC,IAAIj0C,EAAU,EAAQ,IAClBlnB,EAAW,EAAQ,GACnB4M,EAAW,EAAQ,GACnBhP,EAAM,EAAQ,IACdmkH,EAAuB,EAAQ,EAAR,CAAkB,sBAgC7CxmH,EAAOD,QA9BP,SAASsmH,EAAiB/iH,EAAQgpD,EAAU9pD,EAAQ+jH,EAAWpuG,EAAOua,EAAOksE,EAAQn7E,GAMnF,IALA,IAGIrU,EAASq3G,EAHTC,EAAcvuG,EACdwuG,EAAc,EACdC,IAAQhoB,GAASv8F,EAAIu8F,EAAQn7E,EAAS,GAGnCkjG,EAAcJ,GAAW,CAC9B,GAAII,KAAenkH,EAAQ,CASzB,GARA4M,EAAUw3G,EAAQA,EAAMpkH,EAAOmkH,GAAcA,EAAar6D,GAAY9pD,EAAOmkH,GAE7EF,GAAa,EACThiH,EAAS2K,KAEXq3G,OAA4BjjH,KAD5BijH,EAAar3G,EAAQo3G,MACqBC,EAAa96F,EAAQvc,IAG7Dq3G,GAAc/zF,EAAQ,EACxBg0F,EAAcL,EAAiB/iH,EAAQgpD,EAAUl9C,EAASiC,EAASjC,EAAQhI,QAASs/G,EAAah0F,EAAQ,GAAK,MACzG,CACL,GAAIg0F,GAAe,iBAAkB,MAAM/hH,YAC3CrB,EAAOojH,GAAet3G,EAGxBs3G,IAEFC,IAEF,OAAOD,I,gBCnCT,EAAQ,KACR1mH,EAAOD,QAAU,EAAQ,GAAuBwJ,OAAO2rC,U,6BCCvD,IAAI5yC,EAAU,EAAQ,GAClBukH,EAAO,EAAQ,KACf93D,EAAY,EAAQ,IAGpB+3D,EAAa,mDAAmDr5G,KAAKshD,GAEzEzsD,EAAQA,EAAQa,EAAIb,EAAQO,EAAIikH,EAAY,SAAU,CACpD5xE,SAAU,SAAkB5gB,GAC1B,OAAOuyF,EAAK7iH,KAAMswB,EAAWjuB,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,GAAW,O,gBCXlF,EAAQ,KACRxD,EAAOD,QAAU,EAAQ,GAAuBwJ,OAAO0rC,Q,6BCCvD,IAAI3yC,EAAU,EAAQ,GAClBukH,EAAO,EAAQ,KACf93D,EAAY,EAAQ,IAGpB+3D,EAAa,mDAAmDr5G,KAAKshD,GAEzEzsD,EAAQA,EAAQa,EAAIb,EAAQO,EAAIikH,EAAY,SAAU,CACpD7xE,OAAQ,SAAgB3gB,GACtB,OAAOuyF,EAAK7iH,KAAMswB,EAAWjuB,UAAUe,OAAS,EAAIf,UAAU,QAAK7C,GAAW,O,gBCXlF,EAAQ,KACRxD,EAAOD,QAAU,EAAQ,GAAuBwJ,OAAO4oD,U,6BCCvD,EAAQ,GAAR,CAA0B,YAAY,SAAUmO,GAC9C,OAAO,WACL,OAAOA,EAAMt8D,KAAM,MAEpB,c,gBCNH,EAAQ,KACRhE,EAAOD,QAAU,EAAQ,GAAuBwJ,OAAOw9G,W,6BCCvD,EAAQ,GAAR,CAA0B,aAAa,SAAUzmD,GAC/C,OAAO,WACL,OAAOA,EAAMt8D,KAAM,MAEpB,Y,gBCNH,EAAQ,KACRhE,EAAOD,QAAU,EAAQ,IAA0ByF,EAAE,kB,gBCDrD,EAAQ,IAAR,CAAyB,kB,gBCAzB,EAAQ,KACRxF,EAAOD,QAAU,EAAQ,GAAuBY,OAAOwnD,2B,gBCAvD,IAAI7lD,EAAU,EAAQ,GAClBsF,EAAU,EAAQ,KAClBoJ,EAAY,EAAQ,IACpBC,EAAO,EAAQ,IACfgvG,EAAiB,EAAQ,IAE7B39G,EAAQA,EAAQW,EAAG,SAAU,CAC3BklD,0BAA2B,SAAmCxmD,GAO5D,IANA,IAKIH,EAAK0Y,EALLzU,EAAIuL,EAAUrP,GACdqlH,EAAU/1G,EAAKzL,EACf2G,EAAOvE,EAAQnC,GACfyM,EAAS,GACTjS,EAAI,EAEDkM,EAAK/E,OAASnH,QAENuD,KADb0W,EAAO8sG,EAAQvhH,EAAGjE,EAAM2K,EAAKlM,QACLggH,EAAe/tG,EAAQ1Q,EAAK0Y,GAEtD,OAAOhI,M,gBCnBX,EAAQ,KACRlS,EAAOD,QAAU,EAAQ,GAAuBY,OAAOgU,Q,gBCAvD,IAAIrS,EAAU,EAAQ,GAClB2kH,EAAU,EAAQ,IAAR,EAA8B,GAE5C3kH,EAAQA,EAAQW,EAAG,SAAU,CAC3B0R,OAAQ,SAAgBjQ,GACtB,OAAOuiH,EAAQviH,O,gBCNnB,EAAQ,KACR1E,EAAOD,QAAU,EAAQ,GAAuBY,OAAOmU,S,gBCAvD,IAAIxS,EAAU,EAAQ,GAClB62D,EAAW,EAAQ,IAAR,EAA8B,GAE7C72D,EAAQA,EAAQW,EAAG,SAAU,CAC3B6R,QAAS,SAAiBpQ,GACxB,OAAOy0D,EAASz0D,O,6BCLpB,EAAQ,KACR,EAAQ,KACR1E,EAAOD,QAAU,EAAQ,GAAuB0qB,QAAiB,S,6BCDjE,IAAInoB,EAAU,EAAQ,GAClBJ,EAAO,EAAQ,GACfD,EAAS,EAAQ,GACjBkR,EAAqB,EAAQ,IAC7Bo5C,EAAiB,EAAQ,KAE7BjqD,EAAQA,EAAQa,EAAIb,EAAQsB,EAAG,UAAW,CAAE,QAAW,SAAUsjH,GAC/D,IAAInwG,EAAI5D,EAAmBnP,KAAM9B,EAAKuoB,SAAWxoB,EAAOwoB,SACpD3d,EAAiC,mBAAbo6G,EACxB,OAAOljH,KAAKqgD,KACVv3C,EAAa,SAAUy7C,GACrB,OAAOgE,EAAex1C,EAAGmwG,KAAa7iE,MAAK,WAAc,OAAOkE,MAC9D2+D,EACJp6G,EAAa,SAAUtI,GACrB,OAAO+nD,EAAex1C,EAAGmwG,KAAa7iE,MAAK,WAAc,MAAM7/C,MAC7D0iH,O,gBCjBR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACRlnH,EAAOD,QAAU,EAAQ,I,gBCFzB,IAAIkC,EAAS,EAAQ,GACjBK,EAAU,EAAQ,GAClBysD,EAAY,EAAQ,IACpBhpD,EAAQ,GAAGA,MACXohH,EAAO,WAAW15G,KAAKshD,GACvB/c,EAAO,SAAUvnC,GACnB,OAAO,SAAUkG,EAAInK,GACnB,IAAI4gH,EAAY/gH,UAAUe,OAAS,EAC/BO,IAAOy/G,GAAYrhH,EAAM3F,KAAKiG,UAAW,GAC7C,OAAOoE,EAAI28G,EAAY,YAEP,mBAANz2G,EAAmBA,EAAKlN,SAASkN,IAAKvK,MAAMpC,KAAM2D,IACxDgJ,EAAInK,KAGZlE,EAAQA,EAAQS,EAAIT,EAAQe,EAAIf,EAAQO,EAAIskH,EAAM,CAChDl5G,WAAY+jC,EAAK/vC,EAAOgM,YACxBwpD,YAAazlB,EAAK/vC,EAAOw1D,gB,gBClB3B,IAAIn1D,EAAU,EAAQ,GAClB+kH,EAAQ,EAAQ,KACpB/kH,EAAQA,EAAQS,EAAIT,EAAQe,EAAG,CAC7BoM,aAAc43G,EAAM58G,IACpBmwD,eAAgBysD,EAAMx6F,S,gBCyCxB,IA7CA,IAAI/S,EAAa,EAAQ,KACrBylD,EAAU,EAAQ,IAClBn9D,EAAW,EAAQ,IACnBH,EAAS,EAAQ,GACjBE,EAAO,EAAQ,IACfkR,EAAY,EAAQ,IACpBL,EAAM,EAAQ,GACd4C,EAAW5C,EAAI,YACfs0G,EAAgBt0G,EAAI,eACpBu0G,EAAcl0G,EAAUrN,MAExBwhH,EAAe,CACjBC,aAAa,EACbC,qBAAqB,EACrBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,EACVC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,UAAU,EACVC,kBAAkB,EAClBC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,WAAW,GAGJC,EAAcjqD,EAAQioD,GAAevnH,EAAI,EAAGA,EAAIupH,EAAYpiH,OAAQnH,IAAK,CAChF,IAIIuB,EAJAgM,EAAOg8G,EAAYvpH,GACnBwpH,EAAWjC,EAAah6G,GACxBk8G,EAAaznH,EAAOuL,GACpByK,EAAQyxG,GAAcA,EAAW7nH,UAErC,GAAIoW,IACGA,EAAMrC,IAAWzT,EAAK8V,EAAOrC,EAAU2xG,GACvCtvG,EAAMqvG,IAAgBnlH,EAAK8V,EAAOqvG,EAAe95G,GACtD6F,EAAU7F,GAAQ+5G,EACdkC,GAAU,IAAKjoH,KAAOsY,EAAiB7B,EAAMzW,IAAMY,EAAS6V,EAAOzW,EAAKsY,EAAWtY,IAAM,K,gBChDjG,IAAImoH,EAAW,SAAU5pH,GACvB,aAEA,IAAI6pH,EAAKjpH,OAAOkB,UACZ+yG,EAASgV,EAAG9nH,eAEZu9D,EAA4B,mBAAXr+D,OAAwBA,OAAS,GAClD6oH,EAAiBxqD,EAAQ9nD,UAAY,aACrCuyG,EAAsBzqD,EAAQ0qD,eAAiB,kBAC/CC,EAAoB3qD,EAAQp+D,aAAe,gBAE/C,SAAS+wC,EAAKi4E,EAASC,EAAS7lH,EAAM8lH,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQroH,qBAAqBwoH,EAAYH,EAAUG,EAC/EC,EAAY3pH,OAAOY,OAAO6oH,EAAevoH,WACzCoJ,EAAU,IAAIs/G,EAAQJ,GAAe,IAMzC,OAFAG,EAAUE,QAkMZ,SAA0BP,EAAS5lH,EAAM4G,GACvC,IAAIlB,EA3KuB,iBA6K3B,OAAO,SAAgB4E,EAAQjE,GAC7B,GA5KoB,cA4KhBX,EACF,MAAM,IAAItD,MAAM,gCAGlB,GA/KoB,cA+KhBsD,EAA6B,CAC/B,GAAe,UAAX4E,EACF,MAAMjE,EAKR,OAAO+/G,IAMT,IAHAx/G,EAAQ0D,OAASA,EACjB1D,EAAQP,IAAMA,IAED,CACX,IAAIggH,EAAWz/G,EAAQy/G,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUz/G,GACnD,GAAI0/G,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnB1/G,EAAQ0D,OAGV1D,EAAQ6/G,KAAO7/G,EAAQ8/G,MAAQ9/G,EAAQP,SAElC,GAAuB,UAAnBO,EAAQ0D,OAAoB,CACrC,GA/MqB,mBA+MjB5E,EAEF,MADAA,EA7Mc,YA8MRkB,EAAQP,IAGhBO,EAAQ+/G,kBAAkB//G,EAAQP,SAEN,WAAnBO,EAAQ0D,QACjB1D,EAAQggH,OAAO,SAAUhgH,EAAQP,KAGnCX,EAxNkB,YA0NlB,IAAImhH,EAASC,EAASlB,EAAS5lH,EAAM4G,GACrC,GAAoB,WAAhBigH,EAAO3oH,KAAmB,CAO5B,GAJAwH,EAAQkB,EAAQ4M,KA7NA,YAFK,iBAmOjBqzG,EAAOxgH,MAAQmgH,EACjB,SAGF,MAAO,CACL3pH,MAAOgqH,EAAOxgH,IACdmN,KAAM5M,EAAQ4M,MAGS,UAAhBqzG,EAAO3oH,OAChBwH,EA3OgB,YA8OhBkB,EAAQ0D,OAAS,QACjB1D,EAAQP,IAAMwgH,EAAOxgH,OA1QP0gH,CAAiBnB,EAAS5lH,EAAM4G,GAE7Cq/G,EAcT,SAASa,EAASx6G,EAAIi0C,EAAKl6C,GACzB,IACE,MAAO,CAAEnI,KAAM,SAAUmI,IAAKiG,EAAGvQ,KAAKwkD,EAAKl6C,IAC3C,MAAO/D,GACP,MAAO,CAAEpE,KAAM,QAASmI,IAAK/D,IAhBjC5G,EAAQiyC,KAAOA,EAoBf,IAOI64E,EAAmB,GAMvB,SAASR,KACT,SAASgB,KACT,SAASC,KAIT,IAAI1yD,EAAoB,GACxBA,EAAkBixD,GAAkB,WAClC,OAAO7lH,MAGT,IAAI+hH,EAAWplH,OAAOiK,eAClB2gH,EAA0BxF,GAAYA,EAASA,EAASpxG,EAAO,MAC/D42G,GACAA,IAA4B3B,GAC5BhV,EAAOx0G,KAAKmrH,EAAyB1B,KAGvCjxD,EAAoB2yD,GAGtB,IAAIC,EAAKF,EAA2BzpH,UAClCwoH,EAAUxoH,UAAYlB,OAAOY,OAAOq3D,GAQtC,SAAS6yD,EAAsB5pH,GAC7B,CAAC,OAAQ,QAAS,UAAU6W,SAAQ,SAAS/J,GAC3C9M,EAAU8M,GAAU,SAASjE,GAC3B,OAAO1G,KAAKwmH,QAAQ77G,EAAQjE,OAoClC,SAASghH,EAAcpB,GAgCrB,IAAIqB,EAgCJ3nH,KAAKwmH,QA9BL,SAAiB77G,EAAQjE,GACvB,SAASkhH,IACP,OAAO,IAAInhG,SAAQ,SAASqZ,EAASuM,IAnCzC,SAASlF,EAAOx8B,EAAQjE,EAAKo5B,EAASuM,GACpC,IAAI66E,EAASC,EAASb,EAAU37G,GAAS27G,EAAW5/G,GACpD,GAAoB,UAAhBwgH,EAAO3oH,KAEJ,CACL,IAAI2P,EAASg5G,EAAOxgH,IAChBxJ,EAAQgR,EAAOhR,MACnB,OAAIA,GACiB,iBAAVA,GACP0zG,EAAOx0G,KAAKc,EAAO,WACdupB,QAAQqZ,QAAQ5iC,EAAM2qH,SAASxnE,MAAK,SAASnjD,GAClDiqC,EAAO,OAAQjqC,EAAO4iC,EAASuM,MAC9B,SAAS1pC,GACVwkC,EAAO,QAASxkC,EAAKm9B,EAASuM,MAI3B5lB,QAAQqZ,QAAQ5iC,GAAOmjD,MAAK,SAASynE,GAI1C55G,EAAOhR,MAAQ4qH,EACfhoF,EAAQ5xB,MACP,SAASpL,GAGV,OAAOqkC,EAAO,QAASrkC,EAAOg9B,EAASuM,MAvBzCA,EAAO66E,EAAOxgH,KAiCZygC,CAAOx8B,EAAQjE,EAAKo5B,EAASuM,MAIjC,OAAOs7E,EAaLA,EAAkBA,EAAgBtnE,KAChCunE,EAGAA,GACEA,KA+GV,SAAShB,EAAoBF,EAAUz/G,GACrC,IAAI0D,EAAS+7G,EAASnzG,SAAStM,EAAQ0D,QACvC,QApSEnL,IAoSEmL,EAAsB,CAKxB,GAFA1D,EAAQy/G,SAAW,KAEI,UAAnBz/G,EAAQ0D,OAAoB,CAE9B,GAAI+7G,EAASnzG,SAAiB,SAG5BtM,EAAQ0D,OAAS,SACjB1D,EAAQP,SA/SZlH,EAgTIonH,EAAoBF,EAAUz/G,GAEP,UAAnBA,EAAQ0D,QAGV,OAAOk8G,EAIX5/G,EAAQ0D,OAAS,QACjB1D,EAAQP,IAAM,IAAI/F,UAChB,kDAGJ,OAAOkmH,EAGT,IAAIK,EAASC,EAASx8G,EAAQ+7G,EAASnzG,SAAUtM,EAAQP,KAEzD,GAAoB,UAAhBwgH,EAAO3oH,KAIT,OAHA0I,EAAQ0D,OAAS,QACjB1D,EAAQP,IAAMwgH,EAAOxgH,IACrBO,EAAQy/G,SAAW,KACZG,EAGT,IAAIpiD,EAAOyiD,EAAOxgH,IAElB,OAAM+9D,EAOFA,EAAK5wD,MAGP5M,EAAQy/G,EAASqB,YAActjD,EAAKvnE,MAGpC+J,EAAQ2M,KAAO8yG,EAASsB,QAQD,WAAnB/gH,EAAQ0D,SACV1D,EAAQ0D,OAAS,OACjB1D,EAAQP,SAnWVlH,GA6WFyH,EAAQy/G,SAAW,KACZG,GANEpiD,GA3BPx9D,EAAQ0D,OAAS,QACjB1D,EAAQP,IAAM,IAAI/F,UAAU,oCAC5BsG,EAAQy/G,SAAW,KACZG,GAoDX,SAASoB,EAAaC,GACpB,IAAIp/F,EAAQ,CAAEq/F,OAAQD,EAAK,IAEvB,KAAKA,IACPp/F,EAAMs/F,SAAWF,EAAK,IAGpB,KAAKA,IACPp/F,EAAMu/F,WAAaH,EAAK,GACxBp/F,EAAMw/F,SAAWJ,EAAK,IAGxBloH,KAAKuoH,WAAWnjH,KAAK0jB,GAGvB,SAAS0/F,EAAc1/F,GACrB,IAAIo+F,EAASp+F,EAAM2/F,YAAc,GACjCvB,EAAO3oH,KAAO,gBACP2oH,EAAOxgH,IACdoiB,EAAM2/F,WAAavB,EAGrB,SAASX,EAAQJ,GAIfnmH,KAAKuoH,WAAa,CAAC,CAAEJ,OAAQ,SAC7BhC,EAAYzxG,QAAQuzG,EAAcjoH,MAClCA,KAAKmxD,OAAM,GA8Bb,SAASxgD,EAAO8pB,GACd,GAAIA,EAAU,CACZ,IAAIiuF,EAAiBjuF,EAASorF,GAC9B,GAAI6C,EACF,OAAOA,EAAetsH,KAAKq+B,GAG7B,GAA6B,mBAAlBA,EAAS7mB,KAClB,OAAO6mB,EAGT,IAAKv2B,MAAMu2B,EAASr3B,QAAS,CAC3B,IAAInH,GAAK,EAAG2X,EAAO,SAASA,IAC1B,OAAS3X,EAAIw+B,EAASr3B,QACpB,GAAIwtG,EAAOx0G,KAAKq+B,EAAUx+B,GAGxB,OAFA2X,EAAK1W,MAAQu9B,EAASx+B,GACtB2X,EAAKC,MAAO,EACLD,EAOX,OAHAA,EAAK1W,WAndTsC,EAodIoU,EAAKC,MAAO,EAELD,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAM6yG,GAIjB,SAASA,IACP,MAAO,CAAEvpH,WAnePsC,EAmeyBqU,MAAM,GA+MnC,OAxmBAwzG,EAAkBxpH,UAAY2pH,EAAGj9G,YAAc+8G,EAC/CA,EAA2B/8G,YAAc88G,EACzCC,EAA2BtB,GACzBqB,EAAkBsB,YAAc,oBAYlC5sH,EAAQ6sH,oBAAsB,SAASC,GACrC,IAAIz+G,EAAyB,mBAAXy+G,GAAyBA,EAAOt+G,YAClD,QAAOH,IACHA,IAASi9G,GAG2B,uBAAnCj9G,EAAKu+G,aAAev+G,EAAK5N,QAIhCT,EAAQ+sH,KAAO,SAASD,GAUtB,OATIlsH,OAAO+rD,eACT/rD,OAAO+rD,eAAemgE,EAAQvB,IAE9BuB,EAAO30D,UAAYozD,EACbtB,KAAqB6C,IACzBA,EAAO7C,GAAqB,sBAGhC6C,EAAOhrH,UAAYlB,OAAOY,OAAOiqH,GAC1BqB,GAOT9sH,EAAQgtH,MAAQ,SAASriH,GACvB,MAAO,CAAEmhH,QAASnhH,IAsEpB+gH,EAAsBC,EAAc7pH,WACpC6pH,EAAc7pH,UAAUioH,GAAuB,WAC7C,OAAO9lH,MAETjE,EAAQ2rH,cAAgBA,EAKxB3rH,EAAQitH,MAAQ,SAAS/C,EAASC,EAAS7lH,EAAM8lH,GAC/C,IAAI5uG,EAAO,IAAImwG,EACb15E,EAAKi4E,EAASC,EAAS7lH,EAAM8lH,IAG/B,OAAOpqH,EAAQ6sH,oBAAoB1C,GAC/B3uG,EACAA,EAAK3D,OAAOysC,MAAK,SAASnyC,GACxB,OAAOA,EAAO2F,KAAO3F,EAAOhR,MAAQqa,EAAK3D,WAuKjD6zG,EAAsBD,GAEtBA,EAAGxB,GAAqB,YAOxBwB,EAAG3B,GAAkB,WACnB,OAAO7lH,MAGTwnH,EAAGr5G,SAAW,WACZ,MAAO,sBAkCTpS,EAAQoM,KAAO,SAASxK,GACtB,IAAIwK,EAAO,GACX,IAAK,IAAI3K,KAAOG,EACdwK,EAAK/C,KAAK5H,GAMZ,OAJA2K,EAAK6M,UAIE,SAASpB,IACd,KAAOzL,EAAK/E,QAAQ,CAClB,IAAI5F,EAAM2K,EAAKJ,MACf,GAAIvK,KAAOG,EAGT,OAFAiW,EAAK1W,MAAQM,EACboW,EAAKC,MAAO,EACLD,EAQX,OADAA,EAAKC,MAAO,EACLD,IAsCX7X,EAAQ4U,OAASA,EAMjB41G,EAAQ1oH,UAAY,CAClB0M,YAAag8G,EAEbp1D,MAAO,SAAS83D,GAcd,GAbAjpH,KAAK0mD,KAAO,EACZ1mD,KAAK4T,KAAO,EAGZ5T,KAAK8mH,KAAO9mH,KAAK+mH,WA9ejBvnH,EA+eAQ,KAAK6T,MAAO,EACZ7T,KAAK0mH,SAAW,KAEhB1mH,KAAK2K,OAAS,OACd3K,KAAK0G,SAnfLlH,EAqfAQ,KAAKuoH,WAAW7zG,QAAQ8zG,IAEnBS,EACH,IAAK,IAAIzsH,KAAQwD,KAEQ,MAAnBxD,EAAKo+B,OAAO,IACZg2E,EAAOx0G,KAAK4D,KAAMxD,KACjB0H,OAAO1H,EAAKuF,MAAM,MACrB/B,KAAKxD,QA7fXgD,IAmgBF0pH,KAAM,WACJlpH,KAAK6T,MAAO,EAEZ,IACIs1G,EADYnpH,KAAKuoH,WAAW,GACLE,WAC3B,GAAwB,UAApBU,EAAW5qH,KACb,MAAM4qH,EAAWziH,IAGnB,OAAO1G,KAAKopH,MAGdpC,kBAAmB,SAASqC,GAC1B,GAAIrpH,KAAK6T,KACP,MAAMw1G,EAGR,IAAIpiH,EAAUjH,KACd,SAASspH,EAAO56D,EAAK66D,GAYnB,OAXArC,EAAO3oH,KAAO,QACd2oH,EAAOxgH,IAAM2iH,EACbpiH,EAAQ2M,KAAO86C,EAEX66D,IAGFtiH,EAAQ0D,OAAS,OACjB1D,EAAQP,SA9hBZlH,KAiiBY+pH,EAGZ,IAAK,IAAIttH,EAAI+D,KAAKuoH,WAAWnlH,OAAS,EAAGnH,GAAK,IAAKA,EAAG,CACpD,IAAI6sB,EAAQ9oB,KAAKuoH,WAAWtsH,GACxBirH,EAASp+F,EAAM2/F,WAEnB,GAAqB,SAAjB3/F,EAAMq/F,OAIR,OAAOmB,EAAO,OAGhB,GAAIxgG,EAAMq/F,QAAUnoH,KAAK0mD,KAAM,CAC7B,IAAI8iE,EAAW5Y,EAAOx0G,KAAK0sB,EAAO,YAC9B2gG,EAAa7Y,EAAOx0G,KAAK0sB,EAAO,cAEpC,GAAI0gG,GAAYC,EAAY,CAC1B,GAAIzpH,KAAK0mD,KAAO59B,EAAMs/F,SACpB,OAAOkB,EAAOxgG,EAAMs/F,UAAU,GACzB,GAAIpoH,KAAK0mD,KAAO59B,EAAMu/F,WAC3B,OAAOiB,EAAOxgG,EAAMu/F,iBAGjB,GAAImB,GACT,GAAIxpH,KAAK0mD,KAAO59B,EAAMs/F,SACpB,OAAOkB,EAAOxgG,EAAMs/F,UAAU,OAG3B,KAAIqB,EAMT,MAAM,IAAIhnH,MAAM,0CALhB,GAAIzC,KAAK0mD,KAAO59B,EAAMu/F,WACpB,OAAOiB,EAAOxgG,EAAMu/F,gBAU9BpB,OAAQ,SAAS1oH,EAAMmI,GACrB,IAAK,IAAIzK,EAAI+D,KAAKuoH,WAAWnlH,OAAS,EAAGnH,GAAK,IAAKA,EAAG,CACpD,IAAI6sB,EAAQ9oB,KAAKuoH,WAAWtsH,GAC5B,GAAI6sB,EAAMq/F,QAAUnoH,KAAK0mD,MACrBkqD,EAAOx0G,KAAK0sB,EAAO,eACnB9oB,KAAK0mD,KAAO59B,EAAMu/F,WAAY,CAChC,IAAIqB,EAAe5gG,EACnB,OAIA4gG,IACU,UAATnrH,GACS,aAATA,IACDmrH,EAAavB,QAAUzhH,GACvBA,GAAOgjH,EAAarB,aAGtBqB,EAAe,MAGjB,IAAIxC,EAASwC,EAAeA,EAAajB,WAAa,GAItD,OAHAvB,EAAO3oH,KAAOA,EACd2oH,EAAOxgH,IAAMA,EAETgjH,GACF1pH,KAAK2K,OAAS,OACd3K,KAAK4T,KAAO81G,EAAarB,WAClBxB,GAGF7mH,KAAKk1E,SAASgyC,IAGvBhyC,SAAU,SAASgyC,EAAQoB,GACzB,GAAoB,UAAhBpB,EAAO3oH,KACT,MAAM2oH,EAAOxgH,IAcf,MAXoB,UAAhBwgH,EAAO3oH,MACS,aAAhB2oH,EAAO3oH,KACTyB,KAAK4T,KAAOszG,EAAOxgH,IACM,WAAhBwgH,EAAO3oH,MAChByB,KAAKopH,KAAOppH,KAAK0G,IAAMwgH,EAAOxgH,IAC9B1G,KAAK2K,OAAS,SACd3K,KAAK4T,KAAO,OACa,WAAhBszG,EAAO3oH,MAAqB+pH,IACrCtoH,KAAK4T,KAAO00G,GAGPzB,GAGT35B,OAAQ,SAASm7B,GACf,IAAK,IAAIpsH,EAAI+D,KAAKuoH,WAAWnlH,OAAS,EAAGnH,GAAK,IAAKA,EAAG,CACpD,IAAI6sB,EAAQ9oB,KAAKuoH,WAAWtsH,GAC5B,GAAI6sB,EAAMu/F,aAAeA,EAGvB,OAFAroH,KAAKk1E,SAASpsD,EAAM2/F,WAAY3/F,EAAMw/F,UACtCE,EAAc1/F,GACP+9F,IAKb,MAAS,SAASsB,GAChB,IAAK,IAAIlsH,EAAI+D,KAAKuoH,WAAWnlH,OAAS,EAAGnH,GAAK,IAAKA,EAAG,CACpD,IAAI6sB,EAAQ9oB,KAAKuoH,WAAWtsH,GAC5B,GAAI6sB,EAAMq/F,SAAWA,EAAQ,CAC3B,IAAIjB,EAASp+F,EAAM2/F,WACnB,GAAoB,UAAhBvB,EAAO3oH,KAAkB,CAC3B,IAAIorH,EAASzC,EAAOxgH,IACpB8hH,EAAc1/F,GAEhB,OAAO6gG,GAMX,MAAM,IAAIlnH,MAAM,0BAGlBmnH,cAAe,SAASnvF,EAAUstF,EAAYC,GAa5C,OAZAhoH,KAAK0mH,SAAW,CACdnzG,SAAU5C,EAAO8pB,GACjBstF,WAAYA,EACZC,QAASA,GAGS,SAAhBhoH,KAAK2K,SAGP3K,KAAK0G,SAvqBPlH,GA0qBOqnH,IAQJ9qH,EAvrBK,CA8rBiBC,EAAOD,SAGtC,IACE8tH,mBAAqBlE,EACrB,MAAOmE,GAUPrqH,SAAS,IAAK,yBAAdA,CAAwCkmH,K,gBCptB1C,EAAQ,KACR3pH,EAAOD,QAAU,EAAQ,KAAoBkC,Q,gBCA7C,IAAIK,EAAU,EAAQ,KAEtBA,EAAQA,EAAQS,EAAG,CAAEd,OAAQ,EAAQ,Q,gBCHrC,IAAIA,EAAS,EAAQ,KACjBC,EAAO,EAAQ,KACfG,EAAM,EAAQ,KACdF,EAAO,EAAQ,KACfmK,EAAM,EAAQ,KAGdhK,EAAU,SAAUC,EAAM/B,EAAMgC,GAClC,IASIhB,EAAKiB,EAAKC,EATVE,EAAYL,EAAOD,EAAQO,EAC3BC,EAAYP,EAAOD,EAAQS,EAC3BC,EAAYT,EAAOD,EAAQW,EAC3BC,EAAWX,EAAOD,EAAQa,EAC1BC,EAAUb,EAAOD,EAAQe,EACzB0qH,EAAUxrH,EAAOD,EAAQqB,EACzB5D,EAAU+C,EAAYZ,EAAOA,EAAK1B,KAAU0B,EAAK1B,GAAQ,IACzD+C,EAAWxD,EAAiB,UAC5BuD,EAASR,EAAYb,EAASe,EAAYf,EAAOzB,IAASyB,EAAOzB,IAAS,IAAa,UAG3F,IAAKgB,KADDsB,IAAWN,EAAShC,GACZgC,GAEVC,GAAOG,GAAaU,QAA0BE,IAAhBF,EAAO9B,KAC1B8K,EAAIvM,EAASyB,KAExBkB,EAAMD,EAAMa,EAAO9B,GAAOgB,EAAOhB,GAEjCzB,EAAQyB,GAAOsB,GAAmC,mBAAfQ,EAAO9B,GAAqBgB,EAAOhB,GAEpE4B,GAAWX,EAAMJ,EAAIK,EAAKT,GAE1B8rH,GAAWzqH,EAAO9B,IAAQkB,EAAM,SAAWqU,GAC3C,IAAIlU,EAAI,SAAUsC,EAAGyL,EAAGtQ,GACtB,GAAI0D,gBAAgB+S,EAAG,CACrB,OAAQ1Q,UAAUe,QAChB,KAAK,EAAG,OAAO,IAAI2P,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAE5R,GACrB,KAAK,EAAG,OAAO,IAAI4R,EAAE5R,EAAGyL,GACxB,OAAO,IAAImG,EAAE5R,EAAGyL,EAAGtQ,GACrB,OAAOyW,EAAE3Q,MAAMpC,KAAMqC,YAGzB,OADAxD,EAAW,UAAIkU,EAAW,UACnBlU,EAXyB,CAa/BH,GAAOQ,GAA0B,mBAAPR,EAAoBL,EAAIoB,SAASrD,KAAMsC,GAAOA,EAEvEQ,KACDnD,EAAQiuH,UAAYjuH,EAAQiuH,QAAU,KAAKxsH,GAAOkB,EAE/CH,EAAOD,EAAQsB,GAAKL,IAAaA,EAAS/B,IAAMW,EAAKoB,EAAU/B,EAAKkB,MAK9EJ,EAAQO,EAAI,EACZP,EAAQS,EAAI,EACZT,EAAQW,EAAI,EACZX,EAAQa,EAAI,EACZb,EAAQe,EAAI,GACZf,EAAQqB,EAAI,GACZrB,EAAQoB,EAAI,GACZpB,EAAQsB,EAAI,IACZ5D,EAAOD,QAAUuC,G,gBC5DjB,IAAIoO,EAAY,EAAQ,KACxB1Q,EAAOD,QAAU,SAAU4Q,EAAIjI,EAAMtB,GAEnC,GADAsJ,EAAUC,QACGnN,IAATkF,EAAoB,OAAOiI,EAC/B,OAAQvJ,GACN,KAAK,EAAG,OAAO,SAAUjC,GACvB,OAAOwL,EAAGvQ,KAAKsI,EAAMvD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAGyL,GAC1B,OAAOD,EAAGvQ,KAAKsI,EAAMvD,EAAGyL,IAE1B,KAAK,EAAG,OAAO,SAAUzL,EAAGyL,EAAGtQ,GAC7B,OAAOqQ,EAAGvQ,KAAKsI,EAAMvD,EAAGyL,EAAGtQ,IAG/B,OAAO,WACL,OAAOqQ,EAAGvK,MAAMsC,EAAMrC,c,cCjB1BrG,EAAOD,QAAU,SAAU2E,GACzB,GAAiB,mBAANA,EAAkB,MAAMC,UAAUD,EAAK,uBAClD,OAAOA,I,gBCFT,IAAIa,EAAK,EAAQ,KACboI,EAAa,EAAQ,KACzB3N,EAAOD,QAAU,EAAQ,KAAoB,SAAU4B,EAAQH,EAAKN,GAClE,OAAOqE,EAAGC,EAAE7D,EAAQH,EAAKmM,EAAW,EAAGzM,KACrC,SAAUS,EAAQH,EAAKN,GAEzB,OADAS,EAAOH,GAAON,EACPS,I,gBCNT,IAAIyD,EAAW,EAAQ,KACnBC,EAAiB,EAAQ,KACzBC,EAAc,EAAQ,KACtBC,EAAK5E,OAAOC,eAEhBb,EAAQyF,EAAI,EAAQ,KAAoB7E,OAAOC,eAAiB,SAAwB6E,EAAGtC,EAAGuC,GAI5F,GAHAN,EAASK,GACTtC,EAAImC,EAAYnC,GAAG,GACnBiC,EAASM,GACLL,EAAgB,IAClB,OAAOE,EAAGE,EAAGtC,EAAGuC,GAChB,MAAOlB,IACT,GAAI,QAASkB,GAAc,QAASA,EAAY,MAAMf,UAAU,4BAEhE,MADI,UAAWe,IAAYD,EAAEtC,GAAKuC,EAAWxE,OACtCuE,I,gBCdT,IAAIhB,EAAW,EAAQ,KACvBzE,EAAOD,QAAU,SAAU2E,GACzB,IAAKD,EAASC,GAAK,MAAMC,UAAUD,EAAK,sBACxC,OAAOA,I,gBCHT1E,EAAOD,SAAW,EAAQ,OAAsB,EAAQ,IAAR,EAAoB,WAClE,OAA4G,GAArGY,OAAOC,eAAe,EAAQ,IAAR,CAAyB,OAAQ,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQqE,M,gBCDzG,IAAIV,EAAW,EAAQ,KACnB4K,EAAW,EAAQ,KAAaA,SAEhCyoD,EAAKrzD,EAAS4K,IAAa5K,EAAS4K,EAASM,eACjD3P,EAAOD,QAAU,SAAU2E,GACzB,OAAOozD,EAAKzoD,EAASM,cAAcjL,GAAM,K,gBCJ3C,IAAID,EAAW,EAAQ,KAGvBzE,EAAOD,QAAU,SAAU2E,EAAIzB,GAC7B,IAAKwB,EAASC,GAAK,OAAOA,EAC1B,IAAIiM,EAAI/D,EACR,GAAI3J,GAAkC,mBAArB0N,EAAKjM,EAAGyN,YAA4B1N,EAASmI,EAAM+D,EAAGvQ,KAAKsE,IAAM,OAAOkI,EACzF,GAAgC,mBAApB+D,EAAKjM,EAAG6mB,WAA2B9mB,EAASmI,EAAM+D,EAAGvQ,KAAKsE,IAAM,OAAOkI,EACnF,IAAK3J,GAAkC,mBAArB0N,EAAKjM,EAAGyN,YAA4B1N,EAASmI,EAAM+D,EAAGvQ,KAAKsE,IAAM,OAAOkI,EAC1F,MAAMjI,UAAU,6C,cCVlB3E,EAAOD,QAAU,SAAUq+C,EAAQl9C,GACjC,MAAO,CACLL,aAAuB,EAATu9C,GACd3vC,eAAyB,EAAT2vC,GAChB5vC,WAAqB,EAAT4vC,GACZl9C,MAAOA,K,cCLX,IAAIY,EAAiB,GAAGA,eACxB9B,EAAOD,QAAU,SAAU2E,EAAIlD,GAC7B,OAAOM,EAAe1B,KAAKsE,EAAIlD,K,kjDCMZysH,E,YAKnB,WAAavyE,GAAU,MAGrB,G,4FAHqB,WACrB,wBAAMA,KAEIA,SAASwyE,cAAgB,EAAKxyE,SAASwyE,YAAYhgB,OAC3D,MAAM,IAAIznG,MAAM,kEAJG,OAOrB,EAAK0nH,cAAgB,EAAKzyE,SAASwyE,YAAYhgB,OAP1B,E,8RAHJ,MAAO,gB,mCAmBjBpqG,EAAI48D,GACX,MAAc,cAAP58D,I,6CAKPE,KAAKk7C,U,0JAoBLl7C,KAAKoqH,gBAED7lD,EAAM,K,kBAIIvkE,KAAKqqH,U,OAAjB9lD,E,8DAKA5iE,EAAQW,KAAK,yGAAb,M,UACYtC,KAAKsqH,U,QAAjB/lD,E,sBAKFvkE,KAAKuqH,iB,kBACEhmD,G,0UAOHvkE,KAAK03C,SAAS8yE,c,sBACV,IAAI/nH,MAAM,2D,UAGbT,MAAM4V,KAAK5X,KAAKg5C,QAAQroC,UAAU4D,MAAK,SAAAqsC,GAAG,MAAgB,SAAZA,EAAIriD,Q,sBAC/C,IAAIkE,MAAJ,uH,cAGJgoH,EAAczqH,KAAKg5C,QAAQ0xE,SAAS,Q,SACd1qH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,MAAO,gCAAiC,MAAM,G,WAAxGwqE,E,QACe3kE,K,uBACX,IAAIvjD,MAAM,+D,YACdgoH,GAAeA,GAAeE,EAAc3kE,K,0CACvCrkD,EAAQQ,IAAI,gG,QAGjByoH,EAAW,GACXC,EAAO,EACPC,EAAY,K,eAIdD,GAAQ,EACRlpH,EAAQQ,IAAR,qDAA0D0oH,EAA1D,yB,UACgB7qH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,MAAO,6CAA+C2qE,EAAY,eAAH,OAAkBA,GAAc,IAAK,MAAM,G,WAA1J78G,E,OAGJ28G,EAAWA,EAAS7mH,OAAOkK,EAAI88G,QAAU,IAGzCD,EAAY78G,EAAI+8G,W,6EAclB,IAPI/mD,EAAejiE,MAAM4V,KAAK5X,KAAKg5C,QAAQroC,UAAU2D,QAAO,SAAAssC,GAAG,MAAgB,SAAZA,EAAIriD,OAAoBqsH,EAASr2G,MAAK,SAAAoiC,GAAI,OAAIA,EAAK72C,IAAM8gD,EAAI9gD,SAAKiV,KAAI,SAAA6rC,GAAG,OAAIA,EAAI9gD,MACpJE,KAAKkkE,cAAcD,GACfA,EAAa7gE,OAAS,GACxBzB,EAAQQ,IAAR,8CAAmD8hE,EAAa7gE,OAAhE,iDAGE6nH,EAAa,G,6BACjB,EAAqBL,EAArB,+CAASM,EAAsB,SAGzBC,EAAQnrH,KAAK4kE,QAAQsmD,EAASprH,IAAI,KACxBqrH,EAAMx0E,MAAQu0E,EAASv0E,MACnCs0E,EAAW7lH,KAAK8lH,EAASprH,I,0OAKzBsrH,EAAgB,IAChBC,EAAeJ,E,aACZI,EAAajoH,OAAS,G,yBAGvBmhE,EAAM8mD,EAAatpH,MAAM,EAAGqpH,GAChCC,EAAeA,EAAatpH,MAAMqpH,GAClCzpH,EAAQQ,IAAR,gDAAqDoiE,EAAInhE,OAAzD,qBAA4EioH,EAAajoH,OAAzF,oB,UACqBpD,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,qBAAsB,CAAEokB,QAAO,G,QAMhG,IANIwxB,E,OAGAu1B,EAAa,G,6BAGjB,EAAcv1B,EAASg1B,OAAvB,+CAASh0G,EAAT,QACEu0G,EAAWlmH,KAAK,IAAIvF,IAAW,QAASkX,EAAEjX,GAAIiX,I,0OAGhD,I,6BAAA,EAAcg/E,EAASpgD,MAAvB,+CAASn0C,EAAT,QACE8pH,EAAWlmH,KAAK,IAAIvF,IAAW,OAAQ2B,EAAE1B,GAAI0B,I,0OAG/C,I,8BAAA,EAAcu0F,EAAS7rF,QAAvB,+CAAS/I,EAAT,QACEmqH,EAAWlmH,KAAK,IAAIvF,IAAW,SAAUsB,EAAE3E,KAAM2E,I,yPAGnDnB,KAAK8kE,WAAWwmD,G,yBAKlBtrH,KAAKg5C,QAAQuyE,SAAS,OAAQZ,EAAc3kE,MAC5CrkD,EAAQQ,IAAR,iEAAsE8oH,EAAW7nH,OAAjF,gCAA+G6gE,EAAa7gE,OAA5H,a,gZAOIooH,EAAY,EACZxnD,EAAY,G,cAGdriE,EAAQ8pH,MAAR,mEAA0ED,EAA1E,Q,SACqBxrH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,2BAA4B,CAC3FlH,UAAW,IACXpM,MAAO,IACPg+E,KAAMW,IACL,G,OAMH,IAVIz1B,E,OAOAu1B,EAAa,G,6BAGjB,EAAcv1B,EAASg1B,OAAvB,+CAASh0G,EAAsB,QAC7BitD,EAAU5+D,KAAK2R,EAAEjX,IACjBwrH,EAAWlmH,KAAK,IAAIvF,IAAW,QAASkX,EAAEjX,GAAIiX,I,0OAIhD,I,6BAAA,EAAcg/E,EAASpgD,MAAvB,+CAASn0C,EAAqB,QAC5BwiE,EAAU5+D,KAAK5D,EAAE1B,IACjBwrH,EAAWlmH,KAAK,IAAIvF,IAAW,OAAQ2B,EAAE1B,GAAI0B,I,0OAI/C,I,6BAAA,EAAcu0F,EAAS7rF,QAAvB,+CAAS/I,EAAuB,QAC9B6iE,EAAU5+D,KAAKjE,EAAE3E,MACjB8uH,EAAWlmH,KAAK,IAAIvF,IAAW,SAAUsB,EAAE3E,KAAM2E,I,6OAGnDnB,KAAK8kE,WAAWwmD,GAGhBE,GAAa,EAGa,IAAtBF,EAAWloH,O,qGAMV4gE,G,mPAIatrB,G,6FAEpB,kDAAqBA,GAEA,cAAjBA,EAAIE,S,oDAKJ8yE,EAAUhzE,EAAIhD,SAAWgD,EAAIhD,QAAQ51C,G,yCAEhC6B,EAAQW,KAAR,gFAA8Fo2C,I,UAGnGA,EAAIhD,QAAQi2E,YAAc3rH,KAAKmqH,eAAiBzxE,EAAIhD,QAAQk2E,YAAc5rH,KAAKmqH,c,iBAEjFnqH,KAAKkkE,cAAc,CAACwnD,I,2BACXhzE,EAAIhD,QAAQi2E,YAAc3rH,KAAKmqH,eAAiBzxE,EAAIhD,QAAQk2E,YAAc5rH,KAAKmqH,c,kCAGnEnqH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,qBAAsB,CAAEokB,IAAK,CAACmnD,KAAY,G,QAAvG31B,E,OAGA/8C,EAAU,GACd+8C,EAASg1B,OAAOh2G,KAAI,SAAAgC,GAAC,OAAI,IAAIlX,IAAW,QAASkX,EAAEjX,GAAIiX,MAAIrC,SAAQ,SAAAqC,GAAC,OAAIiiC,EAAQ5zC,KAAK2R,MAGrFg/E,EAASpgD,MAAM5gC,KAAI,SAAAvT,GAAC,OAAI,IAAI3B,IAAW,OAAQ2B,EAAE1B,GAAI0B,MAAIkT,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGnFu0F,EAAS7rF,QAAQ6K,KAAI,SAAA5T,GAAC,OAAI,IAAItB,IAAW,SAAUsB,EAAE3E,KAAM2E,MAAIuT,SAAQ,SAAAvT,GAAC,OAAI63C,EAAQ5zC,KAAKjE,MAEzFnB,KAAK8kE,WAAW9rB,G,wBAGhBr3C,EAAQW,KAAR,0HAAgIupH,SAAS/rH,K,2HAQjH,WAAxB4kE,IAAwB,yDAG1B,OAAIA,EACK,EAAP,sCAAiB,GAGZ,wCAAU,GAAOpwD,QAAO,SAAAyC,GAAC,OAAIA,EAAE2zB,WAAWohF,OAAS,EAAK3B,mB,8BAOxDxsH,GACP,2CAAcA,GACdqC,KAAK+rH,4BAA4BpuH,K,uCAGjBA,EAAQsgC,GACxB,oDAAuBtgC,EAAQsgC,GAC/Bj+B,KAAK+rH,4BAA4BpuH,K,sCAGlBA,EAAQ87C,EAASC,EAAUxlB,GAC1C,mDAAsBv2B,EAAQ87C,EAASC,EAAUxlB,GACjDl0B,KAAK+rH,4BAA4BpuH,K,iCAGvBg8C,GACV,8CAAiBA,GACjB35C,KAAKg5C,QAAQuyE,SAAS,OAAQ,M,kDAGJ5tH,GAG1BA,EAAOoC,KAAK42C,MAAQ,EAGpB32C,KAAKg5C,QAAQuyE,SAAS,OAAQ,M,+BAvR9B,MAAO,aAAevrH,KAAKmqH,kB,GAjBc1yE,M,gCCR7Cz7C,EAAOD,QAAU,SAASC,GAoBzB,OAnBKA,EAAOgwH,kBACXhwH,EAAOyoD,UAAY,aACnBzoD,EAAOgvB,MAAQ,GAEVhvB,EAAOiwH,WAAUjwH,EAAOiwH,SAAW,IACxCtvH,OAAOC,eAAeZ,EAAQ,SAAU,CACvCa,YAAY,EACZC,IAAK,WACJ,OAAOd,EAAOE,KAGhBS,OAAOC,eAAeZ,EAAQ,KAAM,CACnCa,YAAY,EACZC,IAAK,WACJ,OAAOd,EAAOC,KAGhBD,EAAOgwH,gBAAkB,GAEnBhwH,I,gBCpBR,MASIkwH,EAAW,WAGf,IAAI1qH,EAAI+D,OAAO0rD,aACXk7D,EAAe,oEACfC,EAAgB,oEAChBC,EAAiB,GAErB,SAASC,EAAaC,EAAUC,GAC9B,IAAKH,EAAeE,GAAW,CAC7BF,EAAeE,GAAY,GAC3B,IAAK,IAAItwH,EAAE,EAAIA,EAAEswH,EAASnpH,OAASnH,IACjCowH,EAAeE,GAAUA,EAAS3xF,OAAO3+B,IAAMA,EAGnD,OAAOowH,EAAeE,GAAUC,GAGlC,IAAIN,EAAW,CACbO,iBAAmB,SAAU9gG,GAC3B,GAAa,MAATA,EAAe,MAAO,GAC1B,IAAI1d,EAAMi+G,EAASQ,UAAU/gG,EAAO,GAAG,SAASxqB,GAAG,OAAOgrH,EAAavxF,OAAOz5B,MAC9E,OAAQ8M,EAAI7K,OAAS,GACrB,QACA,KAAK,EAAI,OAAO6K,EAChB,KAAK,EAAI,OAAOA,EAAI,MACpB,KAAK,EAAI,OAAOA,EAAI,KACpB,KAAK,EAAI,OAAOA,EAAI,MAItB0+G,qBAAuB,SAAUhhG,GAC/B,OAAa,MAATA,EAAsB,GACb,IAATA,EAAoB,KACjBugG,EAASU,YAAYjhG,EAAMvoB,OAAQ,IAAI,SAAS0E,GAAS,OAAOwkH,EAAaH,EAAcxgG,EAAMiP,OAAO9yB,QAGjH+kH,gBAAkB,SAAUlhG,GAC1B,OAAa,MAATA,EAAsB,GACnBugG,EAASQ,UAAU/gG,EAAO,IAAI,SAASxqB,GAAG,OAAOK,EAAEL,EAAE,OAAS,KAGvE2rH,oBAAqB,SAAUC,GAC7B,OAAkB,MAAdA,EAA2B,GACb,IAAdA,EAAyB,KACtBb,EAASU,YAAYG,EAAW3pH,OAAQ,OAAO,SAAS0E,GAAS,OAAOilH,EAAW/rF,WAAWl5B,GAAS,OAIhHklH,qBAAsB,SAAUC,GAI9B,IAHA,IAAIF,EAAab,EAASgB,SAASD,GAC/BxrD,EAAI,IAAI7xD,WAA6B,EAAlBm9G,EAAW3pH,QAEzBnH,EAAE,EAAGkxH,EAASJ,EAAW3pH,OAAQnH,EAAEkxH,EAAUlxH,IAAK,CACzD,IAAImxH,EAAgBL,EAAW/rF,WAAW/kC,GAC1CwlE,EAAM,EAAFxlE,GAAOmxH,IAAkB,EAC7B3rD,EAAM,EAAFxlE,EAAI,GAAKmxH,EAAgB,IAE/B,OAAO3rD,GAIT4rD,yBAAyB,SAAUN,GACjC,GAAIA,QACA,OAAOb,EAASoB,WAAWP,GAG3B,IADA,IAAItrD,EAAI,IAAIz/D,MAAM+qH,EAAW3pH,OAAO,GAC3BnH,EAAE,EAAGkxH,EAAS1rD,EAAIr+D,OAAQnH,EAAEkxH,EAAUlxH,IAC7CwlE,EAAIxlE,GAAmB,IAAhB8wH,EAAa,EAAF9wH,GAAS8wH,EAAa,EAAF9wH,EAAI,GAG5C,IAAIiS,EAAS,GAIb,OAHAuzD,EAAI/sD,SAAQ,SAAUpY,GACpB4R,EAAO9I,KAAK5D,EAAElF,OAET4vH,EAASoB,WAAWp/G,EAAOnF,KAAK,MAQ7CwkH,8BAA+B,SAAU5hG,GACvC,OAAa,MAATA,EAAsB,GACnBugG,EAASQ,UAAU/gG,EAAO,GAAG,SAASxqB,GAAG,OAAOirH,EAAcxxF,OAAOz5B,OAI9EqsH,kCAAkC,SAAU7hG,GAC1C,OAAa,MAATA,EAAsB,GACb,IAATA,EAAoB,MACxBA,EAAQA,EAAMpiB,QAAQ,KAAM,KACrB2iH,EAASU,YAAYjhG,EAAMvoB,OAAQ,IAAI,SAAS0E,GAAS,OAAOwkH,EAAaF,EAAezgG,EAAMiP,OAAO9yB,SAGlHolH,SAAU,SAAUD,GAClB,OAAOf,EAASQ,UAAUO,EAAc,IAAI,SAAS9rH,GAAG,OAAOK,EAAEL,OAEnEurH,UAAW,SAAUO,EAAcQ,EAAaC,GAC9C,GAAoB,MAAhBT,EAAsB,MAAO,GACjC,IAAIhxH,EAAGiB,EAYHywH,EAXAC,EAAoB,GACpBC,EAA4B,GAC5BC,EAAU,GACVC,EAAW,GACXC,EAAU,GACVC,EAAmB,EACnBC,EAAkB,EAClBC,EAAiB,EACjBC,EAAa,GACbC,EAAiB,EACjBC,EAAsB,EAG1B,IAAKX,EAAK,EAAGA,EAAKV,EAAa7pH,OAAQuqH,GAAM,EAQ3C,GAPAG,EAAYb,EAAaryF,OAAO+yF,GAC3BhxH,OAAOkB,UAAUC,eAAe1B,KAAKwxH,EAAmBE,KAC3DF,EAAmBE,GAAaI,IAChCL,EAA2BC,IAAa,GAG1CC,EAAaC,EAAYF,EACrBnxH,OAAOkB,UAAUC,eAAe1B,KAAKwxH,EAAmBG,GAC1DC,EAAYD,MACP,CACL,GAAIpxH,OAAOkB,UAAUC,eAAe1B,KAAKyxH,EAA2BG,GAAY,CAC9E,GAAIA,EAAUhtF,WAAW,GAAG,IAAK,CAC/B,IAAK/kC,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,IAAwC,EACpCC,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAIJ,IADApxH,EAAQ8wH,EAAUhtF,WAAW,GACxB/kC,EAAE,EAAIA,EAAE,EAAIA,IACfoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,MAEd,CAEL,IADAA,EAAQ,EACHjB,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,EAAoBA,GAAoB,EAAKnxH,EACzCoxH,GAAwBb,EAAY,GACtCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,EAAQ,EAGV,IADAA,EAAQ8wH,EAAUhtF,WAAW,GACxB/kC,EAAE,EAAIA,EAAE,GAAKA,IAChBoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,EAII,KADzB+wH,IAEEA,EAAoB7tH,KAAK+2D,IAAI,EAAGg3D,GAChCA,YAEKN,EAA2BG,QAGlC,IADA9wH,EAAQ0wH,EAAmBI,GACtB/xH,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,EAMI,KADzB+wH,IAEEA,EAAoB7tH,KAAK+2D,IAAI,EAAGg3D,GAChCA,KAGFP,EAAmBG,GAAcG,IACjCF,EAAYzoH,OAAOuoH,GAKvB,GAAkB,KAAdE,EAAkB,CACpB,GAAIrxH,OAAOkB,UAAUC,eAAe1B,KAAKyxH,EAA2BG,GAAY,CAC9E,GAAIA,EAAUhtF,WAAW,GAAG,IAAK,CAC/B,IAAK/kC,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,IAAwC,EACpCC,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAIJ,IADApxH,EAAQ8wH,EAAUhtF,WAAW,GACxB/kC,EAAE,EAAIA,EAAE,EAAIA,IACfoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,MAEd,CAEL,IADAA,EAAQ,EACHjB,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,EAAoBA,GAAoB,EAAKnxH,EACzCoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,EAAQ,EAGV,IADAA,EAAQ8wH,EAAUhtF,WAAW,GACxB/kC,EAAE,EAAIA,EAAE,GAAKA,IAChBoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,EAII,KADzB+wH,IAEEA,EAAoB7tH,KAAK+2D,IAAI,EAAGg3D,GAChCA,YAEKN,EAA2BG,QAGlC,IADA9wH,EAAQ0wH,EAAmBI,GACtB/xH,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,EAMI,KADzB+wH,IAEEA,EAAoB7tH,KAAK+2D,IAAI,EAAGg3D,GAChCA,KAMJ,IADAjxH,EAAQ,EACHjB,EAAE,EAAIA,EAAEkyH,EAAkBlyH,IAC7BoyH,EAAoBA,GAAoB,EAAY,EAANnxH,EAC1CoxH,GAAyBb,EAAY,GACvCa,EAAwB,EACxBF,EAAahpH,KAAKsoH,EAAeW,IACjCA,EAAmB,GAEnBC,IAEFpxH,IAAiB,EAInB,OAAa,CAEX,GADAmxH,IAAwC,EACpCC,GAAyBb,EAAY,EAAG,CAC1CW,EAAahpH,KAAKsoH,EAAeW,IACjC,MAEGC,IAEP,OAAOF,EAAarlH,KAAK,KAG3BukH,WAAY,SAAUP,GACpB,OAAkB,MAAdA,EAA2B,GACb,IAAdA,EAAyB,KACtBb,EAASU,YAAYG,EAAW3pH,OAAQ,OAAO,SAAS0E,GAAS,OAAOilH,EAAW/rF,WAAWl5B,OAGvG8kH,YAAa,SAAUxpH,EAAQmrH,EAAYC,GACzC,IAOIvyH,EACAqJ,EACAmpH,EAAMC,EAAMC,EAAUC,EACtBtyH,EAVAuyH,EAAa,GAEbC,EAAY,EACZC,EAAW,EACXC,EAAU,EACVlmG,EAAQ,GACR5a,EAAS,GAKTnO,EAAO,CAAC6I,IAAI4lH,EAAa,GAAI7mH,SAAS4mH,EAAYzmH,MAAM,GAE5D,IAAK7L,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACtB4yH,EAAW5yH,GAAKA,EAMlB,IAHAwyH,EAAO,EACPE,EAAWvuH,KAAK+2D,IAAI,EAAE,GACtBy3D,EAAM,EACCA,GAAOD,GACZD,EAAO3uH,EAAK6I,IAAM7I,EAAK4H,SACvB5H,EAAK4H,WAAa,EACG,GAAjB5H,EAAK4H,WACP5H,EAAK4H,SAAW4mH,EAChBxuH,EAAK6I,IAAM4lH,EAAazuH,EAAK+H,UAE/B2mH,IAASC,EAAK,EAAI,EAAI,GAAKE,EAC3BA,IAAU,EAGZ,OAAeH,GACb,KAAK,EAID,IAHAA,EAAO,EACPE,EAAWvuH,KAAK+2D,IAAI,EAAE,GACtBy3D,EAAM,EACCA,GAAOD,GACZD,EAAO3uH,EAAK6I,IAAM7I,EAAK4H,SACvB5H,EAAK4H,WAAa,EACG,GAAjB5H,EAAK4H,WACP5H,EAAK4H,SAAW4mH,EAChBxuH,EAAK6I,IAAM4lH,EAAazuH,EAAK+H,UAE/B2mH,IAASC,EAAK,EAAI,EAAI,GAAKE,EAC3BA,IAAU,EAEdtyH,EAAIkF,EAAEitH,GACN,MACF,KAAK,EAID,IAHAA,EAAO,EACPE,EAAWvuH,KAAK+2D,IAAI,EAAE,IACtBy3D,EAAM,EACCA,GAAOD,GACZD,EAAO3uH,EAAK6I,IAAM7I,EAAK4H,SACvB5H,EAAK4H,WAAa,EACG,GAAjB5H,EAAK4H,WACP5H,EAAK4H,SAAW4mH,EAChBxuH,EAAK6I,IAAM4lH,EAAazuH,EAAK+H,UAE/B2mH,IAASC,EAAK,EAAI,EAAI,GAAKE,EAC3BA,IAAU,EAEdtyH,EAAIkF,EAAEitH,GACN,MACF,KAAK,EACH,MAAO,GAKX,IAHAI,EAAW,GAAKvyH,EAChBgJ,EAAIhJ,EACJ4R,EAAO9I,KAAK9I,KACC,CACX,GAAIyD,EAAK+H,MAAQ1E,EACf,MAAO,GAMT,IAHAqrH,EAAO,EACPE,EAAWvuH,KAAK+2D,IAAI,EAAE63D,GACtBJ,EAAM,EACCA,GAAOD,GACZD,EAAO3uH,EAAK6I,IAAM7I,EAAK4H,SACvB5H,EAAK4H,WAAa,EACG,GAAjB5H,EAAK4H,WACP5H,EAAK4H,SAAW4mH,EAChBxuH,EAAK6I,IAAM4lH,EAAazuH,EAAK+H,UAE/B2mH,IAASC,EAAK,EAAI,EAAI,GAAKE,EAC3BA,IAAU,EAGZ,OAAQtyH,EAAImyH,GACV,KAAK,EAIH,IAHAA,EAAO,EACPE,EAAWvuH,KAAK+2D,IAAI,EAAE,GACtBy3D,EAAM,EACCA,GAAOD,GACZD,EAAO3uH,EAAK6I,IAAM7I,EAAK4H,SACvB5H,EAAK4H,WAAa,EACG,GAAjB5H,EAAK4H,WACP5H,EAAK4H,SAAW4mH,EAChBxuH,EAAK6I,IAAM4lH,EAAazuH,EAAK+H,UAE/B2mH,IAASC,EAAK,EAAI,EAAI,GAAKE,EAC3BA,IAAU,EAGZC,EAAWE,KAAcvtH,EAAEitH,GAC3BnyH,EAAIyyH,EAAS,EACbD,IACA,MACF,KAAK,EAIH,IAHAL,EAAO,EACPE,EAAWvuH,KAAK+2D,IAAI,EAAE,IACtBy3D,EAAM,EACCA,GAAOD,GACZD,EAAO3uH,EAAK6I,IAAM7I,EAAK4H,SACvB5H,EAAK4H,WAAa,EACG,GAAjB5H,EAAK4H,WACP5H,EAAK4H,SAAW4mH,EAChBxuH,EAAK6I,IAAM4lH,EAAazuH,EAAK+H,UAE/B2mH,IAASC,EAAK,EAAI,EAAI,GAAKE,EAC3BA,IAAU,EAEZC,EAAWE,KAAcvtH,EAAEitH,GAC3BnyH,EAAIyyH,EAAS,EACbD,IACA,MACF,KAAK,EACH,OAAO5gH,EAAOnF,KAAK,IAQvB,GALiB,GAAb+lH,IACFA,EAAY1uH,KAAK+2D,IAAI,EAAG63D,GACxBA,KAGEH,EAAWvyH,GACbwsB,EAAQ+lG,EAAWvyH,OACd,CACL,GAAIA,IAAMyyH,EAGR,OAAO,KAFPjmG,EAAQxjB,EAAIA,EAAEs1B,OAAO,GAKzB1sB,EAAO9I,KAAK0jB,GAGZ+lG,EAAWE,KAAczpH,EAAIwjB,EAAM8R,OAAO,GAG1Ct1B,EAAIwjB,EAEa,KAJjBgmG,IAKEA,EAAY1uH,KAAK+2D,IAAI,EAAG63D,GACxBA,QAMN,OAAO9C,EApeM,QAwe0B,KAAvC,aAAqB,OAAOA,GAAW,+B,gBCjfzC,IAQI+C,EACAC,EATAC,EAAM,EAAQ,KACdC,EAAc,EAAQ,KAWtBC,EAAa,EACbC,EAAa,EA+FjBtzH,EAAOD,QA5FP,SAAY4nC,EAAS89B,EAAK5uD,GACxB,IAAI5W,EAAIwlE,GAAO5uD,GAAU,EACrBjG,EAAI60D,GAAO,GAGXW,GADJz+B,EAAUA,GAAW,IACFy+B,MAAQ6sD,EACvBM,OAAgC/vH,IAArBmkC,EAAQ4rF,SAAyB5rF,EAAQ4rF,SAAWL,EAKnE,GAAY,MAAR9sD,GAA4B,MAAZmtD,EAAkB,CACpC,IAAIC,EAAYL,IACJ,MAAR/sD,IAEFA,EAAO6sD,EAAU,CACA,EAAfO,EAAU,GACVA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAGtD,MAAZD,IAEFA,EAAWL,EAAiD,OAApCM,EAAU,IAAM,EAAIA,EAAU,KAQ1D,IAAIC,OAA0BjwH,IAAlBmkC,EAAQ8rF,MAAsB9rF,EAAQ8rF,OAAQ,IAAI9rG,MAAOkuF,UAIjE6d,OAA0BlwH,IAAlBmkC,EAAQ+rF,MAAsB/rF,EAAQ+rF,MAAQJ,EAAa,EAGnEK,EAAMF,EAAQJ,GAAeK,EAAQJ,GAAY,IAcrD,GAXIK,EAAK,QAA0BnwH,IAArBmkC,EAAQ4rF,WACpBA,EAAWA,EAAW,EAAI,QAKvBI,EAAK,GAAKF,EAAQJ,SAAiC7vH,IAAlBmkC,EAAQ+rF,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAIjtH,MAAM,mDAGlB4sH,EAAaI,EACbH,EAAaI,EACbR,EAAYK,EAMZ,IAAIK,GAA4B,KAAb,WAHnBH,GAAS,cAG+BC,GAAS,WACjD9iH,EAAE3Q,KAAO2zH,IAAO,GAAK,IACrBhjH,EAAE3Q,KAAO2zH,IAAO,GAAK,IACrBhjH,EAAE3Q,KAAO2zH,IAAO,EAAI,IACpBhjH,EAAE3Q,KAAY,IAAL2zH,EAGT,IAAIC,EAAOJ,EAAQ,WAAc,IAAS,UAC1C7iH,EAAE3Q,KAAO4zH,IAAQ,EAAI,IACrBjjH,EAAE3Q,KAAa,IAAN4zH,EAGTjjH,EAAE3Q,KAAO4zH,IAAQ,GAAK,GAAM,GAC5BjjH,EAAE3Q,KAAO4zH,IAAQ,GAAK,IAGtBjjH,EAAE3Q,KAAOszH,IAAa,EAAI,IAG1B3iH,EAAE3Q,KAAkB,IAAXszH,EAGT,IAAK,IAAI7xH,EAAI,EAAGA,EAAI,IAAKA,EACvBkP,EAAE3Q,EAAIyB,GAAK0kE,EAAK1kE,GAGlB,OAAO+jE,GAAY2tD,EAAYxiH,K,gBCzGjC,IAAIuiH,EAAM,EAAQ,KACdC,EAAc,EAAQ,KA2B1BpzH,EAAOD,QAzBP,SAAY4nC,EAAS89B,EAAK5uD,GACxB,IAAI5W,EAAIwlE,GAAO5uD,GAAU,EAEF,iBAAb,IACR4uD,EAAkB,WAAZ99B,EAAuB,IAAI3hC,MAAM,IAAM,KAC7C2hC,EAAU,MAIZ,IAAI49B,GAFJ59B,EAAUA,GAAW,IAEFrd,SAAWqd,EAAQwrF,KAAOA,KAO7C,GAJA5tD,EAAK,GAAgB,GAAVA,EAAK,GAAa,GAC7BA,EAAK,GAAgB,GAAVA,EAAK,GAAa,IAGzBE,EACF,IAAK,IAAIksD,EAAK,EAAGA,EAAK,KAAMA,EAC1BlsD,EAAIxlE,EAAI0xH,GAAMpsD,EAAKosD,GAIvB,OAAOlsD,GAAO2tD,EAAY7tD,K,6BCd5BvlE,EAAOD,QAAU,SAAkB0zD,EAAMZ,GAIvC,GAHAA,EAAWA,EAASnmD,MAAM,KAAK,KAC/B+mD,GAAQA,GAEG,OAAO,EAElB,OAAQZ,GACN,IAAK,OACL,IAAK,KACL,OAAgB,KAATY,EAEP,IAAK,QACL,IAAK,MACL,OAAgB,MAATA,EAEP,IAAK,MACL,OAAgB,KAATA,EAEP,IAAK,SACL,OAAgB,KAATA,EAEP,IAAK,OACL,OAAO,EAGT,OAAgB,IAATA,I,6BClCT,IAAInnD,EAAM3L,OAAOkB,UAAUC,eAU3B,SAASgyH,EAAOnkG,GACd,IACE,OAAOoiD,mBAAmBpiD,EAAMpiB,QAAQ,MAAO,MAC/C,MAAO/I,GACP,OAAO,MAoGXzE,EAAQyoD,UA1CR,SAAwB5D,EAAK9M,GAC3BA,EAASA,GAAU,GAEnB,IACI52C,EACAM,EAFAuwB,EAAQ,GASZ,IAAKvwB,IAFD,iBAAoBs2C,IAAQA,EAAS,KAE7B8M,EACV,GAAIt4C,EAAIlM,KAAKwkD,EAAKpjD,GAAM,CAkBtB,IAjBAN,EAAQ0jD,EAAIpjD,KAMGN,UAAqCgH,MAAMhH,KACxDA,EAAQ,IAGVM,EAAMszD,mBAAmBtzD,GACzBN,EAAQ4zD,mBAAmB5zD,GAMf,OAARM,GAA0B,OAAVN,EAAgB,SACpC6wB,EAAM3oB,KAAK5H,EAAK,IAAKN,GAIzB,OAAO6wB,EAAM3qB,OAAS0wC,EAAS/lB,EAAMhlB,KAAK,KAAO,IAOnDhN,EAAQ8gD,MA3ER,SAAqB2R,GAKnB,IAJA,IAEIsB,EAFAZ,EAAS,sBACThhD,EAAS,GAGN4hD,EAAOZ,EAAO3uD,KAAKiuD,IAAQ,CAChC,IAAIhxD,EAAMsyH,EAAOhgE,EAAK,IAClB5yD,EAAQ4yH,EAAOhgE,EAAK,IAUZ,OAARtyD,GAA0B,OAAVN,GAAkBM,KAAO0Q,IAC7CA,EAAO1Q,GAAON,GAGhB,OAAOgR,I,4jCClDY6hH,E,YAKnB,WAAar4E,EAAU6sB,GAAK,a,4FAAA,UAC1B,wBAAM7sB,KAGDgsB,SAAU,EAGf,EAAKa,IAAMA,EAAIhzD,OAPW,E,0RAHT,MAAO,U,mCAmBjBzR,EAAI48D,GAEX,GAAW,QAAP58D,EAAc,OAAO,EACzB,IAAK48D,GAAcA,EAAWt5D,SAAWpD,KAAKukE,IAAInhE,OAAQ,OAAO,EACjE,IAAK,IAAInH,EAAI,EAAGA,EAAI+D,KAAKukE,IAAInhE,OAAQnH,IACnC,GAAIygE,EAAWzgE,KAAO+D,KAAKukE,IAAItoE,GAC7B,OAAO,EAKX,OAAO,I,0JAMP+D,KAAKoqH,gB,SAGgBpqH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,qBAAsB,CAAEokB,IAAKvkE,KAAKukE,MAAO,G,cAAtGwxB,E,OAGA/8C,EAAU,GACd+8C,EAASg1B,OAAOh2G,KAAI,SAAAgC,GAAC,OAAI,IAAIlX,IAAW,QAASkX,EAAEjX,GAAIiX,MAAIrC,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGrFu0F,EAASpgD,MAAM5gC,KAAI,SAAAvT,GAAC,OAAI,IAAI3B,IAAW,OAAQ2B,EAAE1B,GAAI0B,MAAIkT,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGnFu0F,EAAS7rF,QAAQ6K,KAAI,SAAA5T,GAAC,OAAI,IAAItB,IAAW,SAAUsB,EAAE3E,KAAM2E,MAAIuT,SAAQ,SAAAvT,GAAC,OAAI63C,EAAQ5zC,KAAKjE,MAGzFnB,KAAK8kE,WAAW9rB,GAGhBh5C,KAAKuqH,iB,kBAGEvxE,EAAQjkC,KAAI,SAAArY,GAAC,OAAIA,EAAEoD,O,4SA3C1B,MAAO,OAASE,KAAKukE,IAAIx7D,KAAK,S,GAjBS0uC,M,okCCDtBu4E,E,YAKnB,WAAat4E,EAAUu4E,GAAU,a,4FAAA,UAC/B,wBAAMv4E,KAGDgsB,SAAU,EAGf,EAAKusD,SAAWA,EAPe,E,0RAHd,MAAO,e,mCAmBjBnwH,EAAI48D,GACX,MAAc,aAAP58D,GAAqB48D,IAAe18D,KAAKiwH,W,4JAMhDjwH,KAAKoqH,gBAGD10E,GAAU,IAAI+I,KAAWyxE,SAASzxE,IAASgD,cAAezhD,KAAKiwH,UAAU7vE,a,SACxDpgD,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,kBAAmBzK,GAAS,G,cAAzFqgD,E,OAGA/8C,EAAU,GACd+8C,EAASz1C,QAAQvrC,KAAI,SAAAgC,GAAC,OAAI,IAAIlX,IAAW,QAASkX,EAAEjX,GAAIiX,MAAIrC,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGtFu0F,EAASpgD,MAAM5gC,KAAI,SAAAvT,GAAC,OAAI,IAAI3B,IAAW,OAAQ2B,EAAE1B,GAAI0B,MAAIkT,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGnFu0F,EAAS7rF,QAAQ6K,KAAI,SAAA5T,GAAC,OAAI,IAAItB,IAAW,SAAUsB,EAAE3E,KAAM2E,MAAIuT,SAAQ,SAAAvT,GAAC,OAAI63C,EAAQ5zC,KAAKjE,MAGzFnB,KAAK8kE,WAAW9rB,GAGhBh5C,KAAKuqH,iB,kBAGEvxE,EAAQjkC,KAAI,SAAArY,GAAC,OAAIA,EAAEoD,O,4SAlC1B,MAAO,YAAcE,KAAKiwH,a,GAjBmBx4E,M,q/CCF5B04E,E,YAKnB,WAAaz4E,EAAU04E,GAAa,MAMlC,G,4FANkC,UAClC,E,qEAAA,qBAAM14E,KAEDgsB,SAAU,IAGV0sD,GAAgBA,EAAYC,WAAcD,EAAYC,UAAUC,KAAQF,EAAYC,UAAUE,KAAQH,EAAYI,aAAgBJ,EAAYI,YAAYF,KAAQF,EAAYI,YAAYD,KAC7L,MAAM,IAAI9tH,MAAM,sFAPgB,OAWlC,EAAK2tH,YAAcA,EAGnB,EAAKK,oBAGL,EAAKC,gBAAkB,EAAKA,gBAAgBjzH,KAArB,MACvB,EAAKs6C,OAAOI,iBAAiB,YAAa,EAAKu4E,iBAlBb,E,0RAHjB,MAAO,a,mCA0BxB,0CAGA1wH,KAAK+3C,OAAOQ,oBAAoB,YAAav4C,KAAK0wH,mB,wCAKlD1wH,KAAKywH,sB,0CAOL,GAAKzwH,KAAK+3C,OAAO44E,OAAjB,CAIA,IAUI1gB,EAAM,CACRnwG,GAAI,IACJmB,QAAS,IACT1C,KAAM,UACN0xG,IAAK,UACLv6D,QAAS,CACPk7E,SAhBU,CACZN,IAAKlwH,KAAK6lB,IAAIjmB,KAAKowH,YAAYC,UAAUC,IAAKtwH,KAAKowH,YAAYI,YAAYF,KAC3EC,IAAKnwH,KAAKY,IAAIhB,KAAKowH,YAAYC,UAAUE,IAAKvwH,KAAKowH,YAAYI,YAAYD,MAezEM,aAbc,CAChBP,IAAKlwH,KAAKY,IAAIhB,KAAKowH,YAAYC,UAAUC,IAAKtwH,KAAKowH,YAAYI,YAAYF,KAC3EC,IAAKnwH,KAAK6lB,IAAIjmB,KAAKowH,YAAYC,UAAUE,IAAKvwH,KAAKowH,YAAYI,YAAYD,QAgB7E5uH,EAAQQ,IAAI,uBAAyBy6C,KAAK4H,UAAUyrD,IACpDjwG,KAAK03C,SAASM,OAAOC,WAAW64E,YAAY7gB,M,0BASvCnwG,GACH,IAAI,EAAD,qCAAWA,GACZ,OAAO,EAEX,IAAInC,EAASqC,KAAKg5C,QAAQl8C,IAAIgD,GAG9B,SAAInC,EAAOoC,MAAQpC,EAAOoC,KAAK,qBAAuBpC,EAAOoC,KAAK,oBAAoBgxH,eAAtF,I,8BAUOjxH,EAAI48D,GAEX,MAAW,WAAP58D,OACC48D,GAAeA,EAAW2zD,WAAc3zD,EAAW8zD,eACpD9zD,EAAW2zD,UAAUC,MAAQtwH,KAAKowH,YAAYC,UAAUC,MACxD5zD,EAAW2zD,UAAUE,MAAQvwH,KAAKowH,YAAYC,UAAUE,MACxD7zD,EAAW8zD,YAAYF,MAAQtwH,KAAKowH,YAAYI,YAAYF,KAC5D5zD,EAAW8zD,YAAYD,MAAQvwH,KAAKowH,YAAYI,YAAYD,U,8JAShEvwH,KAAKoqH,gBAED10E,EAAU,CACZ26E,UAAWrwH,KAAKowH,YAAYC,UAC5BG,YAAaxwH,KAAKowH,YAAYI,YAC9Bl8G,OAAQ,MACRu4B,MAAO,KAGL7sC,KAAKowH,YAAYY,iBACnBt7E,EAAO,eAAqB11C,KAAKowH,YAAYY,gB,SAE1BhxH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,wBAAyBzK,GAAS,G,cAA/FqgD,E,OAGA/8C,EAAU,GACd+8C,EAASg1B,OAAOh2G,KAAI,SAAAgC,GAAC,OAAI,IAAIlX,IAAW,QAASkX,EAAEjX,GAAIiX,MAAIrC,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGrFu0F,EAASpgD,MAAM5gC,KAAI,SAAAvT,GAAC,OAAI,IAAI3B,IAAW,OAAQ2B,EAAE1B,GAAI0B,MAAIkT,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGnFu0F,EAAS7rF,QAAQ6K,KAAI,SAAA5T,GAAC,OAAI,IAAItB,IAAW,SAAUsB,EAAE3E,KAAM2E,MAAIuT,SAAQ,SAAAvT,GAAC,OAAI63C,EAAQ5zC,KAAKjE,MAGzFnB,KAAK8kE,WAAW9rB,GAGhBh5C,KAAKuqH,iB,kBAGEvxE,EAAQjkC,KAAI,SAAArY,GAAC,OAAIA,EAAEoD,O,wJAOvBnC,GACH,OAAGqC,KAAKowH,YAAYY,gBAAkBrzH,EAAOoC,MAAQpC,EAAOoC,KAAK,qBAAuBpC,EAAOoC,KAAK,oBAAoBixH,iBAAmBhxH,KAAKowH,YAAYY,eACnJ,KAGLrzH,EAAOoC,MAAQpC,EAAOoC,KAAK,qBAAuBpC,EAAOoC,KAAK,oBAAoBgxH,QACpF,uCAAiBpzH,GAGZ,O,qEAUY+6C,G,sGACnB,kDAAqBA,GAGA,QAAjBA,EAAIE,UAAyC,QAAnBF,EAAIhD,QAAQu7E,G,wBAGpCj4E,EAAU,G,SACOh5C,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,qBAAsB,CAAEokB,IAAK,CAAC7rB,EAAIhD,QAAQw7E,YAAa,G,cAApHn7B,E,OACAo1B,EAAQ,IAAItrH,IAAW,QAASk2F,EAASg1B,OAAO,GAAGjrH,GAAIi2F,EAASg1B,OAAO,IAC3E/xE,EAAQ5zC,KAAK+lH,GACbp1B,EAASpgD,MAAM5gC,KAAI,SAAAvT,GAAC,OAAI,IAAI3B,IAAW,OAAQ2B,EAAE1B,GAAI0B,MAAIkT,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MACnFu0F,EAAS7rF,QAAQ6K,KAAI,SAAA5T,GAAC,OAAI,IAAItB,IAAW,SAAUsB,EAAE3E,KAAM2E,MAAIuT,SAAQ,SAAAvT,GAAC,OAAI63C,EAAQ5zC,KAAKjE,MACzFnB,KAAK8kE,WAAW9rB,G,8BAGU,QAAjBN,EAAIE,UAAyC,WAAnBF,EAAIhD,QAAQu7E,G,wBAG/CjxH,KAAKmxH,iBAAiBz4E,EAAIhD,QAAQw7E,SAAU,4BAA4B,G,8BAG/C,gBAAhBx4E,EAAIE,S,oBAGT8yE,EAAUhzE,EAAIhD,SAAWgD,EAAIhD,QAAQ51C,G,uBAEjC,IAAI2C,MAAJ,iD,WAIMi2C,EAAIhD,QAAQmD,YAAcH,EAAIhD,QAAQmD,WAAW,qBAAuBH,EAAIhD,QAAQmD,WAAW,oBAAoBk4E,Q,uDAM7H/wH,KAAKg5C,QAAQl8C,IAAI4uH,G,mDAKrB1rH,KAAKoqH,gBAGLpqH,KAAK03C,SAASM,OAAOkI,OAAOC,QAAQ,OAAQ,qBAAsB,CAAEokB,IAAK,CAACmnD,KAAY,GAAMrrE,MAAK,SAAA01C,GAE/F,IAAI/8C,EAAU,GACdA,EAAQ5zC,KAAK,IAAIvF,IAAW,QAASk2F,EAASg1B,OAAO,GAAGjrH,GAAIi2F,EAASg1B,OAAO,KAG5Eh1B,EAASpgD,MAAM5gC,KAAI,SAAAvT,GAAC,OAAI,IAAI3B,IAAW,OAAQ2B,EAAE1B,GAAI0B,MAAIkT,SAAQ,SAAAlT,GAAC,OAAIw3C,EAAQ5zC,KAAK5D,MAGnFu0F,EAAS7rF,QAAQ6K,KAAI,SAAA5T,GAAC,OAAI,IAAItB,IAAW,SAAUsB,EAAE3E,KAAM2E,MAAIuT,SAAQ,SAAAvT,GAAC,OAAI63C,EAAQ5zC,KAAKjE,MAGzF,EAAK2jE,WAAW9rB,MAZlB,OAaS,SAAAr2C,GAEPhB,EAAQW,KAAK,uFAAyFK,EAAIC,YACzGy9C,MAAK,SAAA7/C,GAEN,EAAK+pH,oB,8HA5IT,MAAO,UAAYvqH,KAAKowH,YAAYC,UAAUC,IAAM,IAAMtwH,KAAKowH,YAAYC,UAAUE,IAAM,IAAMvwH,KAAKowH,YAAYI,YAAYF,IAAM,IAAMtwH,KAAKowH,YAAYI,YAAYD,Q,GA5FjI94E,M,kCCV1C,IAAIk3B,EAAO,EAAQ,KAYnB3yE,EAAOD,QAAU,SAASuoD,GACxB,IAAI8B,EAAS9B,EAAI/6C,QAAQ,KAAM,KAAKA,QAAQ,KAAM,KAClD,OAAQ68C,EAAOhjD,OAAS,GACtB,KAAK,EACH,MACF,KAAK,EACHgjD,GAAU,KACV,MACF,KAAK,EACHA,GAAU,IACV,MACF,QACE,KAAM,4BAGV,IACE,OA1BJ,SAA0B9B,GACxB,OAAOypB,mBAAmBY,EAAKrqB,GAAK/6C,QAAQ,QAAQ,SAAUlN,EAAG0B,GAC/D,IAAI4wF,EAAO5wF,EAAEijC,WAAW,GAAG7yB,SAAS,IAAIm6B,cAIxC,OAHIqmD,EAAKvrF,OAAS,IAChBurF,EAAO,IAAMA,GAER,IAAMA,MAoBNyiC,CAAiBhrE,GACxB,MAAOzjD,GACP,OAAOgsE,EAAKvoB,M,cCvBhB,SAASirE,EAAsBzuH,GAC7B5C,KAAK4C,QAAUA,EAGjByuH,EAAsBxzH,UAAY,IAAI4E,MACtC4uH,EAAsBxzH,UAAUrB,KAAO,wBAyBvCR,EAAOD,QAA4B,oBAAXoE,QAA0BA,OAAOwuE,MAAQxuE,OAAOwuE,KAAKlxE,KAAK0C,SAvBlF,SAAmBwrB,GACjB,IAAI24B,EAAM/+C,OAAOomB,GAAOpiB,QAAQ,MAAO,IACvC,GAAI+6C,EAAIlhD,OAAS,GAAK,EACpB,MAAM,IAAIiuH,EAAsB,qEAElC,IAEE,IAAYC,EAAI7+G,EAAZ8+G,EAAK,EAAetrE,EAAM,EAAGG,EAAS,GAE1C3zC,EAAS6xC,EAAI1pB,OAAOqrB,MAEnBxzC,IAAW6+G,EAAKC,EAAK,EAAS,GAALD,EAAU7+G,EAASA,EAG3C8+G,IAAO,GAAKnrE,GAAU7gD,OAAO0rD,aAAa,IAAMqgE,KAAQ,EAAIC,EAAK,IAAM,EAGzE9+G,EA1BQ,oEA0BOkC,QAAQlC,GAEzB,OAAO2zC,I,gBCjCT,MAAMvkD,EAAS,EAAQ,IACjB2vH,EAAkB,EAAQ,KAC1BC,EAAe,EAAQ,KACvBxuD,EAAiB,EAAQ,KACzB9gE,EAAM,EAAQ,KAEpBnG,EAAOD,QAAU8F,EACjB7F,EAAOD,QAAQoX,SAAWq+G,EAC1Bx1H,EAAOD,QAAQyzG,MAAQiiB,EACvBz1H,EAAOD,QAAQiJ,QAAUi+D,EACzBjnE,EAAOD,QAAQoG,IAAMA,G,gBCVrB,IAAIN,EAAS,EAAQ,KAErB7F,EAAOD,QAAU,WACb,IAAI4H,EAAO,GAAG5B,MAAM3F,KAAKiG,WAKzB,OAJAsB,EAAKyB,KAAK,CACNunD,kBAAkB,EAClBL,YAAY,IAETzqD,EAAOO,MAAMpC,KAAM2D,K,iBCR9B,kBAAmB,EAAQ,KAASuoD,aAChCC,EAAc,EAAQ,KAAyBA,YAC/CC,EAAW,EAAQ,KAEnBC,EAAc,CACdC,WAAY,aACZC,SAAU,WACVC,YAAa,cACblsB,QAAS,WA4Bb,SAASmsB,EAAe9oD,GACpB,IAAI+oD,EAAO,GACP1H,EAAO,GACX,IAAI,IAAI/oD,KAAK0H,EAAM,CACf,IAAI+C,EAAM/C,EAAK1H,GAEf,GADoByK,GAAOA,EAAIimD,iBAE3B,IAAI,IAAIC,KAAKlmD,EAAK,CACd,IAAK2lD,EAAYO,IAAU,qBAAJA,EAEnB,MAAM,IAAInqD,MAAM,gCADN,mBAAmBmqD,EAAE,MAGnC5H,EAAK4H,GAAKlmD,EAAIkmD,QAGlBF,EAAKtnD,KAAKsB,GAIlB,MAAO,CAACgmD,KAAMA,EAAM1H,KAAMA,GAG9B,SAAS6H,EAAgBC,EAAWJ,EAAM1H,EAAM+H,GAC5C,IAAInqD,EAAU,GAWd,OATAA,EAAUA,EAAQmB,OAyDtB,SAAgCihD,GAC5B,IAAMA,EAAK1kB,QACP,MAAO,GAGX,IAAI19B,EAAU,CACVupD,EAAY,kBAGhB,IAAI,IAAIlwD,KAAK+oD,EAAK1kB,QACd19B,EAAQwC,KAAK8mD,EAAalH,EAAK1kB,QAAQrkC,KAK3C,OAFA2G,EAAQwC,KAAK,MAENxC,EAxEkBoqD,CAAuBhI,IAE1CiI,MACFrqD,EAAUA,EAAQmB,OAsC1B,SAAyBihD,EAAM0H,EAAMK,GACjC,GAAI/H,EAAKqH,EAAYC,aAAeI,EAAKtpD,OAAO,EAC5C,MAAO,GAQX,MAAO,CAEH+oD,EAAY,eACZY,EAAUhkD,KAAK,OAnDUmkD,CAAgBlI,EAAM0H,EAAMK,KAC7C3nD,KAAK,MAGjBxC,EAAUA,EAAQmB,OAItB,SAAgC+oD,EAAWJ,EAAM1H,GAC7C,IAAIpiD,EAAU,GAEd,IAAI+6C,GACAqH,EAAKqH,EAAYC,YAAe,UAChCtH,EAAKqH,EAAYE,WAAa,gBAC9BvH,EAAKqH,EAAYG,cAAgB,kBACjC,iBAGJ5pD,EAAQwC,KAAK+mD,EAAYxO,IAEP,IAAd+O,EAAKtpD,QACLR,EAAQwC,KAAK,gCAAgC0nD,EAAU,aAG3D,IAAI,IAAI7wD,KAAKywD,EAAM,CACf,IAAIhU,EAAMgU,EAAKzwD,GACXqoD,EAAM4H,EAAaxT,GAEvB91C,EAAQwC,KAAKk/C,GAGbU,EAAK1kB,UACL19B,EAAQwC,KAAK,IACbxC,EAAQwC,KAAK,oDAGjB,OAAOxC,EAhCkBuqD,CAAuBL,EAAWJ,EAAM1H,IAoErE,SAASoI,EAAWxqD,EAASoiD,EAAM+H,GAC/B,IAAIM,GAAsBrI,EAAKqH,EAAYC,YAE3C,GAAIF,IAAa,CACb,GAAIiB,EAAqB,CACrB,IAAI1qD,EAAM,IAAIF,MAEd,MADAE,EAAII,MAAQH,EAAQmG,KAAK,MACnBpG,EAEN,IAAI,IAAI1G,KAAK2G,EAASjB,EAAQmB,MAAMF,EAAQ3G,IAIhDgxD,MACII,EACAC,EAAe1qD,GAEfqH,YAAW,WACPqjD,EAAe1qD,KAChB,IAKf,SAAS0qD,EAAe1qD,GACpB,IAAI,IAAI3G,KAAK2G,EAASjB,EAAQmB,MAAMF,EAAQ3G,IAE5C,MADAwG,MAAM8qD,gBAAkBh9B,IAClB,IAAI9tB,MAGd,SAAS+qD,IACL,IAAIC,EAA4BhrD,MAAM8qD,gBACtC9qD,MAAM8qD,gBAAkBh9B,IACxB,IAAIm9B,GAAkB,IAAIjrD,OAAQM,MAClCN,MAAM8qD,gBAAkBE,EAExB,IAAIE,EAAQD,EAAgBhlD,MAAM,MAE9BklD,EAAkB,GACtB,IAAI,IAAI3xD,KAAK0xD,EAAO,CAChB,IAAI7G,EAAO6G,EAAM1xD,GACJ,UAAT6qD,KAG6C,IAA7CA,EAAKnyC,QAAQ,6BAGoB,IAAjCmyC,EAAKnyC,QAAQ,gBAKjBi5C,EAAgBxoD,KAAK0hD,IAIzB,OADgB8G,EAmBpB,SAASX,IACL,MAAyB,oBAAX9sD,OAxMlBnE,EAAOD,QAEP,SAAkB+wD,GAEd,GAAIA,EACA,OAAOA,EAIX,IAAIe,EAASpB,EAAe,GAAG1qD,MAAM3F,KAAKiG,UAAW,IACjDqqD,EAAOmB,EAAOnB,KACd1H,EAAO6I,EAAO7I,KAEd+H,EAAYS,IAGZ5qD,EAAUiqD,EAAgBC,EAAWJ,EAAM1H,EAAM+H,GAMrD,OAHAK,EAAWxqD,EAASoiD,EAAM+H,GAGnBD,K,mCCjCX,kBAAe,EAAQ,KAEvB3qD,EAAI+pD,aAAeA,EAEnBlwD,EAAOD,QAAUoG,EAKjB,SAASA,IACL,IAAI,IAAIlG,KAAKoG,UAAW,CACpB,IAAIspB,EAAQtpB,UAAUpG,GAClBqoD,EAAM4H,EAAavgC,GACvBhqB,EAAQQ,IAAImiD,IAIpB,SAAS4H,EAAavgC,GAClB,IAAI24B,EAWR,SAAiB34B,GACb,IAAMA,EACF,OAAOA,EAGX,GAAIA,EAAMphB,cAAgBvI,MACtB,OAAO2/D,EAAiBh2C,GAG5B,IACIi2C,EAAYC,EAAMl2C,GACtB,GAFkB,aAEdi2C,EAAU7/D,MAAM,EAFF,WAEiBqB,QAC/B,OAAOu+D,EAAiBh2C,GAE5B,OAAOi2C,EAzBGE,CAAQn2C,GAIlB,OAAI24B,GAAOA,EAAIlhD,OADH,IAEHkhD,EAAIviD,MAAM,EAFP,KAEiB,wBAGtBuiD,EAoBX,SAASqd,EAAiB/gB,GACtB,IAAImhB,EAYR,SAASC,EAAkB7Y,EAAI8Y,EAAe,IAC1C,KAAO9Y,aAAcxsD,QACjB,OAAOwsD,EAGX,GAAIA,aAAcpvC,OAOd,OANMovC,EAAG3T,SACL2T,EAAG3T,OAAS,WAER,MADU,YAAYqsB,EAAM1Y,GAAI,MAIjCA,EAEX,GAAIA,aAAc1pD,SAad,OAZM0pD,EAAG3T,SACL2T,EAAG3T,OAAS,WAQR,OANM2T,EAAG3sD,KAGD,cAAc2sD,EAAG3sD,KAAK,IAHd,eASjB2sD,EAGX,GAAIA,EAAG5+C,cAAgB5N,QAAUwsD,EAAG5+C,cAAgBvI,MAChD,OAAOmnD,EAGX,GAAI8Y,EAAeptD,SAASs0C,GACxB,MAAO,yBAEX8Y,EAAiB,CAAC9Y,KAAO8Y,GAEzB,IAAIC,EAAU,IAAK/Y,EAAc,YACjC,IAAI,IAAI3rD,KAAO2rD,EACX+Y,EAAQ1kE,GAAOwkE,EAAkB7Y,EAAG3rD,GAAMykE,GAE9C,OAAOC,EAvDQF,CAAkBphB,GACjC,IACI,OAAOhE,KAAK4H,UAAUud,EAAU,KAAM,GACxC,MAAMvhE,GACJ,OAAI4rD,IACW,EAAQ,IACPppD,QAAQ49C,GAEjBihB,EAAME,GAAU,IAAIvhE,EAAE,sCAkDrC,SAASqhE,EAAMM,GACX,MAAqB,iBAAVA,GAAuBA,EAAMh0D,SAGhC,GAAGg0D,EAFF,qB,+CC1Gb,MAAMuvD,EAAY,EAAQ,KACpBC,EAAuB,EAAQ,KAErC31H,EAAOD,QAAUuoD,IAChB,GAAmB,iBAARA,GAAmC,IAAfA,EAAIlhD,OAClC,OAAO,EAGRkhD,EAAMotE,EAAUptE,GAEhB,IAAIstE,EAAQ,EAEZ,IAAK,IAAI31H,EAAI,EAAGA,EAAIqoD,EAAIlhD,OAAQnH,IAAK,CACpC,MAAM0yF,EAAOrqC,EAAI02D,YAAY/+G,GAGzB0yF,GAAQ,IAASA,GAAQ,KAAQA,GAAQ,MAKzCA,GAAQ,KAASA,GAAQ,MAKzBA,EAAO,OACV1yF,IAGD21H,GAASD,EAAqBhjC,GAAQ,EAAI,IAG3C,OAAOijC,I,6BCjCR,MAAMC,EAAY,EAAQ,KAE1B71H,EAAOD,QAAU4vB,GAA0B,iBAAVA,EAAqBA,EAAMpiB,QAAQsoH,IAAa,IAAMlmG,G,6BCDvF3vB,EAAOD,QAAU,KAChB,MAAMwsC,EAAU,CACf,gFACA,0DACCx/B,KAAK,KAEP,OAAO,IAAIgR,OAAOwuB,EAAS,O,6BCN5BvsC,EAAOD,QAAUwoD,IACZtgD,OAAOC,MAAMqgD,KAOhBA,GAAK,OACJA,GAAK,MACC,OAANA,GACM,OAANA,GAEC,OAAUA,GAAKA,GAAK,OAAgB,QAANA,GAE9B,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OACpB,OAAUA,GAAKA,GAAK,OAEpB,QAAWA,GAAKA,GAAK,QAErB,QAAWA,GAAKA,GAAK,QAErB,QAAWA,GAAKA,GAAK,U,gBCtCzB,IAAI1iD,EAAS,EAAQ,IAErB7F,EAAOD,QAAU,WACb,IAAI4H,EAAO,GAAG5B,MAAM3F,KAAKiG,WAKzB,OAJAsB,EAAKyB,KAAK,CACNunD,kBAAkB,EAClBH,aAAa,IAEV3qD,EAAOO,MAAMpC,KAAM2D,K,gBCR9B,IAAI9B,EAAS,EAAQ,IAErB7F,EAAOD,QAAU,WACb,IAAI4H,EAAO,GAAG5B,MAAM3F,KAAKiG,WAKzB,OAJAsB,EAAKyB,KAAK,CACNunD,kBAAkB,EAClBJ,UAAU,IAEP1qD,EAAOO,MAAMpC,KAAM2D,K,gBCR9B,IAAI9B,EAAS,EAAQ,IAErB7F,EAAOD,QAAU,WACb,IAAI4H,EAAO,GAAG5B,MAAM3F,KAAKiG,WAKzB,OAJAsB,EAAKyB,KAAK,CACNunD,kBAAkB,EAClBL,YAAY,IAETzqD,EAAOO,MAAMpC,KAAM2D,K,8xECATmuH,E,WACnB,c,4FAAe,SAEb9xH,KAAK+xH,QAAU,CACbpzG,EAAQ,KAAR,QACAA,EAAQ,KAAR,QACAA,EAAQ,KAAR,QACAA,EAAQ,KAAR,SAIF3e,KAAK4yD,QAAU,GAGf5yD,KAAKkqH,YAAc,G,sDASbpqH,EAAI48D,GAEV,IAAInJ,EAASvzD,KAAK4yD,QAAQr+C,MAAK,SAAAxX,GAAC,OAAIA,EAAE8uC,QAAQ/rC,EAAI48D,MAClD,GAAInJ,EACF,OAAOA,EAGT,IAAI3Z,EAAS55C,KAAK+xH,QAAQx9G,MAAK,SAAAxW,GAAC,OAAIA,EAAE+B,KAAOA,KAC7C,IAAK85C,EACH,MAAM,IAAIn3C,MAAJ,0BAA6B3C,EAA7B,iBAOR,OAJAyzD,EAAS,IAAI3Z,EAAO55C,KAAM08D,GAC1B18D,KAAK4yD,QAAQxtD,KAAKmuD,GAGXA,I,mCAIKA,GACZ,IAAK,IAAIt3D,EAAI,EAAGA,EAAI+D,KAAK4yD,QAAQxvD,OAAQnH,IACvC,GAAI+D,KAAK4yD,QAAQ32D,KAAOs3D,EACtB,OAAOvzD,KAAK4yD,QAAQ/tC,OAAO5oB,EAAG,K,qCAQpBwoE,GAEdzkE,KAAKkqH,YAAczlD,EAFC,2BAKpB,YAAczkE,KAAK4yD,QAAnB,+CAA4B,QACxBo/D,qBAAqBvtD,GANL,wF,oOChDH0qC,E,WACnB,WAAavF,EAAShpG,I,4FAAO,SAC3BZ,KAAK4pG,QAAUA,EACf5pG,KAAKY,MAAQA,E,wDAQLipG,GACR,OAAO7pG,KAAK4pG,QAAQqoB,SAASpoB,K,4BAUxBptD,EAAO2tD,EAAWv6C,GACvB,OAAO7vD,KAAK4pG,QAAQsoB,MAAMz1E,EAAO2tD,EAAWv6C,K,iCASlCnN,GACV,OAAO1iD,KAAK4pG,QAAQuoB,WAAWzvE,K,+BAON,IAAnB8nD,EAAmB,wDACzB,OAAOxqG,KAAK4pG,QAAQwF,OAAO5E,K,wCAU3B,OAAOxqG,KAAK4pG,QAAQwoB,oB,uCAQpB,OAAOpyH,KAAK4pG,QAAQiC,mB,6CAQpB,OAAO7rG,KAAK4pG,QAAQyoB,kB,mCAQRC,GACZ,OAAOtyH,KAAK4pG,QAAQ2oB,aAAaD,K,iCAQvB58E,GACV,OAAO11C,KAAK4pG,QAAQ4oB,WAAW98E,K,uCAQ/B,OAAO11C,KAAK4pG,QAAQ6oB,mB,0CAODljE,GACnB,OAAOvvD,KAAK4pG,QAAQ8oB,oBAAoBnjE,K,4CASnB9S,EAAO2tD,GAC5B,OAAOpqG,KAAK4pG,QAAQ+oB,sBAAsBl2E,EAAO2tD,K,wCAIjD,OAAOpqG,KAAK4pG,QAAQgpB,oB,sCAGLn2E,GACf,OAAOz8C,KAAK4pG,QAAQgC,gBAAgBnvD,K,sCASrBo2E,GACf,OAAO7yH,KAAK4pG,QAAQkpB,gBAAgBD,K,mCAQxBn9E,GACZ,OAAO11C,KAAK4pG,QAAQmpB,aAAar9E,K,sCAOlBs9E,GACf,OAAOhzH,KAAK4pG,QAAQqpB,gBAAgBD,K,sCAQrBjoB,GACf,OAAO/qG,KAAK4pG,QAAQspB,gBAAgBnoB,K,sCAIpC,OAAO/qG,KAAK4pG,QAAQupB,kB,oCASP12E,EAAO2tD,GACpB,OAAOpqG,KAAK4pG,QAAQwpB,cAAc32E,EAAO2tD,K,2CAQrBF,GACpB,OAAOlqG,KAAK4pG,QAAQypB,qBAAqBnpB,K,oCAG5Bx0D,GACb,OAAO11C,KAAK4pG,QAAQ0pB,cAAc59E,K,iCASlC,IAAK11C,KAAKY,MAAMopG,cACd,OAAO,EAET,IAEIsF,EACItG,EAAiBhpG,KAAKY,MAAtBooG,aAER,IAAKA,EACH,OAAO,EAET,IAME,OAHAsG,EAAqC,IADtBvG,IAAUC,GACMrqG,IACrBglB,KAAK7hB,MAEGwtG,EAAiB,IACnC,MAAO9uG,GAEP,OAAO,Q,2NCrNQ+yH,E,WACnB,WAAarzE,I,4FAAQ,SACnBlgD,KAAKkgD,OAASA,E,0DAGJszE,GACV,OAAOxzH,KAAKkgD,OAAOC,QAAQ,MAApB,2BAA+CqzE,GAAc,IAAI,GACrEnzE,MAAK,SAACtgD,GAGL,IAFA,IAAMoH,EAAMpH,EAAKqD,OACX8G,EAAU,GACPjO,EAAI,EAAGA,EAAIkL,GAAM,CACxB,IAAMgD,EAASpK,EAAK9D,GAAGO,KAAKkM,MAAM,cAClCwB,EAAQ9E,KACN,CACEquH,YAAatpH,EAAO,GACpBA,OAAQA,EAAO,KAGnBlO,GAAK,EAEP,OAAOiO,O,oCAIEC,EAAQurC,GACrB,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAApB,gCAAqDh2C,GAAUurC,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAIA,EAAK+uG,KAAK1oD,Y,uCAG5F1Q,GAChB,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAAQ,2BAA4BzK,GAAS,GAAM2K,MAAK,SAACtgD,GAAS,IACnFmK,EAA2BnK,EAA3BmK,QAASyrC,EAAkB51C,EAAlB41C,MAAOo1E,EAAWhrH,EAAXgrH,OAElBxqE,EAAe,GACfC,EAAa,GACbC,EAAc,GALuE,uBAO3F,YAAcv2C,EAAd,+CAAuB,KAAd/I,EAAc,QACfu/C,EAAQv/C,EAAE3E,KAAKkM,MAAM,cACrBi4C,EAAOD,EAAM,GACnBH,EAAan7C,KAAK,CAChB6sC,SAAU0O,EACVx2C,OAAQu2C,EAAM,GACdtJ,KAAMj2C,EAAEi2C,KACR1M,WAAYvpC,EAAEupC,cAdyE,6GAkB3F,YAAciL,EAAd,+CAAqB,KAAZn0C,EAAY,QACnBg/C,EAAWp7C,KAAK,CACd6sC,SAAUzwC,EAAEywC,SACZnyC,GAAI0B,EAAE1B,GACNs3C,KAAM51C,EAAE41C,KACR1M,WAAYlpC,EAAEkpC,cAvByE,6GA2B3F,IA3B2F,IA2B3F,EA3B2F,iBA2BlF3zB,EA3BkF,QA4BjFk7B,EAAal7B,EAAE,oBAAfk7B,SACR,GAAiB,+BAAbA,EAA2C,CAC7C,IAAM2O,EAAM,IAAInL,IAAM1+B,EAAGypC,EAAWlsC,QAAO,SAAA9S,GAAC,OAAIA,EAAEywC,WAAaA,KAAWsO,EAAajsC,QAAO,SAAAnT,GAAC,OAAIA,EAAE8wC,WAAaA,MAClHwO,EAAYr7C,KAAKw7C,KAJrB,EAAcmqE,EAAd,+CAAsB,IA3BqE,kFAkC3F,OAAOtqE,O,oCAII/K,GACb,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAAQ,qBAAsBzK,GAAS,GAAM2K,MAAK,SAACtgD,GAAS,IAC7EmK,EAA2BnK,EAA3BmK,QAASyrC,EAAkB51C,EAAlB41C,MAAOo1E,EAAWhrH,EAAXgrH,OAElBxqE,EAAe,GACfC,EAAa,GACbC,EAAc,GALiE,uBAOrF,YAAcv2C,EAAd,+CAAuB,KAAd/I,EAAc,QACfu/C,EAAQv/C,EAAE3E,KAAKkM,MAAM,cACrBi4C,EAAOD,EAAM,GACnBH,EAAan7C,KAAK,CAChB6sC,SAAU0O,EACVx2C,OAAQu2C,EAAM,GACdtJ,KAAMj2C,EAAEi2C,KACR1M,WAAYvpC,EAAEupC,cAdmE,6GAkBrF,YAAciL,EAAd,+CAAqB,KAAZn0C,EAAY,QACnBg/C,EAAWp7C,KAAK,CACd6sC,SAAUzwC,EAAEywC,SACZnyC,GAAI0B,EAAE1B,GACNs3C,KAAM51C,EAAE41C,KACR1M,WAAYlpC,EAAEkpC,cAvBmE,6GA2BrF,IA3BqF,IA2BrF,EA3BqF,iBA2B5E3zB,EA3B4E,QA4B3Ek7B,EAAal7B,EAAE,oBAAfk7B,SACF2O,EAAM,IAAInL,IAAM1+B,EAAGypC,EAAWlsC,QAAO,SAAA9S,GAAC,OAAIA,EAAEywC,WAAaA,KAAWsO,EAAajsC,QAAO,SAAAnT,GAAC,OAAIA,EAAE8wC,WAAaA,MAClHwO,EAAYr7C,KAAKw7C,IAHnB,EAAcmqE,EAAd,+CAAsB,IA3B+D,kFAgCrF,OAAOtqE,O,kCAIE/K,GACX,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAAQ,wBAAyBzK,GAAS,GAAM2K,MAAK,SAACtgD,GAAS,IAChFmK,EAA2BnK,EAA3BmK,QAASyrC,EAAkB51C,EAAlB41C,MAAOo1E,EAAWhrH,EAAXgrH,OAElBxqE,EAAe,GACfC,EAAa,GACbC,EAAc,GALoE,uBAOxF,YAAcv2C,EAAd,+CAAuB,KAAd/I,EAAc,QACfu/C,EAAQv/C,EAAE3E,KAAKkM,MAAM,cACrBi4C,EAAOD,EAAM,GACnBH,EAAan7C,KAAK,CAChB6sC,SAAU0O,EACVx2C,OAAQu2C,EAAM,GACdtJ,KAAMj2C,EAAEi2C,KACR1M,WAAYvpC,EAAEupC,cAdsE,6GAkBxF,YAAciL,EAAd,+CAAqB,KAAZn0C,EAAY,QACnBg/C,EAAWp7C,KAAK,CACd6sC,SAAUzwC,EAAEywC,SACZnyC,GAAI0B,EAAE1B,GACNs3C,KAAM51C,EAAE41C,KACR1M,WAAYlpC,EAAEkpC,cAvBsE,6GA2BxF,IA3BwF,IA2BxF,EA3BwF,iBA2B/E3zB,EA3B+E,QA4B9Ek7B,EAAal7B,EAAE,oBAAfk7B,SACF2O,EAAM,IAAInL,IAAM1+B,EAAGypC,EAAWlsC,QAAO,SAAA9S,GAAC,OAAIA,EAAEywC,WAAaA,KAAWsO,EAAajsC,QAAO,SAAAnT,GAAC,OAAIA,EAAE8wC,WAAaA,MAClHwO,EAAYr7C,KAAKw7C,IAHnB,EAAcmqE,EAAd,+CAAsB,IA3BkE,kFAgCxF,OAAOtqE,O,wCAIQ/K,GACjB,OAAO11C,KAAKkgD,OAAOC,QAAQ,OAAQ,8BAA+BzK,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAIA,O,uCAG9EkwH,GAChB,OAAOjwH,KAAKkgD,OAAOC,QAAQ,OAAQ,qBAAsB,CACvDpB,MAAO,CACLvhD,IAAK,6BACLN,MAAO+yH,GAETyD,OAAQ,CACNn1H,KAAM,IACN0hD,OAAQ,MAET,GAAMI,MAAK,SAAAtgD,GAAQ,IACZmK,EAA4BnK,EAA5BmK,QAASyrC,EAAmB51C,EAAnB41C,MACXo1E,EAD8BhrH,EAAZugD,QAGlBC,EAAe,GACfC,EAAa,GACbC,EAAc,GANA,uBAQpB,YAAcv2C,EAAd,+CAAuB,KAAd/I,EAAc,QACfu/C,EAAQv/C,EAAE3E,KAAKkM,MAAM,cACrBi4C,EAAOD,EAAM,GACnBH,EAAan7C,KAAK,CAChB6sC,SAAU0O,EACVx2C,OAAQu2C,EAAM,GACdtJ,KAAMj2C,EAAEi2C,KACR1M,WAAYvpC,EAAEupC,cAfE,6GAmBpB,YAAciL,EAAd,+CAAqB,KAAZn0C,EAAY,QACnBg/C,EAAWp7C,KAAK,CACd6sC,SAAUzwC,EAAEywC,SACZnyC,GAAI0B,EAAE1B,GACNs3C,KAAM51C,EAAE41C,KACR1M,WAAYlpC,EAAEkpC,cAxBE,6GA4BpB,IA5BoB,IA4BpB,EA5BoB,iBA4BX3zB,EA5BW,QA6BVk7B,EAAal7B,EAAE,oBAAfk7B,SACF2O,EAAM,IAAInL,IAAM1+B,EAAGypC,EAAWlsC,QAAO,SAAA9S,GAAC,OAAIA,EAAEywC,WAAaA,KAAWsO,EAAajsC,QAAO,SAAAnT,GAAC,OAAIA,EAAE8wC,WAAaA,MAClHwO,EAAYr7C,KAAKw7C,IAHnB,EAAcmqE,EAAd,+CAAsB,IA5BF,kFAiCpB,OAAOtqE,O,gCAIA/K,GACT,OAAO11C,KAAKkgD,OAAOC,QAAQ,QAAS,aAAczK,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAIA,O,iCAGpE2rH,GACV,IAAMh2E,EAAU,CACd,UAAWg2E,GAEb,OAAO1rH,KAAKkgD,OAAOC,QAAQ,OAAQ,uBAAwBzK,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAIA,U,mUCxMtE4zH,E,WACnB,WAAahhE,I,4FAAQ,SACnB3yD,KAAKg4C,OAAS2a,EACd3yD,KAAK4zH,SAAW,IAAIL,EAAS5gE,EAAOzS,Q,8DAS1BszE,GACV,OAAOxzH,KAAK4zH,SAASC,WAAWL,K,iCAWtB7xE,GAAwC,IAAlCmyE,EAAkC,uDAArB,WAAYC,EAAS,uCAE9Cr+E,EAAU,GACd,GAAoB,iBAATiM,EAEL,sBAAsBl4C,KAAKk4C,IAExBmyE,EAAWhiF,WAAW,SACzBgiF,EAAa,MAAQA,GAIvBp+E,EAAQ,yBAA2BiM,IACH,IAAvBA,EAAKhtC,QAAQ,KACtB+gC,EAAQ,mBAAqBiM,EACE,IAAtBA,EAAKhtC,QAAQ,KACtB+gC,EAAQ,0BAA4BiM,EAEpCjM,EAAQ,gBAAkBiM,OAI5B,GAAIA,EAAKuoD,OACPx0D,EAAQ,gBAAkBiM,EAAKuoD,YAC1B,GAAIvoD,EAAKqyE,YACdt+E,EAAQ,0BAA4BiM,EAAKqyE,gBACpC,KAAIryE,EAAKsyE,MAGd,OAAOxtG,QAAQ4lB,OAAO,CAAEsiD,KAAM,oBAAqB/rF,QAAS,2HAF5D8yC,EAAQ,mBAAqBiM,EAAKsyE,MAOtC,OAAOj0H,KAAKk0H,cAAcH,EAASD,EAAYp+E,K,oCAGlCq+E,EAAS5pH,EAAQurC,GAC9B,IAAIy+E,EAAQ,GACZ,OAAQhqH,GACN,IAAK,WACHgqH,EAAM/uH,KAAKpF,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiB4C,EAAS,yBAA0B,MACxG,MAEF,IAAK,OACHI,EAAM/uH,KAAKpF,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiB4C,EAAS,2BAA4Br+E,IAC1Gy+E,EAAM/uH,KAAKpF,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiB4C,EAAS,4BAA4B,IAC1G,MAEF,IAAK,SACHI,EAAM/uH,KAAKpF,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiB4C,EAAS,4BAA4B,IAC1G,MAEF,IAAK,SACHI,EAAM/uH,KAAKpF,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiB4C,EAAS,yBAA0B,MAO5G,OAAO/zH,KAAK4zH,SAASM,cAAc/pH,EAAQxN,OAAO6pC,OAAO,CAAE,UAAWutF,GAAWr+E,IAA1E,OAA0F,SAAA/yC,GAE/F,MADAwxH,EAAMp/G,KAAI,SAAAukC,GAAC,OAAIA,OACT32C,O,kCAMGwoH,EAAOv1E,GAElB,IAAIw+E,EAAOp0H,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiBv7E,EAAW91C,GAAI,6BAA8BqrH,EAAMrrH,IAExH,OAAOE,KAAKg4C,OAAOkI,OAAOC,QAAQ,QAAS,aAAc,CAAEokB,IAAK,CAAC3uB,EAAW91C,IAAKm5C,UAAWkyE,EAAMrrH,KAAM,GAAjG,OAA6G,SAAA6C,GAGlH,MADAyxH,IACMzxH,O,4BAKHwoH,GAAO,WAERkJ,EAAclJ,EAAMzgF,WAAWuO,WAAa,IAEhD,OAAOj5C,KAAKs0H,iBAAiBnJ,EAAMrrH,IAAIugD,MAAK,SAAA4rE,GAE1C,OAAOxlG,QAAQk5C,IAAIssD,EAASl3G,KAAI,SAAAw/G,GAE9B,IAAIH,EAAO,EAAKp8E,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiBoD,EAAMz0H,GAAI,6BAA8Bu0H,GAE7G,OAAO,EAAKr8E,OAAOkI,OAAOC,QAAQ,QAAS,aAAc,CAAEokB,IAAK,CAACgwD,EAAMz0H,IAAKm5C,UAAWo7E,IAAe,GAA/F,OAA2G,SAAA1xH,GAGhH,MADAyxH,IACMzxH,c,yCAaZ,OAAO3C,KAAKg4C,OAAON,SAAS6b,OAAO,aAAaz2D,Q,kEAS7B03H,G,oGAEK,iBAAbA,IACTA,EAAW,CAACA,IAIVzJ,EAAS,G,8BACEyJ,E,yEAAN10H,E,kBACWE,KAAKg4C,OAAON,SAAS6b,OAAO,aAAaqR,QAAQ9kE,G,aAA/DqrH,E,yBAEFJ,EAAO3lH,KAAK+lH,G,oUAMZJ,EAAO3nH,SAAWoxH,EAASpxH,O,0CACtB2nH,G,iCAIF/qH,KAAKg4C,OAAON,SAAS6b,OAAO,MAAOihE,GAAU13H,O,2UAUzC23H,EAAYC,GAA6B,IAAnBpgH,EAAmB,uDAAV,SACpCohC,EAAU,CACd86E,YAAa,CACXF,IAAKmE,EAAWnE,IAChBC,IAAKkE,EAAWlE,KAElBF,UAAW,CACTC,IAAKoE,EAASpE,IACdC,IAAKmE,EAASnE,KAEhBj8G,UAGF,OAAOtU,KAAK4zH,SAASe,YAAYj/E,K,wCAahB++E,EAAYC,GAAyC,IAA/Br2F,EAA+B,uDAAnB,EAAG/pB,EAAgB,uDAAP,MACzDohC,EAAU,CACd86E,YAAa,CACXF,IAAKmE,EAAWnE,IAChBC,IAAKkE,EAAWlE,KAElBF,UAAW,CACTC,IAAKoE,EAASpE,IACdC,IAAKmE,EAASnE,KAEhBlyF,YACA/pB,UAGF,OAAOtU,KAAK4zH,SAASgB,kBAAkBl/E,K,uCAQvBu6E,GAGhB,OAAIjwH,KAAKg4C,OAAON,SAAS6b,OAAO,aAAajrD,IAAI2nH,GAGxCjwH,KAAKg4C,OAAON,SAAS6b,OAAO,aAAaz2D,MAAMujD,MAAK,SAAA4rE,GACzD,OAAOA,EAAS33G,QAAO,SAAAyC,GAAC,OAAIA,EAAE2zB,WAAWuO,YAAcg3E,QAMpDjwH,KAAK4zH,SAASU,iBAAiBrE,K,kCAI5B4E,EAASR,GAGnB,IAAID,EAAOp0H,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiB0D,EAAS,6BAA8BR,GAG5G,OAAOr0H,KAAKg4C,OAAOkI,OAAOC,QAAQ,QAAS,aAAc,CAAEokB,IAAK,CAACswD,GAAU57E,UAAWo7E,IAAe,GAA9F,OAA0G,SAAA1xH,GAI/G,MADAyxH,IACMzxH,O,gCAWC+yC,GACT,IAAIo/E,EAAgB,CAClBvwD,IAAK,CAAC7uB,EAAQ51C,IACdm5C,UAAWvD,EAAQuD,WAErB,OAAOj5C,KAAK4zH,SAASmB,UAAUD,K,iCAQrBpJ,GACV,IAAIyI,EAAQ,GAEZ,OADAA,EAAM/uH,KAAKpF,KAAKg4C,OAAON,SAAS6b,OAAO,aAAa49D,iBAAiBzF,EAAS,yBAA0B,MACjG1rH,KAAK4zH,SAASoB,WAAWtJ,GAAzB,OAAwC,SAAA/oH,GAE7C,MADAwxH,EAAMp/G,KAAI,SAAAukC,GAAC,OAAIA,OACT32C,U,0MCrRSsyH,E,WACnB,WAAaC,I,4FAAa,SACxBl1H,KAAKk1H,YAAcA,E,2DAQnB,OAAOl1H,KAAKk1H,YAAYC,Y,uCAQR34H,GAChB,OAAOwD,KAAKk1H,YAAYE,eAAe54H,K,kCAS5BsD,EAAI8C,GACf,OAAO5C,KAAKk1H,YAAYpE,YAAYhxH,EAAI8C,Q,0MC9BvByyH,E,WACnB,WAAan1E,I,4FAAQ,SACnBlgD,KAAKkgD,OAASA,E,yDAId,OAAOlgD,KAAKkgD,OAAOC,QAAQ,OAAQ,yBAA0B,IAAI,GAAME,MAAK,SAAAtgD,GAAI,OAAIA,EAAKo1H,a,qCAG3E34H,GACd,IAAMk5C,EAAU,CACdl5C,OACAqtF,OAAQ,GACRpkF,MAAO,KAET,OAAOzF,KAAKkgD,OAAOC,QAAQ,OAAQ,gCAAiCzK,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAIA,O,kCAGrFD,EAAI8C,GACf,IAAM8yC,EAAU,CACd9yC,UACA9C,MAEF,OAAOE,KAAKkgD,OAAOC,QAAQ,OAAQ,mBAAoBzK,GAAS,GAAM2K,MAAK,SAAAtgD,GAAI,OAAIA,U,82BC1BlEu1H,E,YAEjB,WAAa10H,EAAOs/C,GAAQ,a,4FAAA,UACxB,2BAEKt/C,MAAQA,EACb,EAAKs/C,OAASA,EACd,EAAKq1E,QAAU,GALS,E,iSAsBlB,WAGN,GAA2B,GAAvBv1H,KAAKu1H,QAAQnyH,OAAa,CAG1B,IAAIoyH,EAAYx1H,KAAKY,MAAM60H,iBACH,iBAAbD,IACPA,EAAY,CAACA,IALS,2BAQ1B,YAAoBA,EAApB,oDAASnnE,EAAT,QACIruD,KAAKu1H,QAAQnwH,KAAK,IAAI6yC,IAAWj4C,KAAKY,MAAOZ,KAAKkgD,OAAQmO,KATpC,6GAY1B,YAAmBruD,KAAKu1H,QAAxB,+CAAiC,KAAxBx9E,EAAwB,QAC7BA,EAAOs4D,QAAUrwG,KAAKqwG,QAAQ5yG,KAAKuC,MACnC+3C,EAAO29E,aAAe11H,KAAK01H,aAAaj4H,KAAKuC,MAC7C+3C,EAAO7yC,KAAOlF,KAAKkF,KAAKzH,KAAKuC,OAfP,mFAqB9B,OAAOymB,QAAQk5C,IAAI3/D,KAAKu1H,QAAQxgH,KAAI,SAAA/W,GAAC,OAAIA,EAAEk6C,cAAYmI,MAAK,SAAA7/C,GAAC,OAAI,O,kCAQxDyvG,GAAK,2BAGd,YAAmBjwG,KAAKu1H,QAAxB,uDACWzE,YAAY7gB,GAJT,qF,8BAaT,2BAGL,YAAmBjwG,KAAKu1H,QAAxB,uDAAwCr6E,QAHnC,kFAILl7C,KAAKu1H,QAAU,K,6BA1Df,QAASv1H,KAAKu1H,QAAQhhH,MAAK,SAAAvW,GAAC,OAAIA,EAAE2yH,e,8BAfGxsH,K,ikBCcxB6zC,E,YACnB,WAAatC,GAAS,O,4FAAA,SACpB,E,qEAAA,uBACA,IAAM5B,EAAS4B,EAAQ5B,QAAU4B,EAAQs1D,MAEzC,EAAKpqG,MAAQ,IAAIgoG,IAAM90D,GACvB,EAAKlzC,MAAMoqG,MAAQt1D,EAAQs1D,MAC3B,EAAKpqG,MAAMwtG,OAAS14D,EAAQ04D,QAAU,wBACtC,EAAKxtG,MAAM60H,iBAAmB//E,EAAQ+/E,kBAAoB,wBAE1D,EAAK/9E,SAAW,IAAIo6E,EAAJ,MAChB,EAAKp6E,SAASM,OAAd,KACA,EAAKN,SAAS8yE,cAAgB90E,EAAQ80E,cACtC,EAAKtqE,OAAS,IAAI2tD,IAAJ,MAEd,IAAM8nB,EAAU,IAAI/rB,IAAJ,MACVsrB,EAAc,IAAIG,EAAY,EAAKn1E,QAfrB,OAiBpB,EAAK+0E,SAAW,IAAIA,EAASC,GAC7B,EAAKj9E,WAAa,IAAIq9E,EAAgB,EAAK10H,MAAO,EAAKs/C,QACvD,EAAKivD,YAAc,IAAIA,EAAYwmB,EAAS,EAAK/0H,OACjD,EAAK+yH,OAAS,IAAIA,EAAJ,MAEV,EAAKxkB,YAAYymB,YACnB,EAAKl+E,SAASyyD,eAAe,CAAED,OAAQ,EAAKtpG,MAAMspG,OAAQhqD,OAAQ,EAAKA,SAvBrD,E,kPADY/7C,K,QCrBpC,mFAiBqB,oBAAVhE,SAAuBA,OAAO01H,cAAgB,CACrD50H,QAAS0d,EAAQ,KAAmB1d,a","file":"blockv-sdk.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 160);\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\r\n/**\r\n * Represents a raw data object, potentially without any data, which is monitored by a region.\r\n */\r\nexport default class DataObject {\r\n\r\n constructor(type, id, data) {\r\n\r\n /** Object type */\r\n this.type = type\r\n\r\n /** Object identifier */\r\n this.id = id\r\n\r\n /** Object revision, if any */\r\n this.rev = null\r\n\r\n /** Object payload, if any */\r\n this.data = data\r\n\r\n /** \r\n * Cached object. Plugins map this raw data object to their own types, this is used to cache\r\n * those types if there have been no changes.\r\n */\r\n this.cached = null\r\n\r\n }\r\n\r\n}","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","/*global window, global*/\nvar util = require(\"util\")\nvar assert = require(\"assert\")\nvar now = require(\"date-now\")\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n console = window.console\n} else {\n console = {}\n}\n\nvar functions = [\n [log, \"log\"],\n [info, \"info\"],\n [warn, \"warn\"],\n [error, \"error\"],\n [time, \"time\"],\n [timeEnd, \"timeEnd\"],\n [trace, \"trace\"],\n [dir, \"dir\"],\n [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n var tuple = functions[i]\n var f = tuple[0]\n var name = tuple[1]\n\n if (!console[name]) {\n console[name] = f\n }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n console.log.apply(console, arguments)\n}\n\nfunction warn() {\n console.log.apply(console, arguments)\n}\n\nfunction error() {\n console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n times[label] = now()\n}\n\nfunction timeEnd(label) {\n var time = times[label]\n if (!time) {\n throw new Error(\"No such label: \" + label)\n }\n\n var duration = now() - time\n console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n var err = new Error()\n err.name = \"Trace\"\n err.message = util.format.apply(null, arguments)\n console.error(err.stack)\n}\n\nfunction dir(object) {\n console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n if (!expression) {\n var arr = slice.call(arguments, 1)\n assert.ok(false, util.format.apply(null, arr))\n }\n}\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\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.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\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 setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","\r\n/** \r\n * This class handles executing code on the next run loop. This is the same as `setImmediate()` or `setTimeout(..., 0)` except\r\n * it doesn't create so many timers.\r\n */\r\nexport default new class Delayer {\r\n\r\n constructor() {\r\n\r\n /** List of functions to execute on the next run loop */\r\n this.pending = []\r\n\r\n /** Timer to execute pending actions */\r\n this.timer = null\r\n\r\n // Bind function\r\n this.executePendingActions = this.executePendingActions.bind(this)\r\n\r\n }\r\n\r\n /** Schedule an action */\r\n run(func) {\r\n\r\n // Add to list\r\n this.pending.push(func)\r\n\r\n // Start timer if needed\r\n if (!this.timer)\r\n this.timer = setTimeout(this.executePendingActions, 0)\r\n\r\n }\r\n\r\n /** @private Called to execute pending actions */\r\n executePendingActions() {\r\n\r\n // Remove timer\r\n this.timer = null\r\n\r\n // Perform each action\r\n let actions = this.pending\r\n this.pending = []\r\n for (let action of actions) {\r\n\r\n // Catch errors\r\n try {\r\n action()\r\n } catch (err) {\r\n console.error('Delayed action failed: ', err)\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\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","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var scriptEl = global.document.createElement('script');\n scriptEl.onreadystatechange = function () {\n nextTick();\n\n scriptEl.onreadystatechange = null;\n scriptEl.parentNode.removeChild(scriptEl);\n scriptEl = null;\n };\n global.document.documentElement.appendChild(scriptEl);\n };\n } else {\n scheduleDrain = function () {\n setTimeout(nextTick, 0);\n };\n }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n draining = true;\n var i, oldQueue;\n var len = queue.length;\n while (len) {\n oldQueue = queue;\n queue = [];\n i = -1;\n while (++i < len) {\n oldQueue[i]();\n }\n len = queue.length;\n }\n draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n if (queue.push(task) === 1 && !draining) {\n scheduleDrain();\n }\n}\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.15';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\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/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\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 */\n function 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 /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\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 */\n function 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 * A specialized version of `_.forEachRight` 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 */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\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 */\n function 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 /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` 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 * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` 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 * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\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 */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\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 */\n function 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 `_.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 */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\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 * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\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 */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` 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 {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\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 */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` 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 {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\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 */\n function 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 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\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 */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\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 */\n function 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 * 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 */\n function 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 * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\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 */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\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 */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\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 */\n function 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 * A specialized version of `_.lastIndexOf` 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 */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\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 */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\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 */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\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 */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\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 */\n function 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.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 /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\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 */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\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 */\n var baseForRight = createBaseFor(true);\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 */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` 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 */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\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 */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\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 */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\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 */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\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 */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` 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 */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\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 */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(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 base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\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 * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\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 */\n function 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 * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\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 */\n function 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 `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\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 */\n function 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 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\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 */\n function 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 * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\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 */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\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 */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\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 */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\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 */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\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 */\n function overRest(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 * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\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 */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\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 * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\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 */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.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 */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\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 an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\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 */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\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 */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\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 an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\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 */\n function 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 /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\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 an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\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 */\n function 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 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 */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\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 */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\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 map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\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 `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\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 native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\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 `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\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 number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` 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 regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\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 set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\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 */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\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 */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\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 weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\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 weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is 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 convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\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 */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\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 */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\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 values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n // Like with sourceURL, we take care to not check the option's prototype,\n // as this configuration is a code injection vector.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\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 */\n function 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\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.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 * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.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 * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\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 */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\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 */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\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 */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\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 */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport urlParse from 'url-parse'\r\nexport default class Vatom {\r\n constructor (payload, faces, actions) {\r\n this.payload = payload\r\n this.faces = faces\r\n this.actions = actions\r\n }\r\n\r\n get id () {\r\n return this.payload.id\r\n }\r\n\r\n get private () {\r\n return this.payload.private\r\n }\r\n\r\n get unpublished () {\r\n return this.payload.unpublished\r\n }\r\n\r\n get version () {\r\n return this.payload.version\r\n }\r\n\r\n get sync () {\r\n return this.payload.sync\r\n } \r\n\r\n get whenCreated () {\r\n return this.payload.when_created\r\n }\r\n\r\n get whenModified () {\r\n return this.payload.when_modified\r\n }\r\n\r\n get properties () {\r\n return this.payload['vAtom::vAtomType']\r\n }\r\n\r\n /** True if this is a folder vatom */\r\n get isFolder () {\r\n return this.properties['root_type'].indexOf('ContainerType') !== -1\r\n }\r\n\r\n /** True if this is a defined folder vatom, ie a folder that can only accept certain types of child vatoms. */\r\n get isDefinedFolder () {\r\n return this.properties['root_type'].indexOf('DefinedFolderContainerType') !== -1\r\n }\r\n\r\n /** True if this is a discover folder vatom, ie a folder whose contents are fetched by performing the `Discover` action on it. */\r\n get isDiscoverFolder () {\r\n return this.properties['root_type'].indexOf('DiscoverFolderContainerType') != -1\r\n }\r\n\r\n canPerformAction (action) {\r\n return this.actions.find(a => a.name.indexOf(action) !== -1)\r\n }\r\n\r\n canCombineWith (otherVatom) {\r\n // Stop if null or ourselves\r\n if (!otherVatom || this.id === otherVatom.id) {\r\n return false\r\n }\r\n\r\n // If it's not a folder, deny\r\n if (!this.isFolder) {\r\n return false\r\n }\r\n\r\n // If it's not a defined folder, allow\r\n if (!this.isDefinedFolder) {\r\n return true\r\n }\r\n\r\n // Get child policies\r\n let policies = this.properties['child_policy'] || []\r\n\r\n // Make child policies a little easier for us to understand\r\n policies = policies.map(p => ({\r\n templateVariation: p.template_variation,\r\n maxCount: (p.creation_policy && p.creation_policy.policy_count_max) || 9999,\r\n enforceMaxCount: (p.creation_policy && p.creation_policy.enforce_policy_count_max) || false\r\n }))\r\n\r\n // Make sure we have a match\r\n for (let policy of policies) {\r\n // Check if template variation matches\r\n if (policy.templateVariation === otherVatom.properties.template_variation) {\r\n return true\r\n }\r\n }\r\n\r\n // No match found, deny\r\n return false\r\n }\r\n\r\n /** Checks if this vatom has an icon face */\r\n containsIconFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'icon')\r\n }\r\n\r\n /** Checks if this vatom has a card face */\r\n containsCardFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'card')\r\n }\r\n\r\n /** Checks if this vatom has a fullscreen face */\r\n containsFullscreenFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'fullscreen')\r\n }\r\n\r\n /** TO DO: Implement in next release\r\n\r\n static mapString (o) {\r\n return Object.keys(o).map(key => `${key}=${o[key]}`).join('&')\r\n }\r\n\r\n encodeResource (url) {\r\n const aP = this.store.assetProvider\r\n const aPlen = aP.length\r\n const compare = urlParse(url)\r\n for (let i = 0; i < aPlen; i += 1) {\r\n const comparethis = urlParse(aP[i].uri)\r\n if (compare.hostname === comparethis.hostname) {\r\n // same uri so get the policy signature and key and append\r\n const queryString = Vatom.mapString(aP[i].descriptor)\r\n return `${url}?${queryString}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n getResource (resourceName, customPath) {\r\n let payloadResource = (customPath || this.payload['vAtom::vAtomType'].resources).find(r => r.name === resourceName)\r\n return this.encodeResource(payloadResource.value.value)\r\n }\r\n */\r\n}\r\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\r\nimport Region from '../Region'\r\nimport Vatom from '../../../model/Vatom'\r\nimport DataObjectAnimator from '../DataObjectAnimator'\r\nimport { merge } from 'lodash'\r\nimport Delayer from '../Delayer'\r\n\r\n/**\r\n * Intermediate class which handles updates via the BLOCKv websocket and returning Vatom objects. Regions can subclass this to automatically\r\n * get updates via WebSocket.\r\n */\r\nexport default class BLOCKvRegion extends Region {\r\n constructor (dataPool) {\r\n super(dataPool)\r\n\r\n // Queue of pending WebSocket messages\r\n this.queuedMessages = []\r\n this.socketPaused = false\r\n this.socketProcessing = false\r\n\r\n // Bind functions\r\n this.onWebSocketMessage = this.onWebSocketMessage.bind(this)\r\n\r\n // Add listeners for the WebSocket\r\n this.socket = this.dataPool.Blockv.WebSockets\r\n this.socket.connect()\r\n this.socket.addEventListener('websocket.raw', this.onWebSocketMessage)\r\n\r\n // Monitor for timed updates\r\n DataObjectAnimator.withBlockv(dataPool.Blockv).addRegion(this)\r\n }\r\n\r\n /** Called when this region is going to be shut down */\r\n close () {\r\n super.close()\r\n // Remove listeners\r\n this.socket.removeEventListener('websocket.raw', this.onWebSocketMessage)\r\n DataObjectAnimator.withBlockv(this.dataPool.Blockv).removeRegion(this)\r\n }\r\n\r\n /**\r\n * Called to pause processing of websocket messages\r\n * @private Called by subclasses.\r\n */\r\n pauseMessages () {\r\n this.socketPaused = true\r\n }\r\n\r\n /**\r\n * Called to resume processing of websocket messages\r\n *\r\n * @private Called by subclasses.\r\n */\r\n resumeMessages () {\r\n // Unpause\r\n this.socketPaused = false\r\n\r\n // Process next message if needed\r\n if (!this.socketProcessing) {\r\n this.processNextMessage()\r\n }\r\n }\r\n\r\n /**\r\n * Called when there's a new event message via the WebSocket.\r\n *\r\n * @private\r\n * @param {Object} msg The raw JSON from the websocket event message\r\n */\r\n onWebSocketMessage (msg) {\r\n // Add to queue\r\n this.queuedMessages.push(msg)\r\n\r\n // Process it if necessary\r\n if (!this.socketPaused && !this.socketProcessing) {\r\n this.processNextMessage()\r\n }\r\n }\r\n\r\n /**\r\n * Called to process the next WebSocket message.\r\n */\r\n async processNextMessage () {\r\n // Stop if socket is paused\r\n if (this.socketPaused) {\r\n return\r\n }\r\n\r\n // Stop if already processing\r\n if (this.socketProcessing) {\r\n return\r\n }\r\n this.socketProcessing = true\r\n\r\n // Get next msg to process\r\n let msg = this.queuedMessages.shift()\r\n if (!msg) {\r\n\r\n // No more messages!\r\n this.socketProcessing = false\r\n return\r\n\r\n }\r\n\r\n // Process message\r\n try {\r\n\r\n // Process message\r\n await this.processMessage(msg)\r\n\r\n } catch (err) {\r\n\r\n // Error!\r\n console.warn('[DataPool > BVWebSocketRegion] Error processing WebSocket message! ' + err.message, msg)\r\n\r\n }\r\n\r\n // Done, process next message\r\n this.socketProcessing = false\r\n this.processNextMessage()\r\n }\r\n\r\n /**\r\n * Processes a WebSocket message.\r\n *\r\n * @private Called by BVWebSocketRegion.\r\n * @abstract Subclasses can override to process other WebSocket messages. Always call super.processMessage(msg) though.\r\n * @param {Object} msg The raw JSON from the websocket event message\r\n */\r\n async processMessage (msg) {\r\n\r\n // We only handle state_update messages here\r\n if (msg.msg_type != 'state_update')\r\n return\r\n\r\n // Get vatom ID\r\n let vatomID = msg.payload && msg.payload.id\r\n if (!vatomID) {\r\n throw new Error(`Got websocket message with no vatom ID in it.`)\r\n }\r\n\r\n // Ensure it's formatted correctly\r\n if (!msg.payload.new_object) {\r\n throw new Error(`WebSocket message had no new object payload.`)\r\n }\r\n\r\n // Update existing objects\r\n this.updateObjects([{\r\n id: msg.payload.id,\r\n new_data: msg.payload.new_object\r\n }])\r\n }\r\n\r\n /** Map our data objects to Vatom objects */\r\n map (object) {\r\n // Only handle vatoms\r\n if (object.type !== 'vatom') {\r\n return null\r\n }\r\n\r\n // Fetch all faces linked to this vatom\r\n let faces = Array.from(this.objects.values()).filter(o => o.type === 'face' && o.data.template === object.data['vAtom::vAtomType'].template).map(o => o.data)\r\n\r\n // Fetch all actions linked to this vatom\r\n let actions = Array.from(this.objects.values()).filter(o => o.type === 'action' && o.data.name.startsWith(object.data['vAtom::vAtomType'].template + '::Action::')).map(o => o.data)\r\n\r\n // Create vatom object\r\n return new Vatom(object.data, faces, actions)\r\n }\r\n\r\n /**\r\n * Called when an object is about to be added.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be added.\r\n */\r\n willAdd (object) {\r\n // Notify parent as well\r\n let parent = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n if (parent) {\r\n Delayer.run(e => this.emit('object.updated', parent))\r\n }\r\n // If our DataObjectAnimator has a scheduled update for this object, include that change now. This is to work around map objects jumping around when a new region is created.\r\n let nextUpdate = DataObjectAnimator.withBlockv(this.dataPool.Blockv).changes.find(u => u.id === object.id)\r\n if (nextUpdate) {\r\n merge(object.data, nextUpdate.new_data)\r\n }\r\n }\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {Object} newData The sparse object containing the changed fields\r\n */\r\n willUpdateFields (object, newData) {\r\n // Notify parent as well\r\n let oldParent = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n let newParent = newData && newData['vAtom::vAtomType'] && newData['vAtom::vAtomType'].parent_id\r\n if (newParent) { Delayer.run(e => this.emit('object.updated', oldParent)) }\r\n if (newParent) { Delayer.run(e => this.emit('object.updated', newParent)) }\r\n }\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {String} keyPath The field which will be changed.\r\n * @param {*} oldValue The current field value.\r\n * @param {*} newValue The new field value.\r\n */\r\n willUpdateField (object, keyPath, oldValue, newValue) {\r\n // Only do if modifying the parent ID field\r\n if (keyPath !== 'vAtom::vAtomType.parent_id') {\r\n return\r\n }\r\n // Notify parent\r\n Delayer.run(e => this.emit('object.updated', oldValue))\r\n Delayer.run(e => this.emit('object.updated', newValue))\r\n }\r\n\r\n /**\r\n * Called when an object is about to be removed.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject|String} objectOrID The object (or ID) which will be updated.\r\n */\r\n willRemove (objectOrID) {\r\n // Get object if needed\r\n let object = objectOrID\r\n if (typeof objectOrID === 'string') {\r\n object = this.objects.get(objectOrID)\r\n }\r\n // Notify parent as well\r\n let parent = object && object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n if (parent) {\r\n Delayer.run(e => this.emit('object.updated', parent))\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n//\r\n// EventEmitter class\r\n// This class provides simple event functionality for classes, with Promise support.\r\n// Usage for once-off event listeners:\r\n// myObj.when(\"closed\").then(function(data) {\r\n// alert(\"Closed! \" + data);\r\n// });\r\n//\r\n// Usage for permanent event listeners:\r\n// myObj.on(\"closed\", function(data) {\r\n// alert(\"Closed! \" + data);\r\n// });\r\n//\r\n// Usage when triggering an event from a subclass:\r\n// this.emit(\"closed\", \"customData\");\r\n\r\nclass EventEmitter {\r\n /**\r\n * Adds an event listener. If callback is null, a Promise will be returned.\r\n * Note that if using the Promise\r\n * it will only be triggered on the first event emitted. */\r\n\r\n when (eventName, callback = null) {\r\n // Make sure event listener object exists\r\n this.privateEventListeners = this.privateEventListeners || {}\r\n\r\n // Make sure event listener array exists\r\n this.privateEventListeners[eventName] = this.privateEventListeners[eventName] || []\r\n\r\n // Check if using promise form\r\n if (callback) {\r\n // Just add the callback\r\n this.privateEventListeners[eventName].push(callback)\r\n return null\r\n }\r\n // Return the promise\r\n return new Promise((resolve) => {\r\n // Promise callbacks can only be used once\r\n // eslint-disable-next-line no-param-reassign\r\n resolve.removeAfterCall = true\r\n\r\n // Add success handler to event listener array\r\n this.privateEventListeners[eventName].push(resolve)\r\n })\r\n }\r\n\r\n /** Synonyms */\r\n on () {\r\n return this.when.apply(this, arguments)\r\n }\r\n\r\n addEventListener () {\r\n return this.when.apply(this, arguments)\r\n }\r\n\r\n /** Remove event listener */\r\n removeEventListener (eventName, callback) {\r\n // Make sure event listener object exists\r\n this.privateEventListeners = this.privateEventListeners || {}\r\n\r\n // Make sure event listener array exists\r\n this.privateEventListeners[eventName] = this.privateEventListeners[eventName] || []\r\n\r\n // Find and remove it\r\n for (let i = 0; i < this.privateEventListeners[eventName].length; i += 1) {\r\n if (this.privateEventListeners[eventName][i] === callback) {\r\n this.privateEventListeners[eventName].splice(i, 1)\r\n i -= 1\r\n }\r\n }\r\n }\r\n\r\n off () {\r\n return this.removeEventListener.apply(this, arguments)\r\n }\r\n\r\n /** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n emit (eventName) {\r\n // Setup the once-off promise if one of it's events were triggered\r\n // if (eventName == \"success\" || eventName == \"failed\")\r\n // this._setupPromise();\r\n\r\n // Get list of callbacks\r\n const callbacks = (this.privateEventListeners && this.privateEventListeners[eventName]) || []\r\n // Call events\r\n let passArguments = Array.from(arguments).slice(1)\r\n callbacks.forEach((callback) => {\r\n callback.apply(this, passArguments)\r\n })\r\n\r\n // Remove callbacks that can only be called once\r\n for (let i = 0; i < callbacks.length; i += 1) {\r\n if (callbacks[i].removeAfterCall) {\r\n callbacks.splice(i, 1)\r\n i -= 1\r\n }\r\n }\r\n }\r\n\r\n /** Synonyms */\r\n trigger () {\r\n return this.emit.apply(this, arguments)\r\n }\r\n\r\n triggerEvent () {\r\n return this.emit.apply(this, arguments)\r\n }\r\n}\r\n\r\n// Apply as a mixin to a class or object\r\nEventEmitter.mixin = function eventEmitterMixin (otherClass) {\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const prop in EventEmitter.prototype) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (EventEmitter.prototype.hasOwnProperty(prop)) {\r\n // eslint-disable-next-line no-param-reassign\r\n otherClass[prop] = EventEmitter.prototype[prop]\r\n }\r\n }\r\n}\r\nmodule.exports = EventEmitter\r\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\n\nmodule.exports = argsArray;\n\nfunction argsArray(fun) {\n return function () {\n var len = arguments.length;\n if (len) {\n var args = [];\n var i = -1;\n while (++i < len) {\n args[i] = arguments[i];\n }\n return fun.call(this, args);\n } else {\n return fun.call(this, []);\n }\n };\n}","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","'use strict';\n\nvar base64_url_decode = require('./base64_url_decode');\n\nfunction InvalidTokenError(message) {\n this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = 'InvalidTokenError';\n\nmodule.exports = function (token,options) {\n if (typeof token !== 'string') {\n throw new InvalidTokenError('Invalid token specified');\n }\n\n options = options || {};\n var pos = options.header === true ? 0 : 1;\n try {\n return JSON.parse(base64_url_decode(token.split('.')[pos]));\n } catch (e) {\n throw new InvalidTokenError('Invalid token specified: ' + e.message);\n }\n};\n\nmodule.exports.InvalidTokenError = InvalidTokenError;\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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport Vatom from '../model/Vatom'\r\n\r\nexport default class Discover {\r\n constructor (bv, customPayload) {\r\n this.bv = bv\r\n // Setup default vars\r\n this.overridePayload = customPayload\r\n this.filters = []\r\n this.groupBy = [Discover.FieldTemplateVariation]\r\n this.scope = null\r\n this.auth = true\r\n\r\n // The default scope returns vatoms that the user owns only\r\n this.setScopeToOwnedVatomsOnly()\r\n\r\n /** The number of samples to return. This is based on the groupBy property.\r\n 0 will return all vatoms without sampling them. */\r\n this.samples = 0\r\n }\r\n\r\n /** Appends a filter to the filters list. */\r\n appendFilter (field, value, compareOperation, combineOperation) {\r\n // Append filter\r\n this.filters.push({\r\n field,\r\n value,\r\n filter_op: compareOperation || Discover.FilterOperation.Equal,\r\n bool_op: combineOperation || Discover.CombineOperation.And\r\n })\r\n }\r\n\r\n /** Set the scope to only return vatoms with the specified publisher FQDN */\r\n setScopeToPublisherFQDN (fqdn) {\r\n // Set scope\r\n this.scope = {\r\n key: Discover.FieldPublisherFqdn,\r\n value: fqdn\r\n }\r\n }\r\n\r\n /** Set the scope to only return owned vatoms */\r\n setScopeToOwnedVatomsOnly () {\r\n // Set scope\r\n this.scope = {\r\n key: Discover.FieldOwner,\r\n value: '$currentuser'\r\n }\r\n }\r\n\r\n /** Set the scope to specified key and value */\r\n setScope (key, value) {\r\n // Set scope\r\n this.scope = {\r\n key,\r\n value\r\n }\r\n }\r\n\r\n /** @private Get the request payload to send to the Discovery API call */\r\n getPayload () {\r\n // Check for override\r\n if (this.overridePayload) {\r\n return this.overridePayload\r\n }\r\n // Check scope\r\n if (!this.scope) {\r\n throw new Error('Vatomic SDK: No scope set for discover filter!')\r\n }\r\n // Create payload\r\n const payload = {}\r\n payload.scope = this.scope\r\n\r\n // Set sampling\r\n if (this.samples > 0 && this.groupBy.length > 0) {\r\n payload.sample = this.samples\r\n payload.group_by = this.groupBy\r\n }\r\n\r\n // Set filters\r\n if (this.filters.length > 0) {\r\n payload.filters = [{\r\n filter_elems: this.filters\r\n }]\r\n }\r\n\r\n // Set return info\r\n payload.return = {\r\n type: '*',\r\n fields: []\r\n }\r\n\r\n // Done\r\n return payload\r\n }\r\n\r\n /** Execute the discover query, returning an array of Vatoms. @returns Promise<[Vatom]> */\r\n execute () {\r\n // Send request\r\n return this.bv.client.request('POST', '/v1/vatom/discover', this.getPayload(), this.auth).then((data) => {\r\n const { actions, faces, results } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of results) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n /** Execute the discover query, returning the count of vatoms. @returns Promise<Integer> */\r\n count () {\r\n // Inject \"count only\" into the payload\r\n const payload = this.getPayload()\r\n payload.return.type = 'count'\r\n\r\n // Send request\r\n return this.bv.client.request('POST', '/v1/vatom/discover', payload, this.auth)\r\n .then(data => data.count || 0)\r\n }\r\n}\r\n\r\n/** Filter operations */\r\nDiscover.FilterOperation = {\r\n Equal: 'Eq',\r\n GreaterThan: 'Gt',\r\n GreaterOrEqual: 'Ge',\r\n LessThan: 'Lt',\r\n LessOrEqual: 'Le',\r\n NotEqual: 'Ne',\r\n Match: 'Match'\r\n}\r\n\r\n/** Filter combine operations */\r\nDiscover.CombineOperation = {\r\n And: 'And',\r\n Or: 'Or'\r\n}\r\n\r\n/** Predefined fields */\r\nDiscover.FieldAcquireable = 'vAtom::vAtomType.acquireable'\r\nDiscover.FieldPrivateName = 'private.name'\r\nDiscover.FieldID = 'id'\r\nDiscover.FieldPublisherFqdn = 'vAtom::vAtomType.publisher_fqdn'\r\nDiscover.FieldTemplate = 'vAtom::vAtomType.template'\r\nDiscover.FieldTemplateVariation = 'vAtom::vAtomType.template_variation'\r\nDiscover.FieldVisibilityType = 'vAtom::vAtomType.visibility.type'\r\nDiscover.FieldOwner = 'vAtom::vAtomType.owner'\r\nDiscover.FieldParentID = 'vAtom::vAtomType.parent_id'\r\n\r\n\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nexport default class User {\r\n constructor (user) {\r\n this.id = user.id\r\n this.firstName = user.properties.first_name\r\n this.lastName = user.properties.last_name\r\n this.namePublic = user.properties.name_public\r\n this.avatarUri = user.properties.avatar_uri\r\n this.avatarPublic = user.properties.avatar_public\r\n this.birthday = user.properties.birthday\r\n this.language = user.properties.language\r\n this.nonPushNotification = user.properties.nonpush_notification\r\n this.guestId = user.properties.guest_id\r\n this.isPasswordSet = user.properties.is_password_set\r\n this.activated = user.system_properties.activated\r\n this.isAdmin = user.system_properties.is_admin\r\n this.isMerchant = user.system_properties.is_merchant\r\n this.lastLogin = user.system_properties.last_login\r\n this.pubFqdn = user.system_properties.pub_fqdn\r\n this.rawPayload = user\r\n this.consents = user.properties.user_consents\r\n this.meta = {\r\n createdBy: user.meta.created_by,\r\n dataType: user.meta.data_type,\r\n modifiedBy: user.meta.modified_by,\r\n whenCreated: user.meta.when_created,\r\n whenModified: user.meta.when_modified\r\n }\r\n }\r\n}\r\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 getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\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 if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\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\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var logify_input = require('./log').logify_input;\nvar titleFormat = require('@brillout/format-text').titleFormat;\nvar isNodejs = require('./utils/isNodejs');\n\nvar option_keys = {\n is_warning: 'is_warning',\n is_usage: 'is_usage',\n is_internal: 'is_internal',\n details: 'details',\n};\n\nmodule.exports = assert;\n\nfunction assert(condition) {\n if( condition ) {\n return condition;\n }\n\n // parse arguments\n var parsed = parseArguments([].slice.call(arguments, 1));\n var msgs = parsed.msgs;\n var opts = parsed.opts;\n\n var callStack = getCallStack();\n\n // build error message\n var message = getErrorMessage(condition, msgs, opts, callStack);\n\n // throw logic\n throwError(message, opts, callStack);\n\n // convenience to write code like `if( ! require('assert/soft')(condition) ) return;`\n return condition;\n}\n\nfunction parseArguments(args) {\n var msgs = [];\n var opts = {};\n for(var i in args) {\n var arg = args[i];\n var is_option_arg = arg && arg.IS_REASSERT_OPTS;\n if( is_option_arg ) {\n for(var j in arg) {\n if( !option_keys[j] && j!=='IS_REASSERT_OPTS' ) {\n var msg = 'Unkonwn option `'+j+'`';\n throw new Error('@brillout/assert: [Internal Error]: '+msg);\n }\n opts[j] = arg[j];\n }\n } else {\n msgs.push(arg);\n }\n }\n\n return {msgs: msgs, opts: opts};\n}\n\nfunction getErrorMessage(condition, msgs, opts, callStack) {\n var message = [];\n\n message = message.concat(getErrorDetailsMessage(opts));\n\n if( ! is_browser() ) {\n message = message.concat(getStackMessage(opts, msgs, callStack));\n message.push('\\n');\n }\n\n message = message.concat(getErrorSummaryMessage(condition, msgs, opts));\n\n return message;\n}\nfunction getErrorSummaryMessage(condition, msgs, opts) {\n let message = [];\n\n var title = (\n opts[option_keys.is_warning] && 'Warning' ||\n opts[option_keys.is_usage] && 'Wrong Usage' ||\n opts[option_keys.is_internal] && 'Internal Error' ||\n 'Assertion Fail'\n );\n\n message.push(titleFormat(title));\n\n if( msgs.length===0 ) {\n message.push('Failed assertion condition: `'+condition+' != true`');\n }\n\n for(var i in msgs) {\n var msg = msgs[i];\n var str = logify_input(msg);\n\n message.push(str);\n }\n\n if( opts.details ) {\n message.push('');\n message.push('See \"Error Details\" above for more information.');\n }\n\n return message;\n}\nfunction getStackMessage(opts, msgs, callStack) {\n if( opts[option_keys.is_warning] && msgs.length>0 ) {\n return [];\n }\n\n /*\n // Without this Node.js adds a `[` and a `]` to the error string\n var niceFormattingPrefix = 'Error\\n at:';\n */\n\n return [\n // niceFormattingPrefix,\n titleFormat('Stack Trace'),\n callStack.join('\\n')\n ];\n}\nfunction getErrorDetailsMessage(opts) {\n if( ! opts.details ) {\n return [];\n }\n\n var message = [\n titleFormat('Error Details')\n ];\n\n for(var i in opts.details) {\n message.push(logify_input(opts.details[i]));\n }\n\n message.push('\\n');\n\n return message;\n}\n\nfunction throwError(message, opts, callStack) {\n var interupt_execution = !opts[option_keys.is_warning];\n\n if( isNodejs() ) {\n if( interupt_execution ) {\n var err = new Error();\n err.stack = message.join('\\n');\n throw err;\n } else {\n for(var i in message) console.error(message[i]);\n }\n }\n\n if( is_browser() ) {\n if( interupt_execution ) {\n throw__browser(message);\n } else {\n setTimeout(function() {\n throw__browser(message);\n }, 0);\n }\n }\n}\n\nfunction throw__browser(message) {\n for(var i in message) console.error(message[i]);\n Error.stackTraceLimit = Infinity;\n throw new Error();\n}\n\nfunction getCallStack() {\n var stackTraceLimit__original = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n var callStackString = new Error().stack;\n Error.stackTraceLimit = stackTraceLimit__original;\n\n var lines = callStackString.split('\\n');\n\n var lines__filtered = [];\n for(var i in lines) {\n var line = lines[i];\n if( line === 'Error' ) {\n continue;\n }\n if( line.indexOf('/node_modules/@brillout/assert/') !== -1 ) {\n continue;\n }\n if( line.indexOf(' (internal/') !== -1 ) {\n continue;\n }\n // line = line.replace(/^ */, '');\n // line = line.replace(/^at */, ' ');\n lines__filtered.push(line);\n }\n\n var callStack = lines__filtered;\n return callStack;\n}\n\n/* TODO - reimplement soft errors\n\n // determine whether we are in production\n var prod = is_prod();\n\n var message = 'Assertion-Error'+(prod?'[prod]':'[dev]')+': '+condition+'!=true';\n var interupt_execution = (!prod || opts[option_keys.is_hard]) && !opts[option_keys.is_soft];\n\nfunction is_prod() {\n var prod_browser = is_browser() && window.location.hostname !== 'localhost';\n var prod_nodejs = isNodejs() && process.env['NODE_ENV'] === 'production';\n return prod_browser || prod_nodejs;\n}\n*/\n\nfunction is_browser() {\n return typeof window !== \"undefined\";\n}\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","(function (factory) {\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(factory);\n } else {\n // Browser globals (with support for web workers)\n var glob;\n\n try {\n glob = window;\n } catch (e) {\n glob = self;\n }\n\n glob.SparkMD5 = factory();\n }\n}(function (undefined) {\n\n 'use strict';\n\n /*\n * Fastest md5 implementation around (JKM md5).\n * Credits: Joseph Myers\n *\n * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n * @see http://jsperf.com/md5-shootout/7\n */\n\n /* this function is much faster,\n so if possible we use it. Some IEs\n are the only ones I know of that\n need the idiotic second function,\n generated by an if clause. */\n var add32 = function (a, b) {\n return (a + b) & 0xFFFFFFFF;\n },\n hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n function cmn(q, a, b, x, s, t) {\n a = add32(add32(a, q), add32(x, t));\n return add32((a << s) | (a >>> (32 - s)), b);\n }\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 |b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i; /* Andy King said do it this way. */\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n }\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n // containing the last element of the parent array if the sub array specified starts\n // beyond the length of the parent array - weird.\n // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << ((i % 4) << 3);\n }\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Beware that the final length might not fit in 32 bits so we take care of that\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n\n md5cycle(state, tail);\n\n return state;\n }\n\n function rhex(n) {\n var s = '',\n j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n }\n return s;\n }\n\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join('');\n }\n\n // In some cases the fast add32 function cannot be used..\n if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n add32 = function (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xFFFF);\n };\n }\n\n // ---------------------------------------------------\n\n /**\n * ArrayBuffer slice polyfill.\n *\n * @see https://github.com/ttaubert/node-arraybuffer-slice\n */\n\n if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = (val | 0) || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n\n return target;\n };\n })();\n }\n\n // ---------------------------------------------------\n\n /**\n * Helpers.\n */\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation.\n *\n * Use this class to perform an incremental md5, otherwise use the\n * static methods instead.\n */\n\n function SparkMD5() {\n // call reset to init the instance\n this.reset();\n }\n\n /**\n * Appends a string.\n * A conversion will be applied if an utf8 string is detected.\n *\n * @param {String} str The string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.append = function (str) {\n // Converts the string to utf8 bytes if necessary\n // Then append as binary\n this.appendBinary(toUtf8(str));\n\n return this;\n };\n\n /**\n * Appends a binary string.\n *\n * @param {String} contents The binary string to be appended\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.reset = function () {\n this._buff = '';\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5} The instance itself\n */\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n\n return this;\n };\n\n /**\n * Releases memory used by the incremental buffer and other additional\n * resources. If you plan to use the instance again, use reset instead.\n */\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n /**\n * Finish the final calculation based on the tail.\n *\n * @param {Array} tail The tail (will be modified)\n * @param {Number} length The length of the remaining buffer\n */\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n\n tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n // Do the final computation based on the tail and length\n // Beware that the final length may not fit in 32 bits so we take care of that\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n /**\n * Performs the md5 hash on a string.\n * A conversion will be applied if utf8 string is detected.\n *\n * @param {String} str The string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hash = function (str, raw) {\n // Converts the string to utf8 bytes if necessary\n // Then compute it using the binary function\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n /**\n * Performs the md5 hash on a binary string.\n *\n * @param {String} content The binary string\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n // ---------------------------------------------------\n\n /**\n * SparkMD5 OOP implementation for array buffers.\n *\n * Use this class to perform an incremental md5 ONLY for array buffers.\n */\n SparkMD5.ArrayBuffer = function () {\n // call reset to init the instance\n this.reset();\n };\n\n /**\n * Appends an array buffer.\n *\n * @param {ArrayBuffer} arr The array to be appended\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n return this;\n };\n\n /**\n * Finishes the incremental computation, reseting the internal state and\n * returning the result.\n *\n * @param {Boolean} raw True to get the raw string, false to get the hex string\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n }\n\n this._finish(tail, length);\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n\n return ret;\n };\n\n /**\n * Resets the internal state of the computation.\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n return this;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @return {Object} The state\n */\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n\n // Convert buffer to a string\n state.buff = arrayBuffer2Utf8Str(state.buff);\n\n return state;\n };\n\n /**\n * Gets the internal state of the computation.\n *\n * @param {Object} state The state\n *\n * @return {SparkMD5.ArrayBuffer} The instance itself\n */\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n // Convert string to buffer\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n /**\n * Performs the md5 hash on an array buffer.\n *\n * @param {ArrayBuffer} arr The array buffer\n * @param {Boolean} raw True to get the raw string, false to get the hex one\n *\n * @return {String} The result\n */\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n}));\n","\r\n\r\n/**\r\n * Singleton. Responsible for storing and exeucting changes to objects over time.\r\n */\r\nexport default class DataObjectAnimator {\r\n static withBlockv (bv) {\r\n if (!bv.animator)\r\n bv.animator = new DataObjectAnimator(bv)\r\n return bv.animator\r\n }\r\n /** Constructor */\r\n constructor(bv) {\r\n // blockv\r\n this.blockv = bv\r\n\r\n // Store regions\r\n this.regions = []\r\n\r\n // List of changes\r\n this.changes = []\r\n\r\n // Update timer\r\n this.updateTimer = null\r\n\r\n // Time skew, for syncing server time to client time. This time is added to the device's \"current time\".\r\n this.timeSkew = 0\r\n\r\n // Add listeners for the WebSocket\r\n this.onWebSocketMessage = this.onWebSocketMessage.bind(this)\r\n this.blockv.WebSockets.addEventListener('websocket.raw', this.onWebSocketMessage)\r\n\r\n\r\n }\r\n\r\n /** Called when a new message comes down the WebSocket */\r\n onWebSocketMessage(msg) {\r\n\r\n // We only handle state update messages here.\r\n if (msg.msg_type != 'state_update')\r\n return\r\n\r\n // Only handle brain updates\r\n if (msg.payload.action_name != 'brain-update')\r\n return\r\n\r\n // Check if the brain has given us a set of next positions\r\n let nextPositions = msg.payload.new_object.next_positions\r\n if (nextPositions) {\r\n\r\n // Map coordinates to sparse object updates\r\n let updates = nextPositions.map(p => { return {\r\n id: msg.payload.id,\r\n time: p.time,\r\n new_data: {\r\n 'vAtom::vAtomType': {\r\n 'geo_pos': {\r\n 'coordinates': p.geo_pos\r\n }\r\n }\r\n }\r\n }})\r\n\r\n // Fetch earliest time\r\n let earliestTime = updates[0].time\r\n for (let update of updates)\r\n if (earliestTime > update.time)\r\n earliestTime = update.time\r\n\r\n // Clear old data from animator\r\n this.clearUpdatesFor(msg.payload.id, earliestTime)\r\n\r\n // Hand off to the animator\r\n this.add(updates)\r\n\r\n }\r\n\r\n }\r\n\r\n /** Add a region */\r\n addRegion(region) {\r\n this.regions.push(region)\r\n }\r\n\r\n /** Remove a region */\r\n removeRegion(region) {\r\n this.regions = this.regions.filter(r => r != region)\r\n }\r\n\r\n /** Check if any of our regions has this data object */\r\n isMonitoringID(id) {\r\n\r\n for (let region of this.regions)\r\n if (region.objects.get(id))\r\n return true\r\n\r\n // No, we don't care about this object\r\n return false\r\n\r\n }\r\n\r\n /** Add updates to be executed */\r\n add(updates) {\r\n\r\n // Add updates to the array\r\n let now = Date.now() + this.timeSkew\r\n for (let u of updates) {\r\n\r\n // Ensure we care about this object\r\n if (!this.isMonitoringID(u.id))\r\n continue\r\n \r\n // Ensure this time entry has not passed already\r\n if (!u.time || u.time < now)\r\n continue\r\n\r\n // Add it\r\n this.changes.push(u)\r\n\r\n }\r\n\r\n // Sort changes oldest to newest\r\n this.changes.sort((a, b) => a.time - b.time)\r\n\r\n // Start update timer if needed\r\n if (!this.updateTimer)\r\n this.updateTimer = setInterval(this.doNextUpdate.bind(this), 50)\r\n\r\n }\r\n\r\n /** Remove pending updates for the specified object ID */\r\n clearUpdatesFor(id, afterTime = 0) {\r\n\r\n // Remove items\r\n for (let i = 0 ; i < this.changes.length ; i++)\r\n if (this.changes[i].id == id && this.changes[i].time > afterTime)\r\n this.changes.splice(i--, 1)\r\n\r\n }\r\n\r\n /** @private Run the next update */\r\n doNextUpdate() {\r\n\r\n // Stop if no more entries\r\n if (this.changes.length == 0) {\r\n clearInterval(this.updateTimer)\r\n this.updateTimer = null\r\n return\r\n }\r\n\r\n // Check if the first entry has passed yet\r\n let now = Date.now() + this.timeSkew\r\n if (this.changes[0].time > now)\r\n return\r\n\r\n // Get change to execute\r\n let change = this.changes.shift()\r\n\r\n // Do it on all regions\r\n for (let region of this.regions)\r\n region.updateObjects([change])\r\n\r\n // If next entry time has also passed already, don't wait, just execute\r\n if (this.changes.length > 0 && this.changes[0].time < now)\r\n this.doNextUpdate()\r\n\r\n }\r\n\r\n}","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","//\r\n// EventEmitter class - This class provides simple event functionality for classes, with Promise support.\r\n//\r\n//\tUsage for once-off event listeners:\r\n//\r\n//\t\tmyObj.when(\"closed\").then(function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage for permanent event listeners:\r\n//\r\n//\t\tmyObj.on(\"closed\", function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage when triggering an event from a subclass:\r\n//\r\n//\t\tthis.emit(\"closed\", \"customData\");\r\n//\r\n\r\nexport default class EventEmitter {\r\n\r\n\r\n\t/** Adds an event listener. If callback is null, a Promise will be returned. Note that if using the Promise\r\n\t * it will only be triggered on the first event emitted. */\r\n\twhen(eventName, callback = null) {\r\n\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\r\n\t\t// Check if using promise form\r\n\t\tif (callback) {\r\n\r\n\t\t\t// Just add the callback\r\n\t\t\tthis._eventListeners[eventName].push(callback);\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Return the promise\r\n\t\t\treturn new Promise((onSuccess, onFail) => {\r\n\r\n\t\t\t\t// Promise callbacks can only be used once\r\n\t\t\t\tonSuccess._removeAfterCall = true;\r\n\r\n\t\t\t\t// Add success handler to event listener array\r\n\t\t\t\tthis._eventListeners[eventName].push(onSuccess);\r\n\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/** Synonyms */\r\n\ton() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\r\n\taddEventListener() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\r\n\r\n\r\n /** Remove event listener */\r\n removeEventListener(eventName, callback) {\r\n\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\r\n // Find and remove it\r\n for (var i = 0 ; i < this._eventListeners[eventName].length ; i++)\r\n if (this._eventListeners[eventName][i] == callback)\r\n this._eventListeners[eventName].splice(i--, 1)\r\n\r\n }\r\n\r\n off() {\r\n return this.removeEventListener.apply(this, arguments);\r\n }\r\n\r\n\r\n\r\n\r\n\t/** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n\temit(eventName, ...args) {\r\n\r\n\t\t// Setup the once-off promise if one of it's events were triggered\r\n\t\t//if (eventName == \"success\" || eventName == \"failed\")\r\n\t\t//\tthis._setupPromise();\r\n\r\n\t\t// Get list of callbacks\r\n\t\tvar callbacks = this._eventListeners && this._eventListeners[eventName] || [];\r\n\r\n\t\t// Call events\r\n\t\tfor (var callback of callbacks) {\r\n\r\n\t\t\t// Call it\r\n\t\t\tcallback.apply(this, args);\r\n\r\n\t\t}\r\n\r\n\t\t// Remove callbacks that can only be called once\r\n\t\tfor (var i = 0 ; i < callbacks.length ; i++)\r\n\t\t\tif (callbacks[i]._removeAfterCall)\r\n\t\t\t\tcallbacks.splice(i--, 1);\r\n\r\n\t}\r\n\r\n\t/** Synonyms */\r\n\ttrigger() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\r\n\ttriggerEvent() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\r\n}\r\n\r\n// Apply as a mixin to a class or object\r\nEventEmitter.mixin = function(otherClass) {\r\n\r\n\tfor (var prop in EventEmitter.prototype)\r\n\t\tif (EventEmitter.prototype.hasOwnProperty(prop))\r\n\t\t\totherClass[prop] = EventEmitter.prototype[prop];\r\n\r\n}\r\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","'use strict';\n\n/**\n * Stringify/parse functions that don't operate\n * recursively, so they avoid call stack exceeded\n * errors.\n */\nexports.stringify = function stringify(input) {\n var queue = [];\n queue.push({obj: input});\n\n var res = '';\n var next, obj, prefix, val, i, arrayPrefix, keys, k, key, value, objPrefix;\n while ((next = queue.pop())) {\n obj = next.obj;\n prefix = next.prefix || '';\n val = next.val || '';\n res += prefix;\n if (val) {\n res += val;\n } else if (typeof obj !== 'object') {\n res += typeof obj === 'undefined' ? null : JSON.stringify(obj);\n } else if (obj === null) {\n res += 'null';\n } else if (Array.isArray(obj)) {\n queue.push({val: ']'});\n for (i = obj.length - 1; i >= 0; i--) {\n arrayPrefix = i === 0 ? '' : ',';\n queue.push({obj: obj[i], prefix: arrayPrefix});\n }\n queue.push({val: '['});\n } else { // object\n keys = [];\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n keys.push(k);\n }\n }\n queue.push({val: '}'});\n for (i = keys.length - 1; i >= 0; i--) {\n key = keys[i];\n value = obj[key];\n objPrefix = (i > 0 ? ',' : '');\n objPrefix += JSON.stringify(key) + ':';\n queue.push({obj: value, prefix: objPrefix});\n }\n queue.push({val: '{'});\n }\n }\n return res;\n};\n\n// Convenience function for the parse function.\n// This pop function is basically copied from\n// pouchCollate.parseIndexableString\nfunction pop(obj, stack, metaStack) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n}\n\nexports.parse = function (str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n var collationIndex,parsedNum,numChar;\n var parsedString,lastCh,numConsecutiveSlashes,ch;\n var arrayElement, objElement;\n while (true) {\n collationIndex = str[i++];\n if (collationIndex === '}' ||\n collationIndex === ']' ||\n typeof collationIndex === 'undefined') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack.pop(), stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case ' ':\n case '\\t':\n case '\\n':\n case ':':\n case ',':\n break;\n case 'n':\n i += 3; // 'ull'\n pop(null, stack, metaStack);\n break;\n case 't':\n i += 3; // 'rue'\n pop(true, stack, metaStack);\n break;\n case 'f':\n i += 4; // 'alse'\n pop(false, stack, metaStack);\n break;\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '-':\n parsedNum = '';\n i--;\n while (true) {\n numChar = str[i++];\n if (/[\\d\\.\\-e\\+]/.test(numChar)) {\n parsedNum += numChar;\n } else {\n i--;\n break;\n }\n }\n pop(parseFloat(parsedNum), stack, metaStack);\n break;\n case '\"':\n parsedString = '';\n lastCh = void 0;\n numConsecutiveSlashes = 0;\n while (true) {\n ch = str[i++];\n if (ch !== '\"' || (lastCh === '\\\\' &&\n numConsecutiveSlashes % 2 === 1)) {\n parsedString += ch;\n lastCh = ch;\n if (lastCh === '\\\\') {\n numConsecutiveSlashes++;\n } else {\n numConsecutiveSlashes = 0;\n }\n } else {\n break;\n }\n }\n pop(JSON.parse('\"' + parsedString + '\"'), stack, metaStack);\n break;\n case '[':\n arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '{':\n objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n default:\n throw new Error(\n 'unexpectedly reached end of input: ' + collationIndex);\n }\n }\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","var isNodejs = require('./utils/isNodejs');\n\nlog.logify_input = logify_input;\n\nmodule.exports = log;\n\nvar project_name = 'Reassert';\nvar stringification_name = '(Reassert-stringification)';\n\nfunction log() {\n for(var i in arguments) {\n var input = arguments[i];\n var str = logify_input(input);\n console.log(str);\n }\n}\n\nfunction logify_input(input) {\n var str = get_str(input);\n\n // We cap huge strings to make scrolling not impossible\n var LIMIT = 10000;\n if( str && str.length > LIMIT ) {\n return str.slice(0, LIMIT)+'[CROPPED-BY-REASSERT]';\n }\n\n return str;\n}\n\nfunction get_str(input) {\n if( ! input ) {\n return input;\n }\n\n if( input.constructor === Array ) {\n return stringify_object(input);\n }\n\n var PREFIX_UGLY = '[object ';\n var input_str = toStr(input);\n if( input_str.slice(0, PREFIX_UGLY.length) === PREFIX_UGLY ) {\n return stringify_object(input);\n }\n return input_str;\n}\n\nfunction stringify_object(obj) {\n var obj_copy = get_prettier_copy(obj);\n try {\n return JSON.stringify(obj_copy, null, 2);\n } catch(e) {\n if( isNodejs() ) {\n var util = require('util');\n return util.inspect(obj);\n }\n return toStr(obj_copy)+'['+e+'][Error]'+stringification_name;\n }\n}\n\nfunction get_prettier_copy(el, parent_objects=[]) {\n if( ! (el instanceof Object) ) {\n return el;\n }\n\n if( el instanceof RegExp ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = '[RegExp: '+toStr(el)+']';\n return str;\n };\n }\n return el;\n }\n if( el instanceof Function ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = (\n ! el.name ? (\n '[Function]'\n ) : (\n '[Function: '+el.name+']'\n )\n );\n return str;\n };\n }\n return el;\n }\n\n if( el.constructor !== Object && el.constructor !== Array ) {\n return el;\n }\n\n if( parent_objects.includes(el) ) {\n return '[ALREADY_PRINTED_COPY]';\n }\n parent_objects = [el, ...parent_objects];\n\n var el_copy = new (el.constructor);\n for(var key in el) {\n el_copy[key] = get_prettier_copy(el[key], parent_objects);\n }\n return el_copy;\n}\n\nfunction toStr(thing) {\n if( typeof thing === \"object\" && !thing.toString ) {\n return '[object Object]';\n }\n return (''+thing);\n}\n","module.exports = isNodejs;\n\nfunction isNodejs() {\n return typeof \"process\" !== \"undefined\" && process && process.versions && process.versions.node;\n}\n","module.exports = {tableFormat, titleFormat};\n\nfunction tableFormat(rows, {padding=2, indent=' '}={}) {\n const columnWidths = [];\n\n rows.forEach(cells => {\n cells.forEach((cell, columnNumber) => {\n columnWidths[columnNumber] = (\n Math.max(\n getStringWidth(cell),\n columnWidths[columnNumber]||0\n )\n );\n });\n });\n\n const lines = [];\n\n rows.forEach(cells => {\n let line = indent;\n cells.forEach((cell, columnNumber) => {\n const colWidth = columnWidths[columnNumber];\n const isLastColumn = columnNumber===cells.length-1;\n const paddingRight = (\n isLastColumn ? (\n ''\n ) : (\n getBar(colWidth+padding, ' ').slice(getStringWidth(cell))\n )\n );\n line += cell + paddingRight;\n });\n lines.push(line);\n });\n\n return lines.join('\\n');\n}\n\nfunction titleFormat(title, {padding=3}={}) {\n // resolve cyclic dependency reassert => @brillout/format-text => reassert\n const assert_warning = require('reassert/warning');\n\n const min_bar_length = 40;\n title = ' '+title+' ';\n const titleWidth = getStringWidth(title);\n const barWidth = Math.max(min_bar_length, titleWidth+padding*2);\n const stringWidth = require('string-width');\n const leftWidth = Math.floor((barWidth - titleWidth) / 2);\n const bar = getBar(barWidth);\n const title_bar = getBar(leftWidth) + title + getBar(barWidth - leftWidth - titleWidth);\n assert_warning(getStringWidth(bar)===getStringWidth(title_bar));\n return (\n [\n bar,\n title_bar,\n bar,\n ].join('\\n')\n );\n}\nfunction getStringWidth(str) {\n if( ! isNodejs() ) {\n return str.length;\n }\n const stringWidth = eval('require')('string-width');\n return stringWidth(str);\n}\nfunction isNodejs() {\n return typeof process !== \"undefined\" && typeof window === \"undefined\";\n}\n\nfunction getBar(barWidth, filler='*') {\n return new Array(barWidth).fill(filler).join('');\n}\n","module.exports = isNodejs;\n\nfunction isNodejs() {\n return typeof \"process\" !== \"undefined\" && process && process.versions && process.versions.node;\n}\n","/* global localStorage */\r\nimport EventEmitter from './EventEmitter'\r\nimport DataObject from './DataObject'\r\nimport Filter from './Filter'\r\nimport LZString from 'lz-string'\r\nimport { merge, get, set } from 'lodash'\r\nimport Delayer from './Delayer'\r\nimport DatabaseMap from './DatabaseMap'\r\n\r\n/**\r\n * Base class for a region.\r\n *\r\n * @event updated When any data in the region changes. This also indicates that there is no longer an error.\r\n * @event object.updated When a data object changes. Called with the ID of the changed object.\r\n * @event object.removed When a data object is removed. Called with the ID of the removed object.\r\n * @event error When an error occurs.\r\n * @event closed When the inventory is closed. eg. When the user is logged out\r\n */\r\nexport default class Region extends EventEmitter {\r\n /** @private Subclasses should use this to update and start monitoring the region */\r\n constructor (dataPool) {\r\n super()\r\n\r\n /** If true, this region will not be cached to disk. */\r\n this.noCache = false\r\n\r\n /** Store reference to the data pool */\r\n this.dataPool = dataPool\r\n\r\n /** True if data in this region is entirely in sync with the backend */\r\n this.synchronized = false\r\n\r\n /** If there's an error, this contains the current error. */\r\n this.error = null\r\n\r\n // Try to make region stable immediately\r\n this._syncPromise = null\r\n Delayer.run(e => this.synchronize())\r\n }\r\n\r\n /** Lazy load the objects database */\r\n get objects() {\r\n\r\n // Check if loaded already\r\n if (this._objects)\r\n return this._objects\r\n\r\n // Create DB\r\n this._objects = new DatabaseMap(this.stateKey, this.noCache)\r\n return this._objects\r\n\r\n }\r\n\r\n /**\r\n * Re-synchronizes the region by manually fetching everything from the server again.\r\n */\r\n forceSynchronize () {\r\n this.synchronized = false\r\n return this.synchronize()\r\n }\r\n\r\n /**\r\n * This will try to make the region stable by querying the backend for all data.\r\n *\r\n * @private Called by the Region superclass.\r\n * @returns {Promise} Resolves once the region is in sync with the backend.\r\n */\r\n synchronize () {\r\n // Stop if already running\r\n if (this._syncPromise) { return this._syncPromise }\r\n\r\n // Remove pending error\r\n this.error = null\r\n this.emit('updated')\r\n\r\n // Stop if already in sync\r\n if (this.synchronized) { return Promise.resolve() }\r\n\r\n // Do the sync\r\n this._syncPromise = this._synchronize().catch(err => {\r\n // Error handling, notify listeners of an error\r\n this._syncPromise = null\r\n this.error = err\r\n console.error(err)\r\n this.emit('error', err)\r\n })\r\n\r\n // Return promise\r\n return this._syncPromise\r\n\r\n }\r\n\r\n async _synchronize() {\r\n\r\n // Sync start\r\n console.log(`[DataPool > Region] Starting synchronization for region ${this.stateKey}`)\r\n\r\n // Create and load the database\r\n await this.objects.load()\r\n this.emit('updated')\r\n\r\n // Allow plugin to start loading content\r\n let loadedIDs = await this.load()\r\n\r\n // If the subclass load() returned an array of IDs, we can remove everything which is not in that list.\r\n if (loadedIDs && typeof loadedIDs.length === 'number') {\r\n let keysToRemove = []\r\n for (let id of this.objects.keys()) {\r\n // Check if it's in our list\r\n if (!loadedIDs.includes(id)) { keysToRemove.push(id) }\r\n }\r\n\r\n // Remove vatoms\r\n this.removeObjects(keysToRemove)\r\n }\r\n\r\n // All data is up to date!\r\n this.synchronized = true\r\n this._syncPromise = null\r\n this.emit('updated')\r\n console.log(`[DataPool > Region] Region '${this.stateKey}' is now in sync!`)\r\n \r\n }\r\n\r\n /**\r\n * A key which is unique for this exact region. This is used when saving/restoring state to disk.\r\n *\r\n * @abstract Subclasses should override this.\r\n * @returns {String} The state key.\r\n */\r\n get stateKey () {\r\n throw new Error(`Subclasses must override 'get stateKey()' in order to correctly handle saving/restoring state to disk.`)\r\n }\r\n\r\n /**\r\n * Start initial load. This should resolve once the region is up to date.\r\n *\r\n * @private Called by the Region superclass.\r\n * @abstract Subclasses should override this.\r\n * @returns {Promise<>} Once this promise resolves, the region should be stable.\r\n */\r\n async load () {\r\n throw new Error(`Subclasses must override Region.load()`)\r\n }\r\n\r\n /**\r\n * Stop and destroy this region.\r\n *\r\n * @abstract Subclasses should override this, but call super.close()\r\n */\r\n close () {\r\n // Notify data pool we have closed\r\n this.dataPool.removeRegion(this)\r\n this.emit('closed')\r\n }\r\n\r\n /**\r\n * Checks if the specified query matches our region. This is used to identify if a region request\r\n * can be satisfied by this region, or if a new region should be created.\r\n *\r\n * @private Called by DataPool.\r\n * @abstract Subclasses should override this.\r\n * @param {string} id The region plugin ID\r\n * @param {*} descriptor The region-specific filter data.\r\n */\r\n matches (id, descriptor) {\r\n throw new Error('Subclasses must override Region.matches()')\r\n }\r\n\r\n /**\r\n * Stores a collection of data objects which have been added to the pool.\r\n *\r\n * @private Called by subclasses.\r\n * @param {DataObject[]} objects List of new data objects added to the pool.\r\n */\r\n addObjects (objects) {\r\n\r\n // Go through each object\r\n for (let obj of objects) {\r\n\r\n // Check if object exists already\r\n let existingObject = this.objects.get(obj.id)\r\n if (existingObject) {\r\n\r\n // Notify\r\n this.willUpdateFields(existingObject, obj.data)\r\n\r\n // It exists already, update the object\r\n existingObject.data = obj.data\r\n existingObject.cached = null\r\n\r\n // Update database copy\r\n this.objects.set(obj.id, obj)\r\n\r\n } else {\r\n\r\n // Notify\r\n this.willAdd(obj)\r\n\r\n // It does not exist, add it\r\n this.objects.set(obj.id, obj)\r\n\r\n }\r\n\r\n // Emit event, on next run loop so all objects are added first\r\n Delayer.run(e => this.emit('object.updated', obj.id))\r\n\r\n }\r\n\r\n // Notify updated\r\n if (objects.length > 0) \r\n this.emit('updated')\r\n\r\n }\r\n\r\n /**\r\n * Updates data objects within our pool.\r\n *\r\n * @private Called by subclasses\r\n * @param {Object[]} objects An array of changes. Each object contains an `id` string and a `new_data` sparse object containing the changed fields.\r\n */\r\n updateObjects (objects) {\r\n // Go through each object\r\n let didUpdate = false\r\n for (let obj of objects) {\r\n // Fetch existing object\r\n let existingObject = this.objects.get(obj.id)\r\n if (!existingObject) { continue }\r\n\r\n // Stop if existing object doesn't have the full data\r\n if (!existingObject.data) { continue }\r\n\r\n // Notify\r\n this.willUpdateFields(existingObject, obj.new_data)\r\n\r\n // Update fields\r\n merge(existingObject.data, obj.new_data)\r\n\r\n // Clear cached values\r\n existingObject.cached = null\r\n\r\n // Emit event, on next run loop so all objects are updated first\r\n Delayer.run(e => this.emit('object.updated', obj.id))\r\n didUpdate = true\r\n }\r\n\r\n // Notify updated\r\n if (didUpdate) { this.emit('updated') }\r\n }\r\n\r\n /**\r\n * Removes the specified objects from our pool.\r\n *\r\n * @private Called by subclasses.\r\n * @param {String[]} ids An array of object IDs to remove.\r\n */\r\n removeObjects (ids) {\r\n // Remove all data objects with the specified IDs\r\n let didUpdate = false\r\n for (let id of ids) {\r\n // Notify\r\n this.willRemove(id)\r\n\r\n // Remove it\r\n if (this.objects.delete(id)) {\r\n // Emit event, on next run loop so all objects are updated first\r\n Delayer.run(e => this.emit('object.removed', id))\r\n didUpdate = true\r\n }\r\n }\r\n\r\n // Notify updated\r\n if (didUpdate) { this.emit('updated') }\r\n }\r\n\r\n /**\r\n * If a region plugin depends on the session data, it may override this method and `this.close()` itself if needed.\r\n *\r\n * @private Called by DataPool.\r\n * @abstract Subclasses can override this if they want.\r\n * @param {*} info The new session info.\r\n */\r\n onSessionInfoChanged (info) {}\r\n\r\n /**\r\n * If the plugin wants, it can map DataObjects to another type. This takes in a DataObject and returns a new type.\r\n * If you return null, the specified data object will not be returned.\r\n *\r\n * The default implementation simply returns the DataObject.\r\n *\r\n * @param {DataObject} object The input raw object\r\n * @returns {*} The output object.\r\n */\r\n map (object) {\r\n return object\r\n }\r\n\r\n /**\r\n * Iterate over each object in this region. Return `false` from the callback to stop. This does not wait\r\n * for the region to synchronize. This is a synchronous function.\r\n *\r\n * @param {Function(*)} callback Gets called once for each objbect in the region.\r\n */\r\n forEach (callback) {\r\n // Go through all data objects\r\n for (let object of this.objects.values()) {\r\n // Check for cached object\r\n let mapped = object.cached\r\n\r\n // Check if no cached object\r\n if (!mapped) {\r\n // Map to the plugin's intended type\r\n object.cached = mapped = this.map(object)\r\n }\r\n\r\n // Stop if no mapped object\r\n if (!mapped) { continue }\r\n\r\n // Call callback, stop if they returned false\r\n if (callback(mapped) === false) { break }\r\n }\r\n }\r\n\r\n /**\r\n * Returns all the objects within this region.\r\n *\r\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\r\n * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise).\r\n */\r\n get (waitUntilStable = true) {\r\n // Synchronize now\r\n if (waitUntilStable) {\r\n return this.synchronize().then(e => this.get(false))\r\n }\r\n\r\n // Create an array of all data objects\r\n let items = []\r\n for (let object of this.objects.values()) {\r\n // Check for cached object\r\n if (object.cached) {\r\n items.push(object.cached)\r\n continue\r\n }\r\n\r\n // Map to the plugin's intended type\r\n let mapped = this.map(object)\r\n if (!mapped) {\r\n continue\r\n }\r\n\r\n // Cache it\r\n object.cached = mapped\r\n\r\n // Add to list\r\n items.push(mapped)\r\n }\r\n\r\n // Done\r\n return items\r\n }\r\n\r\n /**\r\n * Returns an object within this region by it's ID.\r\n *\r\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\r\n * @returns {Promise<Object>} An object in this region. If `waitUntilStable` is false, returns immediately (without the promise).\r\n */\r\n getItem (id, waitUntilStable = true) {\r\n // Synchronize now\r\n if (waitUntilStable) {\r\n return this.synchronize().then(e => this.getItem(id, false))\r\n }\r\n\r\n // Get object\r\n let object = this.objects.get(id)\r\n if (!object) {\r\n return null\r\n }\r\n\r\n // Check for cached object\r\n if (object.cached) { return object.cached }\r\n\r\n // Map to the plugin's intended type\r\n let mapped = this.map(object)\r\n if (!mapped) { return null }\r\n\r\n // Cache it\r\n object.cached = mapped\r\n\r\n // Done\r\n return mapped\r\n }\r\n\r\n /**\r\n * Returns true if the object with the specified ID exists in the cache.\r\n *\r\n * @param {*} id The object's ID\r\n * @returns {boolean} True if the object exists.\r\n */\r\n has (id) {\r\n return this.objects.has(id)\r\n }\r\n\r\n /**\r\n * Change a field, and return a function which can be called to undo the change.\r\n *\r\n * @param {String} id Object ID\r\n * @param {String} keyPath The key to change\r\n * @param {*} value The new value\r\n * @returns {Function} An undo function\r\n */\r\n preemptiveChange (id, keyPath, value) {\r\n // Get object. If it doesn't exist, do nothing and return an undo function which does nothing.\r\n let object = this.objects.get(id)\r\n if (!object) { return function () {} }\r\n\r\n // Get current value\r\n let oldValue = get(object.data, keyPath)\r\n\r\n // Notify\r\n this.willUpdateField(object, keyPath, oldValue, value)\r\n\r\n // Update to new value\r\n set(object.data, keyPath, value)\r\n object.cached = null\r\n this.emit('object.updated', id)\r\n this.emit('updated')\r\n\r\n // Notify database of change\r\n this.objects.set(id, object)\r\n\r\n // Return undo function\r\n return e => {\r\n // Notify\r\n this.willUpdateField(object, keyPath, value, oldValue)\r\n\r\n // Revert\r\n set(object.data, keyPath, oldValue)\r\n object.cached = null\r\n this.emit('object.updated', id)\r\n this.emit('updated')\r\n\r\n // Notify database of change\r\n this.objects.set(id, object)\r\n }\r\n }\r\n\r\n /**\r\n * Remove an object, and return an undo function.\r\n *\r\n * @param {String} id The ID of the object to remove.\r\n * @returns {Function} An undo function\r\n */\r\n preemptiveRemove (id) {\r\n // Get object. If it doesn't exist, do nothing and return an undo function which does nothing.\r\n let object = this.objects.get(id)\r\n if (!object) { return function () {} }\r\n\r\n // Notify\r\n this.willRemove(object)\r\n\r\n // Remove object\r\n this.objects.delete(id)\r\n this.emit('updated')\r\n\r\n // Return undo function\r\n return e => {\r\n // Check that a new object wasn't added in the mean time\r\n if (this.objects.has(id)) { return }\r\n\r\n // Notify\r\n this.willAdd(object)\r\n\r\n // Revert\r\n this.addObjects([object])\r\n }\r\n }\r\n\r\n /**\r\n * Create a filter\r\n *\r\n * @param {String} keyPath The data path to check\r\n * @param {*} value The value to check for\r\n * @returns {Filter} The filtered region\r\n */\r\n filter (keyPath, value) {\r\n return new Filter(this, keyPath, value)\r\n }\r\n\r\n /**\r\n * Called when an object is about to be added.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be added.\r\n */\r\n willAdd (object) {}\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {Object} newData The sparse object containing the changed fields\r\n */\r\n willUpdateFields (object, newData) {}\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {String} keyPath The field which will be changed.\r\n * @param {*} oldValue The current field value.\r\n * @param {*} newValue The new field value.\r\n */\r\n willUpdateField (object, keyPath, oldValue, newValue) {}\r\n\r\n /**\r\n * Called when an object is about to be removed.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject|String} objectOrID The object (or ID) which will be updated.\r\n */\r\n willRemove (objectOrID) {}\r\n}\r\n","\r\nimport { get } from 'lodash'\r\n\r\n/**\r\n * A Filter exposes the same functions as a Region, except the returned data is filtered by the specified key.\r\n */\r\nexport default class Filter {\r\n\r\n /** Constructor */\r\n constructor(region, keyPath, value) {\r\n\r\n // Store values\r\n this.region = region\r\n this.keyPath = keyPath\r\n this.value = value\r\n\r\n }\r\n\r\n /** Passthrough */\r\n get objects() {\r\n return this.region.objects\r\n }\r\n\r\n /** Passthrough */\r\n synchronize() {\r\n return this.region.synchronize()\r\n }\r\n\r\n /** Passthrough */\r\n getItem(id, waitUntilStable = true) {\r\n return this.region.getItem(id, waitUntilStable)\r\n }\r\n\r\n /** Passthrough */\r\n map(object) {\r\n return this.region.map(object)\r\n }\r\n\r\n /**\r\n * Returns all the objects within this region, filtered by this filter.\r\n * \r\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\r\n * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise).\r\n */\r\n get(waitUntilStable = true) {\r\n\r\n // Synchronize now\r\n if (waitUntilStable)\r\n return this.synchronize().then(e => this.get(false))\r\n\r\n // Create an array of all data objects\r\n let items = []\r\n for (let object of this.objects.values()) {\r\n\r\n // Check filtered value\r\n let value = get(object.data, this.keyPath)\r\n if (value != this.value)\r\n continue\r\n\r\n // Check for cached object\r\n if (object.cached) {\r\n items.push(object.cached)\r\n continue\r\n }\r\n\r\n // Map to the plugin's intended type\r\n let mapped = this.map(object)\r\n if (!mapped)\r\n continue\r\n\r\n // Cache it\r\n object.cached = mapped\r\n\r\n // Add to list\r\n items.push(mapped)\r\n\r\n }\r\n\r\n // Done\r\n return items\r\n\r\n }\r\n\r\n /** \r\n * Create a filter.\r\n * \r\n * @param {String} keyPath The data path to check\r\n * @param {*} value The value to check for\r\n * @returns {Filter} The filtered region\r\n */\r\n // TODO: Implement subfiltering\r\n // filter(keyPath, value) {\r\n // return new Filter(this, keyPath, value)\r\n // }\r\n\r\n}","\r\nimport PouchDB from 'pouchdb'\r\nimport DataObject from './DataObject'\r\n\r\n/** \r\n * A version of the built-in Map class, but which synchronizes to a local database of offline access. Key must be a string,\r\n * and value must be a DataObject.\r\n */\r\nexport default class Database {\r\n\r\n constructor(id, noStore) {\r\n\r\n // Store ID\r\n this.id = id\r\n this.noStore = noStore\r\n\r\n // Create PouchDB instance\r\n this.pouch = this.setupPouchDB()\r\n\r\n // Local cache of objects\r\n this.cache = new Map()\r\n\r\n // Database queue\r\n this.queue = new Queue()\r\n\r\n }\r\n\r\n setupPouchDB() {\r\n\r\n // Catch errors, eg. if in private browsing mode\r\n try {\r\n\r\n // Stop if only in memory\r\n if (this.noStore)\r\n return null\r\n\r\n // Create database\r\n return new PouchDB({\r\n\r\n // Database name\r\n name: 'datapool_' + this.id\r\n\r\n })\r\n\r\n } catch (err) {\r\n\r\n // Failed to load\r\n console.warn(err)\r\n return null\r\n\r\n }\r\n\r\n }\r\n\r\n /** Load documents from storage. This must be called before the map can be used correctly. */\r\n async load() {\r\n\r\n // Only do once\r\n if (this.loaded) return\r\n this.loaded = true\r\n\r\n // Stop if no database\r\n if (!this.pouch)\r\n return\r\n\r\n // Queue this operation\r\n return this.queue.run(async e => {\r\n\r\n // Fetch all documents\r\n let results = await this.pouch.allDocs({ include_docs: true })\r\n\r\n // Store each item in the memory cache\r\n for (let row of results.rows) {\r\n\r\n // Ignore deleted and errors\r\n if (!row.id || !row.value.rev)\r\n continue\r\n\r\n // Create and cache the DataObject\r\n let obj = new DataObject(row.doc.type, row.id, row.doc.data)\r\n obj.rev = row.value.rev\r\n this.cache.set(row.id, obj)\r\n\r\n }\r\n\r\n // Compact database in background (ie don't wait for promise)\r\n // TODO: Why u take so long?\r\n // Promise.resolve().then(async e => {\r\n // let time = Date.now()\r\n // await this.pouch.viewCleanup()\r\n // await this.pouch.compact()\r\n // console.log(`[DataPool > DatabaseMap] Compacting database took ${Math.round(Date.now() - time)} ms`)\r\n // })\r\n\r\n // Done\r\n console.log(`[DataPool > DatabaseMap] Loaded ${this.cache.size} items from ${this.pouch.name}`)\r\n\r\n }).catch(err => {\r\n\r\n // Failed to load from PouchDB\r\n console.warn('Unable to load items from PouchDB.', err)\r\n\r\n })\r\n\r\n }\r\n\r\n /** Passthrough getter functions, these don't modify the database */\r\n get size() { return this.cache.size }\r\n entries() { return this.cache.entries() }\r\n forEach(callback, thisValue) { return this.cache.forEach(callback, thisValue) }\r\n get(key) { return this.cache.get(key) }\r\n has(key) { return this.cache.has(key) }\r\n keys() { return this.cache.keys() }\r\n values() { return this.cache.values() }\r\n [Symbol.iterator]() { return this.cache[Symbol.iterator]() }\r\n\r\n clear() {\r\n\r\n // Clear the array\r\n this.cache.clear()\r\n\r\n // Stop if no database\r\n if (!this.pouch)\r\n return\r\n\r\n // Execute on database queue\r\n this.queue.run(async e => {\r\n\r\n // Delete database\r\n await this.pouch.destroy()\r\n\r\n // Create database again\r\n this.pouch = this.setupPouchDB()\r\n\r\n })\r\n\r\n }\r\n\r\n delete(key) {\r\n\r\n // Stop if no database\r\n if (!this.pouch)\r\n return this.cache.delete(key)\r\n\r\n // Delete item\r\n let found = this.cache.delete(key)\r\n\r\n // Execute on database queue\r\n this.queue.run(async e => {\r\n\r\n // Fetch doc info, stop if already removed\r\n let revision = await this.getRevision(key)\r\n if (!revision)\r\n return\r\n\r\n // Remove document\r\n await this.pouch.remove(key, revision)\r\n\r\n })\r\n\r\n // Done\r\n return found\r\n\r\n }\r\n\r\n /** Set a value. `value` must be a DataObject. */\r\n set(key, value) {\r\n\r\n // Stop if no database\r\n if (!this.pouch)\r\n return this.cache.set(key, value)\r\n\r\n // Set it in the memory cache\r\n this.cache.set(key, value)\r\n\r\n // Execute on database queue\r\n this.queue.run(async e => {\r\n\r\n // Fetch doc info\r\n let revision = await this.getRevision(key)\r\n if (!revision) {\r\n\r\n // Create new document\r\n await this.pouch.put({\r\n _id: key,\r\n type: value.type,\r\n data: value.data\r\n })\r\n\r\n } else {\r\n\r\n // Updating existing document\r\n await this.pouch.put({\r\n _id: key,\r\n _rev: revision,\r\n type: value.type,\r\n data: value.data\r\n })\r\n\r\n }\r\n\r\n })\r\n\r\n }\r\n\r\n /** Get revision for ID */\r\n async getRevision(id) {\r\n\r\n try {\r\n\r\n // Stop if no database\r\n if (!this.pouch)\r\n return null\r\n\r\n // Load document\r\n let results = await this.pouch.get(id)\r\n return results && results._rev\r\n\r\n } catch (err) {\r\n\r\n // Check if not found\r\n if (err.status == 404)\r\n return null\r\n\r\n // Any other error, throw\r\n throw err\r\n\r\n }\r\n\r\n }\r\n\r\n /** Get a string extra value */\r\n getExtra(key) {\r\n\r\n // Get item\r\n let itm = this.get('extra:' + key)\r\n if (itm)\r\n return itm.data\r\n else\r\n return null\r\n\r\n }\r\n\r\n /** Set a string extra */\r\n setExtra(key, value) {\r\n\r\n // Set item\r\n this.set('extra:' + key, {\r\n type: '_extra',\r\n data: value\r\n })\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n//\r\n// This class simply executes async functions one after another. This is useful for ensuring the order of function calls remain the same\r\n// for async functions.\r\nclass Queue {\r\n\r\n constructor() {\r\n\r\n /** List of functions to execute on the next run loop */\r\n this.pending = []\r\n\r\n /** True if currently executing an action */\r\n this.isRunning = null\r\n\r\n // this.timer = setInterval(this.log.bind(this), 250)\r\n\r\n }\r\n\r\n /** Schedule an action */\r\n run(func) {\r\n\r\n // Create promise\r\n return new Promise((onSuccess, onFail) => {\r\n\r\n // Add to list\r\n this.pending.push({\r\n func,\r\n onSuccess,\r\n onFail\r\n })\r\n\r\n // Start timer if needed\r\n if (!this.isRunning)\r\n this.executePendingActions()\r\n\r\n })\r\n\r\n }\r\n\r\n /** @private Called to execute pending actions */\r\n executePendingActions() {\r\n\r\n // Stop if already running\r\n if (this.isRunning) return\r\n this.isRunning = true\r\n\r\n // Get next action\r\n let action = this.pending.shift()\r\n if (!action) {\r\n \r\n // Queue is complete\r\n this.isRunning = false\r\n return\r\n\r\n }\r\n\r\n // Run action\r\n action.func().then(e => {\r\n\r\n // Completed\r\n action.onSuccess(e)\r\n\r\n }).catch(err => {\r\n\r\n // Log errors\r\n console.error(err)\r\n action.onFail(err)\r\n\r\n }).then(e => {\r\n\r\n // Run next one\r\n this.isRunning = false\r\n this.executePendingActions()\r\n\r\n })\r\n\r\n }\r\n\r\n log() {\r\n console.log(`[DataPool > DatabaseMap] Database queue has ${this.pending.length} items pending`)\r\n }\r\n\r\n}","import immediate from 'immediate';\nimport uuidV4 from 'uuid';\nimport Md5 from 'spark-md5';\nimport vuvuzela from 'vuvuzela';\nimport getArguments from 'argsarray';\nimport inherits from 'inherits';\nimport { EventEmitter } from 'events';\n\nfunction mangle(key) {\n return '$' + key;\n}\nfunction unmangle(key) {\n return key.substring(1);\n}\nfunction Map$1() {\n this._store = {};\n}\nMap$1.prototype.get = function (key) {\n var mangled = mangle(key);\n return this._store[mangled];\n};\nMap$1.prototype.set = function (key, value) {\n var mangled = mangle(key);\n this._store[mangled] = value;\n return true;\n};\nMap$1.prototype.has = function (key) {\n var mangled = mangle(key);\n return mangled in this._store;\n};\nMap$1.prototype.delete = function (key) {\n var mangled = mangle(key);\n var res = mangled in this._store;\n delete this._store[mangled];\n return res;\n};\nMap$1.prototype.forEach = function (cb) {\n var keys = Object.keys(this._store);\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n var value = this._store[key];\n key = unmangle(key);\n cb(value, key);\n }\n};\nObject.defineProperty(Map$1.prototype, 'size', {\n get: function () {\n return Object.keys(this._store).length;\n }\n});\n\nfunction Set$1(array) {\n this._store = new Map$1();\n\n // init with an array\n if (array && Array.isArray(array)) {\n for (var i = 0, len = array.length; i < len; i++) {\n this.add(array[i]);\n }\n }\n}\nSet$1.prototype.add = function (key) {\n return this._store.set(key, true);\n};\nSet$1.prototype.has = function (key) {\n return this._store.has(key);\n};\nSet$1.prototype.forEach = function (cb) {\n this._store.forEach(function (value, key) {\n cb(key);\n });\n};\nObject.defineProperty(Set$1.prototype, 'size', {\n get: function () {\n return this._store.size;\n }\n});\n\n/* global Map,Set,Symbol */\n// Based on https://kangax.github.io/compat-table/es6/ we can sniff out\n// incomplete Map/Set implementations which would otherwise cause our tests to fail.\n// Notably they fail in IE11 and iOS 8.4, which this prevents.\nfunction supportsMapAndSet() {\n if (typeof Symbol === 'undefined' || typeof Map === 'undefined' || typeof Set === 'undefined') {\n return false;\n }\n var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);\n return prop && 'get' in prop && Map[Symbol.species] === Map;\n}\n\n// based on https://github.com/montagejs/collections\n\nvar ExportedSet;\nvar ExportedMap;\n\n{\n if (supportsMapAndSet()) { // prefer built-in Map/Set\n ExportedSet = Set;\n ExportedMap = Map;\n } else { // fall back to our polyfill\n ExportedSet = Set$1;\n ExportedMap = Map$1;\n }\n}\n\nfunction isBinaryObject(object) {\n return (typeof ArrayBuffer !== 'undefined' && object instanceof ArrayBuffer) ||\n (typeof Blob !== 'undefined' && object instanceof Blob);\n}\n\nfunction cloneArrayBuffer(buff) {\n if (typeof buff.slice === 'function') {\n return buff.slice(0);\n }\n // IE10-11 slice() polyfill\n var target = new ArrayBuffer(buff.byteLength);\n var targetArray = new Uint8Array(target);\n var sourceArray = new Uint8Array(buff);\n targetArray.set(sourceArray);\n return target;\n}\n\nfunction cloneBinaryObject(object) {\n if (object instanceof ArrayBuffer) {\n return cloneArrayBuffer(object);\n }\n var size = object.size;\n var type = object.type;\n // Blob\n if (typeof object.slice === 'function') {\n return object.slice(0, size, type);\n }\n // PhantomJS slice() replacement\n return object.webkitSlice(0, size, type);\n}\n\n// most of this is borrowed from lodash.isPlainObject:\n// https://github.com/fis-components/lodash.isplainobject/\n// blob/29c358140a74f252aeb08c9eb28bef86f2217d4a/index.js\n\nvar funcToString = Function.prototype.toString;\nvar objectCtorString = funcToString.call(Object);\n\nfunction isPlainObject(value) {\n var proto = Object.getPrototypeOf(value);\n /* istanbul ignore if */\n if (proto === null) { // not sure when this happens, but I guess it can\n return true;\n }\n var Ctor = proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nfunction clone(object) {\n var newObject;\n var i;\n var len;\n\n if (!object || typeof object !== 'object') {\n return object;\n }\n\n if (Array.isArray(object)) {\n newObject = [];\n for (i = 0, len = object.length; i < len; i++) {\n newObject[i] = clone(object[i]);\n }\n return newObject;\n }\n\n // special case: to avoid inconsistencies between IndexedDB\n // and other backends, we automatically stringify Dates\n if (object instanceof Date) {\n return object.toISOString();\n }\n\n if (isBinaryObject(object)) {\n return cloneBinaryObject(object);\n }\n\n if (!isPlainObject(object)) {\n return object; // don't clone objects like Workers\n }\n\n newObject = {};\n for (i in object) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(object, i)) {\n var value = clone(object[i]);\n if (typeof value !== 'undefined') {\n newObject[i] = value;\n }\n }\n }\n return newObject;\n}\n\nfunction once(fun) {\n var called = false;\n return getArguments(function (args) {\n /* istanbul ignore if */\n if (called) {\n // this is a smoke test and should never actually happen\n throw new Error('once called more than once');\n } else {\n called = true;\n fun.apply(this, args);\n }\n });\n}\n\nfunction toPromise(func) {\n //create the function we will be returning\n return getArguments(function (args) {\n // Clone arguments\n args = clone(args);\n var self = this;\n // if the last argument is a function, assume its a callback\n var usedCB = (typeof args[args.length - 1] === 'function') ? args.pop() : false;\n var promise = new Promise(function (fulfill, reject) {\n var resp;\n try {\n var callback = once(function (err, mesg) {\n if (err) {\n reject(err);\n } else {\n fulfill(mesg);\n }\n });\n // create a callback for this invocation\n // apply the function in the orig context\n args.push(callback);\n resp = func.apply(self, args);\n if (resp && typeof resp.then === 'function') {\n fulfill(resp);\n }\n } catch (e) {\n reject(e);\n }\n });\n // if there is a callback, call it back\n if (usedCB) {\n promise.then(function (result) {\n usedCB(null, result);\n }, usedCB);\n }\n return promise;\n });\n}\n\nfunction logApiCall(self, name, args) {\n /* istanbul ignore if */\n if (self.constructor.listeners('debug').length) {\n var logArgs = ['api', self.name, name];\n for (var i = 0; i < args.length - 1; i++) {\n logArgs.push(args[i]);\n }\n self.constructor.emit('debug', logArgs);\n\n // override the callback itself to log the response\n var origCallback = args[args.length - 1];\n args[args.length - 1] = function (err, res) {\n var responseArgs = ['api', self.name, name];\n responseArgs = responseArgs.concat(\n err ? ['error', err] : ['success', res]\n );\n self.constructor.emit('debug', responseArgs);\n origCallback(err, res);\n };\n }\n}\n\nfunction adapterFun(name, callback) {\n return toPromise(getArguments(function (args) {\n if (this._closed) {\n return Promise.reject(new Error('database is closed'));\n }\n if (this._destroyed) {\n return Promise.reject(new Error('database is destroyed'));\n }\n var self = this;\n logApiCall(self, name, args);\n if (!this.taskqueue.isReady) {\n return new Promise(function (fulfill, reject) {\n self.taskqueue.addTask(function (failed) {\n if (failed) {\n reject(failed);\n } else {\n fulfill(self[name].apply(self, args));\n }\n });\n });\n }\n return callback.apply(this, args);\n }));\n}\n\n// like underscore/lodash _.pick()\nfunction pick(obj, arr) {\n var res = {};\n for (var i = 0, len = arr.length; i < len; i++) {\n var prop = arr[i];\n if (prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\n\n// Most browsers throttle concurrent requests at 6, so it's silly\n// to shim _bulk_get by trying to launch potentially hundreds of requests\n// and then letting the majority time out. We can handle this ourselves.\nvar MAX_NUM_CONCURRENT_REQUESTS = 6;\n\nfunction identityFunction(x) {\n return x;\n}\n\nfunction formatResultForOpenRevsGet(result) {\n return [{\n ok: result\n }];\n}\n\n// shim for P/CouchDB adapters that don't directly implement _bulk_get\nfunction bulkGet(db, opts, callback) {\n var requests = opts.docs;\n\n // consolidate into one request per doc if possible\n var requestsById = new ExportedMap();\n requests.forEach(function (request) {\n if (requestsById.has(request.id)) {\n requestsById.get(request.id).push(request);\n } else {\n requestsById.set(request.id, [request]);\n }\n });\n\n var numDocs = requestsById.size;\n var numDone = 0;\n var perDocResults = new Array(numDocs);\n\n function collapseResultsAndFinish() {\n var results = [];\n perDocResults.forEach(function (res) {\n res.docs.forEach(function (info) {\n results.push({\n id: res.id,\n docs: [info]\n });\n });\n });\n callback(null, {results: results});\n }\n\n function checkDone() {\n if (++numDone === numDocs) {\n collapseResultsAndFinish();\n }\n }\n\n function gotResult(docIndex, id, docs) {\n perDocResults[docIndex] = {id: id, docs: docs};\n checkDone();\n }\n\n var allRequests = [];\n requestsById.forEach(function (value, key) {\n allRequests.push(key);\n });\n\n var i = 0;\n\n function nextBatch() {\n\n if (i >= allRequests.length) {\n return;\n }\n\n var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);\n var batch = allRequests.slice(i, upTo);\n processBatch(batch, i);\n i += batch.length;\n }\n\n function processBatch(batch, offset) {\n batch.forEach(function (docId, j) {\n var docIdx = offset + j;\n var docRequests = requestsById.get(docId);\n\n // just use the first request as the \"template\"\n // TODO: The _bulk_get API allows for more subtle use cases than this,\n // but for now it is unlikely that there will be a mix of different\n // \"atts_since\" or \"attachments\" in the same request, since it's just\n // replicate.js that is using this for the moment.\n // Also, atts_since is aspirational, since we don't support it yet.\n var docOpts = pick(docRequests[0], ['atts_since', 'attachments']);\n docOpts.open_revs = docRequests.map(function (request) {\n // rev is optional, open_revs disallowed\n return request.rev;\n });\n\n // remove falsey / undefined revisions\n docOpts.open_revs = docOpts.open_revs.filter(identityFunction);\n\n var formatResult = identityFunction;\n\n if (docOpts.open_revs.length === 0) {\n delete docOpts.open_revs;\n\n // when fetching only the \"winning\" leaf,\n // transform the result so it looks like an open_revs\n // request\n formatResult = formatResultForOpenRevsGet;\n }\n\n // globally-supplied options\n ['revs', 'attachments', 'binary', 'ajax', 'latest'].forEach(function (param) {\n if (param in opts) {\n docOpts[param] = opts[param];\n }\n });\n db.get(docId, docOpts, function (err, res) {\n var result;\n /* istanbul ignore if */\n if (err) {\n result = [{error: err}];\n } else {\n result = formatResult(res);\n }\n gotResult(docIdx, docId, result);\n nextBatch();\n });\n });\n }\n\n nextBatch();\n\n}\n\nvar hasLocal;\n\ntry {\n localStorage.setItem('_pouch_check_localstorage', 1);\n hasLocal = !!localStorage.getItem('_pouch_check_localstorage');\n} catch (e) {\n hasLocal = false;\n}\n\nfunction hasLocalStorage() {\n return hasLocal;\n}\n\n// Custom nextTick() shim for browsers. In node, this will just be process.nextTick(). We\n\ninherits(Changes, EventEmitter);\n\n/* istanbul ignore next */\nfunction attachBrowserEvents(self) {\n if (hasLocalStorage()) {\n addEventListener(\"storage\", function (e) {\n self.emit(e.key);\n });\n }\n}\n\nfunction Changes() {\n EventEmitter.call(this);\n this._listeners = {};\n\n attachBrowserEvents(this);\n}\nChanges.prototype.addListener = function (dbName, id, db, opts) {\n /* istanbul ignore if */\n if (this._listeners[id]) {\n return;\n }\n var self = this;\n var inprogress = false;\n function eventFunction() {\n /* istanbul ignore if */\n if (!self._listeners[id]) {\n return;\n }\n if (inprogress) {\n inprogress = 'waiting';\n return;\n }\n inprogress = true;\n var changesOpts = pick(opts, [\n 'style', 'include_docs', 'attachments', 'conflicts', 'filter',\n 'doc_ids', 'view', 'since', 'query_params', 'binary', 'return_docs'\n ]);\n\n /* istanbul ignore next */\n function onError() {\n inprogress = false;\n }\n\n db.changes(changesOpts).on('change', function (c) {\n if (c.seq > opts.since && !opts.cancelled) {\n opts.since = c.seq;\n opts.onChange(c);\n }\n }).on('complete', function () {\n if (inprogress === 'waiting') {\n immediate(eventFunction);\n }\n inprogress = false;\n }).on('error', onError);\n }\n this._listeners[id] = eventFunction;\n this.on(dbName, eventFunction);\n};\n\nChanges.prototype.removeListener = function (dbName, id) {\n /* istanbul ignore if */\n if (!(id in this._listeners)) {\n return;\n }\n EventEmitter.prototype.removeListener.call(this, dbName,\n this._listeners[id]);\n delete this._listeners[id];\n};\n\n\n/* istanbul ignore next */\nChanges.prototype.notifyLocalWindows = function (dbName) {\n //do a useless change on a storage thing\n //in order to get other windows's listeners to activate\n if (hasLocalStorage()) {\n localStorage[dbName] = (localStorage[dbName] === \"a\") ? \"b\" : \"a\";\n }\n};\n\nChanges.prototype.notify = function (dbName) {\n this.emit(dbName);\n this.notifyLocalWindows(dbName);\n};\n\nfunction guardedConsole(method) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined' && typeof console[method] === 'function') {\n var args = Array.prototype.slice.call(arguments, 1);\n console[method].apply(console, args);\n }\n}\n\nfunction randomNumber(min, max) {\n var maxTimeout = 600000; // Hard-coded default of 10 minutes\n min = parseInt(min, 10) || 0;\n max = parseInt(max, 10);\n if (max !== max || max <= min) {\n max = (min || 1) << 1; //doubling\n } else {\n max = max + 1;\n }\n // In order to not exceed maxTimeout, pick a random value between half of maxTimeout and maxTimeout\n if (max > maxTimeout) {\n min = maxTimeout >> 1; // divide by two\n max = maxTimeout;\n }\n var ratio = Math.random();\n var range = max - min;\n\n return ~~(range * ratio + min); // ~~ coerces to an int, but fast.\n}\n\nfunction defaultBackOff(min) {\n var max = 0;\n if (!min) {\n max = 2000;\n }\n return randomNumber(min, max);\n}\n\n// designed to give info to browser users, who are disturbed\n// when they see http errors in the console\nfunction explainError(status, str) {\n guardedConsole('info', 'The above ' + status + ' is totally normal. ' + str);\n}\n\nvar assign;\n{\n if (typeof Object.assign === 'function') {\n assign = Object.assign;\n } else {\n // lite Object.assign polyfill based on\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n assign = function (target) {\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\n\nvar $inject_Object_assign = assign;\n\ninherits(PouchError, Error);\n\nfunction PouchError(status, error, reason) {\n Error.call(this, reason);\n this.status = status;\n this.name = error;\n this.message = reason;\n this.error = true;\n}\n\nPouchError.prototype.toString = function () {\n return JSON.stringify({\n status: this.status,\n name: this.name,\n message: this.message,\n reason: this.reason\n });\n};\n\nvar UNAUTHORIZED = new PouchError(401, 'unauthorized', \"Name or password is incorrect.\");\nvar MISSING_BULK_DOCS = new PouchError(400, 'bad_request', \"Missing JSON list of 'docs'\");\nvar MISSING_DOC = new PouchError(404, 'not_found', 'missing');\nvar REV_CONFLICT = new PouchError(409, 'conflict', 'Document update conflict');\nvar INVALID_ID = new PouchError(400, 'bad_request', '_id field must contain a string');\nvar MISSING_ID = new PouchError(412, 'missing_id', '_id is required for puts');\nvar RESERVED_ID = new PouchError(400, 'bad_request', 'Only reserved document ids may start with underscore.');\nvar NOT_OPEN = new PouchError(412, 'precondition_failed', 'Database not open');\nvar UNKNOWN_ERROR = new PouchError(500, 'unknown_error', 'Database encountered an unknown error');\nvar BAD_ARG = new PouchError(500, 'badarg', 'Some query argument is invalid');\nvar INVALID_REQUEST = new PouchError(400, 'invalid_request', 'Request was invalid');\nvar QUERY_PARSE_ERROR = new PouchError(400, 'query_parse_error', 'Some query parameter is invalid');\nvar DOC_VALIDATION = new PouchError(500, 'doc_validation', 'Bad special document member');\nvar BAD_REQUEST = new PouchError(400, 'bad_request', 'Something wrong with the request');\nvar NOT_AN_OBJECT = new PouchError(400, 'bad_request', 'Document must be a JSON object');\nvar DB_MISSING = new PouchError(404, 'not_found', 'Database not found');\nvar IDB_ERROR = new PouchError(500, 'indexed_db_went_bad', 'unknown');\nvar WSQ_ERROR = new PouchError(500, 'web_sql_went_bad', 'unknown');\nvar LDB_ERROR = new PouchError(500, 'levelDB_went_went_bad', 'unknown');\nvar FORBIDDEN = new PouchError(403, 'forbidden', 'Forbidden by design doc validate_doc_update function');\nvar INVALID_REV = new PouchError(400, 'bad_request', 'Invalid rev format');\nvar FILE_EXISTS = new PouchError(412, 'file_exists', 'The database could not be created, the file already exists.');\nvar MISSING_STUB = new PouchError(412, 'missing_stub', 'A pre-existing attachment stub wasn\\'t found');\nvar INVALID_URL = new PouchError(413, 'invalid_url', 'Provided URL is invalid');\n\nfunction createError(error, reason) {\n function CustomPouchError(reason) {\n // inherit error properties from our parent error manually\n // so as to allow proper JSON parsing.\n /* jshint ignore:start */\n for (var p in error) {\n if (typeof error[p] !== 'function') {\n this[p] = error[p];\n }\n }\n /* jshint ignore:end */\n if (reason !== undefined) {\n this.reason = reason;\n }\n }\n CustomPouchError.prototype = PouchError.prototype;\n return new CustomPouchError(reason);\n}\n\nfunction generateErrorFromResponse(err) {\n\n if (typeof err !== 'object') {\n var data = err;\n err = UNKNOWN_ERROR;\n err.data = data;\n }\n\n if ('error' in err && err.error === 'conflict') {\n err.name = 'conflict';\n err.status = 409;\n }\n\n if (!('name' in err)) {\n err.name = err.error || 'unknown';\n }\n\n if (!('status' in err)) {\n err.status = 500;\n }\n\n if (!('message' in err)) {\n err.message = err.message || err.reason;\n }\n\n return err;\n}\n\nfunction tryFilter(filter, doc, req) {\n try {\n return !filter(doc, req);\n } catch (err) {\n var msg = 'Filter function threw: ' + err.toString();\n return createError(BAD_REQUEST, msg);\n }\n}\n\nfunction filterChange(opts) {\n var req = {};\n var hasFilter = opts.filter && typeof opts.filter === 'function';\n req.query = opts.query_params;\n\n return function filter(change) {\n if (!change.doc) {\n // CSG sends events on the changes feed that don't have documents,\n // this hack makes a whole lot of existing code robust.\n change.doc = {};\n }\n\n var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);\n\n if (typeof filterReturn === 'object') {\n return filterReturn;\n }\n\n if (filterReturn) {\n return false;\n }\n\n if (!opts.include_docs) {\n delete change.doc;\n } else if (!opts.attachments) {\n for (var att in change.doc._attachments) {\n /* istanbul ignore else */\n if (change.doc._attachments.hasOwnProperty(att)) {\n change.doc._attachments[att].stub = true;\n }\n }\n }\n return true;\n };\n}\n\nfunction flatten(arrs) {\n var res = [];\n for (var i = 0, len = arrs.length; i < len; i++) {\n res = res.concat(arrs[i]);\n }\n return res;\n}\n\n// shim for Function.prototype.name,\n\n// Determine id an ID is valid\n// - invalid IDs begin with an underescore that does not begin '_design' or\n// '_local'\n// - any other string value is a valid id\n// Returns the specific error object for each case\nfunction invalidIdError(id) {\n var err;\n if (!id) {\n err = createError(MISSING_ID);\n } else if (typeof id !== 'string') {\n err = createError(INVALID_ID);\n } else if (/^_/.test(id) && !(/^_(design|local)/).test(id)) {\n err = createError(RESERVED_ID);\n }\n if (err) {\n throw err;\n }\n}\n\n// Checks if a PouchDB object is \"remote\" or not. This is\n\nfunction isRemote(db) {\n if (typeof db._remote === 'boolean') {\n return db._remote;\n }\n /* istanbul ignore next */\n if (typeof db.type === 'function') {\n guardedConsole('warn',\n 'db.type() is deprecated and will be removed in ' +\n 'a future version of PouchDB');\n return db.type() === 'http';\n }\n /* istanbul ignore next */\n return false;\n}\n\nfunction listenerCount(ee, type) {\n return 'listenerCount' in ee ? ee.listenerCount(type) :\n EventEmitter.listenerCount(ee, type);\n}\n\nfunction parseDesignDocFunctionName(s) {\n if (!s) {\n return null;\n }\n var parts = s.split('/');\n if (parts.length === 2) {\n return parts;\n }\n if (parts.length === 1) {\n return [s, s];\n }\n return null;\n}\n\nfunction normalizeDesignDocFunctionName(s) {\n var normalized = parseDesignDocFunctionName(s);\n return normalized ? normalized.join('/') : null;\n}\n\n// originally parseUri 1.2.2, now patched by us\n// (c) Steven Levithan <stevenlevithan.com>\n// MIT License\nvar keys = [\"source\", \"protocol\", \"authority\", \"userInfo\", \"user\", \"password\",\n \"host\", \"port\", \"relative\", \"path\", \"directory\", \"file\", \"query\", \"anchor\"];\nvar qName =\"queryKey\";\nvar qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;\n\n// use the \"loose\" parser\n/* eslint maxlen: 0, no-useless-escape: 0 */\nvar parser = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUri(str) {\n var m = parser.exec(str);\n var uri = {};\n var i = 14;\n\n while (i--) {\n var key = keys[i];\n var value = m[i] || \"\";\n var encoded = ['user', 'password'].indexOf(key) !== -1;\n uri[key] = encoded ? decodeURIComponent(value) : value;\n }\n\n uri[qName] = {};\n uri[keys[12]].replace(qParser, function ($0, $1, $2) {\n if ($1) {\n uri[qName][$1] = $2;\n }\n });\n\n return uri;\n}\n\n// Based on https://github.com/alexdavid/scope-eval v0.0.3\n// (source: https://unpkg.com/scope-eval@0.0.3/scope_eval.js)\n// This is basically just a wrapper around new Function()\n\nfunction scopeEval(source, scope) {\n var keys = [];\n var values = [];\n for (var key in scope) {\n if (scope.hasOwnProperty(key)) {\n keys.push(key);\n values.push(scope[key]);\n }\n }\n keys.push(source);\n return Function.apply(null, keys).apply(null, values);\n}\n\n// this is essentially the \"update sugar\" function from daleharvey/pouchdb#1388\n// the diffFun tells us what delta to apply to the doc. it either returns\n// the doc, or false if it doesn't need to do an update after all\nfunction upsert(db, docId, diffFun) {\n return new Promise(function (fulfill, reject) {\n db.get(docId, function (err, doc) {\n if (err) {\n /* istanbul ignore next */\n if (err.status !== 404) {\n return reject(err);\n }\n doc = {};\n }\n\n // the user might change the _rev, so save it for posterity\n var docRev = doc._rev;\n var newDoc = diffFun(doc);\n\n if (!newDoc) {\n // if the diffFun returns falsy, we short-circuit as\n // an optimization\n return fulfill({updated: false, rev: docRev});\n }\n\n // users aren't allowed to modify these values,\n // so reset them here\n newDoc._id = docId;\n newDoc._rev = docRev;\n fulfill(tryAndPut(db, newDoc, diffFun));\n });\n });\n}\n\nfunction tryAndPut(db, doc, diffFun) {\n return db.put(doc).then(function (res) {\n return {\n updated: true,\n rev: res.rev\n };\n }, function (err) {\n /* istanbul ignore next */\n if (err.status !== 409) {\n throw err;\n }\n return upsert(db, doc._id, diffFun);\n });\n}\n\nvar thisAtob = function (str) {\n return atob(str);\n};\n\nvar thisBtoa = function (str) {\n return btoa(str);\n};\n\n// Abstracts constructing a Blob object, so it also works in older\n// browsers that don't support the native Blob constructor (e.g.\n// old QtWebKit versions, Android < 4.4).\nfunction createBlob(parts, properties) {\n /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */\n parts = parts || [];\n properties = properties || {};\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== \"TypeError\") {\n throw e;\n }\n var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\n typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\n typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :\n WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\n\n// From http://stackoverflow.com/questions/14967647/ (continues on next line)\n// encode-decode-image-with-base64-breaks-image (2013-04-21)\nfunction binaryStringToArrayBuffer(bin) {\n var length = bin.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n return buf;\n}\n\nfunction binStringToBluffer(binString, type) {\n return createBlob([binaryStringToArrayBuffer(binString)], {type: type});\n}\n\nfunction b64ToBluffer(b64, type) {\n return binStringToBluffer(thisAtob(b64), type);\n}\n\n//Can't find original post, but this is close\n//http://stackoverflow.com/questions/6965107/ (continues on next line)\n//converting-between-strings-and-arraybuffers\nfunction arrayBufferToBinaryString(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var length = bytes.byteLength;\n for (var i = 0; i < length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return binary;\n}\n\n// shim for browsers that don't support it\nfunction readAsBinaryString(blob, callback) {\n var reader = new FileReader();\n var hasBinaryString = typeof reader.readAsBinaryString === 'function';\n reader.onloadend = function (e) {\n var result = e.target.result || '';\n if (hasBinaryString) {\n return callback(result);\n }\n callback(arrayBufferToBinaryString(result));\n };\n if (hasBinaryString) {\n reader.readAsBinaryString(blob);\n } else {\n reader.readAsArrayBuffer(blob);\n }\n}\n\nfunction blobToBinaryString(blobOrBuffer, callback) {\n readAsBinaryString(blobOrBuffer, function (bin) {\n callback(bin);\n });\n}\n\nfunction blobToBase64(blobOrBuffer, callback) {\n blobToBinaryString(blobOrBuffer, function (base64) {\n callback(thisBtoa(base64));\n });\n}\n\n// simplified API. universal browser support is assumed\nfunction readAsArrayBuffer(blob, callback) {\n var reader = new FileReader();\n reader.onloadend = function (e) {\n var result = e.target.result || new ArrayBuffer(0);\n callback(result);\n };\n reader.readAsArrayBuffer(blob);\n}\n\n// this is not used in the browser\n\nvar setImmediateShim = global.setImmediate || global.setTimeout;\nvar MD5_CHUNK_SIZE = 32768;\n\nfunction rawToBase64(raw) {\n return thisBtoa(raw);\n}\n\nfunction sliceBlob(blob, start, end) {\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end);\n }\n return blob.slice(start, end);\n}\n\nfunction appendBlob(buffer, blob, start, end, callback) {\n if (start > 0 || end < blob.size) {\n // only slice blob if we really need to\n blob = sliceBlob(blob, start, end);\n }\n readAsArrayBuffer(blob, function (arrayBuffer) {\n buffer.append(arrayBuffer);\n callback();\n });\n}\n\nfunction appendString(buffer, string, start, end, callback) {\n if (start > 0 || end < string.length) {\n // only create a substring if we really need to\n string = string.substring(start, end);\n }\n buffer.appendBinary(string);\n callback();\n}\n\nfunction binaryMd5(data, callback) {\n var inputIsString = typeof data === 'string';\n var len = inputIsString ? data.length : data.size;\n var chunkSize = Math.min(MD5_CHUNK_SIZE, len);\n var chunks = Math.ceil(len / chunkSize);\n var currentChunk = 0;\n var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();\n\n var append = inputIsString ? appendString : appendBlob;\n\n function next() {\n setImmediateShim(loadNextChunk);\n }\n\n function done() {\n var raw = buffer.end(true);\n var base64 = rawToBase64(raw);\n callback(base64);\n buffer.destroy();\n }\n\n function loadNextChunk() {\n var start = currentChunk * chunkSize;\n var end = start + chunkSize;\n currentChunk++;\n if (currentChunk < chunks) {\n append(buffer, data, start, end, next);\n } else {\n append(buffer, data, start, end, done);\n }\n }\n loadNextChunk();\n}\n\nfunction stringMd5(string) {\n return Md5.hash(string);\n}\n\nfunction rev(doc, deterministic_revs) {\n var clonedDoc = clone(doc);\n if (!deterministic_revs) {\n return uuidV4.v4().replace(/-/g, '').toLowerCase();\n }\n\n delete clonedDoc._rev_tree;\n return stringMd5(JSON.stringify(clonedDoc));\n}\n\nvar uuid = uuidV4.v4;\n\n// We fetch all leafs of the revision tree, and sort them based on tree length\n// and whether they were deleted, undeleted documents with the longest revision\n// tree (most edits) win\n// The final sort algorithm is slightly documented in a sidebar here:\n// http://guide.couchdb.org/draft/conflicts.html\nfunction winningRev(metadata) {\n var winningId;\n var winningPos;\n var winningDeleted;\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var tree = node.ids;\n var branches = tree[2];\n var pos = node.pos;\n if (branches.length) { // non-leaf\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i]});\n }\n continue;\n }\n var deleted = !!tree[1].deleted;\n var id = tree[0];\n // sort by deleted, then pos, then id\n if (!winningId || (winningDeleted !== deleted ? winningDeleted :\n winningPos !== pos ? winningPos < pos : winningId < id)) {\n winningId = id;\n winningPos = pos;\n winningDeleted = deleted;\n }\n }\n\n return winningPos + '-' + winningId;\n}\n\n// Pretty much all below can be combined into a higher order function to\n// traverse revisions\n// The return value from the callback will be passed as context to all\n// children of that node\nfunction traverseRevTree(revs, callback) {\n var toVisit = revs.slice();\n\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var branches = tree[2];\n var newCtx =\n callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], ctx: newCtx});\n }\n }\n}\n\nfunction sortByPos(a, b) {\n return a.pos - b.pos;\n}\n\nfunction collectLeaves(revs) {\n var leaves = [];\n traverseRevTree(revs, function (isLeaf, pos, id, acc, opts) {\n if (isLeaf) {\n leaves.push({rev: pos + \"-\" + id, pos: pos, opts: opts});\n }\n });\n leaves.sort(sortByPos).reverse();\n for (var i = 0, len = leaves.length; i < len; i++) {\n delete leaves[i].pos;\n }\n return leaves;\n}\n\n// returns revs of all conflicts that is leaves such that\n// 1. are not deleted and\n// 2. are different than winning revision\nfunction collectConflicts(metadata) {\n var win = winningRev(metadata);\n var leaves = collectLeaves(metadata.rev_tree);\n var conflicts = [];\n for (var i = 0, len = leaves.length; i < len; i++) {\n var leaf = leaves[i];\n if (leaf.rev !== win && !leaf.opts.deleted) {\n conflicts.push(leaf.rev);\n }\n }\n return conflicts;\n}\n\n// compact a tree by marking its non-leafs as missing,\n// and return a list of revs to delete\nfunction compactTree(metadata) {\n var revs = [];\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n if (opts.status === 'available' && !isLeaf) {\n revs.push(pos + '-' + revHash);\n opts.status = 'missing';\n }\n });\n return revs;\n}\n\n// build up a list of all the paths to the leafs in this revision tree\nfunction rootToLeaf(revs) {\n var paths = [];\n var toVisit = revs.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, opts: opts});\n if (isLeaf) {\n paths.push({pos: (pos + 1 - history.length), ids: history});\n }\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: pos + 1, ids: branches[i], history: history});\n }\n }\n return paths.reverse();\n}\n\n// for a better overview of what this is doing, read:\n\nfunction sortByPos$1(a, b) {\n return a.pos - b.pos;\n}\n\n// classic binary search\nfunction binarySearch(arr, item, comparator) {\n var low = 0;\n var high = arr.length;\n var mid;\n while (low < high) {\n mid = (low + high) >>> 1;\n if (comparator(arr[mid], item) < 0) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n}\n\n// assuming the arr is sorted, insert the item in the proper place\nfunction insertSorted(arr, item, comparator) {\n var idx = binarySearch(arr, item, comparator);\n arr.splice(idx, 0, item);\n}\n\n// Turn a path as a flat array into a tree with a single branch.\n// If any should be stemmed from the beginning of the array, that's passed\n// in as the second argument\nfunction pathToTree(path, numStemmed) {\n var root;\n var leaf;\n for (var i = numStemmed, len = path.length; i < len; i++) {\n var node = path[i];\n var currentLeaf = [node.id, node.opts, []];\n if (leaf) {\n leaf[2].push(currentLeaf);\n leaf = currentLeaf;\n } else {\n root = leaf = currentLeaf;\n }\n }\n return root;\n}\n\n// compare the IDs of two trees\nfunction compareTree(a, b) {\n return a[0] < b[0] ? -1 : 1;\n}\n\n// Merge two trees together\n// The roots of tree1 and tree2 must be the same revision\nfunction mergeTree(in_tree1, in_tree2) {\n var queue = [{tree1: in_tree1, tree2: in_tree2}];\n var conflicts = false;\n while (queue.length > 0) {\n var item = queue.pop();\n var tree1 = item.tree1;\n var tree2 = item.tree2;\n\n if (tree1[1].status || tree2[1].status) {\n tree1[1].status =\n (tree1[1].status === 'available' ||\n tree2[1].status === 'available') ? 'available' : 'missing';\n }\n\n for (var i = 0; i < tree2[2].length; i++) {\n if (!tree1[2][0]) {\n conflicts = 'new_leaf';\n tree1[2][0] = tree2[2][i];\n continue;\n }\n\n var merged = false;\n for (var j = 0; j < tree1[2].length; j++) {\n if (tree1[2][j][0] === tree2[2][i][0]) {\n queue.push({tree1: tree1[2][j], tree2: tree2[2][i]});\n merged = true;\n }\n }\n if (!merged) {\n conflicts = 'new_branch';\n insertSorted(tree1[2], tree2[2][i], compareTree);\n }\n }\n }\n return {conflicts: conflicts, tree: in_tree1};\n}\n\nfunction doMerge(tree, path, dontExpand) {\n var restree = [];\n var conflicts = false;\n var merged = false;\n var res;\n\n if (!tree.length) {\n return {tree: [path], conflicts: 'new_leaf'};\n }\n\n for (var i = 0, len = tree.length; i < len; i++) {\n var branch = tree[i];\n if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {\n // Paths start at the same position and have the same root, so they need\n // merged\n res = mergeTree(branch.ids, path.ids);\n restree.push({pos: branch.pos, ids: res.tree});\n conflicts = conflicts || res.conflicts;\n merged = true;\n } else if (dontExpand !== true) {\n // The paths start at a different position, take the earliest path and\n // traverse up until it as at the same point from root as the path we\n // want to merge. If the keys match we return the longer path with the\n // other merged After stemming we dont want to expand the trees\n\n var t1 = branch.pos < path.pos ? branch : path;\n var t2 = branch.pos < path.pos ? path : branch;\n var diff = t2.pos - t1.pos;\n\n var candidateParents = [];\n\n var trees = [];\n trees.push({ids: t1.ids, diff: diff, parent: null, parentIdx: null});\n while (trees.length > 0) {\n var item = trees.pop();\n if (item.diff === 0) {\n if (item.ids[0] === t2.ids[0]) {\n candidateParents.push(item);\n }\n continue;\n }\n var elements = item.ids[2];\n for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {\n trees.push({\n ids: elements[j],\n diff: item.diff - 1,\n parent: item.ids,\n parentIdx: j\n });\n }\n }\n\n var el = candidateParents[0];\n\n if (!el) {\n restree.push(branch);\n } else {\n res = mergeTree(el.ids, t2.ids);\n el.parent[2][el.parentIdx] = res.tree;\n restree.push({pos: t1.pos, ids: t1.ids});\n conflicts = conflicts || res.conflicts;\n merged = true;\n }\n } else {\n restree.push(branch);\n }\n }\n\n // We didnt find\n if (!merged) {\n restree.push(path);\n }\n\n restree.sort(sortByPos$1);\n\n return {\n tree: restree,\n conflicts: conflicts || 'internal_node'\n };\n}\n\n// To ensure we dont grow the revision tree infinitely, we stem old revisions\nfunction stem(tree, depth) {\n // First we break out the tree into a complete list of root to leaf paths\n var paths = rootToLeaf(tree);\n var stemmedRevs;\n\n var result;\n for (var i = 0, len = paths.length; i < len; i++) {\n // Then for each path, we cut off the start of the path based on the\n // `depth` to stem to, and generate a new set of flat trees\n var path = paths[i];\n var stemmed = path.ids;\n var node;\n if (stemmed.length > depth) {\n // only do the stemming work if we actually need to stem\n if (!stemmedRevs) {\n stemmedRevs = {}; // avoid allocating this object unnecessarily\n }\n var numStemmed = stemmed.length - depth;\n node = {\n pos: path.pos + numStemmed,\n ids: pathToTree(stemmed, numStemmed)\n };\n\n for (var s = 0; s < numStemmed; s++) {\n var rev = (path.pos + s) + '-' + stemmed[s].id;\n stemmedRevs[rev] = true;\n }\n } else { // no need to actually stem\n node = {\n pos: path.pos,\n ids: pathToTree(stemmed, 0)\n };\n }\n\n // Then we remerge all those flat trees together, ensuring that we dont\n // connect trees that would go beyond the depth limit\n if (result) {\n result = doMerge(result, node, true).tree;\n } else {\n result = [node];\n }\n }\n\n // this is memory-heavy per Chrome profiler, avoid unless we actually stemmed\n if (stemmedRevs) {\n traverseRevTree(result, function (isLeaf, pos, revHash) {\n // some revisions may have been removed in a branch but not in another\n delete stemmedRevs[pos + '-' + revHash];\n });\n }\n\n return {\n tree: result,\n revs: stemmedRevs ? Object.keys(stemmedRevs) : []\n };\n}\n\nfunction merge(tree, path, depth) {\n var newTree = doMerge(tree, path);\n var stemmed = stem(newTree.tree, depth);\n return {\n tree: stemmed.tree,\n stemmedRevs: stemmed.revs,\n conflicts: newTree.conflicts\n };\n}\n\n// return true if a rev exists in the rev tree, false otherwise\nfunction revExists(revs, rev) {\n var toVisit = revs.slice();\n var splitRev = rev.split('-');\n var targetPos = parseInt(splitRev[0], 10);\n var targetId = splitRev[1];\n\n var node;\n while ((node = toVisit.pop())) {\n if (node.pos === targetPos && node.ids[0] === targetId) {\n return true;\n }\n var branches = node.ids[2];\n for (var i = 0, len = branches.length; i < len; i++) {\n toVisit.push({pos: node.pos + 1, ids: branches[i]});\n }\n }\n return false;\n}\n\nfunction getTrees(node) {\n return node.ids;\n}\n\n// check if a specific revision of a doc has been deleted\n// - metadata: the metadata object from the doc store\n// - rev: (optional) the revision to check. defaults to winning revision\nfunction isDeleted(metadata, rev) {\n if (!rev) {\n rev = winningRev(metadata);\n }\n var id = rev.substring(rev.indexOf('-') + 1);\n var toVisit = metadata.rev_tree.map(getTrees);\n\n var tree;\n while ((tree = toVisit.pop())) {\n if (tree[0] === id) {\n return !!tree[1].deleted;\n }\n toVisit = toVisit.concat(tree[2]);\n }\n}\n\nfunction isLocalId(id) {\n return (/^_local/).test(id);\n}\n\n// returns the current leaf node for a given revision\nfunction latest(rev, metadata) {\n var toVisit = metadata.rev_tree.slice();\n var node;\n while ((node = toVisit.pop())) {\n var pos = node.pos;\n var tree = node.ids;\n var id = tree[0];\n var opts = tree[1];\n var branches = tree[2];\n var isLeaf = branches.length === 0;\n\n var history = node.history ? node.history.slice() : [];\n history.push({id: id, pos: pos, opts: opts});\n\n if (isLeaf) {\n for (var i = 0, len = history.length; i < len; i++) {\n var historyNode = history[i];\n var historyRev = historyNode.pos + '-' + historyNode.id;\n\n if (historyRev === rev) {\n // return the rev of this leaf\n return pos + '-' + id;\n }\n }\n }\n\n for (var j = 0, l = branches.length; j < l; j++) {\n toVisit.push({pos: pos + 1, ids: branches[j], history: history});\n }\n }\n\n /* istanbul ignore next */\n throw new Error('Unable to resolve latest revision for id ' + metadata.id + ', rev ' + rev);\n}\n\ninherits(Changes$1, EventEmitter);\n\nfunction tryCatchInChangeListener(self, change, pending, lastSeq) {\n // isolate try/catches to avoid V8 deoptimizations\n try {\n self.emit('change', change, pending, lastSeq);\n } catch (e) {\n guardedConsole('error', 'Error in .on(\"change\", function):', e);\n }\n}\n\nfunction Changes$1(db, opts, callback) {\n EventEmitter.call(this);\n var self = this;\n this.db = db;\n opts = opts ? clone(opts) : {};\n var complete = opts.complete = once(function (err, resp) {\n if (err) {\n if (listenerCount(self, 'error') > 0) {\n self.emit('error', err);\n }\n } else {\n self.emit('complete', resp);\n }\n self.removeAllListeners();\n db.removeListener('destroyed', onDestroy);\n });\n if (callback) {\n self.on('complete', function (resp) {\n callback(null, resp);\n });\n self.on('error', callback);\n }\n function onDestroy() {\n self.cancel();\n }\n db.once('destroyed', onDestroy);\n\n opts.onChange = function (change, pending, lastSeq) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n return;\n }\n tryCatchInChangeListener(self, change, pending, lastSeq);\n };\n\n var promise = new Promise(function (fulfill, reject) {\n opts.complete = function (err, res) {\n if (err) {\n reject(err);\n } else {\n fulfill(res);\n }\n };\n });\n self.once('cancel', function () {\n db.removeListener('destroyed', onDestroy);\n opts.complete(null, {status: 'cancelled'});\n });\n this.then = promise.then.bind(promise);\n this['catch'] = promise['catch'].bind(promise);\n this.then(function (result) {\n complete(null, result);\n }, complete);\n\n\n\n if (!db.taskqueue.isReady) {\n db.taskqueue.addTask(function (failed) {\n if (failed) {\n opts.complete(failed);\n } else if (self.isCancelled) {\n self.emit('cancel');\n } else {\n self.validateChanges(opts);\n }\n });\n } else {\n self.validateChanges(opts);\n }\n}\nChanges$1.prototype.cancel = function () {\n this.isCancelled = true;\n if (this.db.taskqueue.isReady) {\n this.emit('cancel');\n }\n};\nfunction processChange(doc, metadata, opts) {\n var changeList = [{rev: doc._rev}];\n if (opts.style === 'all_docs') {\n changeList = collectLeaves(metadata.rev_tree)\n .map(function (x) { return {rev: x.rev}; });\n }\n var change = {\n id: metadata.id,\n changes: changeList,\n doc: doc\n };\n\n if (isDeleted(metadata, doc._rev)) {\n change.deleted = true;\n }\n if (opts.conflicts) {\n change.doc._conflicts = collectConflicts(metadata);\n if (!change.doc._conflicts.length) {\n delete change.doc._conflicts;\n }\n }\n return change;\n}\n\nChanges$1.prototype.validateChanges = function (opts) {\n var callback = opts.complete;\n var self = this;\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.validate(opts, function (err) {\n if (err) {\n return callback(err);\n }\n self.doChanges(opts);\n });\n } else {\n self.doChanges(opts);\n }\n};\n\nChanges$1.prototype.doChanges = function (opts) {\n var self = this;\n var callback = opts.complete;\n\n opts = clone(opts);\n if ('live' in opts && !('continuous' in opts)) {\n opts.continuous = opts.live;\n }\n opts.processChange = processChange;\n\n if (opts.since === 'latest') {\n opts.since = 'now';\n }\n if (!opts.since) {\n opts.since = 0;\n }\n if (opts.since === 'now') {\n this.db.info().then(function (info) {\n /* istanbul ignore if */\n if (self.isCancelled) {\n callback(null, {status: 'cancelled'});\n return;\n }\n opts.since = info.update_seq;\n self.doChanges(opts);\n }, callback);\n return;\n }\n\n /* istanbul ignore else */\n if (PouchDB._changesFilterPlugin) {\n PouchDB._changesFilterPlugin.normalize(opts);\n if (PouchDB._changesFilterPlugin.shouldFilter(this, opts)) {\n return PouchDB._changesFilterPlugin.filter(this, opts);\n }\n } else {\n ['doc_ids', 'filter', 'selector', 'view'].forEach(function (key) {\n if (key in opts) {\n guardedConsole('warn',\n 'The \"' + key + '\" option was passed in to changes/replicate, ' +\n 'but pouchdb-changes-filter plugin is not installed, so it ' +\n 'was ignored. Please install the plugin to enable filtering.'\n );\n }\n });\n }\n\n if (!('descending' in opts)) {\n opts.descending = false;\n }\n\n // 0 and 1 should return 1 document\n opts.limit = opts.limit === 0 ? 1 : opts.limit;\n opts.complete = callback;\n var newPromise = this.db._changes(opts);\n /* istanbul ignore else */\n if (newPromise && typeof newPromise.cancel === 'function') {\n var cancel = self.cancel;\n self.cancel = getArguments(function (args) {\n newPromise.cancel();\n cancel.apply(this, args);\n });\n }\n};\n\n/*\n * A generic pouch adapter\n */\n\nfunction compare(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Wrapper for functions that call the bulkdocs api with a single doc,\n// if the first result is an error, return an error\nfunction yankError(callback, docId) {\n return function (err, results) {\n if (err || (results[0] && results[0].error)) {\n err = err || results[0];\n err.docId = docId;\n callback(err);\n } else {\n callback(null, results.length ? results[0] : results);\n }\n };\n}\n\n// clean docs given to us by the user\nfunction cleanDocs(docs) {\n for (var i = 0; i < docs.length; i++) {\n var doc = docs[i];\n if (doc._deleted) {\n delete doc._attachments; // ignore atts for deleted docs\n } else if (doc._attachments) {\n // filter out extraneous keys from _attachments\n var atts = Object.keys(doc._attachments);\n for (var j = 0; j < atts.length; j++) {\n var att = atts[j];\n doc._attachments[att] = pick(doc._attachments[att],\n ['data', 'digest', 'content_type', 'length', 'revpos', 'stub']);\n }\n }\n }\n}\n\n// compare two docs, first by _id then by _rev\nfunction compareByIdThenRev(a, b) {\n var idCompare = compare(a._id, b._id);\n if (idCompare !== 0) {\n return idCompare;\n }\n var aStart = a._revisions ? a._revisions.start : 0;\n var bStart = b._revisions ? b._revisions.start : 0;\n return compare(aStart, bStart);\n}\n\n// for every node in a revision tree computes its distance from the closest\n// leaf\nfunction computeHeight(revs) {\n var height = {};\n var edges = [];\n traverseRevTree(revs, function (isLeaf, pos, id, prnt) {\n var rev$$1 = pos + \"-\" + id;\n if (isLeaf) {\n height[rev$$1] = 0;\n }\n if (prnt !== undefined) {\n edges.push({from: prnt, to: rev$$1});\n }\n return rev$$1;\n });\n\n edges.reverse();\n edges.forEach(function (edge) {\n if (height[edge.from] === undefined) {\n height[edge.from] = 1 + height[edge.to];\n } else {\n height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);\n }\n });\n return height;\n}\n\nfunction allDocsKeysParse(opts) {\n var keys = ('limit' in opts) ?\n opts.keys.slice(opts.skip, opts.limit + opts.skip) :\n (opts.skip > 0) ? opts.keys.slice(opts.skip) : opts.keys;\n opts.keys = keys;\n opts.skip = 0;\n delete opts.limit;\n if (opts.descending) {\n keys.reverse();\n opts.descending = false;\n }\n}\n\n// all compaction is done in a queue, to avoid attaching\n// too many listeners at once\nfunction doNextCompaction(self) {\n var task = self._compactionQueue[0];\n var opts = task.opts;\n var callback = task.callback;\n self.get('_local/compaction').catch(function () {\n return false;\n }).then(function (doc) {\n if (doc && doc.last_seq) {\n opts.last_seq = doc.last_seq;\n }\n self._compact(opts, function (err, res) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n } else {\n callback(null, res);\n }\n immediate(function () {\n self._compactionQueue.shift();\n if (self._compactionQueue.length) {\n doNextCompaction(self);\n }\n });\n });\n });\n}\n\nfunction attachmentNameError(name) {\n if (name.charAt(0) === '_') {\n return name + ' is not a valid attachment name, attachment ' +\n 'names cannot start with \\'_\\'';\n }\n return false;\n}\n\ninherits(AbstractPouchDB, EventEmitter);\n\nfunction AbstractPouchDB() {\n EventEmitter.call(this);\n\n // re-bind prototyped methods\n for (var p in AbstractPouchDB.prototype) {\n if (typeof this[p] === 'function') {\n this[p] = this[p].bind(this);\n }\n }\n}\n\nAbstractPouchDB.prototype.post =\n adapterFun('post', function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return callback(createError(NOT_AN_OBJECT));\n }\n this.bulkDocs({docs: [doc]}, opts, yankError(callback, doc._id));\n});\n\nAbstractPouchDB.prototype.put = adapterFun('put', function (doc, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof doc !== 'object' || Array.isArray(doc)) {\n return cb(createError(NOT_AN_OBJECT));\n }\n invalidIdError(doc._id);\n if (isLocalId(doc._id) && typeof this._putLocal === 'function') {\n if (doc._deleted) {\n return this._removeLocal(doc, cb);\n } else {\n return this._putLocal(doc, cb);\n }\n }\n var self = this;\n if (opts.force && doc._rev) {\n transformForceOptionToNewEditsOption();\n putDoc(function (err) {\n var result = err ? null : {ok: true, id: doc._id, rev: doc._rev};\n cb(err, result);\n });\n } else {\n putDoc(cb);\n }\n\n function transformForceOptionToNewEditsOption() {\n var parts = doc._rev.split('-');\n var oldRevId = parts[1];\n var oldRevNum = parseInt(parts[0], 10);\n\n var newRevNum = oldRevNum + 1;\n var newRevId = rev();\n\n doc._revisions = {\n start: newRevNum,\n ids: [newRevId, oldRevId]\n };\n doc._rev = newRevNum + '-' + newRevId;\n opts.new_edits = false;\n }\n function putDoc(next) {\n if (typeof self._put === 'function' && opts.new_edits !== false) {\n self._put(doc, opts, next);\n } else {\n self.bulkDocs({docs: [doc]}, opts, yankError(next, doc._id));\n }\n }\n});\n\nAbstractPouchDB.prototype.putAttachment =\n adapterFun('putAttachment', function (docId, attachmentId, rev$$1,\n blob, type) {\n var api = this;\n if (typeof type === 'function') {\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n // Lets fix in https://github.com/pouchdb/pouchdb/issues/3267\n /* istanbul ignore if */\n if (typeof type === 'undefined') {\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n if (!type) {\n guardedConsole('warn', 'Attachment', attachmentId, 'on document', docId, 'is missing content_type');\n }\n\n function createAttachment(doc) {\n var prevrevpos = '_rev' in doc ? parseInt(doc._rev, 10) : 0;\n doc._attachments = doc._attachments || {};\n doc._attachments[attachmentId] = {\n content_type: type,\n data: blob,\n revpos: ++prevrevpos\n };\n return api.put(doc);\n }\n\n return api.get(docId).then(function (doc) {\n if (doc._rev !== rev$$1) {\n throw createError(REV_CONFLICT);\n }\n\n return createAttachment(doc);\n }, function (err) {\n // create new doc\n /* istanbul ignore else */\n if (err.reason === MISSING_DOC.message) {\n return createAttachment({_id: docId});\n } else {\n throw err;\n }\n });\n});\n\nAbstractPouchDB.prototype.removeAttachment =\n adapterFun('removeAttachment', function (docId, attachmentId, rev$$1,\n callback) {\n var self = this;\n self.get(docId, function (err, obj) {\n /* istanbul ignore if */\n if (err) {\n callback(err);\n return;\n }\n if (obj._rev !== rev$$1) {\n callback(createError(REV_CONFLICT));\n return;\n }\n /* istanbul ignore if */\n if (!obj._attachments) {\n return callback();\n }\n delete obj._attachments[attachmentId];\n if (Object.keys(obj._attachments).length === 0) {\n delete obj._attachments;\n }\n self.put(obj, callback);\n });\n});\n\nAbstractPouchDB.prototype.remove =\n adapterFun('remove', function (docOrId, optsOrRev, opts, callback) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n callback = optsOrRev;\n opts = {};\n } else {\n callback = opts;\n opts = optsOrRev;\n }\n }\n opts = opts || {};\n opts.was_delete = true;\n var newDoc = {_id: doc._id, _rev: (doc._rev || opts.rev)};\n newDoc._deleted = true;\n if (isLocalId(newDoc._id) && typeof this._removeLocal === 'function') {\n return this._removeLocal(doc, callback);\n }\n this.bulkDocs({docs: [newDoc]}, opts, yankError(callback, newDoc._id));\n});\n\nAbstractPouchDB.prototype.revsDiff =\n adapterFun('revsDiff', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var ids = Object.keys(req);\n\n if (!ids.length) {\n return callback(null, {});\n }\n\n var count = 0;\n var missing = new ExportedMap();\n\n function addToMissing(id, revId) {\n if (!missing.has(id)) {\n missing.set(id, {missing: []});\n }\n missing.get(id).missing.push(revId);\n }\n\n function processDoc(id, rev_tree) {\n // Is this fast enough? Maybe we should switch to a set simulated by a map\n var missingForId = req[id].slice(0);\n traverseRevTree(rev_tree, function (isLeaf, pos, revHash, ctx,\n opts) {\n var rev$$1 = pos + '-' + revHash;\n var idx = missingForId.indexOf(rev$$1);\n if (idx === -1) {\n return;\n }\n\n missingForId.splice(idx, 1);\n /* istanbul ignore if */\n if (opts.status !== 'available') {\n addToMissing(id, rev$$1);\n }\n });\n\n // Traversing the tree is synchronous, so now `missingForId` contains\n // revisions that were not found in the tree\n missingForId.forEach(function (rev$$1) {\n addToMissing(id, rev$$1);\n });\n }\n\n ids.map(function (id) {\n this._getRevisionTree(id, function (err, rev_tree) {\n if (err && err.status === 404 && err.message === 'missing') {\n missing.set(id, {missing: req[id]});\n } else if (err) {\n /* istanbul ignore next */\n return callback(err);\n } else {\n processDoc(id, rev_tree);\n }\n\n if (++count === ids.length) {\n // convert LazyMap to object\n var missingObj = {};\n missing.forEach(function (value, key) {\n missingObj[key] = value;\n });\n return callback(null, missingObj);\n }\n });\n }, this);\n});\n\n// _bulk_get API for faster replication, as described in\n// https://github.com/apache/couchdb-chttpd/pull/33\n// At the \"abstract\" level, it will just run multiple get()s in\n// parallel, because this isn't much of a performance cost\n// for local databases (except the cost of multiple transactions, which is\n// small). The http adapter overrides this in order\n// to do a more efficient single HTTP request.\nAbstractPouchDB.prototype.bulkGet =\n adapterFun('bulkGet', function (opts, callback) {\n bulkGet(this, opts, callback);\n});\n\n// compact one document and fire callback\n// by compacting we mean removing all revisions which\n// are further from the leaf in revision tree than max_height\nAbstractPouchDB.prototype.compactDocument =\n adapterFun('compactDocument', function (docId, maxHeight, callback) {\n var self = this;\n this._getRevisionTree(docId, function (err, revTree) {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n var height = computeHeight(revTree);\n var candidates = [];\n var revs = [];\n Object.keys(height).forEach(function (rev$$1) {\n if (height[rev$$1] > maxHeight) {\n candidates.push(rev$$1);\n }\n });\n\n traverseRevTree(revTree, function (isLeaf, pos, revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (opts.status === 'available' && candidates.indexOf(rev$$1) !== -1) {\n revs.push(rev$$1);\n }\n });\n self._doCompaction(docId, revs, callback);\n });\n});\n\n// compact the whole database using single document\n// compaction\nAbstractPouchDB.prototype.compact =\n adapterFun('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n opts = opts || {};\n\n self._compactionQueue = self._compactionQueue || [];\n self._compactionQueue.push({opts: opts, callback: callback});\n if (self._compactionQueue.length === 1) {\n doNextCompaction(self);\n }\n});\nAbstractPouchDB.prototype._compact = function (opts, callback) {\n var self = this;\n var changesOpts = {\n return_docs: false,\n last_seq: opts.last_seq || 0\n };\n var promises = [];\n\n function onChange(row) {\n promises.push(self.compactDocument(row.id, 0));\n }\n function onComplete(resp) {\n var lastSeq = resp.last_seq;\n Promise.all(promises).then(function () {\n return upsert(self, '_local/compaction', function deltaFunc(doc) {\n if (!doc.last_seq || doc.last_seq < lastSeq) {\n doc.last_seq = lastSeq;\n return doc;\n }\n return false; // somebody else got here first, don't update\n });\n }).then(function () {\n callback(null, {ok: true});\n }).catch(callback);\n }\n self.changes(changesOpts)\n .on('change', onChange)\n .on('complete', onComplete)\n .on('error', callback);\n};\n\n/* Begin api wrappers. Specific functionality to storage belongs in the\n _[method] */\nAbstractPouchDB.prototype.get = adapterFun('get', function (id, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n if (typeof id !== 'string') {\n return cb(createError(INVALID_ID));\n }\n if (isLocalId(id) && typeof this._getLocal === 'function') {\n return this._getLocal(id, cb);\n }\n var leaves = [], self = this;\n\n function finishOpenRevs() {\n var result = [];\n var count = leaves.length;\n /* istanbul ignore if */\n if (!count) {\n return cb(null, result);\n }\n\n // order with open_revs is unspecified\n leaves.forEach(function (leaf) {\n self.get(id, {\n rev: leaf,\n revs: opts.revs,\n latest: opts.latest,\n attachments: opts.attachments,\n binary: opts.binary\n }, function (err, doc) {\n if (!err) {\n // using latest=true can produce duplicates\n var existing;\n for (var i = 0, l = result.length; i < l; i++) {\n if (result[i].ok && result[i].ok._rev === doc._rev) {\n existing = true;\n break;\n }\n }\n if (!existing) {\n result.push({ok: doc});\n }\n } else {\n result.push({missing: leaf});\n }\n count--;\n if (!count) {\n cb(null, result);\n }\n });\n });\n }\n\n if (opts.open_revs) {\n if (opts.open_revs === \"all\") {\n this._getRevisionTree(id, function (err, rev_tree) {\n /* istanbul ignore if */\n if (err) {\n return cb(err);\n }\n leaves = collectLeaves(rev_tree).map(function (leaf) {\n return leaf.rev;\n });\n finishOpenRevs();\n });\n } else {\n if (Array.isArray(opts.open_revs)) {\n leaves = opts.open_revs;\n for (var i = 0; i < leaves.length; i++) {\n var l = leaves[i];\n // looks like it's the only thing couchdb checks\n if (!(typeof (l) === \"string\" && /^\\d+-/.test(l))) {\n return cb(createError(INVALID_REV));\n }\n }\n finishOpenRevs();\n } else {\n return cb(createError(UNKNOWN_ERROR, 'function_clause'));\n }\n }\n return; // open_revs does not like other options\n }\n\n return this._get(id, opts, function (err, result) {\n if (err) {\n err.docId = id;\n return cb(err);\n }\n\n var doc = result.doc;\n var metadata = result.metadata;\n var ctx = result.ctx;\n\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n doc._conflicts = conflicts;\n }\n }\n\n if (isDeleted(metadata, doc._rev)) {\n doc._deleted = true;\n }\n\n if (opts.revs || opts.revs_info) {\n var splittedRev = doc._rev.split('-');\n var revNo = parseInt(splittedRev[0], 10);\n var revHash = splittedRev[1];\n\n var paths = rootToLeaf(metadata.rev_tree);\n var path = null;\n\n for (var i = 0; i < paths.length; i++) {\n var currentPath = paths[i];\n var hashIndex = currentPath.ids.map(function (x) { return x.id; })\n .indexOf(revHash);\n var hashFoundAtRevPos = hashIndex === (revNo - 1);\n\n if (hashFoundAtRevPos || (!path && hashIndex !== -1)) {\n path = currentPath;\n }\n }\n\n /* istanbul ignore if */\n if (!path) {\n err = new Error('invalid rev tree');\n err.docId = id;\n return cb(err);\n }\n\n var indexOfRev = path.ids.map(function (x) { return x.id; })\n .indexOf(doc._rev.split('-')[1]) + 1;\n var howMany = path.ids.length - indexOfRev;\n path.ids.splice(indexOfRev, howMany);\n path.ids.reverse();\n\n if (opts.revs) {\n doc._revisions = {\n start: (path.pos + path.ids.length) - 1,\n ids: path.ids.map(function (rev$$1) {\n return rev$$1.id;\n })\n };\n }\n if (opts.revs_info) {\n var pos = path.pos + path.ids.length;\n doc._revs_info = path.ids.map(function (rev$$1) {\n pos--;\n return {\n rev: pos + '-' + rev$$1.id,\n status: rev$$1.opts.status\n };\n });\n }\n }\n\n if (opts.attachments && doc._attachments) {\n var attachments = doc._attachments;\n var count = Object.keys(attachments).length;\n if (count === 0) {\n return cb(null, doc);\n }\n Object.keys(attachments).forEach(function (key) {\n this._getAttachment(doc._id, key, attachments[key], {\n // Previously the revision handling was done in adapter.js\n // getAttachment, however since idb-next doesnt we need to\n // pass the rev through\n rev: doc._rev,\n binary: opts.binary,\n ctx: ctx\n }, function (err, data) {\n var att = doc._attachments[key];\n att.data = data;\n delete att.stub;\n delete att.length;\n if (!--count) {\n cb(null, doc);\n }\n });\n }, self);\n } else {\n if (doc._attachments) {\n for (var key in doc._attachments) {\n /* istanbul ignore else */\n if (doc._attachments.hasOwnProperty(key)) {\n doc._attachments[key].stub = true;\n }\n }\n }\n cb(null, doc);\n }\n });\n});\n\n// TODO: I dont like this, it forces an extra read for every\n// attachment read and enforces a confusing api between\n// adapter.js and the adapter implementation\nAbstractPouchDB.prototype.getAttachment =\n adapterFun('getAttachment', function (docId, attachmentId, opts, callback) {\n var self = this;\n if (opts instanceof Function) {\n callback = opts;\n opts = {};\n }\n this._get(docId, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (res.doc._attachments && res.doc._attachments[attachmentId]) {\n opts.ctx = res.ctx;\n opts.binary = true;\n self._getAttachment(docId, attachmentId,\n res.doc._attachments[attachmentId], opts, callback);\n } else {\n return callback(createError(MISSING_DOC));\n }\n });\n});\n\nAbstractPouchDB.prototype.allDocs =\n adapterFun('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts.skip = typeof opts.skip !== 'undefined' ? opts.skip : 0;\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n if ('keys' in opts) {\n if (!Array.isArray(opts.keys)) {\n return callback(new TypeError('options.keys must be an array'));\n }\n var incompatibleOpt =\n ['startkey', 'endkey', 'key'].filter(function (incompatibleOpt) {\n return incompatibleOpt in opts;\n })[0];\n if (incompatibleOpt) {\n callback(createError(QUERY_PARSE_ERROR,\n 'Query parameter `' + incompatibleOpt +\n '` is not compatible with multi-get'\n ));\n return;\n }\n if (!isRemote(this)) {\n allDocsKeysParse(opts);\n if (opts.keys.length === 0) {\n return this._allDocs({limit: 0}, callback);\n }\n }\n }\n\n return this._allDocs(opts, callback);\n});\n\nAbstractPouchDB.prototype.changes = function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n // By default set return_docs to false if the caller has opts.live = true,\n // this will prevent us from collecting the set of changes indefinitely\n // resulting in growing memory\n opts.return_docs = ('return_docs' in opts) ? opts.return_docs : !opts.live;\n\n return new Changes$1(this, opts, callback);\n};\n\nAbstractPouchDB.prototype.close = adapterFun('close', function (callback) {\n this._closed = true;\n this.emit('closed');\n return this._close(callback);\n});\n\nAbstractPouchDB.prototype.info = adapterFun('info', function (callback) {\n var self = this;\n this._info(function (err, info) {\n if (err) {\n return callback(err);\n }\n // assume we know better than the adapter, unless it informs us\n info.db_name = info.db_name || self.name;\n info.auto_compaction = !!(self.auto_compaction && !isRemote(self));\n info.adapter = self.adapter;\n callback(null, info);\n });\n});\n\nAbstractPouchDB.prototype.id = adapterFun('id', function (callback) {\n return this._id(callback);\n});\n\n/* istanbul ignore next */\nAbstractPouchDB.prototype.type = function () {\n return (typeof this._type === 'function') ? this._type() : this.adapter;\n};\n\nAbstractPouchDB.prototype.bulkDocs =\n adapterFun('bulkDocs', function (req, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n opts = opts || {};\n\n if (Array.isArray(req)) {\n req = {\n docs: req\n };\n }\n\n if (!req || !req.docs || !Array.isArray(req.docs)) {\n return callback(createError(MISSING_BULK_DOCS));\n }\n\n for (var i = 0; i < req.docs.length; ++i) {\n if (typeof req.docs[i] !== 'object' || Array.isArray(req.docs[i])) {\n return callback(createError(NOT_AN_OBJECT));\n }\n }\n\n var attachmentError;\n req.docs.forEach(function (doc) {\n if (doc._attachments) {\n Object.keys(doc._attachments).forEach(function (name) {\n attachmentError = attachmentError || attachmentNameError(name);\n if (!doc._attachments[name].content_type) {\n guardedConsole('warn', 'Attachment', name, 'on document', doc._id, 'is missing content_type');\n }\n });\n }\n });\n\n if (attachmentError) {\n return callback(createError(BAD_REQUEST, attachmentError));\n }\n\n if (!('new_edits' in opts)) {\n if ('new_edits' in req) {\n opts.new_edits = req.new_edits;\n } else {\n opts.new_edits = true;\n }\n }\n\n var adapter = this;\n if (!opts.new_edits && !isRemote(adapter)) {\n // ensure revisions of the same doc are sorted, so that\n // the local adapter processes them correctly (#2935)\n req.docs.sort(compareByIdThenRev);\n }\n\n cleanDocs(req.docs);\n\n // in the case of conflicts, we want to return the _ids to the user\n // however, the underlying adapter may destroy the docs array, so\n // create a copy here\n var ids = req.docs.map(function (doc) {\n return doc._id;\n });\n\n return this._bulkDocs(req, opts, function (err, res) {\n if (err) {\n return callback(err);\n }\n if (!opts.new_edits) {\n // this is what couch does when new_edits is false\n res = res.filter(function (x) {\n return x.error;\n });\n }\n // add ids for error/conflict responses (not required for CouchDB)\n if (!isRemote(adapter)) {\n for (var i = 0, l = res.length; i < l; i++) {\n res[i].id = res[i].id || ids[i];\n }\n }\n\n callback(null, res);\n });\n});\n\nAbstractPouchDB.prototype.registerDependentDatabase =\n adapterFun('registerDependentDatabase', function (dependentDb,\n callback) {\n var depDB = new this.constructor(dependentDb, this.__opts);\n\n function diffFun(doc) {\n doc.dependentDbs = doc.dependentDbs || {};\n if (doc.dependentDbs[dependentDb]) {\n return false; // no update required\n }\n doc.dependentDbs[dependentDb] = true;\n return doc;\n }\n upsert(this, '_local/_pouch_dependentDbs', diffFun)\n .then(function () {\n callback(null, {db: depDB});\n }).catch(callback);\n});\n\nAbstractPouchDB.prototype.destroy =\n adapterFun('destroy', function (opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n var self = this;\n var usePrefix = 'use_prefix' in self ? self.use_prefix : true;\n\n function destroyDb() {\n // call destroy method of the particular adaptor\n self._destroy(opts, function (err, resp) {\n if (err) {\n return callback(err);\n }\n self._destroyed = true;\n self.emit('destroyed');\n callback(null, resp || { 'ok': true });\n });\n }\n\n if (isRemote(self)) {\n // no need to check for dependent DBs if it's a remote DB\n return destroyDb();\n }\n\n self.get('_local/_pouch_dependentDbs', function (err, localDoc) {\n if (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n return callback(err);\n } else { // no dependencies\n return destroyDb();\n }\n }\n var dependentDbs = localDoc.dependentDbs;\n var PouchDB = self.constructor;\n var deletedMap = Object.keys(dependentDbs).map(function (name) {\n // use_prefix is only false in the browser\n /* istanbul ignore next */\n var trueName = usePrefix ?\n name.replace(new RegExp('^' + PouchDB.prefix), '') : name;\n return new PouchDB(trueName, self.__opts).destroy();\n });\n Promise.all(deletedMap).then(destroyDb, callback);\n });\n});\n\nfunction TaskQueue() {\n this.isReady = false;\n this.failed = false;\n this.queue = [];\n}\n\nTaskQueue.prototype.execute = function () {\n var fun;\n if (this.failed) {\n while ((fun = this.queue.shift())) {\n fun(this.failed);\n }\n } else {\n while ((fun = this.queue.shift())) {\n fun();\n }\n }\n};\n\nTaskQueue.prototype.fail = function (err) {\n this.failed = err;\n this.execute();\n};\n\nTaskQueue.prototype.ready = function (db) {\n this.isReady = true;\n this.db = db;\n this.execute();\n};\n\nTaskQueue.prototype.addTask = function (fun) {\n this.queue.push(fun);\n if (this.failed) {\n this.execute();\n }\n};\n\nfunction parseAdapter(name, opts) {\n var match = name.match(/([a-z-]*):\\/\\/(.*)/);\n if (match) {\n // the http adapter expects the fully qualified name\n return {\n name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2],\n adapter: match[1]\n };\n }\n\n var adapters = PouchDB.adapters;\n var preferredAdapters = PouchDB.preferredAdapters;\n var prefix = PouchDB.prefix;\n var adapterName = opts.adapter;\n\n if (!adapterName) { // automatically determine adapter\n for (var i = 0; i < preferredAdapters.length; ++i) {\n adapterName = preferredAdapters[i];\n // check for browsers that have been upgraded from websql-only to websql+idb\n /* istanbul ignore if */\n if (adapterName === 'idb' && 'websql' in adapters &&\n hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) {\n // log it, because this can be confusing during development\n guardedConsole('log', 'PouchDB is downgrading \"' + name + '\" to WebSQL to' +\n ' avoid data loss, because it was already opened with WebSQL.');\n continue; // keep using websql to avoid user data loss\n }\n break;\n }\n }\n\n var adapter = adapters[adapterName];\n\n // if adapter is invalid, then an error will be thrown later\n var usePrefix = (adapter && 'use_prefix' in adapter) ?\n adapter.use_prefix : true;\n\n return {\n name: usePrefix ? (prefix + name) : name,\n adapter: adapterName\n };\n}\n\n// OK, so here's the deal. Consider this code:\n// var db1 = new PouchDB('foo');\n// var db2 = new PouchDB('foo');\n// db1.destroy();\n// ^ these two both need to emit 'destroyed' events,\n// as well as the PouchDB constructor itself.\n// So we have one db object (whichever one got destroy() called on it)\n// responsible for emitting the initial event, which then gets emitted\n// by the constructor, which then broadcasts it to any other dbs\n// that may have been created with the same name.\nfunction prepareForDestruction(self) {\n\n function onDestroyed(from_constructor) {\n self.removeListener('closed', onClosed);\n if (!from_constructor) {\n self.constructor.emit('destroyed', self.name);\n }\n }\n\n function onClosed() {\n self.removeListener('destroyed', onDestroyed);\n self.constructor.emit('unref', self);\n }\n\n self.once('destroyed', onDestroyed);\n self.once('closed', onClosed);\n self.constructor.emit('ref', self);\n}\n\ninherits(PouchDB, AbstractPouchDB);\nfunction PouchDB(name, opts) {\n // In Node our test suite only tests this for PouchAlt unfortunately\n /* istanbul ignore if */\n if (!(this instanceof PouchDB)) {\n return new PouchDB(name, opts);\n }\n\n var self = this;\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n if (opts.deterministic_revs === undefined) {\n opts.deterministic_revs = true;\n }\n\n this.__opts = opts = clone(opts);\n\n self.auto_compaction = opts.auto_compaction;\n self.prefix = PouchDB.prefix;\n\n if (typeof name !== 'string') {\n throw new Error('Missing/invalid DB name');\n }\n\n var prefixedName = (opts.prefix || '') + name;\n var backend = parseAdapter(prefixedName, opts);\n\n opts.name = backend.name;\n opts.adapter = opts.adapter || backend.adapter;\n\n self.name = name;\n self._adapter = opts.adapter;\n PouchDB.emit('debug', ['adapter', 'Picked adapter: ', opts.adapter]);\n\n if (!PouchDB.adapters[opts.adapter] ||\n !PouchDB.adapters[opts.adapter].valid()) {\n throw new Error('Invalid Adapter: ' + opts.adapter);\n }\n\n AbstractPouchDB.call(self);\n self.taskqueue = new TaskQueue();\n\n self.adapter = opts.adapter;\n\n PouchDB.adapters[opts.adapter].call(self, opts, function (err) {\n if (err) {\n return self.taskqueue.fail(err);\n }\n prepareForDestruction(self);\n\n self.emit('created', self);\n PouchDB.emit('created', self.name);\n self.taskqueue.ready(self);\n });\n\n}\n\n// AbortController was introduced quite a while after fetch and\n// isnt required for PouchDB to function so polyfill if needed\nvar a = (typeof AbortController !== 'undefined')\n ? AbortController\n : function () { return {abort: function () {}}; };\n\nvar f$1 = fetch;\nvar h = Headers;\n\nPouchDB.adapters = {};\nPouchDB.preferredAdapters = [];\n\nPouchDB.prefix = '_pouch_';\n\nvar eventEmitter = new EventEmitter();\n\nfunction setUpEventEmitter(Pouch) {\n Object.keys(EventEmitter.prototype).forEach(function (key) {\n if (typeof EventEmitter.prototype[key] === 'function') {\n Pouch[key] = eventEmitter[key].bind(eventEmitter);\n }\n });\n\n // these are created in constructor.js, and allow us to notify each DB with\n // the same name that it was destroyed, via the constructor object\n var destructListeners = Pouch._destructionListeners = new ExportedMap();\n\n Pouch.on('ref', function onConstructorRef(db) {\n if (!destructListeners.has(db.name)) {\n destructListeners.set(db.name, []);\n }\n destructListeners.get(db.name).push(db);\n });\n\n Pouch.on('unref', function onConstructorUnref(db) {\n if (!destructListeners.has(db.name)) {\n return;\n }\n var dbList = destructListeners.get(db.name);\n var pos = dbList.indexOf(db);\n if (pos < 0) {\n /* istanbul ignore next */\n return;\n }\n dbList.splice(pos, 1);\n if (dbList.length > 1) {\n /* istanbul ignore next */\n destructListeners.set(db.name, dbList);\n } else {\n destructListeners.delete(db.name);\n }\n });\n\n Pouch.on('destroyed', function onConstructorDestroyed(name) {\n if (!destructListeners.has(name)) {\n return;\n }\n var dbList = destructListeners.get(name);\n destructListeners.delete(name);\n dbList.forEach(function (db) {\n db.emit('destroyed',true);\n });\n });\n}\n\nsetUpEventEmitter(PouchDB);\n\nPouchDB.adapter = function (id, obj, addToPreferredAdapters) {\n /* istanbul ignore else */\n if (obj.valid()) {\n PouchDB.adapters[id] = obj;\n if (addToPreferredAdapters) {\n PouchDB.preferredAdapters.push(id);\n }\n }\n};\n\nPouchDB.plugin = function (obj) {\n if (typeof obj === 'function') { // function style for plugins\n obj(PouchDB);\n } else if (typeof obj !== 'object' || Object.keys(obj).length === 0) {\n throw new Error('Invalid plugin: got \"' + obj + '\", expected an object or a function');\n } else {\n Object.keys(obj).forEach(function (id) { // object style for plugins\n PouchDB.prototype[id] = obj[id];\n });\n }\n if (this.__defaults) {\n PouchDB.__defaults = $inject_Object_assign({}, this.__defaults);\n }\n return PouchDB;\n};\n\nPouchDB.defaults = function (defaultOpts) {\n function PouchAlt(name, opts) {\n if (!(this instanceof PouchAlt)) {\n return new PouchAlt(name, opts);\n }\n\n opts = opts || {};\n\n if (name && typeof name === 'object') {\n opts = name;\n name = opts.name;\n delete opts.name;\n }\n\n opts = $inject_Object_assign({}, PouchAlt.__defaults, opts);\n PouchDB.call(this, name, opts);\n }\n\n inherits(PouchAlt, PouchDB);\n\n PouchAlt.preferredAdapters = PouchDB.preferredAdapters.slice();\n Object.keys(PouchDB).forEach(function (key) {\n if (!(key in PouchAlt)) {\n PouchAlt[key] = PouchDB[key];\n }\n });\n\n // make default options transitive\n // https://github.com/pouchdb/pouchdb/issues/5922\n PouchAlt.__defaults = $inject_Object_assign({}, this.__defaults, defaultOpts);\n\n return PouchAlt;\n};\n\nPouchDB.fetch = function (url, opts) {\n return f$1(url, opts);\n};\n\n// managed automatically by set-version.js\nvar version = \"7.1.1\";\n\n// this would just be \"return doc[field]\", but fields\n// can be \"deep\" due to dot notation\nfunction getFieldFromDoc(doc, parsedField) {\n var value = doc;\n for (var i = 0, len = parsedField.length; i < len; i++) {\n var key = parsedField[i];\n value = value[key];\n if (!value) {\n break;\n }\n }\n return value;\n}\n\nfunction compare$1(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n// Converts a string in dot notation to an array of its components, with backslash escaping\nfunction parseField(fieldName) {\n // fields may be deep (e.g. \"foo.bar.baz\"), so parse\n var fields = [];\n var current = '';\n for (var i = 0, len = fieldName.length; i < len; i++) {\n var ch = fieldName[i];\n if (ch === '.') {\n if (i > 0 && fieldName[i - 1] === '\\\\') { // escaped delimiter\n current = current.substring(0, current.length - 1) + '.';\n } else { // not escaped, so delimiter\n fields.push(current);\n current = '';\n }\n } else { // normal character\n current += ch;\n }\n }\n fields.push(current);\n return fields;\n}\n\nvar combinationFields = ['$or', '$nor', '$not'];\nfunction isCombinationalField(field) {\n return combinationFields.indexOf(field) > -1;\n}\n\nfunction getKey(obj) {\n return Object.keys(obj)[0];\n}\n\nfunction getValue(obj) {\n return obj[getKey(obj)];\n}\n\n\n// flatten an array of selectors joined by an $and operator\nfunction mergeAndedSelectors(selectors) {\n\n // sort to ensure that e.g. if the user specified\n // $and: [{$gt: 'a'}, {$gt: 'b'}], then it's collapsed into\n // just {$gt: 'b'}\n var res = {};\n\n selectors.forEach(function (selector) {\n Object.keys(selector).forEach(function (field) {\n var matcher = selector[field];\n if (typeof matcher !== 'object') {\n matcher = {$eq: matcher};\n }\n\n if (isCombinationalField(field)) {\n if (matcher instanceof Array) {\n res[field] = matcher.map(function (m) {\n return mergeAndedSelectors([m]);\n });\n } else {\n res[field] = mergeAndedSelectors([matcher]);\n }\n } else {\n var fieldMatchers = res[field] = res[field] || {};\n Object.keys(matcher).forEach(function (operator) {\n var value = matcher[operator];\n\n if (operator === '$gt' || operator === '$gte') {\n return mergeGtGte(operator, value, fieldMatchers);\n } else if (operator === '$lt' || operator === '$lte') {\n return mergeLtLte(operator, value, fieldMatchers);\n } else if (operator === '$ne') {\n return mergeNe(value, fieldMatchers);\n } else if (operator === '$eq') {\n return mergeEq(value, fieldMatchers);\n }\n fieldMatchers[operator] = value;\n });\n }\n });\n });\n\n return res;\n}\n\n\n\n// collapse logically equivalent gt/gte values\nfunction mergeGtGte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$gte !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gte) { // more specificity\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value >= fieldMatchers.$gte) { // more specificity\n delete fieldMatchers.$gte;\n fieldMatchers.$gt = value;\n }\n }\n } else if (typeof fieldMatchers.$gt !== 'undefined') {\n if (operator === '$gte') {\n if (value > fieldMatchers.$gt) { // more specificity\n delete fieldMatchers.$gt;\n fieldMatchers.$gte = value;\n }\n } else { // operator === '$gt'\n if (value > fieldMatchers.$gt) { // more specificity\n fieldMatchers.$gt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// collapse logically equivalent lt/lte values\nfunction mergeLtLte(operator, value, fieldMatchers) {\n if (typeof fieldMatchers.$eq !== 'undefined') {\n return; // do nothing\n }\n if (typeof fieldMatchers.$lte !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lte) { // more specificity\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value <= fieldMatchers.$lte) { // more specificity\n delete fieldMatchers.$lte;\n fieldMatchers.$lt = value;\n }\n }\n } else if (typeof fieldMatchers.$lt !== 'undefined') {\n if (operator === '$lte') {\n if (value < fieldMatchers.$lt) { // more specificity\n delete fieldMatchers.$lt;\n fieldMatchers.$lte = value;\n }\n } else { // operator === '$gt'\n if (value < fieldMatchers.$lt) { // more specificity\n fieldMatchers.$lt = value;\n }\n }\n } else {\n fieldMatchers[operator] = value;\n }\n}\n\n// combine $ne values into one array\nfunction mergeNe(value, fieldMatchers) {\n if ('$ne' in fieldMatchers) {\n // there are many things this could \"not\" be\n fieldMatchers.$ne.push(value);\n } else { // doesn't exist yet\n fieldMatchers.$ne = [value];\n }\n}\n\n// add $eq into the mix\nfunction mergeEq(value, fieldMatchers) {\n // these all have less specificity than the $eq\n // TODO: check for user errors here\n delete fieldMatchers.$gt;\n delete fieldMatchers.$gte;\n delete fieldMatchers.$lt;\n delete fieldMatchers.$lte;\n delete fieldMatchers.$ne;\n fieldMatchers.$eq = value;\n}\n\n//#7458: execute function mergeAndedSelectors on nested $and\nfunction mergeAndedSelectorsNested(obj) {\n for (var prop in obj) {\n if (Array.isArray(obj)) {\n for (var i in obj) {\n if (obj[i]['$and']) {\n obj[i] = mergeAndedSelectors(obj[i]['$and']);\n }\n }\n }\n var value = obj[prop];\n if (typeof value === 'object') {\n mergeAndedSelectorsNested(value); // <- recursive call\n }\n }\n return obj;\n}\n\n//#7458: determine id $and is present in selector (at any level)\nfunction isAndInSelector(obj, isAnd) {\n for (var prop in obj) {\n if (prop === '$and') {\n isAnd = true;\n }\n var value = obj[prop];\n if (typeof value === 'object') {\n isAnd = isAndInSelector(value, isAnd); // <- recursive call\n }\n }\n return isAnd;\n}\n\n//\n// normalize the selector\n//\nfunction massageSelector(input) {\n var result = clone(input);\n var wasAnded = false;\n //#7458: if $and is present in selector (at any level) merge nested $and\n if (isAndInSelector(result, false)) {\n result = mergeAndedSelectorsNested(result);\n if ('$and' in result) {\n result = mergeAndedSelectors(result['$and']);\n }\n wasAnded = true;\n }\n\n ['$or', '$nor'].forEach(function (orOrNor) {\n if (orOrNor in result) {\n // message each individual selector\n // e.g. {foo: 'bar'} becomes {foo: {$eq: 'bar'}}\n result[orOrNor].forEach(function (subSelector) {\n var fields = Object.keys(subSelector);\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = subSelector[field];\n if (typeof matcher !== 'object' || matcher === null) {\n subSelector[field] = {$eq: matcher};\n }\n }\n });\n }\n });\n\n if ('$not' in result) {\n //This feels a little like forcing, but it will work for now,\n //I would like to come back to this and make the merging of selectors a little more generic\n result['$not'] = mergeAndedSelectors([result['$not']]);\n }\n\n var fields = Object.keys(result);\n\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n var matcher = result[field];\n\n if (typeof matcher !== 'object' || matcher === null) {\n matcher = {$eq: matcher};\n } else if ('$ne' in matcher && !wasAnded) {\n // I put these in an array, since there may be more than one\n // but in the \"mergeAnded\" operation, I already take care of that\n matcher.$ne = [matcher.$ne];\n }\n result[field] = matcher;\n }\n\n return result;\n}\n\nfunction pad(str, padWith, upToLength) {\n var padding = '';\n var targetLength = upToLength - str.length;\n /* istanbul ignore next */\n while (padding.length < targetLength) {\n padding += padWith;\n }\n return padding;\n}\n\nfunction padLeft(str, padWith, upToLength) {\n var padding = pad(str, padWith, upToLength);\n return padding + str;\n}\n\nvar MIN_MAGNITUDE = -324; // verified by -Number.MIN_VALUE\nvar MAGNITUDE_DIGITS = 3; // ditto\nvar SEP = ''; // set to '_' for easier debugging \n\nfunction collate(a, b) {\n\n if (a === b) {\n return 0;\n }\n\n a = normalizeKey(a);\n b = normalizeKey(b);\n\n var ai = collationIndex(a);\n var bi = collationIndex(b);\n if ((ai - bi) !== 0) {\n return ai - bi;\n }\n switch (typeof a) {\n case 'number':\n return a - b;\n case 'boolean':\n return a < b ? -1 : 1;\n case 'string':\n return stringCollate(a, b);\n }\n return Array.isArray(a) ? arrayCollate(a, b) : objectCollate(a, b);\n}\n\n// couch considers null/NaN/Infinity/-Infinity === undefined,\n// for the purposes of mapreduce indexes. also, dates get stringified.\nfunction normalizeKey(key) {\n switch (typeof key) {\n case 'undefined':\n return null;\n case 'number':\n if (key === Infinity || key === -Infinity || isNaN(key)) {\n return null;\n }\n return key;\n case 'object':\n var origKey = key;\n if (Array.isArray(key)) {\n var len = key.length;\n key = new Array(len);\n for (var i = 0; i < len; i++) {\n key[i] = normalizeKey(origKey[i]);\n }\n /* istanbul ignore next */\n } else if (key instanceof Date) {\n return key.toJSON();\n } else if (key !== null) { // generic object\n key = {};\n for (var k in origKey) {\n if (origKey.hasOwnProperty(k)) {\n var val = origKey[k];\n if (typeof val !== 'undefined') {\n key[k] = normalizeKey(val);\n }\n }\n }\n }\n }\n return key;\n}\n\nfunction indexify(key) {\n if (key !== null) {\n switch (typeof key) {\n case 'boolean':\n return key ? 1 : 0;\n case 'number':\n return numToIndexableString(key);\n case 'string':\n // We've to be sure that key does not contain \\u0000\n // Do order-preserving replacements:\n // 0 -> 1, 1\n // 1 -> 1, 2\n // 2 -> 2, 2\n /* eslint-disable no-control-regex */\n return key\n .replace(/\\u0002/g, '\\u0002\\u0002')\n .replace(/\\u0001/g, '\\u0001\\u0002')\n .replace(/\\u0000/g, '\\u0001\\u0001');\n /* eslint-enable no-control-regex */\n case 'object':\n var isArray = Array.isArray(key);\n var arr = isArray ? key : Object.keys(key);\n var i = -1;\n var len = arr.length;\n var result = '';\n if (isArray) {\n while (++i < len) {\n result += toIndexableString(arr[i]);\n }\n } else {\n while (++i < len) {\n var objKey = arr[i];\n result += toIndexableString(objKey) +\n toIndexableString(key[objKey]);\n }\n }\n return result;\n }\n }\n return '';\n}\n\n// convert the given key to a string that would be appropriate\n// for lexical sorting, e.g. within a database, where the\n// sorting is the same given by the collate() function.\nfunction toIndexableString(key) {\n var zero = '\\u0000';\n key = normalizeKey(key);\n return collationIndex(key) + SEP + indexify(key) + zero;\n}\n\nfunction parseNumber(str, i) {\n var originalIdx = i;\n var num;\n var zero = str[i] === '1';\n if (zero) {\n num = 0;\n i++;\n } else {\n var neg = str[i] === '0';\n i++;\n var numAsString = '';\n var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);\n var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;\n /* istanbul ignore next */\n if (neg) {\n magnitude = -magnitude;\n }\n i += MAGNITUDE_DIGITS;\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n } else {\n numAsString += ch;\n }\n i++;\n }\n numAsString = numAsString.split('.');\n if (numAsString.length === 1) {\n num = parseInt(numAsString, 10);\n } else {\n /* istanbul ignore next */\n num = parseFloat(numAsString[0] + '.' + numAsString[1]);\n }\n /* istanbul ignore next */\n if (neg) {\n num = num - 10;\n }\n /* istanbul ignore next */\n if (magnitude !== 0) {\n // parseFloat is more reliable than pow due to rounding errors\n // e.g. Number.MAX_VALUE would return Infinity if we did\n // num * Math.pow(10, magnitude);\n num = parseFloat(num + 'e' + magnitude);\n }\n }\n return {num: num, length : i - originalIdx};\n}\n\n// move up the stack while parsing\n// this function moved outside of parseIndexableString for performance\nfunction pop(stack, metaStack) {\n var obj = stack.pop();\n\n if (metaStack.length) {\n var lastMetaElement = metaStack[metaStack.length - 1];\n if (obj === lastMetaElement.element) {\n // popping a meta-element, e.g. an object whose value is another object\n metaStack.pop();\n lastMetaElement = metaStack[metaStack.length - 1];\n }\n var element = lastMetaElement.element;\n var lastElementIndex = lastMetaElement.index;\n if (Array.isArray(element)) {\n element.push(obj);\n } else if (lastElementIndex === stack.length - 2) { // obj with key+value\n var key = stack.pop();\n element[key] = obj;\n } else {\n stack.push(obj); // obj with key only\n }\n }\n}\n\nfunction parseIndexableString(str) {\n var stack = [];\n var metaStack = []; // stack for arrays and objects\n var i = 0;\n\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var collationIndex = str[i++];\n if (collationIndex === '\\u0000') {\n if (stack.length === 1) {\n return stack.pop();\n } else {\n pop(stack, metaStack);\n continue;\n }\n }\n switch (collationIndex) {\n case '1':\n stack.push(null);\n break;\n case '2':\n stack.push(str[i] === '1');\n i++;\n break;\n case '3':\n var parsedNum = parseNumber(str, i);\n stack.push(parsedNum.num);\n i += parsedNum.length;\n break;\n case '4':\n var parsedStr = '';\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n var ch = str[i];\n if (ch === '\\u0000') {\n break;\n }\n parsedStr += ch;\n i++;\n }\n // perform the reverse of the order-preserving replacement\n // algorithm (see above)\n /* eslint-disable no-control-regex */\n parsedStr = parsedStr.replace(/\\u0001\\u0001/g, '\\u0000')\n .replace(/\\u0001\\u0002/g, '\\u0001')\n .replace(/\\u0002\\u0002/g, '\\u0002');\n /* eslint-enable no-control-regex */\n stack.push(parsedStr);\n break;\n case '5':\n var arrayElement = { element: [], index: stack.length };\n stack.push(arrayElement.element);\n metaStack.push(arrayElement);\n break;\n case '6':\n var objElement = { element: {}, index: stack.length };\n stack.push(objElement.element);\n metaStack.push(objElement);\n break;\n /* istanbul ignore next */\n default:\n throw new Error(\n 'bad collationIndex or unexpectedly reached end of input: ' +\n collationIndex);\n }\n }\n}\n\nfunction arrayCollate(a, b) {\n var len = Math.min(a.length, b.length);\n for (var i = 0; i < len; i++) {\n var sort = collate(a[i], b[i]);\n if (sort !== 0) {\n return sort;\n }\n }\n return (a.length === b.length) ? 0 :\n (a.length > b.length) ? 1 : -1;\n}\nfunction stringCollate(a, b) {\n // See: https://github.com/daleharvey/pouchdb/issues/40\n // This is incompatible with the CouchDB implementation, but its the\n // best we can do for now\n return (a === b) ? 0 : ((a > b) ? 1 : -1);\n}\nfunction objectCollate(a, b) {\n var ak = Object.keys(a), bk = Object.keys(b);\n var len = Math.min(ak.length, bk.length);\n for (var i = 0; i < len; i++) {\n // First sort the keys\n var sort = collate(ak[i], bk[i]);\n if (sort !== 0) {\n return sort;\n }\n // if the keys are equal sort the values\n sort = collate(a[ak[i]], b[bk[i]]);\n if (sort !== 0) {\n return sort;\n }\n\n }\n return (ak.length === bk.length) ? 0 :\n (ak.length > bk.length) ? 1 : -1;\n}\n// The collation is defined by erlangs ordered terms\n// the atoms null, true, false come first, then numbers, strings,\n// arrays, then objects\n// null/undefined/NaN/Infinity/-Infinity are all considered null\nfunction collationIndex(x) {\n var id = ['boolean', 'number', 'string', 'object'];\n var idx = id.indexOf(typeof x);\n //false if -1 otherwise true, but fast!!!!1\n if (~idx) {\n if (x === null) {\n return 1;\n }\n if (Array.isArray(x)) {\n return 5;\n }\n return idx < 3 ? (idx + 2) : (idx + 3);\n }\n /* istanbul ignore next */\n if (Array.isArray(x)) {\n return 5;\n }\n}\n\n// conversion:\n// x yyy zz...zz\n// x = 0 for negative, 1 for 0, 2 for positive\n// y = exponent (for negative numbers negated) moved so that it's >= 0\n// z = mantisse\nfunction numToIndexableString(num) {\n\n if (num === 0) {\n return '1';\n }\n\n // convert number to exponential format for easier and\n // more succinct string sorting\n var expFormat = num.toExponential().split(/e\\+?/);\n var magnitude = parseInt(expFormat[1], 10);\n\n var neg = num < 0;\n\n var result = neg ? '0' : '2';\n\n // first sort by magnitude\n // it's easier if all magnitudes are positive\n var magForComparison = ((neg ? -magnitude : magnitude) - MIN_MAGNITUDE);\n var magString = padLeft((magForComparison).toString(), '0', MAGNITUDE_DIGITS);\n\n result += SEP + magString;\n\n // then sort by the factor\n var factor = Math.abs(parseFloat(expFormat[0])); // [1..10)\n /* istanbul ignore next */\n if (neg) { // for negative reverse ordering\n factor = 10 - factor;\n }\n\n var factorStr = factor.toFixed(20);\n\n // strip zeros from the end\n factorStr = factorStr.replace(/\\.?0+$/, '');\n\n result += SEP + factorStr;\n\n return result;\n}\n\n// create a comparator based on the sort object\nfunction createFieldSorter(sort) {\n\n function getFieldValuesAsArray(doc) {\n return sort.map(function (sorting) {\n var fieldName = getKey(sorting);\n var parsedField = parseField(fieldName);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n return docFieldValue;\n });\n }\n\n return function (aRow, bRow) {\n var aFieldValues = getFieldValuesAsArray(aRow.doc);\n var bFieldValues = getFieldValuesAsArray(bRow.doc);\n var collation = collate(aFieldValues, bFieldValues);\n if (collation !== 0) {\n return collation;\n }\n // this is what mango seems to do\n return compare$1(aRow.doc._id, bRow.doc._id);\n };\n}\n\nfunction filterInMemoryFields(rows, requestDef, inMemoryFields) {\n rows = rows.filter(function (row) {\n return rowFilter(row.doc, requestDef.selector, inMemoryFields);\n });\n\n if (requestDef.sort) {\n // in-memory sort\n var fieldSorter = createFieldSorter(requestDef.sort);\n rows = rows.sort(fieldSorter);\n if (typeof requestDef.sort[0] !== 'string' &&\n getValue(requestDef.sort[0]) === 'desc') {\n rows = rows.reverse();\n }\n }\n\n if ('limit' in requestDef || 'skip' in requestDef) {\n // have to do the limit in-memory\n var skip = requestDef.skip || 0;\n var limit = ('limit' in requestDef ? requestDef.limit : rows.length) + skip;\n rows = rows.slice(skip, limit);\n }\n return rows;\n}\n\nfunction rowFilter(doc, selector, inMemoryFields) {\n return inMemoryFields.every(function (field) {\n var matcher = selector[field];\n var parsedField = parseField(field);\n var docFieldValue = getFieldFromDoc(doc, parsedField);\n if (isCombinationalField(field)) {\n return matchCominationalSelector(field, matcher, doc);\n }\n\n return matchSelector(matcher, doc, parsedField, docFieldValue);\n });\n}\n\nfunction matchSelector(matcher, doc, parsedField, docFieldValue) {\n if (!matcher) {\n // no filtering necessary; this field is just needed for sorting\n return true;\n }\n\n // is matcher an object, if so continue recursion\n if (typeof matcher === 'object') {\n return Object.keys(matcher).every(function (userOperator) {\n var userValue = matcher[userOperator];\n return match(userOperator, doc, userValue, parsedField, docFieldValue);\n });\n }\n\n // no more depth, No need to recurse further\n return matcher === docFieldValue;\n}\n\nfunction matchCominationalSelector(field, matcher, doc) {\n\n if (field === '$or') {\n return matcher.some(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n }\n\n if (field === '$not') {\n return !rowFilter(doc, matcher, Object.keys(matcher));\n }\n\n //`$nor`\n return !matcher.find(function (orMatchers) {\n return rowFilter(doc, orMatchers, Object.keys(orMatchers));\n });\n\n}\n\nfunction match(userOperator, doc, userValue, parsedField, docFieldValue) {\n if (!matchers[userOperator]) {\n throw new Error('unknown operator \"' + userOperator +\n '\" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, ' +\n '$nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');\n }\n return matchers[userOperator](doc, userValue, parsedField, docFieldValue);\n}\n\nfunction fieldExists(docFieldValue) {\n return typeof docFieldValue !== 'undefined' && docFieldValue !== null;\n}\n\nfunction fieldIsNotUndefined(docFieldValue) {\n return typeof docFieldValue !== 'undefined';\n}\n\nfunction modField(docFieldValue, userValue) {\n var divisor = userValue[0];\n var mod = userValue[1];\n if (divisor === 0) {\n throw new Error('Bad divisor, cannot divide by zero');\n }\n\n if (parseInt(divisor, 10) !== divisor ) {\n throw new Error('Divisor is not an integer');\n }\n\n if (parseInt(mod, 10) !== mod ) {\n throw new Error('Modulus is not an integer');\n }\n\n if (parseInt(docFieldValue, 10) !== docFieldValue) {\n return false;\n }\n\n return docFieldValue % divisor === mod;\n}\n\nfunction arrayContainsValue(docFieldValue, userValue) {\n return userValue.some(function (val) {\n if (docFieldValue instanceof Array) {\n return docFieldValue.indexOf(val) > -1;\n }\n\n return docFieldValue === val;\n });\n}\n\nfunction arrayContainsAllValues(docFieldValue, userValue) {\n return userValue.every(function (val) {\n return docFieldValue.indexOf(val) > -1;\n });\n}\n\nfunction arraySize(docFieldValue, userValue) {\n return docFieldValue.length === userValue;\n}\n\nfunction regexMatch(docFieldValue, userValue) {\n var re = new RegExp(userValue);\n\n return re.test(docFieldValue);\n}\n\nfunction typeMatch(docFieldValue, userValue) {\n\n switch (userValue) {\n case 'null':\n return docFieldValue === null;\n case 'boolean':\n return typeof (docFieldValue) === 'boolean';\n case 'number':\n return typeof (docFieldValue) === 'number';\n case 'string':\n return typeof (docFieldValue) === 'string';\n case 'array':\n return docFieldValue instanceof Array;\n case 'object':\n return ({}).toString.call(docFieldValue) === '[object Object]';\n }\n\n throw new Error(userValue + ' not supported as a type.' +\n 'Please use one of object, string, array, number, boolean or null.');\n\n}\n\nvar matchers = {\n\n '$elemMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.some(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.some(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$allMatch': function (doc, userValue, parsedField, docFieldValue) {\n if (!Array.isArray(docFieldValue)) {\n return false;\n }\n\n /* istanbul ignore next */\n if (docFieldValue.length === 0) {\n return false;\n }\n\n if (typeof docFieldValue[0] === 'object') {\n return docFieldValue.every(function (val) {\n return rowFilter(val, userValue, Object.keys(userValue));\n });\n }\n\n return docFieldValue.every(function (val) {\n return matchSelector(userValue, doc, parsedField, val);\n });\n },\n\n '$eq': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;\n },\n\n '$gte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;\n },\n\n '$gt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;\n },\n\n '$lte': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;\n },\n\n '$lt': function (doc, userValue, parsedField, docFieldValue) {\n return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;\n },\n\n '$exists': function (doc, userValue, parsedField, docFieldValue) {\n //a field that is null is still considered to exist\n if (userValue) {\n return fieldIsNotUndefined(docFieldValue);\n }\n\n return !fieldIsNotUndefined(docFieldValue);\n },\n\n '$mod': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && modField(docFieldValue, userValue);\n },\n\n '$ne': function (doc, userValue, parsedField, docFieldValue) {\n return userValue.every(function (neValue) {\n return collate(docFieldValue, neValue) !== 0;\n });\n },\n '$in': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);\n },\n\n '$nin': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);\n },\n\n '$size': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && arraySize(docFieldValue, userValue);\n },\n\n '$all': function (doc, userValue, parsedField, docFieldValue) {\n return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);\n },\n\n '$regex': function (doc, userValue, parsedField, docFieldValue) {\n return fieldExists(docFieldValue) && regexMatch(docFieldValue, userValue);\n },\n\n '$type': function (doc, userValue, parsedField, docFieldValue) {\n return typeMatch(docFieldValue, userValue);\n }\n};\n\n// return true if the given doc matches the supplied selector\nfunction matchesSelector(doc, selector) {\n /* istanbul ignore if */\n if (typeof selector !== 'object') {\n // match the CouchDB error message\n throw new Error('Selector error: expected a JSON object');\n }\n\n selector = massageSelector(selector);\n var row = {\n 'doc': doc\n };\n\n var rowsMatched = filterInMemoryFields([row], { 'selector': selector }, Object.keys(selector));\n return rowsMatched && rowsMatched.length === 1;\n}\n\nfunction evalFilter(input) {\n return scopeEval('\"use strict\";\\nreturn ' + input + ';', {});\n}\n\nfunction evalView(input) {\n var code = [\n 'return function(doc) {',\n ' \"use strict\";',\n ' var emitted = false;',\n ' var emit = function (a, b) {',\n ' emitted = true;',\n ' };',\n ' var view = ' + input + ';',\n ' view(doc);',\n ' if (emitted) {',\n ' return true;',\n ' }',\n '};'\n ].join('\\n');\n\n return scopeEval(code, {});\n}\n\nfunction validate(opts, callback) {\n if (opts.selector) {\n if (opts.filter && opts.filter !== '_selector') {\n var filterName = typeof opts.filter === 'string' ?\n opts.filter : 'function';\n return callback(new Error('selector invalid for filter \"' + filterName + '\"'));\n }\n }\n callback();\n}\n\nfunction normalize(opts) {\n if (opts.view && !opts.filter) {\n opts.filter = '_view';\n }\n\n if (opts.selector && !opts.filter) {\n opts.filter = '_selector';\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n if (opts.filter === '_view') {\n opts.view = normalizeDesignDocFunctionName(opts.view);\n } else {\n opts.filter = normalizeDesignDocFunctionName(opts.filter);\n }\n }\n}\n\nfunction shouldFilter(changesHandler, opts) {\n return opts.filter && typeof opts.filter === 'string' &&\n !opts.doc_ids && !isRemote(changesHandler.db);\n}\n\nfunction filter(changesHandler, opts) {\n var callback = opts.complete;\n if (opts.filter === '_view') {\n if (!opts.view || typeof opts.view !== 'string') {\n var err = createError(BAD_REQUEST,\n '`view` filter parameter not found or invalid.');\n return callback(err);\n }\n // fetch a view from a design doc, make it behave like a filter\n var viewName = parseDesignDocFunctionName(opts.view);\n changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] &&\n ddoc.views[viewName[1]].map;\n if (!mapFun) {\n return callback(createError(MISSING_DOC,\n (ddoc.views ? 'missing json key: ' + viewName[1] :\n 'missing json key: views')));\n }\n opts.filter = evalView(mapFun);\n changesHandler.doChanges(opts);\n });\n } else if (opts.selector) {\n opts.filter = function (doc) {\n return matchesSelector(doc, opts.selector);\n };\n changesHandler.doChanges(opts);\n } else {\n // fetch a filter from a design doc\n var filterName = parseDesignDocFunctionName(opts.filter);\n changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) {\n /* istanbul ignore if */\n if (changesHandler.isCancelled) {\n return callback(null, {status: 'cancelled'});\n }\n /* istanbul ignore next */\n if (err) {\n return callback(generateErrorFromResponse(err));\n }\n var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];\n if (!filterFun) {\n return callback(createError(MISSING_DOC,\n ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1]\n : 'missing json key: filters')));\n }\n opts.filter = evalFilter(filterFun);\n changesHandler.doChanges(opts);\n });\n }\n}\n\nfunction applyChangesFilterPlugin(PouchDB) {\n PouchDB._changesFilterPlugin = {\n validate: validate,\n normalize: normalize,\n shouldFilter: shouldFilter,\n filter: filter\n };\n}\n\n// TODO: remove from pouchdb-core (breaking)\nPouchDB.plugin(applyChangesFilterPlugin);\n\nPouchDB.version = version;\n\nfunction toObject(array) {\n return array.reduce(function (obj, item) {\n obj[item] = true;\n return obj;\n }, {});\n}\n// List of top level reserved words for doc\nvar reservedWords = toObject([\n '_id',\n '_rev',\n '_attachments',\n '_deleted',\n '_revisions',\n '_revs_info',\n '_conflicts',\n '_deleted_conflicts',\n '_local_seq',\n '_rev_tree',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats',\n // Specific to Couchbase Sync Gateway\n '_removed'\n]);\n\n// List of reserved words that should end up the document\nvar dataWords = toObject([\n '_attachments',\n //replication documents\n '_replication_id',\n '_replication_state',\n '_replication_state_time',\n '_replication_state_reason',\n '_replication_stats'\n]);\n\nfunction parseRevisionInfo(rev$$1) {\n if (!/^\\d+-./.test(rev$$1)) {\n return createError(INVALID_REV);\n }\n var idx = rev$$1.indexOf('-');\n var left = rev$$1.substring(0, idx);\n var right = rev$$1.substring(idx + 1);\n return {\n prefix: parseInt(left, 10),\n id: right\n };\n}\n\nfunction makeRevTreeFromRevisions(revisions, opts) {\n var pos = revisions.start - revisions.ids.length + 1;\n\n var revisionIds = revisions.ids;\n var ids = [revisionIds[0], opts, []];\n\n for (var i = 1, len = revisionIds.length; i < len; i++) {\n ids = [revisionIds[i], {status: 'missing'}, [ids]];\n }\n\n return [{\n pos: pos,\n ids: ids\n }];\n}\n\n// Preprocess documents, parse their revisions, assign an id and a\n// revision for new writes that are missing them, etc\nfunction parseDoc(doc, newEdits, dbOpts) {\n if (!dbOpts) {\n dbOpts = {\n deterministic_revs: true\n };\n }\n\n var nRevNum;\n var newRevId;\n var revInfo;\n var opts = {status: 'available'};\n if (doc._deleted) {\n opts.deleted = true;\n }\n\n if (newEdits) {\n if (!doc._id) {\n doc._id = uuid();\n }\n newRevId = rev(doc, dbOpts.deterministic_revs);\n if (doc._rev) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n doc._rev_tree = [{\n pos: revInfo.prefix,\n ids: [revInfo.id, {status: 'missing'}, [[newRevId, opts, []]]]\n }];\n nRevNum = revInfo.prefix + 1;\n } else {\n doc._rev_tree = [{\n pos: 1,\n ids : [newRevId, opts, []]\n }];\n nRevNum = 1;\n }\n } else {\n if (doc._revisions) {\n doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);\n nRevNum = doc._revisions.start;\n newRevId = doc._revisions.ids[0];\n }\n if (!doc._rev_tree) {\n revInfo = parseRevisionInfo(doc._rev);\n if (revInfo.error) {\n return revInfo;\n }\n nRevNum = revInfo.prefix;\n newRevId = revInfo.id;\n doc._rev_tree = [{\n pos: nRevNum,\n ids: [newRevId, opts, []]\n }];\n }\n }\n\n invalidIdError(doc._id);\n\n doc._rev = nRevNum + '-' + newRevId;\n\n var result = {metadata : {}, data : {}};\n for (var key in doc) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(doc, key)) {\n var specialKey = key[0] === '_';\n if (specialKey && !reservedWords[key]) {\n var error = createError(DOC_VALIDATION, key);\n error.message = DOC_VALIDATION.message + ': ' + key;\n throw error;\n } else if (specialKey && !dataWords[key]) {\n result.metadata[key.slice(1)] = doc[key];\n } else {\n result.data[key] = doc[key];\n }\n }\n }\n return result;\n}\n\nfunction parseBase64(data) {\n try {\n return thisAtob(data);\n } catch (e) {\n var err = createError(BAD_ARG,\n 'Attachment is not a valid base64 string');\n return {error: err};\n }\n}\n\nfunction preprocessString(att, blobType, callback) {\n var asBinary = parseBase64(att.data);\n if (asBinary.error) {\n return callback(asBinary.error);\n }\n\n att.length = asBinary.length;\n if (blobType === 'blob') {\n att.data = binStringToBluffer(asBinary, att.content_type);\n } else if (blobType === 'base64') {\n att.data = thisBtoa(asBinary);\n } else { // binary\n att.data = asBinary;\n }\n binaryMd5(asBinary, function (result) {\n att.digest = 'md5-' + result;\n callback();\n });\n}\n\nfunction preprocessBlob(att, blobType, callback) {\n binaryMd5(att.data, function (md5) {\n att.digest = 'md5-' + md5;\n // size is for blobs (browser), length is for buffers (node)\n att.length = att.data.size || att.data.length || 0;\n if (blobType === 'binary') {\n blobToBinaryString(att.data, function (binString) {\n att.data = binString;\n callback();\n });\n } else if (blobType === 'base64') {\n blobToBase64(att.data, function (b64) {\n att.data = b64;\n callback();\n });\n } else {\n callback();\n }\n });\n}\n\nfunction preprocessAttachment(att, blobType, callback) {\n if (att.stub) {\n return callback();\n }\n if (typeof att.data === 'string') { // input is a base64 string\n preprocessString(att, blobType, callback);\n } else { // input is a blob\n preprocessBlob(att, blobType, callback);\n }\n}\n\nfunction preprocessAttachments(docInfos, blobType, callback) {\n\n if (!docInfos.length) {\n return callback();\n }\n\n var docv = 0;\n var overallErr;\n\n docInfos.forEach(function (docInfo) {\n var attachments = docInfo.data && docInfo.data._attachments ?\n Object.keys(docInfo.data._attachments) : [];\n var recv = 0;\n\n if (!attachments.length) {\n return done();\n }\n\n function processedAttachment(err) {\n overallErr = err;\n recv++;\n if (recv === attachments.length) {\n done();\n }\n }\n\n for (var key in docInfo.data._attachments) {\n if (docInfo.data._attachments.hasOwnProperty(key)) {\n preprocessAttachment(docInfo.data._attachments[key],\n blobType, processedAttachment);\n }\n }\n });\n\n function done() {\n docv++;\n if (docInfos.length === docv) {\n if (overallErr) {\n callback(overallErr);\n } else {\n callback();\n }\n }\n }\n}\n\nfunction updateDoc(revLimit, prev, docInfo, results,\n i, cb, writeDoc, newEdits) {\n\n if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {\n results[i] = docInfo;\n return cb();\n }\n\n // sometimes this is pre-calculated. historically not always\n var previousWinningRev = prev.winningRev || winningRev(prev);\n var previouslyDeleted = 'deleted' in prev ? prev.deleted :\n isDeleted(prev, previousWinningRev);\n var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :\n isDeleted(docInfo.metadata);\n var isRoot = /^1-/.test(docInfo.metadata.rev);\n\n if (previouslyDeleted && !deleted && newEdits && isRoot) {\n var newDoc = docInfo.data;\n newDoc._rev = previousWinningRev;\n newDoc._id = docInfo.metadata.id;\n docInfo = parseDoc(newDoc, newEdits);\n }\n\n var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);\n\n var inConflict = newEdits && ((\n (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||\n (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||\n (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[i] = err;\n return cb();\n }\n\n var newRev = docInfo.metadata.rev;\n docInfo.metadata.rev_tree = merged.tree;\n docInfo.stemmedRevs = merged.stemmedRevs || [];\n /* istanbul ignore else */\n if (prev.rev_map) {\n docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb\n }\n\n // recalculate\n var winningRev$$1 = winningRev(docInfo.metadata);\n var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);\n\n // calculate the total number of documents that were added/removed,\n // from the perspective of total_rows/doc_count\n var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :\n previouslyDeleted < winningRevIsDeleted ? -1 : 1;\n\n var newRevIsDeleted;\n if (newRev === winningRev$$1) {\n // if the new rev is the same as the winning rev, we can reuse that value\n newRevIsDeleted = winningRevIsDeleted;\n } else {\n // if they're not the same, then we need to recalculate\n newRevIsDeleted = isDeleted(docInfo.metadata, newRev);\n }\n\n writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n true, delta, i, cb);\n}\n\nfunction rootIsMissing(docInfo) {\n return docInfo.metadata.rev_tree[0].ids[1].status === 'missing';\n}\n\nfunction processDocs(revLimit, docInfos, api, fetchedDocs, tx, results,\n writeDoc, opts, overallCallback) {\n\n // Default to 1000 locally\n revLimit = revLimit || 1000;\n\n function insertDoc(docInfo, resultsIdx, callback) {\n // Cant insert new deleted documents\n var winningRev$$1 = winningRev(docInfo.metadata);\n var deleted = isDeleted(docInfo.metadata, winningRev$$1);\n if ('was_delete' in opts && deleted) {\n results[resultsIdx] = createError(MISSING_DOC, 'deleted');\n return callback();\n }\n\n // 4712 - detect whether a new document was inserted with a _rev\n var inConflict = newEdits && rootIsMissing(docInfo);\n\n if (inConflict) {\n var err = createError(REV_CONFLICT);\n results[resultsIdx] = err;\n return callback();\n }\n\n var delta = deleted ? 0 : 1;\n\n writeDoc(docInfo, winningRev$$1, deleted, deleted, false,\n delta, resultsIdx, callback);\n }\n\n var newEdits = opts.new_edits;\n var idsToDocs = new ExportedMap();\n\n var docsDone = 0;\n var docsToDo = docInfos.length;\n\n function checkAllDocsDone() {\n if (++docsDone === docsToDo && overallCallback) {\n overallCallback();\n }\n }\n\n docInfos.forEach(function (currentDoc, resultsIdx) {\n\n if (currentDoc._id && isLocalId(currentDoc._id)) {\n var fun = currentDoc._deleted ? '_removeLocal' : '_putLocal';\n api[fun](currentDoc, {ctx: tx}, function (err, res) {\n results[resultsIdx] = err || res;\n checkAllDocsDone();\n });\n return;\n }\n\n var id = currentDoc.metadata.id;\n if (idsToDocs.has(id)) {\n docsToDo--; // duplicate\n idsToDocs.get(id).push([currentDoc, resultsIdx]);\n } else {\n idsToDocs.set(id, [[currentDoc, resultsIdx]]);\n }\n });\n\n // in the case of new_edits, the user can provide multiple docs\n // with the same id. these need to be processed sequentially\n idsToDocs.forEach(function (docs, id) {\n var numDone = 0;\n\n function docWritten() {\n if (++numDone < docs.length) {\n nextDoc();\n } else {\n checkAllDocsDone();\n }\n }\n function nextDoc() {\n var value = docs[numDone];\n var currentDoc = value[0];\n var resultsIdx = value[1];\n\n if (fetchedDocs.has(id)) {\n updateDoc(revLimit, fetchedDocs.get(id), currentDoc, results,\n resultsIdx, docWritten, writeDoc, newEdits);\n } else {\n // Ensure stemming applies to new writes as well\n var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);\n currentDoc.metadata.rev_tree = merged.tree;\n currentDoc.stemmedRevs = merged.stemmedRevs || [];\n insertDoc(currentDoc, resultsIdx, docWritten);\n }\n }\n nextDoc();\n });\n}\n\n// IndexedDB requires a versioned database structure, so we use the\n// version here to manage migrations.\nvar ADAPTER_VERSION = 5;\n\n// The object stores created for each database\n// DOC_STORE stores the document meta data, its revision history and state\n// Keyed by document id\nvar DOC_STORE = 'document-store';\n// BY_SEQ_STORE stores a particular version of a document, keyed by its\n// sequence id\nvar BY_SEQ_STORE = 'by-sequence';\n// Where we store attachments\nvar ATTACH_STORE = 'attach-store';\n// Where we store many-to-many relations\n// between attachment digests and seqs\nvar ATTACH_AND_SEQ_STORE = 'attach-seq-store';\n\n// Where we store database-wide meta data in a single record\n// keyed by id: META_STORE\nvar META_STORE = 'meta-store';\n// Where we store local documents\nvar LOCAL_STORE = 'local-store';\n// Where we detect blob support\nvar DETECT_BLOB_SUPPORT_STORE = 'detect-blob-support';\n\nfunction safeJsonParse(str) {\n // This try/catch guards against stack overflow errors.\n // JSON.parse() is faster than vuvuzela.parse() but vuvuzela\n // cannot overflow.\n try {\n return JSON.parse(str);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.parse(str);\n }\n}\n\nfunction safeJsonStringify(json) {\n try {\n return JSON.stringify(json);\n } catch (e) {\n /* istanbul ignore next */\n return vuvuzela.stringify(json);\n }\n}\n\nfunction idbError(callback) {\n return function (evt) {\n var message = 'unknown_error';\n if (evt.target && evt.target.error) {\n message = evt.target.error.name || evt.target.error.message;\n }\n callback(createError(IDB_ERROR, message, evt.type));\n };\n}\n\n// Unfortunately, the metadata has to be stringified\n// when it is put into the database, because otherwise\n// IndexedDB can throw errors for deeply-nested objects.\n// Originally we just used JSON.parse/JSON.stringify; now\n// we use this custom vuvuzela library that avoids recursion.\n// If we could do it all over again, we'd probably use a\n// format for the revision trees other than JSON.\nfunction encodeMetadata(metadata, winningRev, deleted) {\n return {\n data: safeJsonStringify(metadata),\n winningRev: winningRev,\n deletedOrLocal: deleted ? '1' : '0',\n seq: metadata.seq, // highest seq for this doc\n id: metadata.id\n };\n}\n\nfunction decodeMetadata(storedObject) {\n if (!storedObject) {\n return null;\n }\n var metadata = safeJsonParse(storedObject.data);\n metadata.winningRev = storedObject.winningRev;\n metadata.deleted = storedObject.deletedOrLocal === '1';\n metadata.seq = storedObject.seq;\n return metadata;\n}\n\n// read the doc back out from the database. we don't store the\n// _id or _rev because we already have _doc_id_rev.\nfunction decodeDoc(doc) {\n if (!doc) {\n return doc;\n }\n var idx = doc._doc_id_rev.lastIndexOf(':');\n doc._id = doc._doc_id_rev.substring(0, idx - 1);\n doc._rev = doc._doc_id_rev.substring(idx + 1);\n delete doc._doc_id_rev;\n return doc;\n}\n\n// Read a blob from the database, encoding as necessary\n// and translating from base64 if the IDB doesn't support\n// native Blobs\nfunction readBlobData(body, type, asBlob, callback) {\n if (asBlob) {\n if (!body) {\n callback(createBlob([''], {type: type}));\n } else if (typeof body !== 'string') { // we have blob support\n callback(body);\n } else { // no blob support\n callback(b64ToBluffer(body, type));\n }\n } else { // as base64 string\n if (!body) {\n callback('');\n } else if (typeof body !== 'string') { // we have blob support\n readAsBinaryString(body, function (binary) {\n callback(thisBtoa(binary));\n });\n } else { // no blob support\n callback(body);\n }\n }\n}\n\nfunction fetchAttachmentsIfNecessary(doc, opts, txn, cb) {\n var attachments = Object.keys(doc._attachments || {});\n if (!attachments.length) {\n return cb && cb();\n }\n var numDone = 0;\n\n function checkDone() {\n if (++numDone === attachments.length && cb) {\n cb();\n }\n }\n\n function fetchAttachment(doc, att) {\n var attObj = doc._attachments[att];\n var digest = attObj.digest;\n var req = txn.objectStore(ATTACH_STORE).get(digest);\n req.onsuccess = function (e) {\n attObj.body = e.target.result.body;\n checkDone();\n };\n }\n\n attachments.forEach(function (att) {\n if (opts.attachments && opts.include_docs) {\n fetchAttachment(doc, att);\n } else {\n doc._attachments[att].stub = true;\n checkDone();\n }\n });\n}\n\n// IDB-specific postprocessing necessary because\n// we don't know whether we stored a true Blob or\n// a base64-encoded string, and if it's a Blob it\n// needs to be read outside of the transaction context\nfunction postProcessAttachments(results, asBlob) {\n return Promise.all(results.map(function (row) {\n if (row.doc && row.doc._attachments) {\n var attNames = Object.keys(row.doc._attachments);\n return Promise.all(attNames.map(function (att) {\n var attObj = row.doc._attachments[att];\n if (!('body' in attObj)) { // already processed\n return;\n }\n var body = attObj.body;\n var type = attObj.content_type;\n return new Promise(function (resolve) {\n readBlobData(body, type, asBlob, function (data) {\n row.doc._attachments[att] = $inject_Object_assign(\n pick(attObj, ['digest', 'content_type']),\n {data: data}\n );\n resolve();\n });\n });\n }));\n }\n }));\n}\n\nfunction compactRevs(revs, docId, txn) {\n\n var possiblyOrphanedDigests = [];\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n var count = revs.length;\n\n function checkDone() {\n count--;\n if (!count) { // done processing all revs\n deleteOrphanedAttachments();\n }\n }\n\n function deleteOrphanedAttachments() {\n if (!possiblyOrphanedDigests.length) {\n return;\n }\n possiblyOrphanedDigests.forEach(function (digest) {\n var countReq = attAndSeqStore.index('digestSeq').count(\n IDBKeyRange.bound(\n digest + '::', digest + '::\\uffff', false, false));\n countReq.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n // orphaned\n attStore.delete(digest);\n }\n };\n });\n }\n\n revs.forEach(function (rev$$1) {\n var index = seqStore.index('_doc_id_rev');\n var key = docId + \"::\" + rev$$1;\n index.getKey(key).onsuccess = function (e) {\n var seq = e.target.result;\n if (typeof seq !== 'number') {\n return checkDone();\n }\n seqStore.delete(seq);\n\n var cursor = attAndSeqStore.index('seq')\n .openCursor(IDBKeyRange.only(seq));\n\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var digest = cursor.value.digestSeq.split('::')[0];\n possiblyOrphanedDigests.push(digest);\n attAndSeqStore.delete(cursor.primaryKey);\n cursor.continue();\n } else { // done\n checkDone();\n }\n };\n };\n });\n}\n\nfunction openTransactionSafely(idb, stores, mode) {\n try {\n return {\n txn: idb.transaction(stores, mode)\n };\n } catch (err) {\n return {\n error: err\n };\n }\n}\n\nvar changesHandler = new Changes();\n\nfunction idbBulkDocs(dbOpts, req, opts, api, idb, callback) {\n var docInfos = req.docs;\n var txn;\n var docStore;\n var bySeqStore;\n var attachStore;\n var attachAndSeqStore;\n var metaStore;\n var docInfoError;\n var metaDoc;\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var doc = docInfos[i];\n if (doc._id && isLocalId(doc._id)) {\n continue;\n }\n doc = docInfos[i] = parseDoc(doc, opts.new_edits, dbOpts);\n if (doc.error && !docInfoError) {\n docInfoError = doc;\n }\n }\n\n if (docInfoError) {\n return callback(docInfoError);\n }\n\n var allDocsProcessed = false;\n var docCountDelta = 0;\n var results = new Array(docInfos.length);\n var fetchedDocs = new ExportedMap();\n var preconditionErrored = false;\n var blobType = api._meta.blobSupport ? 'blob' : 'base64';\n\n preprocessAttachments(docInfos, blobType, function (err) {\n if (err) {\n return callback(err);\n }\n startTransaction();\n });\n\n function startTransaction() {\n\n var stores = [\n DOC_STORE, BY_SEQ_STORE,\n ATTACH_STORE,\n LOCAL_STORE, ATTACH_AND_SEQ_STORE,\n META_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(callback);\n txn.ontimeout = idbError(callback);\n txn.oncomplete = complete;\n docStore = txn.objectStore(DOC_STORE);\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n attachStore = txn.objectStore(ATTACH_STORE);\n attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n metaStore = txn.objectStore(META_STORE);\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result;\n updateDocCountIfReady();\n };\n\n verifyAttachments(function (err) {\n if (err) {\n preconditionErrored = true;\n return callback(err);\n }\n fetchExistingDocs();\n });\n }\n\n function onAllDocsProcessed() {\n allDocsProcessed = true;\n updateDocCountIfReady();\n }\n\n function idbProcessDocs() {\n processDocs(dbOpts.revs_limit, docInfos, api, fetchedDocs,\n txn, results, writeDoc, opts, onAllDocsProcessed);\n }\n\n function updateDocCountIfReady() {\n if (!metaDoc || !allDocsProcessed) {\n return;\n }\n // caching the docCount saves a lot of time in allDocs() and\n // info(), which is why we go to all the trouble of doing this\n metaDoc.docCount += docCountDelta;\n metaStore.put(metaDoc);\n }\n\n function fetchExistingDocs() {\n\n if (!docInfos.length) {\n return;\n }\n\n var numFetched = 0;\n\n function checkDone() {\n if (++numFetched === docInfos.length) {\n idbProcessDocs();\n }\n }\n\n function readMetadata(event) {\n var metadata = decodeMetadata(event.target.result);\n\n if (metadata) {\n fetchedDocs.set(metadata.id, metadata);\n }\n checkDone();\n }\n\n for (var i = 0, len = docInfos.length; i < len; i++) {\n var docInfo = docInfos[i];\n if (docInfo._id && isLocalId(docInfo._id)) {\n checkDone(); // skip local docs\n continue;\n }\n var req = docStore.get(docInfo.metadata.id);\n req.onsuccess = readMetadata;\n }\n }\n\n function complete() {\n if (preconditionErrored) {\n return;\n }\n\n changesHandler.notify(api._meta.name);\n callback(null, results);\n }\n\n function verifyAttachment(digest, callback) {\n\n var req = attachStore.get(digest);\n req.onsuccess = function (e) {\n if (!e.target.result) {\n var err = createError(MISSING_STUB,\n 'unknown stub attachment with digest ' +\n digest);\n err.status = 412;\n callback(err);\n } else {\n callback();\n }\n };\n }\n\n function verifyAttachments(finish) {\n\n\n var digests = [];\n docInfos.forEach(function (docInfo) {\n if (docInfo.data && docInfo.data._attachments) {\n Object.keys(docInfo.data._attachments).forEach(function (filename) {\n var att = docInfo.data._attachments[filename];\n if (att.stub) {\n digests.push(att.digest);\n }\n });\n }\n });\n if (!digests.length) {\n return finish();\n }\n var numDone = 0;\n var err;\n\n function checkDone() {\n if (++numDone === digests.length) {\n finish(err);\n }\n }\n digests.forEach(function (digest) {\n verifyAttachment(digest, function (attErr) {\n if (attErr && !err) {\n err = attErr;\n }\n checkDone();\n });\n });\n }\n\n function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted,\n isUpdate, delta, resultsIdx, callback) {\n\n docInfo.metadata.winningRev = winningRev$$1;\n docInfo.metadata.deleted = winningRevIsDeleted;\n\n var doc = docInfo.data;\n doc._id = docInfo.metadata.id;\n doc._rev = docInfo.metadata.rev;\n\n if (newRevIsDeleted) {\n doc._deleted = true;\n }\n\n var hasAttachments = doc._attachments &&\n Object.keys(doc._attachments).length;\n if (hasAttachments) {\n return writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n docCountDelta += delta;\n updateDocCountIfReady();\n\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n\n function finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n var doc = docInfo.data;\n var metadata = docInfo.metadata;\n\n doc._doc_id_rev = metadata.id + '::' + metadata.rev;\n delete doc._id;\n delete doc._rev;\n\n function afterPutDoc(e) {\n var revsToDelete = docInfo.stemmedRevs || [];\n\n if (isUpdate && api.auto_compaction) {\n revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));\n }\n\n if (revsToDelete && revsToDelete.length) {\n compactRevs(revsToDelete, docInfo.metadata.id, txn);\n }\n\n metadata.seq = e.target.result;\n // Current _rev is calculated from _rev_tree on read\n // delete metadata.rev;\n var metadataToStore = encodeMetadata(metadata, winningRev$$1,\n winningRevIsDeleted);\n var metaDataReq = docStore.put(metadataToStore);\n metaDataReq.onsuccess = afterPutMetadata;\n }\n\n function afterPutDocError(e) {\n // ConstraintError, need to update, not put (see #1638 for details)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n var index = bySeqStore.index('_doc_id_rev');\n var getKeyReq = index.getKey(doc._doc_id_rev);\n getKeyReq.onsuccess = function (e) {\n var putReq = bySeqStore.put(doc, e.target.result);\n putReq.onsuccess = afterPutDoc;\n };\n }\n\n function afterPutMetadata() {\n results[resultsIdx] = {\n ok: true,\n id: metadata.id,\n rev: metadata.rev\n };\n fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);\n insertAttachmentMappings(docInfo, metadata.seq, callback);\n }\n\n var putReq = bySeqStore.put(doc);\n\n putReq.onsuccess = afterPutDoc;\n putReq.onerror = afterPutDocError;\n }\n\n function writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback) {\n\n\n var doc = docInfo.data;\n\n var numDone = 0;\n var attachments = Object.keys(doc._attachments);\n\n function collectResults() {\n if (numDone === attachments.length) {\n finishDoc(docInfo, winningRev$$1, winningRevIsDeleted,\n isUpdate, resultsIdx, callback);\n }\n }\n\n function attachmentSaved() {\n numDone++;\n collectResults();\n }\n\n attachments.forEach(function (key) {\n var att = docInfo.data._attachments[key];\n if (!att.stub) {\n var data = att.data;\n delete att.data;\n att.revpos = parseInt(winningRev$$1, 10);\n var digest = att.digest;\n saveAttachment(digest, data, attachmentSaved);\n } else {\n numDone++;\n collectResults();\n }\n });\n }\n\n // map seqs to attachment digests, which\n // we will need later during compaction\n function insertAttachmentMappings(docInfo, seq, callback) {\n\n var attsAdded = 0;\n var attsToAdd = Object.keys(docInfo.data._attachments || {});\n\n if (!attsToAdd.length) {\n return callback();\n }\n\n function checkDone() {\n if (++attsAdded === attsToAdd.length) {\n callback();\n }\n }\n\n function add(att) {\n var digest = docInfo.data._attachments[att].digest;\n var req = attachAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n\n req.onsuccess = checkDone;\n req.onerror = function (e) {\n // this callback is for a constaint error, which we ignore\n // because this docid/rev has already been associated with\n // the digest (e.g. when new_edits == false)\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n checkDone();\n };\n }\n for (var i = 0; i < attsToAdd.length; i++) {\n add(attsToAdd[i]); // do in parallel\n }\n }\n\n function saveAttachment(digest, data, callback) {\n\n\n var getKeyReq = attachStore.count(digest);\n getKeyReq.onsuccess = function (e) {\n var count = e.target.result;\n if (count) {\n return callback(); // already exists\n }\n var newAtt = {\n digest: digest,\n body: data\n };\n var putReq = attachStore.put(newAtt);\n putReq.onsuccess = callback;\n };\n }\n}\n\n// Abstraction over IDBCursor and getAll()/getAllKeys() that allows us to batch our operations\n// while falling back to a normal IDBCursor operation on browsers that don't support getAll() or\n// getAllKeys(). This allows for a much faster implementation than just straight-up cursors, because\n// we're not processing each document one-at-a-time.\nfunction runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {\n\n if (batchSize === -1) {\n batchSize = 1000;\n }\n\n // Bail out of getAll()/getAllKeys() in the following cases:\n // 1) either method is unsupported - we need both\n // 2) batchSize is 1 (might as well use IDBCursor)\n // 3) descending – no real way to do this via getAll()/getAllKeys()\n\n var useGetAll = typeof objectStore.getAll === 'function' &&\n typeof objectStore.getAllKeys === 'function' &&\n batchSize > 1 && !descending;\n\n var keysBatch;\n var valuesBatch;\n var pseudoCursor;\n\n function onGetAll(e) {\n valuesBatch = e.target.result;\n if (keysBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function onGetAllKeys(e) {\n keysBatch = e.target.result;\n if (valuesBatch) {\n onBatch(keysBatch, valuesBatch, pseudoCursor);\n }\n }\n\n function continuePseudoCursor() {\n if (!keysBatch.length) { // no more results\n return onBatch();\n }\n // fetch next batch, exclusive start\n var lastKey = keysBatch[keysBatch.length - 1];\n var newKeyRange;\n if (keyRange && keyRange.upper) {\n try {\n newKeyRange = IDBKeyRange.bound(lastKey, keyRange.upper,\n true, keyRange.upperOpen);\n } catch (e) {\n if (e.name === \"DataError\" && e.code === 0) {\n return onBatch(); // we're done, startkey and endkey are equal\n }\n }\n } else {\n newKeyRange = IDBKeyRange.lowerBound(lastKey, true);\n }\n keyRange = newKeyRange;\n keysBatch = null;\n valuesBatch = null;\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n }\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (!cursor) { // done\n return onBatch();\n }\n // regular IDBCursor acts like a batch where batch size is always 1\n onBatch([cursor.key], [cursor.value], cursor);\n }\n\n if (useGetAll) {\n pseudoCursor = {\"continue\": continuePseudoCursor};\n objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;\n objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;\n } else if (descending) {\n objectStore.openCursor(keyRange, 'prev').onsuccess = onCursor;\n } else {\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n }\n}\n\n// simple shim for objectStore.getAll(), falling back to IDBCursor\nfunction getAll(objectStore, keyRange, onSuccess) {\n if (typeof objectStore.getAll === 'function') {\n // use native getAll\n objectStore.getAll(keyRange).onsuccess = onSuccess;\n return;\n }\n // fall back to cursors\n var values = [];\n\n function onCursor(e) {\n var cursor = e.target.result;\n if (cursor) {\n values.push(cursor.value);\n cursor.continue();\n } else {\n onSuccess({\n target: {\n result: values\n }\n });\n }\n }\n\n objectStore.openCursor(keyRange).onsuccess = onCursor;\n}\n\nfunction allDocsKeys(keys, docStore, onBatch) {\n // It's not guaranted to be returned in right order \n var valuesBatch = new Array(keys.length);\n var count = 0;\n keys.forEach(function (key, index) {\n docStore.get(key).onsuccess = function (event) {\n if (event.target.result) {\n valuesBatch[index] = event.target.result;\n } else {\n valuesBatch[index] = {key: key, error: 'not_found'};\n }\n count++;\n if (count === keys.length) {\n onBatch(keys, valuesBatch, {});\n }\n };\n });\n}\n\nfunction createKeyRange(start, end, inclusiveEnd, key, descending) {\n try {\n if (start && end) {\n if (descending) {\n return IDBKeyRange.bound(end, start, !inclusiveEnd, false);\n } else {\n return IDBKeyRange.bound(start, end, false, !inclusiveEnd);\n }\n } else if (start) {\n if (descending) {\n return IDBKeyRange.upperBound(start);\n } else {\n return IDBKeyRange.lowerBound(start);\n }\n } else if (end) {\n if (descending) {\n return IDBKeyRange.lowerBound(end, !inclusiveEnd);\n } else {\n return IDBKeyRange.upperBound(end, !inclusiveEnd);\n }\n } else if (key) {\n return IDBKeyRange.only(key);\n }\n } catch (e) {\n return {error: e};\n }\n return null;\n}\n\nfunction idbAllDocs(opts, idb, callback) {\n var start = 'startkey' in opts ? opts.startkey : false;\n var end = 'endkey' in opts ? opts.endkey : false;\n var key = 'key' in opts ? opts.key : false;\n var keys = 'keys' in opts ? opts.keys : false; \n var skip = opts.skip || 0;\n var limit = typeof opts.limit === 'number' ? opts.limit : -1;\n var inclusiveEnd = opts.inclusive_end !== false;\n\n var keyRange ; \n var keyRangeError;\n if (!keys) {\n keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);\n keyRangeError = keyRange && keyRange.error;\n if (keyRangeError && \n !(keyRangeError.name === \"DataError\" && keyRangeError.code === 0)) {\n // DataError with error code 0 indicates start is less than end, so\n // can just do an empty query. Else need to throw\n return callback(createError(IDB_ERROR,\n keyRangeError.name, keyRangeError.message));\n }\n }\n\n var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];\n\n if (opts.attachments) {\n stores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, stores, 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.oncomplete = onTxnComplete;\n txn.onabort = idbError(callback);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var metaStore = txn.objectStore(META_STORE);\n var docIdRevIndex = seqStore.index('_doc_id_rev');\n var results = [];\n var docCount;\n var updateSeq;\n\n metaStore.get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n getMaxUpdateSeq(seqStore, function (e) { \n if (e.target.result && e.target.result.length > 0) {\n updateSeq = e.target.result[0];\n }\n });\n }\n\n function getMaxUpdateSeq(objectStore, onSuccess) {\n function onCursor(e) {\n var cursor = e.target.result;\n var maxKey = undefined;\n if (cursor && cursor.key) {\n maxKey = cursor.key;\n } \n return onSuccess({\n target: {\n result: [maxKey]\n }\n });\n }\n objectStore.openCursor(null, 'prev').onsuccess = onCursor;\n }\n\n // if the user specifies include_docs=true, then we don't\n // want to block the main cursor while we're fetching the doc\n function fetchDocAsynchronously(metadata, row, winningRev$$1) {\n var key = metadata.id + \"::\" + winningRev$$1;\n docIdRevIndex.get(key).onsuccess = function onGetDoc(e) {\n row.doc = decodeDoc(e.target.result) || {};\n if (opts.conflicts) {\n var conflicts = collectConflicts(metadata);\n if (conflicts.length) {\n row.doc._conflicts = conflicts;\n }\n }\n fetchAttachmentsIfNecessary(row.doc, opts, txn);\n };\n }\n\n function allDocsInner(winningRev$$1, metadata) {\n var row = {\n id: metadata.id,\n key: metadata.id,\n value: {\n rev: winningRev$$1\n }\n };\n var deleted = metadata.deleted;\n if (deleted) {\n if (keys) {\n results.push(row);\n // deleted docs are okay with \"keys\" requests\n row.value.deleted = true;\n row.doc = null;\n }\n } else if (skip-- <= 0) {\n results.push(row);\n if (opts.include_docs) {\n fetchDocAsynchronously(metadata, row, winningRev$$1);\n }\n }\n }\n\n function processBatch(batchValues) {\n for (var i = 0, len = batchValues.length; i < len; i++) {\n if (results.length === limit) {\n break;\n }\n var batchValue = batchValues[i];\n if (batchValue.error && keys) {\n // key was not found with \"keys\" requests\n results.push(batchValue);\n continue;\n }\n var metadata = decodeMetadata(batchValue);\n var winningRev$$1 = metadata.winningRev;\n allDocsInner(winningRev$$1, metadata);\n }\n }\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor) {\n return;\n }\n processBatch(batchValues);\n if (results.length < limit) {\n cursor.continue();\n }\n }\n\n function onGetAll(e) {\n var values = e.target.result;\n if (opts.descending) {\n values = values.reverse();\n }\n processBatch(values);\n }\n\n function onResultsReady() {\n var returnVal = {\n total_rows: docCount,\n offset: opts.skip,\n rows: results\n };\n \n /* istanbul ignore if */\n if (opts.update_seq && updateSeq !== undefined) {\n returnVal.update_seq = updateSeq;\n }\n callback(null, returnVal);\n }\n\n function onTxnComplete() {\n if (opts.attachments) {\n postProcessAttachments(results, opts.binary).then(onResultsReady);\n } else {\n onResultsReady();\n }\n }\n\n // don't bother doing any requests if start > end or limit === 0\n if (keyRangeError || limit === 0) {\n return;\n }\n if (keys) {\n return allDocsKeys(opts.keys, docStore, onBatch);\n }\n if (limit === -1) { // just fetch everything\n return getAll(docStore, keyRange, onGetAll);\n }\n // else do a cursor\n // choose a batch size based on the skip, since we'll need to skip that many\n runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);\n}\n\n//\n// Blobs are not supported in all versions of IndexedDB, notably\n// Chrome <37 and Android <5. In those versions, storing a blob will throw.\n//\n// Various other blob bugs exist in Chrome v37-42 (inclusive).\n// Detecting them is expensive and confusing to users, and Chrome 37-42\n// is at very low usage worldwide, so we do a hacky userAgent check instead.\n//\n// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120\n// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n//\nfunction checkBlobSupport(txn) {\n return new Promise(function (resolve) {\n var blob$$1 = createBlob(['']);\n var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob$$1, 'key');\n\n req.onsuccess = function () {\n var matchedChrome = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n var matchedEdge = navigator.userAgent.match(/Edge\\//);\n // MS Edge pretends to be Chrome 42:\n // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx\n resolve(matchedEdge || !matchedChrome ||\n parseInt(matchedChrome[1], 10) >= 43);\n };\n\n req.onerror = txn.onabort = function (e) {\n // If the transaction aborts now its due to not being able to\n // write to the database, likely due to the disk being full\n e.preventDefault();\n e.stopPropagation();\n resolve(false);\n };\n }).catch(function () {\n return false; // error, so assume unsupported\n });\n}\n\nfunction countDocs(txn, cb) {\n var index = txn.objectStore(DOC_STORE).index('deletedOrLocal');\n index.count(IDBKeyRange.only('0')).onsuccess = function (e) {\n cb(e.target.result);\n };\n}\n\n// This task queue ensures that IDB open calls are done in their own tick\n\nvar running = false;\nvar queue = [];\n\nfunction tryCode(fun, err, res, PouchDB) {\n try {\n fun(err, res);\n } catch (err) {\n // Shouldn't happen, but in some odd cases\n // IndexedDB implementations might throw a sync\n // error, in which case this will at least log it.\n PouchDB.emit('error', err);\n }\n}\n\nfunction applyNext() {\n if (running || !queue.length) {\n return;\n }\n running = true;\n queue.shift()();\n}\n\nfunction enqueueTask(action, callback, PouchDB) {\n queue.push(function runAction() {\n action(function runCallback(err, res) {\n tryCode(callback, err, res, PouchDB);\n running = false;\n immediate(function runNext() {\n applyNext(PouchDB);\n });\n });\n });\n applyNext();\n}\n\nfunction changes(opts, api, dbName, idb) {\n opts = clone(opts);\n\n if (opts.continuous) {\n var id = dbName + ':' + uuid();\n changesHandler.addListener(dbName, id, api, opts);\n changesHandler.notify(dbName);\n return {\n cancel: function () {\n changesHandler.removeListener(dbName, id);\n }\n };\n }\n\n var docIds = opts.doc_ids && new ExportedSet(opts.doc_ids);\n\n opts.since = opts.since || 0;\n var lastSeq = opts.since;\n\n var limit = 'limit' in opts ? opts.limit : -1;\n if (limit === 0) {\n limit = 1; // per CouchDB _changes spec\n }\n\n var results = [];\n var numResults = 0;\n var filter = filterChange(opts);\n var docIdsToMetadata = new ExportedMap();\n\n var txn;\n var bySeqStore;\n var docStore;\n var docIdRevIndex;\n\n function onBatch(batchKeys, batchValues, cursor) {\n if (!cursor || !batchKeys.length) { // done\n return;\n }\n\n var winningDocs = new Array(batchKeys.length);\n var metadatas = new Array(batchKeys.length);\n\n function processMetadataAndWinningDoc(metadata, winningDoc) {\n var change = opts.processChange(winningDoc, metadata, opts);\n lastSeq = change.seq = metadata.seq;\n\n var filtered = filter(change);\n if (typeof filtered === 'object') { // anything but true/false indicates error\n return Promise.reject(filtered);\n }\n\n if (!filtered) {\n return Promise.resolve();\n }\n numResults++;\n if (opts.return_docs) {\n results.push(change);\n }\n // process the attachment immediately\n // for the benefit of live listeners\n if (opts.attachments && opts.include_docs) {\n return new Promise(function (resolve) {\n fetchAttachmentsIfNecessary(winningDoc, opts, txn, function () {\n postProcessAttachments([change], opts.binary).then(function () {\n resolve(change);\n });\n });\n });\n } else {\n return Promise.resolve(change);\n }\n }\n\n function onBatchDone() {\n var promises = [];\n for (var i = 0, len = winningDocs.length; i < len; i++) {\n if (numResults === limit) {\n break;\n }\n var winningDoc = winningDocs[i];\n if (!winningDoc) {\n continue;\n }\n var metadata = metadatas[i];\n promises.push(processMetadataAndWinningDoc(metadata, winningDoc));\n }\n\n Promise.all(promises).then(function (changes) {\n for (var i = 0, len = changes.length; i < len; i++) {\n if (changes[i]) {\n opts.onChange(changes[i]);\n }\n }\n }).catch(opts.complete);\n\n if (numResults !== limit) {\n cursor.continue();\n }\n }\n\n // Fetch all metadatas/winningdocs from this batch in parallel, then process\n // them all only once all data has been collected. This is done in parallel\n // because it's faster than doing it one-at-a-time.\n var numDone = 0;\n batchValues.forEach(function (value, i) {\n var doc = decodeDoc(value);\n var seq = batchKeys[i];\n fetchWinningDocAndMetadata(doc, seq, function (metadata, winningDoc) {\n metadatas[i] = metadata;\n winningDocs[i] = winningDoc;\n if (++numDone === batchKeys.length) {\n onBatchDone();\n }\n });\n });\n }\n\n function onGetMetadata(doc, seq, metadata, cb) {\n if (metadata.seq !== seq) {\n // some other seq is later\n return cb();\n }\n\n if (metadata.winningRev === doc._rev) {\n // this is the winning doc\n return cb(metadata, doc);\n }\n\n // fetch winning doc in separate request\n var docIdRev = doc._id + '::' + metadata.winningRev;\n var req = docIdRevIndex.get(docIdRev);\n req.onsuccess = function (e) {\n cb(metadata, decodeDoc(e.target.result));\n };\n }\n\n function fetchWinningDocAndMetadata(doc, seq, cb) {\n if (docIds && !docIds.has(doc._id)) {\n return cb();\n }\n\n var metadata = docIdsToMetadata.get(doc._id);\n if (metadata) { // cached\n return onGetMetadata(doc, seq, metadata, cb);\n }\n // metadata not cached, have to go fetch it\n docStore.get(doc._id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n docIdsToMetadata.set(doc._id, metadata);\n onGetMetadata(doc, seq, metadata, cb);\n };\n }\n\n function finish() {\n opts.complete(null, {\n results: results,\n last_seq: lastSeq\n });\n }\n\n function onTxnComplete() {\n if (!opts.continuous && opts.attachments) {\n // cannot guarantee that postProcessing was already done,\n // so do it again\n postProcessAttachments(results).then(finish);\n } else {\n finish();\n }\n }\n\n var objectStores = [DOC_STORE, BY_SEQ_STORE];\n if (opts.attachments) {\n objectStores.push(ATTACH_STORE);\n }\n var txnResult = openTransactionSafely(idb, objectStores, 'readonly');\n if (txnResult.error) {\n return opts.complete(txnResult.error);\n }\n txn = txnResult.txn;\n txn.onabort = idbError(opts.complete);\n txn.oncomplete = onTxnComplete;\n\n bySeqStore = txn.objectStore(BY_SEQ_STORE);\n docStore = txn.objectStore(DOC_STORE);\n docIdRevIndex = bySeqStore.index('_doc_id_rev');\n\n var keyRange = (opts.since && !opts.descending) ?\n IDBKeyRange.lowerBound(opts.since, true) : null;\n\n runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);\n}\n\nvar cachedDBs = new ExportedMap();\nvar blobSupportPromise;\nvar openReqList = new ExportedMap();\n\nfunction IdbPouch(opts, callback) {\n var api = this;\n\n enqueueTask(function (thisCallback) {\n init(api, opts, thisCallback);\n }, callback, api.constructor);\n}\n\nfunction init(api, opts, callback) {\n\n var dbName = opts.name;\n\n var idb = null;\n api._meta = null;\n\n // called when creating a fresh new database\n function createSchema(db) {\n var docStore = db.createObjectStore(DOC_STORE, {keyPath : 'id'});\n db.createObjectStore(BY_SEQ_STORE, {autoIncrement: true})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n db.createObjectStore(ATTACH_STORE, {keyPath: 'digest'});\n db.createObjectStore(META_STORE, {keyPath: 'id', autoIncrement: false});\n db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n\n // added in v2\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n // added in v3\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'});\n\n // added in v4\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 2\n // unfortunately \"deletedOrLocal\" is a misnomer now that we no longer\n // store local docs in the main doc-store, but whaddyagonnado\n function addDeletedOrLocalIndex(txn, callback) {\n var docStore = txn.objectStore(DOC_STORE);\n docStore.createIndex('deletedOrLocal', 'deletedOrLocal', {unique : false});\n\n docStore.openCursor().onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var deleted = isDeleted(metadata);\n metadata.deletedOrLocal = deleted ? \"1\" : \"0\";\n docStore.put(metadata);\n cursor.continue();\n } else {\n callback();\n }\n };\n }\n\n // migration to version 3 (part 1)\n function createLocalStoreSchema(db) {\n db.createObjectStore(LOCAL_STORE, {keyPath: '_id'})\n .createIndex('_doc_id_rev', '_doc_id_rev', {unique: true});\n }\n\n // migration to version 3 (part 2)\n function migrateLocalStore(txn, cb) {\n var localStore = txn.objectStore(LOCAL_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (event) {\n var cursor = event.target.result;\n if (cursor) {\n var metadata = cursor.value;\n var docId = metadata.id;\n var local = isLocalId(docId);\n var rev$$1 = winningRev(metadata);\n if (local) {\n var docIdRev = docId + \"::\" + rev$$1;\n // remove all seq entries\n // associated with this docId\n var start = docId + \"::\";\n var end = docId + \"::~\";\n var index = seqStore.index('_doc_id_rev');\n var range = IDBKeyRange.bound(start, end, false, false);\n var seqCursor = index.openCursor(range);\n seqCursor.onsuccess = function (e) {\n seqCursor = e.target.result;\n if (!seqCursor) {\n // done\n docStore.delete(cursor.primaryKey);\n cursor.continue();\n } else {\n var data = seqCursor.value;\n if (data._doc_id_rev === docIdRev) {\n localStore.put(data);\n }\n seqStore.delete(seqCursor.primaryKey);\n seqCursor.continue();\n }\n };\n } else {\n cursor.continue();\n }\n } else if (cb) {\n cb();\n }\n };\n }\n\n // migration to version 4 (part 1)\n function addAttachAndSeqStore(db) {\n var attAndSeqStore = db.createObjectStore(ATTACH_AND_SEQ_STORE,\n {autoIncrement: true});\n attAndSeqStore.createIndex('seq', 'seq');\n attAndSeqStore.createIndex('digestSeq', 'digestSeq', {unique: true});\n }\n\n // migration to version 4 (part 2)\n function migrateAttsAndSeqs(txn, callback) {\n var seqStore = txn.objectStore(BY_SEQ_STORE);\n var attStore = txn.objectStore(ATTACH_STORE);\n var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);\n\n // need to actually populate the table. this is the expensive part,\n // so as an optimization, check first that this database even\n // contains attachments\n var req = attStore.count();\n req.onsuccess = function (e) {\n var count = e.target.result;\n if (!count) {\n return callback(); // done\n }\n\n seqStore.openCursor().onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return callback(); // done\n }\n var doc = cursor.value;\n var seq = cursor.primaryKey;\n var atts = Object.keys(doc._attachments || {});\n var digestMap = {};\n for (var j = 0; j < atts.length; j++) {\n var att = doc._attachments[atts[j]];\n digestMap[att.digest] = true; // uniq digests, just in case\n }\n var digests = Object.keys(digestMap);\n for (j = 0; j < digests.length; j++) {\n var digest = digests[j];\n attAndSeqStore.put({\n seq: seq,\n digestSeq: digest + '::' + seq\n });\n }\n cursor.continue();\n };\n };\n }\n\n // migration to version 5\n // Instead of relying on on-the-fly migration of metadata,\n // this brings the doc-store to its modern form:\n // - metadata.winningrev\n // - metadata.seq\n // - stringify the metadata when storing it\n function migrateMetadata(txn) {\n\n function decodeMetadataCompat(storedObject) {\n if (!storedObject.data) {\n // old format, when we didn't store it stringified\n storedObject.deleted = storedObject.deletedOrLocal === '1';\n return storedObject;\n }\n return decodeMetadata(storedObject);\n }\n\n // ensure that every metadata has a winningRev and seq,\n // which was previously created on-the-fly but better to migrate\n var bySeqStore = txn.objectStore(BY_SEQ_STORE);\n var docStore = txn.objectStore(DOC_STORE);\n var cursor = docStore.openCursor();\n cursor.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n return; // done\n }\n var metadata = decodeMetadataCompat(cursor.value);\n\n metadata.winningRev = metadata.winningRev ||\n winningRev(metadata);\n\n function fetchMetadataSeq() {\n // metadata.seq was added post-3.2.0, so if it's missing,\n // we need to fetch it manually\n var start = metadata.id + '::';\n var end = metadata.id + '::\\uffff';\n var req = bySeqStore.index('_doc_id_rev').openCursor(\n IDBKeyRange.bound(start, end));\n\n var metadataSeq = 0;\n req.onsuccess = function (e) {\n var cursor = e.target.result;\n if (!cursor) {\n metadata.seq = metadataSeq;\n return onGetMetadataSeq();\n }\n var seq = cursor.primaryKey;\n if (seq > metadataSeq) {\n metadataSeq = seq;\n }\n cursor.continue();\n };\n }\n\n function onGetMetadataSeq() {\n var metadataToStore = encodeMetadata(metadata,\n metadata.winningRev, metadata.deleted);\n\n var req = docStore.put(metadataToStore);\n req.onsuccess = function () {\n cursor.continue();\n };\n }\n\n if (metadata.seq) {\n return onGetMetadataSeq();\n }\n\n fetchMetadataSeq();\n };\n\n }\n\n api._remote = false;\n api.type = function () {\n return 'idb';\n };\n\n api._id = toPromise(function (callback) {\n callback(null, api._meta.instanceId);\n });\n\n api._bulkDocs = function idb_bulkDocs(req, reqOpts, callback) {\n idbBulkDocs(opts, req, reqOpts, api, idb, callback);\n };\n\n // First we look up the metadata in the ids database, then we fetch the\n // current revision(s) from the by sequence store\n api._get = function idb_get(id, opts, callback) {\n var doc;\n var metadata;\n var err;\n var txn = opts.ctx;\n if (!txn) {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n\n function finish() {\n callback(err, {doc: doc, metadata: metadata, ctx: txn});\n }\n\n txn.objectStore(DOC_STORE).get(id).onsuccess = function (e) {\n metadata = decodeMetadata(e.target.result);\n // we can determine the result here if:\n // 1. there is no such document\n // 2. the document is deleted and we don't ask about specific rev\n // When we ask with opts.rev we expect the answer to be either\n // doc (possibly with _deleted=true) or missing error\n if (!metadata) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n\n var rev$$1;\n if (!opts.rev) {\n rev$$1 = metadata.winningRev;\n var deleted = isDeleted(metadata);\n if (deleted) {\n err = createError(MISSING_DOC, \"deleted\");\n return finish();\n }\n } else {\n rev$$1 = opts.latest ? latest(opts.rev, metadata) : opts.rev;\n }\n\n var objectStore = txn.objectStore(BY_SEQ_STORE);\n var key = metadata.id + '::' + rev$$1;\n\n objectStore.index('_doc_id_rev').get(key).onsuccess = function (e) {\n doc = e.target.result;\n if (doc) {\n doc = decodeDoc(doc);\n }\n if (!doc) {\n err = createError(MISSING_DOC, 'missing');\n return finish();\n }\n finish();\n };\n };\n };\n\n api._getAttachment = function (docId, attachId, attachment, opts, callback) {\n var txn;\n if (opts.ctx) {\n txn = opts.ctx;\n } else {\n var txnResult = openTransactionSafely(idb,\n [DOC_STORE, BY_SEQ_STORE, ATTACH_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n txn = txnResult.txn;\n }\n var digest = attachment.digest;\n var type = attachment.content_type;\n\n txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function (e) {\n var body = e.target.result.body;\n readBlobData(body, type, opts.binary, function (blobData) {\n callback(null, blobData);\n });\n };\n };\n\n api._info = function idb_info(callback) {\n var updateSeq;\n var docCount;\n\n var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n docCount = e.target.result.docCount;\n };\n txn.objectStore(BY_SEQ_STORE).openCursor(null, 'prev').onsuccess = function (e) {\n var cursor = e.target.result;\n updateSeq = cursor ? cursor.key : 0;\n };\n\n txn.oncomplete = function () {\n callback(null, {\n doc_count: docCount,\n update_seq: updateSeq,\n // for debugging\n idb_attachment_format: (api._meta.blobSupport ? 'binary' : 'base64')\n });\n };\n };\n\n api._allDocs = function idb_allDocs(opts, callback) {\n idbAllDocs(opts, idb, callback);\n };\n\n api._changes = function idbChanges(opts) {\n return changes(opts, api, dbName, idb);\n };\n\n api._close = function (callback) {\n // https://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase#close\n // \"Returns immediately and closes the connection in a separate thread...\"\n idb.close();\n cachedDBs.delete(dbName);\n callback();\n };\n\n api._getRevisionTree = function (docId, callback) {\n var txnResult = openTransactionSafely(idb, [DOC_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n var req = txn.objectStore(DOC_STORE).get(docId);\n req.onsuccess = function (event) {\n var doc = decodeMetadata(event.target.result);\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n callback(null, doc.rev_tree);\n }\n };\n };\n\n // This function removes revisions of document docId\n // which are listed in revs and sets this document\n // revision to to rev_tree\n api._doCompaction = function (docId, revs, callback) {\n var stores = [\n DOC_STORE,\n BY_SEQ_STORE,\n ATTACH_STORE,\n ATTACH_AND_SEQ_STORE\n ];\n var txnResult = openTransactionSafely(idb, stores, 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var txn = txnResult.txn;\n\n var docStore = txn.objectStore(DOC_STORE);\n\n docStore.get(docId).onsuccess = function (event) {\n var metadata = decodeMetadata(event.target.result);\n traverseRevTree(metadata.rev_tree, function (isLeaf, pos,\n revHash, ctx, opts) {\n var rev$$1 = pos + '-' + revHash;\n if (revs.indexOf(rev$$1) !== -1) {\n opts.status = 'missing';\n }\n });\n compactRevs(revs, docId, txn);\n var winningRev$$1 = metadata.winningRev;\n var deleted = metadata.deleted;\n txn.objectStore(DOC_STORE).put(\n encodeMetadata(metadata, winningRev$$1, deleted));\n };\n txn.onabort = idbError(callback);\n txn.oncomplete = function () {\n callback();\n };\n };\n\n\n api._getLocal = function (id, callback) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readonly');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n var tx = txnResult.txn;\n var req = tx.objectStore(LOCAL_STORE).get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var doc = e.target.result;\n if (!doc) {\n callback(createError(MISSING_DOC));\n } else {\n delete doc['_doc_id_rev']; // for backwards compat\n callback(null, doc);\n }\n };\n };\n\n api._putLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n delete doc._revisions; // ignore this, trust the rev\n var oldRev = doc._rev;\n var id = doc._id;\n if (!oldRev) {\n doc._rev = '0-1';\n } else {\n doc._rev = '0-' + (parseInt(oldRev.split('-')[1], 10) + 1);\n }\n\n var tx = opts.ctx;\n var ret;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.onerror = idbError(callback);\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n\n var oStore = tx.objectStore(LOCAL_STORE);\n var req;\n if (oldRev) {\n req = oStore.get(id);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== oldRev) {\n callback(createError(REV_CONFLICT));\n } else { // update\n var req = oStore.put(doc);\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n } else { // new doc\n req = oStore.add(doc);\n req.onerror = function (e) {\n // constraint error, already exists\n callback(createError(REV_CONFLICT));\n e.preventDefault(); // avoid transaction abort\n e.stopPropagation(); // avoid transaction onerror\n };\n req.onsuccess = function () {\n ret = {ok: true, id: doc._id, rev: doc._rev};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n };\n }\n };\n\n api._removeLocal = function (doc, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var tx = opts.ctx;\n if (!tx) {\n var txnResult = openTransactionSafely(idb, [LOCAL_STORE], 'readwrite');\n if (txnResult.error) {\n return callback(txnResult.error);\n }\n tx = txnResult.txn;\n tx.oncomplete = function () {\n if (ret) {\n callback(null, ret);\n }\n };\n }\n var ret;\n var id = doc._id;\n var oStore = tx.objectStore(LOCAL_STORE);\n var req = oStore.get(id);\n\n req.onerror = idbError(callback);\n req.onsuccess = function (e) {\n var oldDoc = e.target.result;\n if (!oldDoc || oldDoc._rev !== doc._rev) {\n callback(createError(MISSING_DOC));\n } else {\n oStore.delete(id);\n ret = {ok: true, id: id, rev: '0-0'};\n if (opts.ctx) { // return immediately\n callback(null, ret);\n }\n }\n };\n };\n\n api._destroy = function (opts, callback) {\n changesHandler.removeAllListeners(dbName);\n\n //Close open request for \"dbName\" database to fix ie delay.\n var openReq = openReqList.get(dbName);\n if (openReq && openReq.result) {\n openReq.result.close();\n cachedDBs.delete(dbName);\n }\n var req = indexedDB.deleteDatabase(dbName);\n\n req.onsuccess = function () {\n //Remove open request from the list.\n openReqList.delete(dbName);\n if (hasLocalStorage() && (dbName in localStorage)) {\n delete localStorage[dbName];\n }\n callback(null, { 'ok': true });\n };\n\n req.onerror = idbError(callback);\n };\n\n var cached = cachedDBs.get(dbName);\n\n if (cached) {\n idb = cached.idb;\n api._meta = cached.global;\n return immediate(function () {\n callback(null, api);\n });\n }\n\n var req = indexedDB.open(dbName, ADAPTER_VERSION);\n openReqList.set(dbName, req);\n\n req.onupgradeneeded = function (e) {\n var db = e.target.result;\n if (e.oldVersion < 1) {\n return createSchema(db); // new db, initial schema\n }\n // do migrations\n\n var txn = e.currentTarget.transaction;\n // these migrations have to be done in this function, before\n // control is returned to the event loop, because IndexedDB\n\n if (e.oldVersion < 3) {\n createLocalStoreSchema(db); // v2 -> v3\n }\n if (e.oldVersion < 4) {\n addAttachAndSeqStore(db); // v3 -> v4\n }\n\n var migrations = [\n addDeletedOrLocalIndex, // v1 -> v2\n migrateLocalStore, // v2 -> v3\n migrateAttsAndSeqs, // v3 -> v4\n migrateMetadata // v4 -> v5\n ];\n\n var i = e.oldVersion;\n\n function next() {\n var migration = migrations[i - 1];\n i++;\n if (migration) {\n migration(txn, next);\n }\n }\n\n next();\n };\n\n req.onsuccess = function (e) {\n\n idb = e.target.result;\n\n idb.onversionchange = function () {\n idb.close();\n cachedDBs.delete(dbName);\n };\n\n idb.onabort = function (e) {\n guardedConsole('error', 'Database has a global failure', e.target.error);\n idb.close();\n cachedDBs.delete(dbName);\n };\n\n // Do a few setup operations (in parallel as much as possible):\n // 1. Fetch meta doc\n // 2. Check blob support\n // 3. Calculate docCount\n // 4. Generate an instanceId if necessary\n // 5. Store docCount and instanceId on meta doc\n\n var txn = idb.transaction([\n META_STORE,\n DETECT_BLOB_SUPPORT_STORE,\n DOC_STORE\n ], 'readwrite');\n\n var storedMetaDoc = false;\n var metaDoc;\n var docCount;\n var blobSupport;\n var instanceId;\n\n function completeSetup() {\n if (typeof blobSupport === 'undefined' || !storedMetaDoc) {\n return;\n }\n api._meta = {\n name: dbName,\n instanceId: instanceId,\n blobSupport: blobSupport\n };\n\n cachedDBs.set(dbName, {\n idb: idb,\n global: api._meta\n });\n callback(null, api);\n }\n\n function storeMetaDocIfReady() {\n if (typeof docCount === 'undefined' || typeof metaDoc === 'undefined') {\n return;\n }\n var instanceKey = dbName + '_id';\n if (instanceKey in metaDoc) {\n instanceId = metaDoc[instanceKey];\n } else {\n metaDoc[instanceKey] = instanceId = uuid();\n }\n metaDoc.docCount = docCount;\n txn.objectStore(META_STORE).put(metaDoc);\n }\n\n //\n // fetch or generate the instanceId\n //\n txn.objectStore(META_STORE).get(META_STORE).onsuccess = function (e) {\n metaDoc = e.target.result || { id: META_STORE };\n storeMetaDocIfReady();\n };\n\n //\n // countDocs\n //\n countDocs(txn, function (count) {\n docCount = count;\n storeMetaDocIfReady();\n });\n\n //\n // check blob support\n //\n if (!blobSupportPromise) {\n // make sure blob support is only checked once\n blobSupportPromise = checkBlobSupport(txn);\n }\n\n blobSupportPromise.then(function (val) {\n blobSupport = val;\n completeSetup();\n });\n\n // only when the metadata put transaction has completed,\n // consider the setup done\n txn.oncomplete = function () {\n storedMetaDoc = true;\n completeSetup();\n };\n txn.onabort = idbError(callback);\n };\n\n req.onerror = function () {\n var msg = 'Failed to open indexedDB, are you in private browsing mode?';\n guardedConsole('error', msg);\n callback(createError(IDB_ERROR, msg));\n };\n}\n\nIdbPouch.valid = function () {\n // Following #7085 buggy idb versions (typically Safari < 10.1) are\n // considered valid.\n\n // On Firefox SecurityError is thrown while referencing indexedDB if cookies\n // are not allowed. `typeof indexedDB` also triggers the error.\n try {\n // some outdated implementations of IDB that appear on Samsung\n // and HTC Android devices <4.4 are missing IDBKeyRange\n return typeof indexedDB !== 'undefined' && typeof IDBKeyRange !== 'undefined';\n } catch (e) {\n return false;\n }\n};\n\nfunction IDBPouch (PouchDB) {\n PouchDB.adapter('idb', IdbPouch, true);\n}\n\n// dead simple promise pool, inspired by https://github.com/timdp/es6-promise-pool\n// but much smaller in code size. limits the number of concurrent promises that are executed\n\n\nfunction pool(promiseFactories, limit) {\n return new Promise(function (resolve, reject) {\n var running = 0;\n var current = 0;\n var done = 0;\n var len = promiseFactories.length;\n var err;\n\n function runNext() {\n running++;\n promiseFactories[current++]().then(onSuccess, onError);\n }\n\n function doNext() {\n if (++done === len) {\n /* istanbul ignore if */\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n } else {\n runNextBatch();\n }\n }\n\n function onSuccess() {\n running--;\n doNext();\n }\n\n /* istanbul ignore next */\n function onError(thisErr) {\n running--;\n err = err || thisErr;\n doNext();\n }\n\n function runNextBatch() {\n while (running < limit && current < len) {\n runNext();\n }\n }\n\n runNextBatch();\n });\n}\n\nvar CHANGES_BATCH_SIZE = 25;\nvar MAX_SIMULTANEOUS_REVS = 50;\nvar CHANGES_TIMEOUT_BUFFER = 5000;\nvar DEFAULT_HEARTBEAT = 10000;\n\nvar supportsBulkGetMap = {};\n\nfunction readAttachmentsAsBlobOrBuffer(row) {\n var doc = row.doc || row.ok;\n var atts = doc && doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n att.data = b64ToBluffer(att.data, att.content_type);\n });\n}\n\nfunction encodeDocId(id) {\n if (/^_design/.test(id)) {\n return '_design/' + encodeURIComponent(id.slice(8));\n }\n if (/^_local/.test(id)) {\n return '_local/' + encodeURIComponent(id.slice(7));\n }\n return encodeURIComponent(id);\n}\n\nfunction preprocessAttachments$1(doc) {\n if (!doc._attachments || !Object.keys(doc._attachments)) {\n return Promise.resolve();\n }\n\n return Promise.all(Object.keys(doc._attachments).map(function (key) {\n var attachment = doc._attachments[key];\n if (attachment.data && typeof attachment.data !== 'string') {\n return new Promise(function (resolve) {\n blobToBase64(attachment.data, resolve);\n }).then(function (b64) {\n attachment.data = b64;\n });\n }\n }));\n}\n\nfunction hasUrlPrefix(opts) {\n if (!opts.prefix) {\n return false;\n }\n var protocol = parseUri(opts.prefix).protocol;\n return protocol === 'http' || protocol === 'https';\n}\n\n// Get all the information you possibly can about the URI given by name and\n// return it as a suitable object.\nfunction getHost(name, opts) {\n // encode db name if opts.prefix is a url (#5574)\n if (hasUrlPrefix(opts)) {\n var dbName = opts.name.substr(opts.prefix.length);\n // Ensure prefix has a trailing slash\n var prefix = opts.prefix.replace(/\\/?$/, '/');\n name = prefix + encodeURIComponent(dbName);\n }\n\n var uri = parseUri(name);\n if (uri.user || uri.password) {\n uri.auth = {username: uri.user, password: uri.password};\n }\n\n // Split the path part of the URI into parts using '/' as the delimiter\n // after removing any leading '/' and any trailing '/'\n var parts = uri.path.replace(/(^\\/|\\/$)/g, '').split('/');\n\n uri.db = parts.pop();\n // Prevent double encoding of URI component\n if (uri.db.indexOf('%') === -1) {\n uri.db = encodeURIComponent(uri.db);\n }\n\n uri.path = parts.join('/');\n\n return uri;\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genDBUrl(opts, path) {\n return genUrl(opts, opts.db + '/' + path);\n}\n\n// Generate a URL with the host data given by opts and the given path\nfunction genUrl(opts, path) {\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n var pathDel = !opts.path ? '' : '/';\n\n // If the host already has a path, then we need to have a path delimiter\n // Otherwise, the path delimiter is the empty string\n return opts.protocol + '://' + opts.host +\n (opts.port ? (':' + opts.port) : '') +\n '/' + opts.path + pathDel + path;\n}\n\nfunction paramsToStr(params) {\n return '?' + Object.keys(params).map(function (k) {\n return k + '=' + encodeURIComponent(params[k]);\n }).join('&');\n}\n\nfunction shouldCacheBust(opts) {\n var ua = (typeof navigator !== 'undefined' && navigator.userAgent) ?\n navigator.userAgent.toLowerCase() : '';\n var isIE = ua.indexOf('msie') !== -1;\n var isTrident = ua.indexOf('trident') !== -1;\n var isEdge = ua.indexOf('edge') !== -1;\n var isGET = !('method' in opts) || opts.method === 'GET';\n return (isIE || isTrident || isEdge) && isGET;\n}\n\n// Implements the PouchDB API for dealing with CouchDB instances over HTTP\nfunction HttpPouch(opts, callback) {\n\n // The functions that will be publicly available for HttpPouch\n var api = this;\n\n var host = getHost(opts.name, opts);\n var dbUrl = genDBUrl(host, '');\n\n opts = clone(opts);\n\n var ourFetch = function (url, options) {\n\n options = options || {};\n options.headers = options.headers || new h();\n\n options.credentials = 'include';\n\n if (opts.auth || host.auth) {\n var nAuth = opts.auth || host.auth;\n var str = nAuth.username + ':' + nAuth.password;\n var token = thisBtoa(unescape(encodeURIComponent(str)));\n options.headers.set('Authorization', 'Basic ' + token);\n }\n\n var headers = opts.headers || {};\n Object.keys(headers).forEach(function (key) {\n options.headers.append(key, headers[key]);\n });\n\n /* istanbul ignore if */\n if (shouldCacheBust(options)) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + '_nonce=' + Date.now();\n }\n\n var fetchFun = opts.fetch || f$1;\n return fetchFun(url, options);\n };\n\n function adapterFun$$1(name, fun) {\n return adapterFun(name, getArguments(function (args) {\n setup().then(function () {\n return fun.apply(this, args);\n }).catch(function (e) {\n var callback = args.pop();\n callback(e);\n });\n })).bind(api);\n }\n\n function fetchJSON(url, options, callback) {\n\n var result = {};\n\n options = options || {};\n options.headers = options.headers || new h();\n\n if (!options.headers.get('Content-Type')) {\n options.headers.set('Content-Type', 'application/json');\n }\n if (!options.headers.get('Accept')) {\n options.headers.set('Accept', 'application/json');\n }\n\n return ourFetch(url, options).then(function (response) {\n result.ok = response.ok;\n result.status = response.status;\n return response.json();\n }).then(function (json) {\n result.data = json;\n if (!result.ok) {\n result.data.status = result.status;\n var err = generateErrorFromResponse(result.data);\n if (callback) {\n return callback(err);\n } else {\n throw err;\n }\n }\n\n if (Array.isArray(result.data)) {\n result.data = result.data.map(function (v) {\n if (v.error || v.missing) {\n return generateErrorFromResponse(v);\n } else {\n return v;\n }\n });\n }\n\n if (callback) {\n callback(null, result.data);\n } else {\n return result;\n }\n });\n }\n\n var setupPromise;\n\n function setup() {\n if (opts.skip_setup) {\n return Promise.resolve();\n }\n\n // If there is a setup in process or previous successful setup\n // done then we will use that\n // If previous setups have been rejected we will try again\n if (setupPromise) {\n return setupPromise;\n }\n\n setupPromise = fetchJSON(dbUrl).catch(function (err) {\n if (err && err.status && err.status === 404) {\n // Doesnt exist, create it\n explainError(404, 'PouchDB is just detecting if the remote exists.');\n return fetchJSON(dbUrl, {method: 'PUT'});\n } else {\n return Promise.reject(err);\n }\n }).catch(function (err) {\n // If we try to create a database that already exists, skipped in\n // istanbul since its catching a race condition.\n /* istanbul ignore if */\n if (err && err.status && err.status === 412) {\n return true;\n }\n return Promise.reject(err);\n });\n\n setupPromise.catch(function () {\n setupPromise = null;\n });\n\n return setupPromise;\n }\n\n immediate(function () {\n callback(null, api);\n });\n\n api._remote = true;\n\n /* istanbul ignore next */\n api.type = function () {\n return 'http';\n };\n\n api.id = adapterFun$$1('id', function (callback) {\n ourFetch(genUrl(host, '')).then(function (response) {\n return response.json();\n }).catch(function () {\n return {};\n }).then(function (result) {\n // Bad response or missing `uuid` should not prevent ID generation.\n var uuid$$1 = (result && result.uuid) ?\n (result.uuid + host.db) : genDBUrl(host, '');\n callback(null, uuid$$1);\n });\n });\n\n // Sends a POST request to the host calling the couchdb _compact function\n // version: The version of CouchDB it is running\n api.compact = adapterFun$$1('compact', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n fetchJSON(genDBUrl(host, '_compact'), {method: 'POST'}).then(function () {\n function ping() {\n api.info(function (err, res) {\n // CouchDB may send a \"compact_running:true\" if it's\n // already compacting. PouchDB Server doesn't.\n /* istanbul ignore else */\n if (res && !res.compact_running) {\n callback(null, {ok: true});\n } else {\n setTimeout(ping, opts.interval || 200);\n }\n });\n }\n // Ping the http if it's finished compaction\n ping();\n });\n });\n\n api.bulkGet = adapterFun('bulkGet', function (opts, callback) {\n var self = this;\n\n function doBulkGet(cb) {\n var params = {};\n if (opts.revs) {\n params.revs = true;\n }\n if (opts.attachments) {\n /* istanbul ignore next */\n params.attachments = true;\n }\n if (opts.latest) {\n params.latest = true;\n }\n fetchJSON(genDBUrl(host, '_bulk_get' + paramsToStr(params)), {\n method: 'POST',\n body: JSON.stringify({ docs: opts.docs})\n }).then(function (result) {\n if (opts.attachments && opts.binary) {\n result.data.results.forEach(function (res) {\n res.docs.forEach(readAttachmentsAsBlobOrBuffer);\n });\n }\n cb(null, result.data);\n }).catch(cb);\n }\n\n /* istanbul ignore next */\n function doBulkGetShim() {\n // avoid \"url too long error\" by splitting up into multiple requests\n var batchSize = MAX_SIMULTANEOUS_REVS;\n var numBatches = Math.ceil(opts.docs.length / batchSize);\n var numDone = 0;\n var results = new Array(numBatches);\n\n function onResult(batchNum) {\n return function (err, res) {\n // err is impossible because shim returns a list of errs in that case\n results[batchNum] = res.results;\n if (++numDone === numBatches) {\n callback(null, {results: flatten(results)});\n }\n };\n }\n\n for (var i = 0; i < numBatches; i++) {\n var subOpts = pick(opts, ['revs', 'attachments', 'binary', 'latest']);\n subOpts.docs = opts.docs.slice(i * batchSize,\n Math.min(opts.docs.length, (i + 1) * batchSize));\n bulkGet(self, subOpts, onResult(i));\n }\n }\n\n // mark the whole database as either supporting or not supporting _bulk_get\n var dbUrl = genUrl(host, '');\n var supportsBulkGet = supportsBulkGetMap[dbUrl];\n\n /* istanbul ignore next */\n if (typeof supportsBulkGet !== 'boolean') {\n // check if this database supports _bulk_get\n doBulkGet(function (err, res) {\n if (err) {\n supportsBulkGetMap[dbUrl] = false;\n explainError(\n err.status,\n 'PouchDB is just detecting if the remote ' +\n 'supports the _bulk_get API.'\n );\n doBulkGetShim();\n } else {\n supportsBulkGetMap[dbUrl] = true;\n callback(null, res);\n }\n });\n } else if (supportsBulkGet) {\n doBulkGet(callback);\n } else {\n doBulkGetShim();\n }\n });\n\n // Calls GET on the host, which gets back a JSON string containing\n // couchdb: A welcome string\n // version: The version of CouchDB it is running\n api._info = function (callback) {\n setup().then(function () {\n return ourFetch(genDBUrl(host, ''));\n }).then(function (response) {\n return response.json();\n }).then(function (info) {\n info.host = genDBUrl(host, '');\n callback(null, info);\n }).catch(callback);\n };\n\n api.fetch = function (path, options) {\n return setup().then(function () {\n var url = path.substring(0, 1) === '/' ?\n genUrl(host, path.substring(1)) :\n genDBUrl(host, path);\n return ourFetch(url, options);\n });\n };\n\n // Get the document with the given id from the database given by host.\n // The id could be solely the _id in the database, or it may be a\n // _design/ID or _local/ID path\n api.get = adapterFun$$1('get', function (id, opts, callback) {\n // If no options were given, set the callback to the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n\n if (opts.revs) {\n params.revs = true;\n }\n\n if (opts.revs_info) {\n params.revs_info = true;\n }\n\n if (opts.latest) {\n params.latest = true;\n }\n\n if (opts.open_revs) {\n if (opts.open_revs !== \"all\") {\n opts.open_revs = JSON.stringify(opts.open_revs);\n }\n params.open_revs = opts.open_revs;\n }\n\n if (opts.rev) {\n params.rev = opts.rev;\n }\n\n if (opts.conflicts) {\n params.conflicts = opts.conflicts;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = opts.update_seq;\n }\n\n id = encodeDocId(id);\n\n function fetchAttachments(doc) {\n var atts = doc._attachments;\n var filenames = atts && Object.keys(atts);\n if (!atts || !filenames.length) {\n return;\n }\n // we fetch these manually in separate XHRs, because\n // Sync Gateway would normally send it back as multipart/mixed,\n // which we cannot parse. Also, this is more efficient than\n // receiving attachments as base64-encoded strings.\n function fetchData(filename) {\n var att = atts[filename];\n var path = encodeDocId(doc._id) + '/' + encodeAttachmentId(filename) +\n '?rev=' + doc._rev;\n return ourFetch(genDBUrl(host, path)).then(function (response) {\n if (typeof process !== 'undefined' && !process.browser) {\n return response.buffer();\n } else {\n /* istanbul ignore next */\n return response.blob();\n }\n }).then(function (blob) {\n if (opts.binary) {\n // TODO: Can we remove this?\n if (typeof process !== 'undefined' && !process.browser) {\n blob.type = att.content_type;\n }\n return blob;\n }\n return new Promise(function (resolve) {\n blobToBase64(blob, resolve);\n });\n }).then(function (data) {\n delete att.stub;\n delete att.length;\n att.data = data;\n });\n }\n\n var promiseFactories = filenames.map(function (filename) {\n return function () {\n return fetchData(filename);\n };\n });\n\n // This limits the number of parallel xhr requests to 5 any time\n // to avoid issues with maximum browser request limits\n return pool(promiseFactories, 5);\n }\n\n function fetchAllAttachments(docOrDocs) {\n if (Array.isArray(docOrDocs)) {\n return Promise.all(docOrDocs.map(function (doc) {\n if (doc.ok) {\n return fetchAttachments(doc.ok);\n }\n }));\n }\n return fetchAttachments(docOrDocs);\n }\n\n var url = genDBUrl(host, id + paramsToStr(params));\n fetchJSON(url).then(function (res) {\n return Promise.resolve().then(function () {\n if (opts.attachments) {\n return fetchAllAttachments(res.data);\n }\n }).then(function () {\n callback(null, res.data);\n });\n }).catch(function (e) {\n e.docId = id;\n callback(e);\n });\n });\n\n\n // Delete the document given by doc from the database given by host.\n api.remove = adapterFun$$1('remove', function (docOrId, optsOrRev, opts, cb) {\n var doc;\n if (typeof optsOrRev === 'string') {\n // id, rev, opts, callback style\n doc = {\n _id: docOrId,\n _rev: optsOrRev\n };\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n } else {\n // doc, opts, callback style\n doc = docOrId;\n if (typeof optsOrRev === 'function') {\n cb = optsOrRev;\n opts = {};\n } else {\n cb = opts;\n opts = optsOrRev;\n }\n }\n\n var rev$$1 = (doc._rev || opts.rev);\n var url = genDBUrl(host, encodeDocId(doc._id)) + '?rev=' + rev$$1;\n\n fetchJSON(url, {method: 'DELETE'}, cb).catch(cb);\n });\n\n function encodeAttachmentId(attachmentId) {\n return attachmentId.split(\"/\").map(encodeURIComponent).join(\"/\");\n }\n\n // Get the attachment\n api.getAttachment = adapterFun$$1('getAttachment', function (docId, attachmentId,\n opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n var params = opts.rev ? ('?rev=' + opts.rev) : '';\n var url = genDBUrl(host, encodeDocId(docId)) + '/' +\n encodeAttachmentId(attachmentId) + params;\n var contentType;\n ourFetch(url, {method: 'GET'}).then(function (response) {\n contentType = response.headers.get('content-type');\n if (!response.ok) {\n throw response;\n } else {\n if (typeof process !== 'undefined' && !process.browser) {\n return response.buffer();\n } else {\n /* istanbul ignore next */\n return response.blob();\n }\n }\n }).then(function (blob) {\n // TODO: also remove\n if (typeof process !== 'undefined' && !process.browser) {\n blob.type = contentType;\n }\n callback(null, blob);\n }).catch(function (err) {\n callback(err);\n });\n });\n\n // Remove the attachment given by the id and rev\n api.removeAttachment = adapterFun$$1('removeAttachment', function (docId,\n attachmentId,\n rev$$1,\n callback) {\n var url = genDBUrl(host, encodeDocId(docId) + '/' +\n encodeAttachmentId(attachmentId)) + '?rev=' + rev$$1;\n fetchJSON(url, {method: 'DELETE'}, callback).catch(callback);\n });\n\n // Add the attachment given by blob and its contentType property\n // to the document with the given id, the revision given by rev, and\n // add it to the database given by host.\n api.putAttachment = adapterFun$$1('putAttachment', function (docId, attachmentId,\n rev$$1, blob,\n type, callback) {\n if (typeof type === 'function') {\n callback = type;\n type = blob;\n blob = rev$$1;\n rev$$1 = null;\n }\n var id = encodeDocId(docId) + '/' + encodeAttachmentId(attachmentId);\n var url = genDBUrl(host, id);\n if (rev$$1) {\n url += '?rev=' + rev$$1;\n }\n\n if (typeof blob === 'string') {\n // input is assumed to be a base64 string\n var binary;\n try {\n binary = thisAtob(blob);\n } catch (err) {\n return callback(createError(BAD_ARG,\n 'Attachment is not a valid base64 string'));\n }\n blob = binary ? binStringToBluffer(binary, type) : '';\n }\n\n // Add the attachment\n fetchJSON(url, {\n headers: new h({'Content-Type': type}),\n method: 'PUT',\n body: blob\n }, callback).catch(callback);\n });\n\n // Update/create multiple documents given by req in the database\n // given by host.\n api._bulkDocs = function (req, opts, callback) {\n // If new_edits=false then it prevents the database from creating\n // new revision numbers for the documents. Instead it just uses\n // the old ones. This is used in database replication.\n req.new_edits = opts.new_edits;\n\n setup().then(function () {\n return Promise.all(req.docs.map(preprocessAttachments$1));\n }).then(function () {\n // Update/create the documents\n return fetchJSON(genDBUrl(host, '_bulk_docs'), {\n method: 'POST',\n body: JSON.stringify(req)\n }, callback);\n }).catch(callback);\n };\n\n\n // Update/create document\n api._put = function (doc, opts, callback) {\n setup().then(function () {\n return preprocessAttachments$1(doc);\n }).then(function () {\n return fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {\n method: 'PUT',\n body: JSON.stringify(doc)\n });\n }).then(function (result) {\n callback(null, result.data);\n }).catch(function (err) {\n err.docId = doc && doc._id;\n callback(err);\n });\n };\n\n\n // Get a listing of the documents in the database given\n // by host and ordered by increasing id.\n api.allDocs = adapterFun$$1('allDocs', function (opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = clone(opts);\n\n // List of parameters to add to the GET request\n var params = {};\n var body;\n var method = 'GET';\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n\n if (opts.include_docs) {\n params.include_docs = true;\n }\n\n // added in CouchDB 1.6.0\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.key) {\n params.key = JSON.stringify(opts.key);\n }\n\n if (opts.start_key) {\n opts.startkey = opts.start_key;\n }\n\n if (opts.startkey) {\n params.startkey = JSON.stringify(opts.startkey);\n }\n\n if (opts.end_key) {\n opts.endkey = opts.end_key;\n }\n\n if (opts.endkey) {\n params.endkey = JSON.stringify(opts.endkey);\n }\n\n if (typeof opts.inclusive_end !== 'undefined') {\n params.inclusive_end = !!opts.inclusive_end;\n }\n\n if (typeof opts.limit !== 'undefined') {\n params.limit = opts.limit;\n }\n\n if (typeof opts.skip !== 'undefined') {\n params.skip = opts.skip;\n }\n\n var paramStr = paramsToStr(params);\n\n if (typeof opts.keys !== 'undefined') {\n method = 'POST';\n body = {keys: opts.keys};\n }\n\n fetchJSON(genDBUrl(host, '_all_docs' + paramStr), {\n method: method,\n body: JSON.stringify(body)\n }).then(function (result) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);\n }\n callback(null, result.data);\n }).catch(callback);\n });\n\n // Get a list of changes made to documents in the database given by host.\n // TODO According to the README, there should be two other methods here,\n // api.changes.addListener and api.changes.removeListener.\n api._changes = function (opts) {\n\n // We internally page the results of a changes request, this means\n // if there is a large set of changes to be returned we can start\n // processing them quicker instead of waiting on the entire\n // set of changes to return and attempting to process them at once\n var batchSize = 'batch_size' in opts ? opts.batch_size : CHANGES_BATCH_SIZE;\n\n opts = clone(opts);\n\n if (opts.continuous && !('heartbeat' in opts)) {\n opts.heartbeat = DEFAULT_HEARTBEAT;\n }\n\n var requestTimeout = ('timeout' in opts) ? opts.timeout : 30 * 1000;\n\n // ensure CHANGES_TIMEOUT_BUFFER applies\n if ('timeout' in opts && opts.timeout &&\n (requestTimeout - opts.timeout) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.timeout + CHANGES_TIMEOUT_BUFFER;\n }\n\n /* istanbul ignore if */\n if ('heartbeat' in opts && opts.heartbeat &&\n (requestTimeout - opts.heartbeat) < CHANGES_TIMEOUT_BUFFER) {\n requestTimeout = opts.heartbeat + CHANGES_TIMEOUT_BUFFER;\n }\n\n var params = {};\n if ('timeout' in opts && opts.timeout) {\n params.timeout = opts.timeout;\n }\n\n var limit = (typeof opts.limit !== 'undefined') ? opts.limit : false;\n var leftToFetch = limit;\n\n if (opts.style) {\n params.style = opts.style;\n }\n\n if (opts.include_docs || opts.filter && typeof opts.filter === 'function') {\n params.include_docs = true;\n }\n\n if (opts.attachments) {\n params.attachments = true;\n }\n\n if (opts.continuous) {\n params.feed = 'longpoll';\n }\n\n if (opts.seq_interval) {\n params.seq_interval = opts.seq_interval;\n }\n\n if (opts.conflicts) {\n params.conflicts = true;\n }\n\n if (opts.descending) {\n params.descending = true;\n }\n \n /* istanbul ignore if */\n if (opts.update_seq) {\n params.update_seq = true;\n }\n\n if ('heartbeat' in opts) {\n // If the heartbeat value is false, it disables the default heartbeat\n if (opts.heartbeat) {\n params.heartbeat = opts.heartbeat;\n }\n }\n\n if (opts.filter && typeof opts.filter === 'string') {\n params.filter = opts.filter;\n }\n\n if (opts.view && typeof opts.view === 'string') {\n params.filter = '_view';\n params.view = opts.view;\n }\n\n // If opts.query_params exists, pass it through to the changes request.\n // These parameters may be used by the filter on the source database.\n if (opts.query_params && typeof opts.query_params === 'object') {\n for (var param_name in opts.query_params) {\n /* istanbul ignore else */\n if (opts.query_params.hasOwnProperty(param_name)) {\n params[param_name] = opts.query_params[param_name];\n }\n }\n }\n\n var method = 'GET';\n var body;\n\n if (opts.doc_ids) {\n // set this automagically for the user; it's annoying that couchdb\n // requires both a \"filter\" and a \"doc_ids\" param.\n params.filter = '_doc_ids';\n method = 'POST';\n body = {doc_ids: opts.doc_ids };\n }\n /* istanbul ignore next */\n else if (opts.selector) {\n // set this automagically for the user, similar to above\n params.filter = '_selector';\n method = 'POST';\n body = {selector: opts.selector };\n }\n\n var controller = new a();\n var lastFetchedSeq;\n\n // Get all the changes starting wtih the one immediately after the\n // sequence number given by since.\n var fetchData = function (since, callback) {\n if (opts.aborted) {\n return;\n }\n params.since = since;\n // \"since\" can be any kind of json object in Cloudant/CouchDB 2.x\n /* istanbul ignore next */\n if (typeof params.since === \"object\") {\n params.since = JSON.stringify(params.since);\n }\n\n if (opts.descending) {\n if (limit) {\n params.limit = leftToFetch;\n }\n } else {\n params.limit = (!limit || leftToFetch > batchSize) ?\n batchSize : leftToFetch;\n }\n\n // Set the options for the ajax call\n var url = genDBUrl(host, '_changes' + paramsToStr(params));\n var fetchOpts = {\n signal: controller.signal,\n method: method,\n body: JSON.stringify(body)\n };\n lastFetchedSeq = since;\n\n /* istanbul ignore if */\n if (opts.aborted) {\n return;\n }\n\n // Get the changes\n setup().then(function () {\n return fetchJSON(url, fetchOpts, callback);\n }).catch(callback);\n };\n\n // If opts.since exists, get all the changes from the sequence\n // number given by opts.since. Otherwise, get all the changes\n // from the sequence number 0.\n var results = {results: []};\n\n var fetched = function (err, res) {\n if (opts.aborted) {\n return;\n }\n var raw_results_length = 0;\n // If the result of the ajax call (res) contains changes (res.results)\n if (res && res.results) {\n raw_results_length = res.results.length;\n results.last_seq = res.last_seq;\n var pending = null;\n var lastSeq = null;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof res.pending === 'number') {\n pending = res.pending;\n }\n if (typeof results.last_seq === 'string' || typeof results.last_seq === 'number') {\n lastSeq = results.last_seq;\n }\n // For each change\n var req = {};\n req.query = opts.query_params;\n res.results = res.results.filter(function (c) {\n leftToFetch--;\n var ret = filterChange(opts)(c);\n if (ret) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(c);\n }\n if (opts.return_docs) {\n results.results.push(c);\n }\n opts.onChange(c, pending, lastSeq);\n }\n return ret;\n });\n } else if (err) {\n // In case of an error, stop listening for changes and call\n // opts.complete\n opts.aborted = true;\n opts.complete(err);\n return;\n }\n\n // The changes feed may have timed out with no results\n // if so reuse last update sequence\n if (res && res.last_seq) {\n lastFetchedSeq = res.last_seq;\n }\n\n var finished = (limit && leftToFetch <= 0) ||\n (res && raw_results_length < batchSize) ||\n (opts.descending);\n\n if ((opts.continuous && !(limit && leftToFetch <= 0)) || !finished) {\n // Queue a call to fetch again with the newest sequence number\n immediate(function () { fetchData(lastFetchedSeq, fetched); });\n } else {\n // We're done, call the callback\n opts.complete(null, results);\n }\n };\n\n fetchData(opts.since || 0, fetched);\n\n // Return a method to cancel this method from processing any more\n return {\n cancel: function () {\n opts.aborted = true;\n controller.abort();\n }\n };\n };\n\n // Given a set of document/revision IDs (given by req), tets the subset of\n // those that do NOT correspond to revisions stored in the database.\n // See http://wiki.apache.org/couchdb/HttpPostRevsDiff\n api.revsDiff = adapterFun$$1('revsDiff', function (req, opts, callback) {\n // If no options were given, set the callback to be the second parameter\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n\n // Get the missing document/revision IDs\n fetchJSON(genDBUrl(host, '_revs_diff'), {\n method: 'POST',\n body: JSON.stringify(req)\n }, callback).catch(callback);\n });\n\n api._close = function (callback) {\n callback();\n };\n\n api._destroy = function (options, callback) {\n fetchJSON(genDBUrl(host, ''), {method: 'DELETE'}).then(function (json) {\n callback(null, json);\n }).catch(function (err) {\n /* istanbul ignore if */\n if (err.status === 404) {\n callback(null, {ok: true});\n } else {\n callback(err);\n }\n });\n };\n}\n\n// HttpPouch is a valid adapter.\nHttpPouch.valid = function () {\n return true;\n};\n\nfunction HttpPouch$1 (PouchDB) {\n PouchDB.adapter('http', HttpPouch, false);\n PouchDB.adapter('https', HttpPouch, false);\n}\n\nfunction QueryParseError(message) {\n this.status = 400;\n this.name = 'query_parse_error';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, QueryParseError);\n } catch (e) {}\n}\n\ninherits(QueryParseError, Error);\n\nfunction NotFoundError(message) {\n this.status = 404;\n this.name = 'not_found';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, NotFoundError);\n } catch (e) {}\n}\n\ninherits(NotFoundError, Error);\n\nfunction BuiltInError(message) {\n this.status = 500;\n this.name = 'invalid_value';\n this.message = message;\n this.error = true;\n try {\n Error.captureStackTrace(this, BuiltInError);\n } catch (e) {}\n}\n\ninherits(BuiltInError, Error);\n\nfunction promisedCallback(promise, callback) {\n if (callback) {\n promise.then(function (res) {\n immediate(function () {\n callback(null, res);\n });\n }, function (reason) {\n immediate(function () {\n callback(reason);\n });\n });\n }\n return promise;\n}\n\nfunction callbackify(fun) {\n return getArguments(function (args) {\n var cb = args.pop();\n var promise = fun.apply(this, args);\n if (typeof cb === 'function') {\n promisedCallback(promise, cb);\n }\n return promise;\n });\n}\n\n// Promise finally util similar to Q.finally\nfunction fin(promise, finalPromiseFactory) {\n return promise.then(function (res) {\n return finalPromiseFactory().then(function () {\n return res;\n });\n }, function (reason) {\n return finalPromiseFactory().then(function () {\n throw reason;\n });\n });\n}\n\nfunction sequentialize(queue, promiseFactory) {\n return function () {\n var args = arguments;\n var that = this;\n return queue.add(function () {\n return promiseFactory.apply(that, args);\n });\n };\n}\n\n// uniq an array of strings, order not guaranteed\n// similar to underscore/lodash _.uniq\nfunction uniq(arr) {\n var theSet = new ExportedSet(arr);\n var result = new Array(theSet.size);\n var index = -1;\n theSet.forEach(function (value) {\n result[++index] = value;\n });\n return result;\n}\n\nfunction mapToKeysArray(map) {\n var result = new Array(map.size);\n var index = -1;\n map.forEach(function (value, key) {\n result[++index] = key;\n });\n return result;\n}\n\nfunction createBuiltInError(name) {\n var message = 'builtin ' + name +\n ' function requires map values to be numbers' +\n ' or number arrays';\n return new BuiltInError(message);\n}\n\nfunction sum(values) {\n var result = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n if (typeof num !== 'number') {\n if (Array.isArray(num)) {\n // lists of numbers are also allowed, sum them separately\n result = typeof result === 'number' ? [result] : result;\n for (var j = 0, jLen = num.length; j < jLen; j++) {\n var jNum = num[j];\n if (typeof jNum !== 'number') {\n throw createBuiltInError('_sum');\n } else if (typeof result[j] === 'undefined') {\n result.push(jNum);\n } else {\n result[j] += jNum;\n }\n }\n } else { // not array/number\n throw createBuiltInError('_sum');\n }\n } else if (typeof result === 'number') {\n result += num;\n } else { // add number to array\n result[0] += num;\n }\n }\n return result;\n}\n\nvar log = guardedConsole.bind(null, 'log');\nvar isArray = Array.isArray;\nvar toJSON = JSON.parse;\n\nfunction evalFunctionWithEval(func, emit) {\n return scopeEval(\n \"return (\" + func.replace(/;\\s*$/, \"\") + \");\",\n {\n emit: emit,\n sum: sum,\n log: log,\n isArray: isArray,\n toJSON: toJSON\n }\n );\n}\n\n/*\n * Simple task queue to sequentialize actions. Assumes\n * callbacks will eventually fire (once).\n */\n\n\nfunction TaskQueue$1() {\n this.promise = new Promise(function (fulfill) {fulfill(); });\n}\nTaskQueue$1.prototype.add = function (promiseFactory) {\n this.promise = this.promise.catch(function () {\n // just recover\n }).then(function () {\n return promiseFactory();\n });\n return this.promise;\n};\nTaskQueue$1.prototype.finish = function () {\n return this.promise;\n};\n\nfunction stringify(input) {\n if (!input) {\n return 'undefined'; // backwards compat for empty reduce\n }\n // for backwards compat with mapreduce, functions/strings are stringified\n // as-is. everything else is JSON-stringified.\n switch (typeof input) {\n case 'function':\n // e.g. a mapreduce map\n return input.toString();\n case 'string':\n // e.g. a mapreduce built-in _reduce function\n return input.toString();\n default:\n // e.g. a JSON object in the case of mango queries\n return JSON.stringify(input);\n }\n}\n\n/* create a string signature for a view so we can cache it and uniq it */\nfunction createViewSignature(mapFun, reduceFun) {\n // the \"undefined\" part is for backwards compatibility\n return stringify(mapFun) + stringify(reduceFun) + 'undefined';\n}\n\nfunction createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName) {\n var viewSignature = createViewSignature(mapFun, reduceFun);\n\n var cachedViews;\n if (!temporary) {\n // cache this to ensure we don't try to update the same view twice\n cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};\n if (cachedViews[viewSignature]) {\n return cachedViews[viewSignature];\n }\n }\n\n var promiseForView = sourceDB.info().then(function (info) {\n\n var depDbName = info.db_name + '-mrview-' +\n (temporary ? 'temp' : stringMd5(viewSignature));\n\n // save the view name in the source db so it can be cleaned up if necessary\n // (e.g. when the _design doc is deleted, remove all associated view data)\n function diffFunction(doc) {\n doc.views = doc.views || {};\n var fullViewName = viewName;\n if (fullViewName.indexOf('/') === -1) {\n fullViewName = viewName + '/' + viewName;\n }\n var depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};\n /* istanbul ignore if */\n if (depDbs[depDbName]) {\n return; // no update necessary\n }\n depDbs[depDbName] = true;\n return doc;\n }\n return upsert(sourceDB, '_local/' + localDocName, diffFunction).then(function () {\n return sourceDB.registerDependentDatabase(depDbName).then(function (res) {\n var db = res.db;\n db.auto_compaction = true;\n var view = {\n name: depDbName,\n db: db,\n sourceDB: sourceDB,\n adapter: sourceDB.adapter,\n mapFun: mapFun,\n reduceFun: reduceFun\n };\n return view.db.get('_local/lastSeq').catch(function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n }).then(function (lastSeqDoc) {\n view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;\n if (cachedViews) {\n view.db.once('destroyed', function () {\n delete cachedViews[viewSignature];\n });\n }\n return view;\n });\n });\n });\n });\n\n if (cachedViews) {\n cachedViews[viewSignature] = promiseForView;\n }\n return promiseForView;\n}\n\nvar persistentQueues = {};\nvar tempViewQueue = new TaskQueue$1();\nvar CHANGES_BATCH_SIZE$1 = 50;\n\nfunction parseViewName(name) {\n // can be either 'ddocname/viewname' or just 'viewname'\n // (where the ddoc name is the same)\n return name.indexOf('/') === -1 ? [name, name] : name.split('/');\n}\n\nfunction isGenOne(changes) {\n // only return true if the current change is 1-\n // and there are no other leafs\n return changes.length === 1 && /^1-/.test(changes[0].rev);\n}\n\nfunction emitError(db, e) {\n try {\n db.emit('error', e);\n } catch (err) {\n guardedConsole('error',\n 'The user\\'s map/reduce function threw an uncaught error.\\n' +\n 'You can debug this error by doing:\\n' +\n 'myDatabase.on(\\'error\\', function (err) { debugger; });\\n' +\n 'Please double-check your map/reduce function.');\n guardedConsole('error', e);\n }\n}\n\n/**\n * Returns an \"abstract\" mapreduce object of the form:\n *\n * {\n * query: queryFun,\n * viewCleanup: viewCleanupFun\n * }\n *\n * Arguments are:\n *\n * localDoc: string\n * This is for the local doc that gets saved in order to track the\n * \"dependent\" DBs and clean them up for viewCleanup. It should be\n * unique, so that indexer plugins don't collide with each other.\n * mapper: function (mapFunDef, emit)\n * Returns a map function based on the mapFunDef, which in the case of\n * normal map/reduce is just the de-stringified function, but may be\n * something else, such as an object in the case of pouchdb-find.\n * reducer: function (reduceFunDef)\n * Ditto, but for reducing. Modules don't have to support reducing\n * (e.g. pouchdb-find).\n * ddocValidator: function (ddoc, viewName)\n * Throws an error if the ddoc or viewName is not valid.\n * This could be a way to communicate to the user that the configuration for the\n * indexer is invalid.\n */\nfunction createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator) {\n\n function tryMap(db, fun, doc) {\n // emit an event if there was an error thrown by a map function.\n // putting try/catches in a single function also avoids deoptimizations.\n try {\n fun(doc);\n } catch (e) {\n emitError(db, e);\n }\n }\n\n function tryReduce(db, fun, keys, values, rereduce) {\n // same as above, but returning the result or an error. there are two separate\n // functions to avoid extra memory allocations since the tryCode() case is used\n // for custom map functions (common) vs this function, which is only used for\n // custom reduce functions (rare)\n try {\n return {output : fun(keys, values, rereduce)};\n } catch (e) {\n emitError(db, e);\n return {error: e};\n }\n }\n\n function sortByKeyThenValue(x, y) {\n var keyCompare = collate(x.key, y.key);\n return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);\n }\n\n function sliceResults(results, limit, skip) {\n skip = skip || 0;\n if (typeof limit === 'number') {\n return results.slice(skip, limit + skip);\n } else if (skip > 0) {\n return results.slice(skip);\n }\n return results;\n }\n\n function rowToDocId(row) {\n var val = row.value;\n // Users can explicitly specify a joined doc _id, or it\n // defaults to the doc _id that emitted the key/value.\n var docId = (val && typeof val === 'object' && val._id) || row.id;\n return docId;\n }\n\n function readAttachmentsAsBlobOrBuffer(res) {\n res.rows.forEach(function (row) {\n var atts = row.doc && row.doc._attachments;\n if (!atts) {\n return;\n }\n Object.keys(atts).forEach(function (filename) {\n var att = atts[filename];\n atts[filename].data = b64ToBluffer(att.data, att.content_type);\n });\n });\n }\n\n function postprocessAttachments(opts) {\n return function (res) {\n if (opts.include_docs && opts.attachments && opts.binary) {\n readAttachmentsAsBlobOrBuffer(res);\n }\n return res;\n };\n }\n\n function addHttpParam(paramName, opts, params, asJson) {\n // add an http param from opts to params, optionally json-encoded\n var val = opts[paramName];\n if (typeof val !== 'undefined') {\n if (asJson) {\n val = encodeURIComponent(JSON.stringify(val));\n }\n params.push(paramName + '=' + val);\n }\n }\n\n function coerceInteger(integerCandidate) {\n if (typeof integerCandidate !== 'undefined') {\n var asNumber = Number(integerCandidate);\n // prevents e.g. '1foo' or '1.1' being coerced to 1\n if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {\n return asNumber;\n } else {\n return integerCandidate;\n }\n }\n }\n\n function coerceOptions(opts) {\n opts.group_level = coerceInteger(opts.group_level);\n opts.limit = coerceInteger(opts.limit);\n opts.skip = coerceInteger(opts.skip);\n return opts;\n }\n\n function checkPositiveInteger(number) {\n if (number) {\n if (typeof number !== 'number') {\n return new QueryParseError('Invalid value for integer: \"' +\n number + '\"');\n }\n if (number < 0) {\n return new QueryParseError('Invalid value for positive integer: ' +\n '\"' + number + '\"');\n }\n }\n }\n\n function checkQueryParseError(options, fun) {\n var startkeyName = options.descending ? 'endkey' : 'startkey';\n var endkeyName = options.descending ? 'startkey' : 'endkey';\n\n if (typeof options[startkeyName] !== 'undefined' &&\n typeof options[endkeyName] !== 'undefined' &&\n collate(options[startkeyName], options[endkeyName]) > 0) {\n throw new QueryParseError('No rows can match your key range, ' +\n 'reverse your start_key and end_key or set {descending : true}');\n } else if (fun.reduce && options.reduce !== false) {\n if (options.include_docs) {\n throw new QueryParseError('{include_docs:true} is invalid for reduce');\n } else if (options.keys && options.keys.length > 1 &&\n !options.group && !options.group_level) {\n throw new QueryParseError('Multi-key fetches for reduce views must use ' +\n '{group: true}');\n }\n }\n ['group_level', 'limit', 'skip'].forEach(function (optionName) {\n var error = checkPositiveInteger(options[optionName]);\n if (error) {\n throw error;\n }\n });\n }\n\n function httpQuery(db, fun, opts) {\n // List of parameters to add to the PUT request\n var params = [];\n var body;\n var method = 'GET';\n var ok, status;\n\n // If opts.reduce exists and is defined, then add it to the list\n // of parameters.\n // If reduce=false then the results are that of only the map function\n // not the final result of map and reduce.\n addHttpParam('reduce', opts, params);\n addHttpParam('include_docs', opts, params);\n addHttpParam('attachments', opts, params);\n addHttpParam('limit', opts, params);\n addHttpParam('descending', opts, params);\n addHttpParam('group', opts, params);\n addHttpParam('group_level', opts, params);\n addHttpParam('skip', opts, params);\n addHttpParam('stale', opts, params);\n addHttpParam('conflicts', opts, params);\n addHttpParam('startkey', opts, params, true);\n addHttpParam('start_key', opts, params, true);\n addHttpParam('endkey', opts, params, true);\n addHttpParam('end_key', opts, params, true);\n addHttpParam('inclusive_end', opts, params);\n addHttpParam('key', opts, params, true);\n addHttpParam('update_seq', opts, params);\n\n // Format the list of parameters into a valid URI query string\n params = params.join('&');\n params = params === '' ? '' : '?' + params;\n\n // If keys are supplied, issue a POST to circumvent GET query string limits\n // see http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options\n if (typeof opts.keys !== 'undefined') {\n var MAX_URL_LENGTH = 2000;\n // according to http://stackoverflow.com/a/417184/680742,\n // the de facto URL length limit is 2000 characters\n\n var keysAsString =\n 'keys=' + encodeURIComponent(JSON.stringify(opts.keys));\n if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {\n // If the keys are short enough, do a GET. we do this to work around\n // Safari not understanding 304s on POSTs (see pouchdb/pouchdb#1239)\n params += (params[0] === '?' ? '&' : '?') + keysAsString;\n } else {\n method = 'POST';\n if (typeof fun === 'string') {\n body = {keys: opts.keys};\n } else { // fun is {map : mapfun}, so append to this\n fun.keys = opts.keys;\n }\n }\n }\n\n // We are referencing a query defined in the design doc\n if (typeof fun === 'string') {\n var parts = parseViewName(fun);\n return db.fetch('_design/' + parts[0] + '/_view/' + parts[1] + params, {\n headers: new h({'Content-Type': 'application/json'}),\n method: method,\n body: JSON.stringify(body)\n }).then(function (response) {\n ok = response.ok;\n status = response.status;\n return response.json();\n }).then(function (result) {\n if (!ok) {\n result.status = status;\n throw generateErrorFromResponse(result);\n }\n // fail the entire request if the result contains an error\n result.rows.forEach(function (row) {\n /* istanbul ignore if */\n if (row.value && row.value.error && row.value.error === \"builtin_reduce_error\") {\n throw new Error(row.reason);\n }\n });\n return result;\n }).then(postprocessAttachments(opts));\n }\n\n // We are using a temporary view, terrible for performance, good for testing\n body = body || {};\n Object.keys(fun).forEach(function (key) {\n if (Array.isArray(fun[key])) {\n body[key] = fun[key];\n } else {\n body[key] = fun[key].toString();\n }\n });\n\n return db.fetch('_temp_view' + params, {\n headers: new h({'Content-Type': 'application/json'}),\n method: 'POST',\n body: JSON.stringify(body)\n }).then(function (response) {\n ok = response.ok;\n status = response.status;\n return response.json();\n }).then(function (result) {\n if (!ok) {\n result.status = status;\n throw generateErrorFromResponse(result);\n }\n return result;\n }).then(postprocessAttachments(opts));\n }\n\n // custom adapters can define their own api._query\n // and override the default behavior\n /* istanbul ignore next */\n function customQuery(db, fun, opts) {\n return new Promise(function (resolve, reject) {\n db._query(fun, opts, function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n // custom adapters can define their own api._viewCleanup\n // and override the default behavior\n /* istanbul ignore next */\n function customViewCleanup(db) {\n return new Promise(function (resolve, reject) {\n db._viewCleanup(function (err, res) {\n if (err) {\n return reject(err);\n }\n resolve(res);\n });\n });\n }\n\n function defaultsTo(value) {\n return function (reason) {\n /* istanbul ignore else */\n if (reason.status === 404) {\n return value;\n } else {\n throw reason;\n }\n };\n }\n\n // returns a promise for a list of docs to update, based on the input docId.\n // the order doesn't matter, because post-3.2.0, bulkDocs\n // is an atomic operation in all three adapters.\n function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {\n var metaDocId = '_local/doc_' + docId;\n var defaultMetaDoc = {_id: metaDocId, keys: []};\n var docData = docIdsToChangesAndEmits.get(docId);\n var indexableKeysToKeyValues = docData[0];\n var changes = docData[1];\n\n function getMetaDoc() {\n if (isGenOne(changes)) {\n // generation 1, so we can safely assume initial state\n // for performance reasons (avoids unnecessary GETs)\n return Promise.resolve(defaultMetaDoc);\n }\n return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));\n }\n\n function getKeyValueDocs(metaDoc) {\n if (!metaDoc.keys.length) {\n // no keys, no need for a lookup\n return Promise.resolve({rows: []});\n }\n return view.db.allDocs({\n keys: metaDoc.keys,\n include_docs: true\n });\n }\n\n function processKeyValueDocs(metaDoc, kvDocsRes) {\n var kvDocs = [];\n var oldKeys = new ExportedSet();\n\n for (var i = 0, len = kvDocsRes.rows.length; i < len; i++) {\n var row = kvDocsRes.rows[i];\n var doc = row.doc;\n if (!doc) { // deleted\n continue;\n }\n kvDocs.push(doc);\n oldKeys.add(doc._id);\n doc._deleted = !indexableKeysToKeyValues.has(doc._id);\n if (!doc._deleted) {\n var keyValue = indexableKeysToKeyValues.get(doc._id);\n if ('value' in keyValue) {\n doc.value = keyValue.value;\n }\n }\n }\n var newKeys = mapToKeysArray(indexableKeysToKeyValues);\n newKeys.forEach(function (key) {\n if (!oldKeys.has(key)) {\n // new doc\n var kvDoc = {\n _id: key\n };\n var keyValue = indexableKeysToKeyValues.get(key);\n if ('value' in keyValue) {\n kvDoc.value = keyValue.value;\n }\n kvDocs.push(kvDoc);\n }\n });\n metaDoc.keys = uniq(newKeys.concat(metaDoc.keys));\n kvDocs.push(metaDoc);\n\n return kvDocs;\n }\n\n return getMetaDoc().then(function (metaDoc) {\n return getKeyValueDocs(metaDoc).then(function (kvDocsRes) {\n return processKeyValueDocs(metaDoc, kvDocsRes);\n });\n });\n }\n\n // updates all emitted key/value docs and metaDocs in the mrview database\n // for the given batch of documents from the source database\n function saveKeyValues(view, docIdsToChangesAndEmits, seq) {\n var seqDocId = '_local/lastSeq';\n return view.db.get(seqDocId)\n .catch(defaultsTo({_id: seqDocId, seq: 0}))\n .then(function (lastSeqDoc) {\n var docIds = mapToKeysArray(docIdsToChangesAndEmits);\n return Promise.all(docIds.map(function (docId) {\n return getDocsToPersist(docId, view, docIdsToChangesAndEmits);\n })).then(function (listOfDocsToPersist) {\n var docsToPersist = flatten(listOfDocsToPersist);\n lastSeqDoc.seq = seq;\n docsToPersist.push(lastSeqDoc);\n // write all docs in a single operation, update the seq once\n return view.db.bulkDocs({docs : docsToPersist});\n });\n });\n }\n\n function getQueue(view) {\n var viewName = typeof view === 'string' ? view : view.name;\n var queue = persistentQueues[viewName];\n if (!queue) {\n queue = persistentQueues[viewName] = new TaskQueue$1();\n }\n return queue;\n }\n\n function updateView(view) {\n return sequentialize(getQueue(view), function () {\n return updateViewInQueue(view);\n })();\n }\n\n function updateViewInQueue(view) {\n // bind the emit function once\n var mapResults;\n var doc;\n\n function emit(key, value) {\n var output = {id: doc._id, key: normalizeKey(key)};\n // Don't explicitly store the value unless it's defined and non-null.\n // This saves on storage space, because often people don't use it.\n if (typeof value !== 'undefined' && value !== null) {\n output.value = normalizeKey(value);\n }\n mapResults.push(output);\n }\n\n var mapFun = mapper(view.mapFun, emit);\n\n var currentSeq = view.seq || 0;\n\n function processChange(docIdsToChangesAndEmits, seq) {\n return function () {\n return saveKeyValues(view, docIdsToChangesAndEmits, seq);\n };\n }\n\n var queue = new TaskQueue$1();\n\n function processNextBatch() {\n return view.sourceDB.changes({\n return_docs: true,\n conflicts: true,\n include_docs: true,\n style: 'all_docs',\n since: currentSeq,\n limit: CHANGES_BATCH_SIZE$1\n }).then(processBatch);\n }\n\n function processBatch(response) {\n var results = response.results;\n if (!results.length) {\n return;\n }\n var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);\n queue.add(processChange(docIdsToChangesAndEmits, currentSeq));\n if (results.length < CHANGES_BATCH_SIZE$1) {\n return;\n }\n return processNextBatch();\n }\n\n function createDocIdsToChangesAndEmits(results) {\n var docIdsToChangesAndEmits = new ExportedMap();\n for (var i = 0, len = results.length; i < len; i++) {\n var change = results[i];\n if (change.doc._id[0] !== '_') {\n mapResults = [];\n doc = change.doc;\n\n if (!doc._deleted) {\n tryMap(view.sourceDB, mapFun, doc);\n }\n mapResults.sort(sortByKeyThenValue);\n\n var indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);\n docIdsToChangesAndEmits.set(change.doc._id, [\n indexableKeysToKeyValues,\n change.changes\n ]);\n }\n currentSeq = change.seq;\n }\n return docIdsToChangesAndEmits;\n }\n\n function createIndexableKeysToKeyValues(mapResults) {\n var indexableKeysToKeyValues = new ExportedMap();\n var lastKey;\n for (var i = 0, len = mapResults.length; i < len; i++) {\n var emittedKeyValue = mapResults[i];\n var complexKey = [emittedKeyValue.key, emittedKeyValue.id];\n if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {\n complexKey.push(i); // dup key+id, so make it unique\n }\n indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);\n lastKey = emittedKeyValue.key;\n }\n return indexableKeysToKeyValues;\n }\n\n return processNextBatch().then(function () {\n return queue.finish();\n }).then(function () {\n view.seq = currentSeq;\n });\n }\n\n function reduceView(view, results, options) {\n if (options.group_level === 0) {\n delete options.group_level;\n }\n\n var shouldGroup = options.group || options.group_level;\n\n var reduceFun = reducer(view.reduceFun);\n\n var groups = [];\n var lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY :\n options.group_level;\n results.forEach(function (e) {\n var last = groups[groups.length - 1];\n var groupKey = shouldGroup ? e.key : null;\n\n // only set group_level for array keys\n if (shouldGroup && Array.isArray(groupKey)) {\n groupKey = groupKey.slice(0, lvl);\n }\n\n if (last && collate(last.groupKey, groupKey) === 0) {\n last.keys.push([e.key, e.id]);\n last.values.push(e.value);\n return;\n }\n groups.push({\n keys: [[e.key, e.id]],\n values: [e.value],\n groupKey: groupKey\n });\n });\n results = [];\n for (var i = 0, len = groups.length; i < len; i++) {\n var e = groups[i];\n var reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);\n if (reduceTry.error && reduceTry.error instanceof BuiltInError) {\n // CouchDB returns an error if a built-in errors out\n throw reduceTry.error;\n }\n results.push({\n // CouchDB just sets the value to null if a non-built-in errors out\n value: reduceTry.error ? null : reduceTry.output,\n key: e.groupKey\n });\n }\n // no total_rows/offset when reducing\n return {rows: sliceResults(results, options.limit, options.skip)};\n }\n\n function queryView(view, opts) {\n return sequentialize(getQueue(view), function () {\n return queryViewInQueue(view, opts);\n })();\n }\n\n function queryViewInQueue(view, opts) {\n var totalRows;\n var shouldReduce = view.reduceFun && opts.reduce !== false;\n var skip = opts.skip || 0;\n if (typeof opts.keys !== 'undefined' && !opts.keys.length) {\n // equivalent query\n opts.limit = 0;\n delete opts.keys;\n }\n\n function fetchFromView(viewOpts) {\n viewOpts.include_docs = true;\n return view.db.allDocs(viewOpts).then(function (res) {\n totalRows = res.total_rows;\n return res.rows.map(function (result) {\n\n // implicit migration - in older versions of PouchDB,\n // we explicitly stored the doc as {id: ..., key: ..., value: ...}\n // this is tested in a migration test\n /* istanbul ignore next */\n if ('value' in result.doc && typeof result.doc.value === 'object' &&\n result.doc.value !== null) {\n var keys = Object.keys(result.doc.value).sort();\n // this detection method is not perfect, but it's unlikely the user\n // emitted a value which was an object with these 3 exact keys\n var expectedKeys = ['id', 'key', 'value'];\n if (!(keys < expectedKeys || keys > expectedKeys)) {\n return result.doc.value;\n }\n }\n\n var parsedKeyAndDocId = parseIndexableString(result.doc._id);\n return {\n key: parsedKeyAndDocId[0],\n id: parsedKeyAndDocId[1],\n value: ('value' in result.doc ? result.doc.value : null)\n };\n });\n });\n }\n\n function onMapResultsReady(rows) {\n var finalResults;\n if (shouldReduce) {\n finalResults = reduceView(view, rows, opts);\n } else {\n finalResults = {\n total_rows: totalRows,\n offset: skip,\n rows: rows\n };\n }\n /* istanbul ignore if */\n if (opts.update_seq) {\n finalResults.update_seq = view.seq;\n }\n if (opts.include_docs) {\n var docIds = uniq(rows.map(rowToDocId));\n\n return view.sourceDB.allDocs({\n keys: docIds,\n include_docs: true,\n conflicts: opts.conflicts,\n attachments: opts.attachments,\n binary: opts.binary\n }).then(function (allDocsRes) {\n var docIdsToDocs = new ExportedMap();\n allDocsRes.rows.forEach(function (row) {\n docIdsToDocs.set(row.id, row.doc);\n });\n rows.forEach(function (row) {\n var docId = rowToDocId(row);\n var doc = docIdsToDocs.get(docId);\n if (doc) {\n row.doc = doc;\n }\n });\n return finalResults;\n });\n } else {\n return finalResults;\n }\n }\n\n if (typeof opts.keys !== 'undefined') {\n var keys = opts.keys;\n var fetchPromises = keys.map(function (key) {\n var viewOpts = {\n startkey : toIndexableString([key]),\n endkey : toIndexableString([key, {}])\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n return fetchFromView(viewOpts);\n });\n return Promise.all(fetchPromises).then(flatten).then(onMapResultsReady);\n } else { // normal query, no 'keys'\n var viewOpts = {\n descending : opts.descending\n };\n /* istanbul ignore if */\n if (opts.update_seq) {\n viewOpts.update_seq = true;\n }\n var startkey;\n var endkey;\n if ('start_key' in opts) {\n startkey = opts.start_key;\n }\n if ('startkey' in opts) {\n startkey = opts.startkey;\n }\n if ('end_key' in opts) {\n endkey = opts.end_key;\n }\n if ('endkey' in opts) {\n endkey = opts.endkey;\n }\n if (typeof startkey !== 'undefined') {\n viewOpts.startkey = opts.descending ?\n toIndexableString([startkey, {}]) :\n toIndexableString([startkey]);\n }\n if (typeof endkey !== 'undefined') {\n var inclusiveEnd = opts.inclusive_end !== false;\n if (opts.descending) {\n inclusiveEnd = !inclusiveEnd;\n }\n\n viewOpts.endkey = toIndexableString(\n inclusiveEnd ? [endkey, {}] : [endkey]);\n }\n if (typeof opts.key !== 'undefined') {\n var keyStart = toIndexableString([opts.key]);\n var keyEnd = toIndexableString([opts.key, {}]);\n if (viewOpts.descending) {\n viewOpts.endkey = keyStart;\n viewOpts.startkey = keyEnd;\n } else {\n viewOpts.startkey = keyStart;\n viewOpts.endkey = keyEnd;\n }\n }\n if (!shouldReduce) {\n if (typeof opts.limit === 'number') {\n viewOpts.limit = opts.limit;\n }\n viewOpts.skip = skip;\n }\n return fetchFromView(viewOpts).then(onMapResultsReady);\n }\n }\n\n function httpViewCleanup(db) {\n return db.fetch('_view_cleanup', {\n headers: new h({'Content-Type': 'application/json'}),\n method: 'POST'\n }).then(function (response) {\n return response.json();\n });\n }\n\n function localViewCleanup(db) {\n return db.get('_local/' + localDocName).then(function (metaDoc) {\n var docsToViews = new ExportedMap();\n Object.keys(metaDoc.views).forEach(function (fullViewName) {\n var parts = parseViewName(fullViewName);\n var designDocName = '_design/' + parts[0];\n var viewName = parts[1];\n var views = docsToViews.get(designDocName);\n if (!views) {\n views = new ExportedSet();\n docsToViews.set(designDocName, views);\n }\n views.add(viewName);\n });\n var opts = {\n keys : mapToKeysArray(docsToViews),\n include_docs : true\n };\n return db.allDocs(opts).then(function (res) {\n var viewsToStatus = {};\n res.rows.forEach(function (row) {\n var ddocName = row.key.substring(8); // cuts off '_design/'\n docsToViews.get(row.key).forEach(function (viewName) {\n var fullViewName = ddocName + '/' + viewName;\n /* istanbul ignore if */\n if (!metaDoc.views[fullViewName]) {\n // new format, without slashes, to support PouchDB 2.2.0\n // migration test in pouchdb's browser.migration.js verifies this\n fullViewName = viewName;\n }\n var viewDBNames = Object.keys(metaDoc.views[fullViewName]);\n // design doc deleted, or view function nonexistent\n var statusIsGood = row.doc && row.doc.views &&\n row.doc.views[viewName];\n viewDBNames.forEach(function (viewDBName) {\n viewsToStatus[viewDBName] =\n viewsToStatus[viewDBName] || statusIsGood;\n });\n });\n });\n var dbsToDelete = Object.keys(viewsToStatus).filter(\n function (viewDBName) { return !viewsToStatus[viewDBName]; });\n var destroyPromises = dbsToDelete.map(function (viewDBName) {\n return sequentialize(getQueue(viewDBName), function () {\n return new db.constructor(viewDBName, db.__opts).destroy();\n })();\n });\n return Promise.all(destroyPromises).then(function () {\n return {ok: true};\n });\n });\n }, defaultsTo({ok: true}));\n }\n\n function queryPromised(db, fun, opts) {\n /* istanbul ignore next */\n if (typeof db._query === 'function') {\n return customQuery(db, fun, opts);\n }\n if (isRemote(db)) {\n return httpQuery(db, fun, opts);\n }\n\n if (typeof fun !== 'string') {\n // temp_view\n checkQueryParseError(opts, fun);\n\n tempViewQueue.add(function () {\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ 'temp_view/temp_view',\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ true,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n return fin(updateView(view).then(function () {\n return queryView(view, opts);\n }), function () {\n return view.db.destroy();\n });\n });\n });\n return tempViewQueue.finish();\n } else {\n // persistent view\n var fullViewName = fun;\n var parts = parseViewName(fullViewName);\n var designDocName = parts[0];\n var viewName = parts[1];\n return db.get('_design/' + designDocName).then(function (doc) {\n var fun = doc.views && doc.views[viewName];\n\n if (!fun) {\n // basic validator; it's assumed that every subclass would want this\n throw new NotFoundError('ddoc ' + doc._id + ' has no view named ' +\n viewName);\n }\n\n ddocValidator(doc, viewName);\n checkQueryParseError(opts, fun);\n\n var createViewPromise = createView(\n /* sourceDB */ db,\n /* viewName */ fullViewName,\n /* mapFun */ fun.map,\n /* reduceFun */ fun.reduce,\n /* temporary */ false,\n /* localDocName */ localDocName);\n return createViewPromise.then(function (view) {\n if (opts.stale === 'ok' || opts.stale === 'update_after') {\n if (opts.stale === 'update_after') {\n immediate(function () {\n updateView(view);\n });\n }\n return queryView(view, opts);\n } else { // stale not ok\n return updateView(view).then(function () {\n return queryView(view, opts);\n });\n }\n });\n });\n }\n }\n\n function abstractQuery(fun, opts, callback) {\n var db = this;\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n opts = opts ? coerceOptions(opts) : {};\n\n if (typeof fun === 'function') {\n fun = {map : fun};\n }\n\n var promise = Promise.resolve().then(function () {\n return queryPromised(db, fun, opts);\n });\n promisedCallback(promise, callback);\n return promise;\n }\n\n var abstractViewCleanup = callbackify(function () {\n var db = this;\n /* istanbul ignore next */\n if (typeof db._viewCleanup === 'function') {\n return customViewCleanup(db);\n }\n if (isRemote(db)) {\n return httpViewCleanup(db);\n }\n return localViewCleanup(db);\n });\n\n return {\n query: abstractQuery,\n viewCleanup: abstractViewCleanup\n };\n}\n\nvar builtInReduce = {\n _sum: function (keys, values) {\n return sum(values);\n },\n\n _count: function (keys, values) {\n return values.length;\n },\n\n _stats: function (keys, values) {\n // no need to implement rereduce=true, because Pouch\n // will never call it\n function sumsqr(values) {\n var _sumsqr = 0;\n for (var i = 0, len = values.length; i < len; i++) {\n var num = values[i];\n _sumsqr += (num * num);\n }\n return _sumsqr;\n }\n return {\n sum : sum(values),\n min : Math.min.apply(null, values),\n max : Math.max.apply(null, values),\n count : values.length,\n sumsqr : sumsqr(values)\n };\n }\n};\n\nfunction getBuiltIn(reduceFunString) {\n if (/^_sum/.test(reduceFunString)) {\n return builtInReduce._sum;\n } else if (/^_count/.test(reduceFunString)) {\n return builtInReduce._count;\n } else if (/^_stats/.test(reduceFunString)) {\n return builtInReduce._stats;\n } else if (/^_/.test(reduceFunString)) {\n throw new Error(reduceFunString + ' is not a supported reduce function.');\n }\n}\n\nfunction mapper(mapFun, emit) {\n // for temp_views one can use emit(doc, emit), see #38\n if (typeof mapFun === \"function\" && mapFun.length === 2) {\n var origMap = mapFun;\n return function (doc) {\n return origMap(doc, emit);\n };\n } else {\n return evalFunctionWithEval(mapFun.toString(), emit);\n }\n}\n\nfunction reducer(reduceFun) {\n var reduceFunString = reduceFun.toString();\n var builtIn = getBuiltIn(reduceFunString);\n if (builtIn) {\n return builtIn;\n } else {\n return evalFunctionWithEval(reduceFunString);\n }\n}\n\nfunction ddocValidator(ddoc, viewName) {\n var fun = ddoc.views && ddoc.views[viewName];\n if (typeof fun.map !== 'string') {\n throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +\n viewName + ', instead found object of type: ' + typeof fun.map);\n }\n}\n\nvar localDocName = 'mrviews';\nvar abstract = createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator);\n\nfunction query(fun, opts, callback) {\n return abstract.query.call(this, fun, opts, callback);\n}\n\nfunction viewCleanup(callback) {\n return abstract.viewCleanup.call(this, callback);\n}\n\nvar mapreduce = {\n query: query,\n viewCleanup: viewCleanup\n};\n\nfunction isGenOne$1(rev$$1) {\n return /^1-/.test(rev$$1);\n}\n\nfunction fileHasChanged(localDoc, remoteDoc, filename) {\n return !localDoc._attachments ||\n !localDoc._attachments[filename] ||\n localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;\n}\n\nfunction getDocAttachments(db, doc) {\n var filenames = Object.keys(doc._attachments);\n return Promise.all(filenames.map(function (filename) {\n return db.getAttachment(doc._id, filename, {rev: doc._rev});\n }));\n}\n\nfunction getDocAttachmentsFromTargetOrSource(target, src, doc) {\n var doCheckForLocalAttachments = isRemote(src) && !isRemote(target);\n var filenames = Object.keys(doc._attachments);\n\n if (!doCheckForLocalAttachments) {\n return getDocAttachments(src, doc);\n }\n\n return target.get(doc._id).then(function (localDoc) {\n return Promise.all(filenames.map(function (filename) {\n if (fileHasChanged(localDoc, doc, filename)) {\n return src.getAttachment(doc._id, filename);\n }\n\n return target.getAttachment(localDoc._id, filename);\n }));\n }).catch(function (error) {\n /* istanbul ignore if */\n if (error.status !== 404) {\n throw error;\n }\n\n return getDocAttachments(src, doc);\n });\n}\n\nfunction createBulkGetOpts(diffs) {\n var requests = [];\n Object.keys(diffs).forEach(function (id) {\n var missingRevs = diffs[id].missing;\n missingRevs.forEach(function (missingRev) {\n requests.push({\n id: id,\n rev: missingRev\n });\n });\n });\n\n return {\n docs: requests,\n revs: true,\n latest: true\n };\n}\n\n//\n// Fetch all the documents from the src as described in the \"diffs\",\n// which is a mapping of docs IDs to revisions. If the state ever\n// changes to \"cancelled\", then the returned promise will be rejected.\n// Else it will be resolved with a list of fetched documents.\n//\nfunction getDocs(src, target, diffs, state) {\n diffs = clone(diffs); // we do not need to modify this\n\n var resultDocs = [],\n ok = true;\n\n function getAllDocs() {\n\n var bulkGetOpts = createBulkGetOpts(diffs);\n\n if (!bulkGetOpts.docs.length) { // optimization: skip empty requests\n return;\n }\n\n return src.bulkGet(bulkGetOpts).then(function (bulkGetResponse) {\n /* istanbul ignore if */\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n return Promise.all(bulkGetResponse.results.map(function (bulkGetInfo) {\n return Promise.all(bulkGetInfo.docs.map(function (doc) {\n var remoteDoc = doc.ok;\n\n if (doc.error) {\n // when AUTO_COMPACTION is set, docs can be returned which look\n // like this: {\"missing\":\"1-7c3ac256b693c462af8442f992b83696\"}\n ok = false;\n }\n\n if (!remoteDoc || !remoteDoc._attachments) {\n return remoteDoc;\n }\n\n return getDocAttachmentsFromTargetOrSource(target, src, remoteDoc)\n .then(function (attachments) {\n var filenames = Object.keys(remoteDoc._attachments);\n attachments\n .forEach(function (attachment, i) {\n var att = remoteDoc._attachments[filenames[i]];\n delete att.stub;\n delete att.length;\n att.data = attachment;\n });\n\n return remoteDoc;\n });\n }));\n }))\n\n .then(function (results) {\n resultDocs = resultDocs.concat(flatten(results).filter(Boolean));\n });\n });\n }\n\n function hasAttachments(doc) {\n return doc._attachments && Object.keys(doc._attachments).length > 0;\n }\n\n function hasConflicts(doc) {\n return doc._conflicts && doc._conflicts.length > 0;\n }\n\n function fetchRevisionOneDocs(ids) {\n // Optimization: fetch gen-1 docs and attachments in\n // a single request using _all_docs\n return src.allDocs({\n keys: ids,\n include_docs: true,\n conflicts: true\n }).then(function (res) {\n if (state.cancelled) {\n throw new Error('cancelled');\n }\n res.rows.forEach(function (row) {\n if (row.deleted || !row.doc || !isGenOne$1(row.value.rev) ||\n hasAttachments(row.doc) || hasConflicts(row.doc)) {\n // if any of these conditions apply, we need to fetch using get()\n return;\n }\n\n // strip _conflicts array to appease CSG (#5793)\n /* istanbul ignore if */\n if (row.doc._conflicts) {\n delete row.doc._conflicts;\n }\n\n // the doc we got back from allDocs() is sufficient\n resultDocs.push(row.doc);\n delete diffs[row.id];\n });\n });\n }\n\n function getRevisionOneDocs() {\n // filter out the generation 1 docs and get them\n // leaving the non-generation one docs to be got otherwise\n var ids = Object.keys(diffs).filter(function (id) {\n var missing = diffs[id].missing;\n return missing.length === 1 && isGenOne$1(missing[0]);\n });\n if (ids.length > 0) {\n return fetchRevisionOneDocs(ids);\n }\n }\n\n function returnResult() {\n return { ok:ok, docs:resultDocs };\n }\n\n return Promise.resolve()\n .then(getRevisionOneDocs)\n .then(getAllDocs)\n .then(returnResult);\n}\n\nvar CHECKPOINT_VERSION = 1;\nvar REPLICATOR = \"pouchdb\";\n// This is an arbitrary number to limit the\n// amount of replication history we save in the checkpoint.\n// If we save too much, the checkpoing docs will become very big,\n// if we save fewer, we'll run a greater risk of having to\n// read all the changes from 0 when checkpoint PUTs fail\n// CouchDB 2.0 has a more involved history pruning,\n// but let's go for the simple version for now.\nvar CHECKPOINT_HISTORY_SIZE = 5;\nvar LOWEST_SEQ = 0;\n\nfunction updateCheckpoint(db, id, checkpoint, session, returnValue) {\n return db.get(id).catch(function (err) {\n if (err.status === 404) {\n if (db.adapter === 'http' || db.adapter === 'https') {\n explainError(\n 404, 'PouchDB is just checking if a remote checkpoint exists.'\n );\n }\n return {\n session_id: session,\n _id: id,\n history: [],\n replicator: REPLICATOR,\n version: CHECKPOINT_VERSION\n };\n }\n throw err;\n }).then(function (doc) {\n if (returnValue.cancelled) {\n return;\n }\n\n // if the checkpoint has not changed, do not update\n if (doc.last_seq === checkpoint) {\n return;\n }\n\n // Filter out current entry for this replication\n doc.history = (doc.history || []).filter(function (item) {\n return item.session_id !== session;\n });\n\n // Add the latest checkpoint to history\n doc.history.unshift({\n last_seq: checkpoint,\n session_id: session\n });\n\n // Just take the last pieces in history, to\n // avoid really big checkpoint docs.\n // see comment on history size above\n doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);\n\n doc.version = CHECKPOINT_VERSION;\n doc.replicator = REPLICATOR;\n\n doc.session_id = session;\n doc.last_seq = checkpoint;\n\n return db.put(doc).catch(function (err) {\n if (err.status === 409) {\n // retry; someone is trying to write a checkpoint simultaneously\n return updateCheckpoint(db, id, checkpoint, session, returnValue);\n }\n throw err;\n });\n });\n}\n\nfunction Checkpointer(src, target, id, returnValue, opts) {\n this.src = src;\n this.target = target;\n this.id = id;\n this.returnValue = returnValue;\n this.opts = opts || {};\n}\n\nCheckpointer.prototype.writeCheckpoint = function (checkpoint, session) {\n var self = this;\n return this.updateTarget(checkpoint, session).then(function () {\n return self.updateSource(checkpoint, session);\n });\n};\n\nCheckpointer.prototype.updateTarget = function (checkpoint, session) {\n if (this.opts.writeTargetCheckpoint) {\n return updateCheckpoint(this.target, this.id, checkpoint,\n session, this.returnValue);\n } else {\n return Promise.resolve(true);\n }\n};\n\nCheckpointer.prototype.updateSource = function (checkpoint, session) {\n if (this.opts.writeSourceCheckpoint) {\n var self = this;\n return updateCheckpoint(this.src, this.id, checkpoint,\n session, this.returnValue)\n .catch(function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return true;\n }\n throw err;\n });\n } else {\n return Promise.resolve(true);\n }\n};\n\nvar comparisons = {\n \"undefined\": function (targetDoc, sourceDoc) {\n // This is the previous comparison function\n if (collate(targetDoc.last_seq, sourceDoc.last_seq) === 0) {\n return sourceDoc.last_seq;\n }\n /* istanbul ignore next */\n return 0;\n },\n \"1\": function (targetDoc, sourceDoc) {\n // This is the comparison function ported from CouchDB\n return compareReplicationLogs(sourceDoc, targetDoc).last_seq;\n }\n};\n\nCheckpointer.prototype.getCheckpoint = function () {\n var self = this;\n\n if (self.opts && self.opts.writeSourceCheckpoint && !self.opts.writeTargetCheckpoint) {\n return self.src.get(self.id).then(function (sourceDoc) {\n return sourceDoc.last_seq || LOWEST_SEQ;\n }).catch(function (err) {\n /* istanbul ignore if */\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n }\n\n return self.target.get(self.id).then(function (targetDoc) {\n if (self.opts && self.opts.writeTargetCheckpoint && !self.opts.writeSourceCheckpoint) {\n return targetDoc.last_seq || LOWEST_SEQ;\n }\n\n return self.src.get(self.id).then(function (sourceDoc) {\n // Since we can't migrate an old version doc to a new one\n // (no session id), we just go with the lowest seq in this case\n /* istanbul ignore if */\n if (targetDoc.version !== sourceDoc.version) {\n return LOWEST_SEQ;\n }\n\n var version;\n if (targetDoc.version) {\n version = targetDoc.version.toString();\n } else {\n version = \"undefined\";\n }\n\n if (version in comparisons) {\n return comparisons[version](targetDoc, sourceDoc);\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n }, function (err) {\n if (err.status === 404 && targetDoc.last_seq) {\n return self.src.put({\n _id: self.id,\n last_seq: LOWEST_SEQ\n }).then(function () {\n return LOWEST_SEQ;\n }, function (err) {\n if (isForbiddenError(err)) {\n self.opts.writeSourceCheckpoint = false;\n return targetDoc.last_seq;\n }\n /* istanbul ignore next */\n return LOWEST_SEQ;\n });\n }\n throw err;\n });\n }).catch(function (err) {\n if (err.status !== 404) {\n throw err;\n }\n return LOWEST_SEQ;\n });\n};\n// This checkpoint comparison is ported from CouchDBs source\n// they come from here:\n// https://github.com/apache/couchdb-couch-replicator/blob/master/src/couch_replicator.erl#L863-L906\n\nfunction compareReplicationLogs(srcDoc, tgtDoc) {\n if (srcDoc.session_id === tgtDoc.session_id) {\n return {\n last_seq: srcDoc.last_seq,\n history: srcDoc.history\n };\n }\n\n return compareReplicationHistory(srcDoc.history, tgtDoc.history);\n}\n\nfunction compareReplicationHistory(sourceHistory, targetHistory) {\n // the erlang loop via function arguments is not so easy to repeat in JS\n // therefore, doing this as recursion\n var S = sourceHistory[0];\n var sourceRest = sourceHistory.slice(1);\n var T = targetHistory[0];\n var targetRest = targetHistory.slice(1);\n\n if (!S || targetHistory.length === 0) {\n return {\n last_seq: LOWEST_SEQ,\n history: []\n };\n }\n\n var sourceId = S.session_id;\n /* istanbul ignore if */\n if (hasSessionId(sourceId, targetHistory)) {\n return {\n last_seq: S.last_seq,\n history: sourceHistory\n };\n }\n\n var targetId = T.session_id;\n if (hasSessionId(targetId, sourceRest)) {\n return {\n last_seq: T.last_seq,\n history: targetRest\n };\n }\n\n return compareReplicationHistory(sourceRest, targetRest);\n}\n\nfunction hasSessionId(sessionId, history) {\n var props = history[0];\n var rest = history.slice(1);\n\n if (!sessionId || history.length === 0) {\n return false;\n }\n\n if (sessionId === props.session_id) {\n return true;\n }\n\n return hasSessionId(sessionId, rest);\n}\n\nfunction isForbiddenError(err) {\n return typeof err.status === 'number' && Math.floor(err.status / 100) === 4;\n}\n\nvar STARTING_BACK_OFF = 0;\n\nfunction backOff(opts, returnValue, error, callback) {\n if (opts.retry === false) {\n returnValue.emit('error', error);\n returnValue.removeAllListeners();\n return;\n }\n /* istanbul ignore if */\n if (typeof opts.back_off_function !== 'function') {\n opts.back_off_function = defaultBackOff;\n }\n returnValue.emit('requestError', error);\n if (returnValue.state === 'active' || returnValue.state === 'pending') {\n returnValue.emit('paused', error);\n returnValue.state = 'stopped';\n var backOffSet = function backoffTimeSet() {\n opts.current_back_off = STARTING_BACK_OFF;\n };\n var removeBackOffSetter = function removeBackOffTimeSet() {\n returnValue.removeListener('active', backOffSet);\n };\n returnValue.once('paused', removeBackOffSetter);\n returnValue.once('active', backOffSet);\n }\n\n opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;\n opts.current_back_off = opts.back_off_function(opts.current_back_off);\n setTimeout(callback, opts.current_back_off);\n}\n\nfunction sortObjectPropertiesByKey(queryParams) {\n return Object.keys(queryParams).sort(collate).reduce(function (result, key) {\n result[key] = queryParams[key];\n return result;\n }, {});\n}\n\n// Generate a unique id particular to this replication.\n// Not guaranteed to align perfectly with CouchDB's rep ids.\nfunction generateReplicationId(src, target, opts) {\n var docIds = opts.doc_ids ? opts.doc_ids.sort(collate) : '';\n var filterFun = opts.filter ? opts.filter.toString() : '';\n var queryParams = '';\n var filterViewName = '';\n var selector = '';\n\n // possibility for checkpoints to be lost here as behaviour of\n // JSON.stringify is not stable (see #6226)\n /* istanbul ignore if */\n if (opts.selector) {\n selector = JSON.stringify(opts.selector);\n }\n\n if (opts.filter && opts.query_params) {\n queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));\n }\n\n if (opts.filter && opts.filter === '_view') {\n filterViewName = opts.view.toString();\n }\n\n return Promise.all([src.id(), target.id()]).then(function (res) {\n var queryData = res[0] + res[1] + filterFun + filterViewName +\n queryParams + docIds + selector;\n return new Promise(function (resolve) {\n binaryMd5(queryData, resolve);\n });\n }).then(function (md5sum) {\n // can't use straight-up md5 alphabet, because\n // the char '/' is interpreted as being for attachments,\n // and + is also not url-safe\n md5sum = md5sum.replace(/\\//g, '.').replace(/\\+/g, '_');\n return '_local/' + md5sum;\n });\n}\n\nfunction replicate(src, target, opts, returnValue, result) {\n var batches = []; // list of batches to be processed\n var currentBatch; // the batch currently being processed\n var pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n }; // next batch, not yet ready to be processed\n var writingCheckpoint = false; // true while checkpoint is being written\n var changesCompleted = false; // true when all changes received\n var replicationCompleted = false; // true when replication has completed\n var last_seq = 0;\n var continuous = opts.continuous || opts.live || false;\n var batch_size = opts.batch_size || 100;\n var batches_limit = opts.batches_limit || 10;\n var changesPending = false; // true while src.changes is running\n var doc_ids = opts.doc_ids;\n var selector = opts.selector;\n var repId;\n var checkpointer;\n var changedDocs = [];\n // Like couchdb, every replication gets a unique session id\n var session = uuid();\n\n result = result || {\n ok: true,\n start_time: new Date().toISOString(),\n docs_read: 0,\n docs_written: 0,\n doc_write_failures: 0,\n errors: []\n };\n\n var changesOpts = {};\n returnValue.ready(src, target);\n\n function initCheckpointer() {\n if (checkpointer) {\n return Promise.resolve();\n }\n return generateReplicationId(src, target, opts).then(function (res) {\n repId = res;\n\n var checkpointOpts = {};\n if (opts.checkpoint === false) {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'source') {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };\n } else if (opts.checkpoint === 'target') {\n checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };\n } else {\n checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };\n }\n\n checkpointer = new Checkpointer(src, target, repId, returnValue, checkpointOpts);\n });\n }\n\n function writeDocs() {\n changedDocs = [];\n\n if (currentBatch.docs.length === 0) {\n return;\n }\n var docs = currentBatch.docs;\n var bulkOpts = {timeout: opts.timeout};\n return target.bulkDocs({docs: docs, new_edits: false}, bulkOpts).then(function (res) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n\n // `res` doesn't include full documents (which live in `docs`), so we create a map of \n // (id -> error), and check for errors while iterating over `docs`\n var errorsById = Object.create(null);\n res.forEach(function (res) {\n if (res.error) {\n errorsById[res.id] = res;\n }\n });\n\n var errorsNo = Object.keys(errorsById).length;\n result.doc_write_failures += errorsNo;\n result.docs_written += docs.length - errorsNo;\n\n docs.forEach(function (doc) {\n var error = errorsById[doc._id];\n if (error) {\n result.errors.push(error);\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (error.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('denied', clone(error));\n } else {\n throw error;\n }\n } else {\n changedDocs.push(doc);\n }\n });\n\n }, function (err) {\n result.doc_write_failures += docs.length;\n throw err;\n });\n }\n\n function finishBatch() {\n if (currentBatch.error) {\n throw new Error('There was a problem getting docs.');\n }\n result.last_seq = last_seq = currentBatch.seq;\n var outResult = clone(result);\n if (changedDocs.length) {\n outResult.docs = changedDocs;\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof currentBatch.pending === 'number') {\n outResult.pending = currentBatch.pending;\n delete currentBatch.pending;\n }\n returnValue.emit('change', outResult);\n }\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(currentBatch.seq,\n session).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n currentBatch = undefined;\n getChanges();\n }).catch(function (err) {\n onCheckpointError(err);\n throw err;\n });\n }\n\n function getDiffs() {\n var diff = {};\n currentBatch.changes.forEach(function (change) {\n // Couchbase Sync Gateway emits these, but we can ignore them\n /* istanbul ignore if */\n if (change.id === \"_user/\") {\n return;\n }\n diff[change.id] = change.changes.map(function (x) {\n return x.rev;\n });\n });\n return target.revsDiff(diff).then(function (diffs) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n throw new Error('cancelled');\n }\n // currentBatch.diffs elements are deleted as the documents are written\n currentBatch.diffs = diffs;\n });\n }\n\n function getBatchDocs() {\n return getDocs(src, target, currentBatch.diffs, returnValue).then(function (got) {\n currentBatch.error = !got.ok;\n got.docs.forEach(function (doc) {\n delete currentBatch.diffs[doc._id];\n result.docs_read++;\n currentBatch.docs.push(doc);\n });\n });\n }\n\n function startNextBatch() {\n if (returnValue.cancelled || currentBatch) {\n return;\n }\n if (batches.length === 0) {\n processPendingBatch(true);\n return;\n }\n currentBatch = batches.shift();\n getDiffs()\n .then(getBatchDocs)\n .then(writeDocs)\n .then(finishBatch)\n .then(startNextBatch)\n .catch(function (err) {\n abortReplication('batch processing terminated with error', err);\n });\n }\n\n\n function processPendingBatch(immediate$$1) {\n if (pendingBatch.changes.length === 0) {\n if (batches.length === 0 && !currentBatch) {\n if ((continuous && changesOpts.live) || changesCompleted) {\n returnValue.state = 'pending';\n returnValue.emit('paused');\n }\n if (changesCompleted) {\n completeReplication();\n }\n }\n return;\n }\n if (\n immediate$$1 ||\n changesCompleted ||\n pendingBatch.changes.length >= batch_size\n ) {\n batches.push(pendingBatch);\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n if (returnValue.state === 'pending' || returnValue.state === 'stopped') {\n returnValue.state = 'active';\n returnValue.emit('active');\n }\n startNextBatch();\n }\n }\n\n\n function abortReplication(reason, err) {\n if (replicationCompleted) {\n return;\n }\n if (!err.message) {\n err.message = reason;\n }\n result.ok = false;\n result.status = 'aborting';\n batches = [];\n pendingBatch = {\n seq: 0,\n changes: [],\n docs: []\n };\n completeReplication(err);\n }\n\n\n function completeReplication(fatalError) {\n if (replicationCompleted) {\n return;\n }\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n result.status = 'cancelled';\n if (writingCheckpoint) {\n return;\n }\n }\n result.status = result.status || 'complete';\n result.end_time = new Date().toISOString();\n result.last_seq = last_seq;\n replicationCompleted = true;\n\n if (fatalError) {\n // need to extend the error because Firefox considers \".result\" read-only\n fatalError = createError(fatalError);\n fatalError.result = result;\n\n // Normalize error name. i.e. 'Unauthorized' -> 'unauthorized' (eg Sync Gateway)\n var errorName = (fatalError.name || '').toLowerCase();\n if (errorName === 'unauthorized' || errorName === 'forbidden') {\n returnValue.emit('error', fatalError);\n returnValue.removeAllListeners();\n } else {\n backOff(opts, returnValue, fatalError, function () {\n replicate(src, target, opts, returnValue);\n });\n }\n } else {\n returnValue.emit('complete', result);\n returnValue.removeAllListeners();\n }\n }\n\n\n function onChange(change, pending, lastSeq) {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n // Attach 'pending' property if server supports it (CouchDB 2.0+)\n /* istanbul ignore if */\n if (typeof pending === 'number') {\n pendingBatch.pending = pending;\n }\n\n var filter = filterChange(opts)(change);\n if (!filter) {\n return;\n }\n pendingBatch.seq = change.seq || lastSeq;\n pendingBatch.changes.push(change);\n immediate(function () {\n processPendingBatch(batches.length === 0 && changesOpts.live);\n });\n }\n\n\n function onChangesComplete(changes) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n\n // if no results were returned then we're done,\n // else fetch more\n if (changes.results.length > 0) {\n changesOpts.since = changes.results[changes.results.length - 1].seq;\n getChanges();\n processPendingBatch(true);\n } else {\n\n var complete = function () {\n if (continuous) {\n changesOpts.live = true;\n getChanges();\n } else {\n changesCompleted = true;\n }\n processPendingBatch(true);\n };\n\n // update the checkpoint so we start from the right seq next time\n if (!currentBatch && changes.results.length === 0) {\n writingCheckpoint = true;\n checkpointer.writeCheckpoint(changes.last_seq,\n session).then(function () {\n writingCheckpoint = false;\n result.last_seq = last_seq = changes.last_seq;\n complete();\n })\n .catch(onCheckpointError);\n } else {\n complete();\n }\n }\n }\n\n\n function onChangesError(err) {\n changesPending = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n return completeReplication();\n }\n abortReplication('changes rejected', err);\n }\n\n\n function getChanges() {\n if (!(\n !changesPending &&\n !changesCompleted &&\n batches.length < batches_limit\n )) {\n return;\n }\n changesPending = true;\n function abortChanges() {\n changes.cancel();\n }\n function removeListener() {\n returnValue.removeListener('cancel', abortChanges);\n }\n\n if (returnValue._changes) { // remove old changes() and listeners\n returnValue.removeListener('cancel', returnValue._abortChanges);\n returnValue._changes.cancel();\n }\n returnValue.once('cancel', abortChanges);\n\n var changes = src.changes(changesOpts)\n .on('change', onChange);\n changes.then(removeListener, removeListener);\n changes.then(onChangesComplete)\n .catch(onChangesError);\n\n if (opts.retry) {\n // save for later so we can cancel if necessary\n returnValue._changes = changes;\n returnValue._abortChanges = abortChanges;\n }\n }\n\n\n function startChanges() {\n initCheckpointer().then(function () {\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n return checkpointer.getCheckpoint().then(function (checkpoint) {\n last_seq = checkpoint;\n changesOpts = {\n since: last_seq,\n limit: batch_size,\n batch_size: batch_size,\n style: 'all_docs',\n doc_ids: doc_ids,\n selector: selector,\n return_docs: true // required so we know when we're done\n };\n if (opts.filter) {\n if (typeof opts.filter !== 'string') {\n // required for the client-side filter in onChange\n changesOpts.include_docs = true;\n } else { // ddoc filter\n changesOpts.filter = opts.filter;\n }\n }\n if ('heartbeat' in opts) {\n changesOpts.heartbeat = opts.heartbeat;\n }\n if ('timeout' in opts) {\n changesOpts.timeout = opts.timeout;\n }\n if (opts.query_params) {\n changesOpts.query_params = opts.query_params;\n }\n if (opts.view) {\n changesOpts.view = opts.view;\n }\n getChanges();\n });\n }).catch(function (err) {\n abortReplication('getCheckpoint rejected with ', err);\n });\n }\n\n /* istanbul ignore next */\n function onCheckpointError(err) {\n writingCheckpoint = false;\n abortReplication('writeCheckpoint completed with error', err);\n }\n\n /* istanbul ignore if */\n if (returnValue.cancelled) { // cancelled immediately\n completeReplication();\n return;\n }\n\n if (!returnValue._addedListeners) {\n returnValue.once('cancel', completeReplication);\n\n if (typeof opts.complete === 'function') {\n returnValue.once('error', opts.complete);\n returnValue.once('complete', function (result) {\n opts.complete(null, result);\n });\n }\n returnValue._addedListeners = true;\n }\n\n if (typeof opts.since === 'undefined') {\n startChanges();\n } else {\n initCheckpointer().then(function () {\n writingCheckpoint = true;\n return checkpointer.writeCheckpoint(opts.since, session);\n }).then(function () {\n writingCheckpoint = false;\n /* istanbul ignore if */\n if (returnValue.cancelled) {\n completeReplication();\n return;\n }\n last_seq = opts.since;\n startChanges();\n }).catch(onCheckpointError);\n }\n}\n\n// We create a basic promise so the caller can cancel the replication possibly\n// before we have actually started listening to changes etc\ninherits(Replication, EventEmitter);\nfunction Replication() {\n EventEmitter.call(this);\n this.cancelled = false;\n this.state = 'pending';\n var self = this;\n var promise = new Promise(function (fulfill, reject) {\n self.once('complete', fulfill);\n self.once('error', reject);\n });\n self.then = function (resolve, reject) {\n return promise.then(resolve, reject);\n };\n self.catch = function (reject) {\n return promise.catch(reject);\n };\n // As we allow error handling via \"error\" event as well,\n // put a stub in here so that rejecting never throws UnhandledError.\n self.catch(function () {});\n}\n\nReplication.prototype.cancel = function () {\n this.cancelled = true;\n this.state = 'cancelled';\n this.emit('cancel');\n};\n\nReplication.prototype.ready = function (src, target) {\n var self = this;\n if (self._readyCalled) {\n return;\n }\n self._readyCalled = true;\n\n function onDestroy() {\n self.cancel();\n }\n src.once('destroyed', onDestroy);\n target.once('destroyed', onDestroy);\n function cleanup() {\n src.removeListener('destroyed', onDestroy);\n target.removeListener('destroyed', onDestroy);\n }\n self.once('complete', cleanup);\n};\n\nfunction toPouch(db, opts) {\n var PouchConstructor = opts.PouchConstructor;\n if (typeof db === 'string') {\n return new PouchConstructor(db, opts);\n } else {\n return db;\n }\n}\n\nfunction replicateWrapper(src, target, opts, callback) {\n\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n\n if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {\n throw createError(BAD_REQUEST,\n \"`doc_ids` filter parameter is not a list.\");\n }\n\n opts.complete = callback;\n opts = clone(opts);\n opts.continuous = opts.continuous || opts.live;\n opts.retry = ('retry' in opts) ? opts.retry : false;\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n var replicateRet = new Replication(opts);\n var srcPouch = toPouch(src, opts);\n var targetPouch = toPouch(target, opts);\n replicate(srcPouch, targetPouch, opts, replicateRet);\n return replicateRet;\n}\n\ninherits(Sync, EventEmitter);\nfunction sync(src, target, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n if (typeof opts === 'undefined') {\n opts = {};\n }\n opts = clone(opts);\n /*jshint validthis:true */\n opts.PouchConstructor = opts.PouchConstructor || this;\n src = toPouch(src, opts);\n target = toPouch(target, opts);\n return new Sync(src, target, opts, callback);\n}\n\nfunction Sync(src, target, opts, callback) {\n var self = this;\n this.canceled = false;\n\n var optsPush = opts.push ? $inject_Object_assign({}, opts, opts.push) : opts;\n var optsPull = opts.pull ? $inject_Object_assign({}, opts, opts.pull) : opts;\n\n this.push = replicateWrapper(src, target, optsPush);\n this.pull = replicateWrapper(target, src, optsPull);\n\n this.pushPaused = true;\n this.pullPaused = true;\n\n function pullChange(change) {\n self.emit('change', {\n direction: 'pull',\n change: change\n });\n }\n function pushChange(change) {\n self.emit('change', {\n direction: 'push',\n change: change\n });\n }\n function pushDenied(doc) {\n self.emit('denied', {\n direction: 'push',\n doc: doc\n });\n }\n function pullDenied(doc) {\n self.emit('denied', {\n direction: 'pull',\n doc: doc\n });\n }\n function pushPaused() {\n self.pushPaused = true;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('paused');\n }\n }\n function pullPaused() {\n self.pullPaused = true;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('paused');\n }\n }\n function pushActive() {\n self.pushPaused = false;\n /* istanbul ignore if */\n if (self.pullPaused) {\n self.emit('active', {\n direction: 'push'\n });\n }\n }\n function pullActive() {\n self.pullPaused = false;\n /* istanbul ignore if */\n if (self.pushPaused) {\n self.emit('active', {\n direction: 'pull'\n });\n }\n }\n\n var removed = {};\n\n function removeAll(type) { // type is 'push' or 'pull'\n return function (event, func) {\n var isChange = event === 'change' &&\n (func === pullChange || func === pushChange);\n var isDenied = event === 'denied' &&\n (func === pullDenied || func === pushDenied);\n var isPaused = event === 'paused' &&\n (func === pullPaused || func === pushPaused);\n var isActive = event === 'active' &&\n (func === pullActive || func === pushActive);\n\n if (isChange || isDenied || isPaused || isActive) {\n if (!(event in removed)) {\n removed[event] = {};\n }\n removed[event][type] = true;\n if (Object.keys(removed[event]).length === 2) {\n // both push and pull have asked to be removed\n self.removeAllListeners(event);\n }\n }\n };\n }\n\n if (opts.live) {\n this.push.on('complete', self.pull.cancel.bind(self.pull));\n this.pull.on('complete', self.push.cancel.bind(self.push));\n }\n\n function addOneListener(ee, event, listener) {\n if (ee.listeners(event).indexOf(listener) == -1) {\n ee.on(event, listener);\n }\n }\n\n this.on('newListener', function (event) {\n if (event === 'change') {\n addOneListener(self.pull, 'change', pullChange);\n addOneListener(self.push, 'change', pushChange);\n } else if (event === 'denied') {\n addOneListener(self.pull, 'denied', pullDenied);\n addOneListener(self.push, 'denied', pushDenied);\n } else if (event === 'active') {\n addOneListener(self.pull, 'active', pullActive);\n addOneListener(self.push, 'active', pushActive);\n } else if (event === 'paused') {\n addOneListener(self.pull, 'paused', pullPaused);\n addOneListener(self.push, 'paused', pushPaused);\n }\n });\n\n this.on('removeListener', function (event) {\n if (event === 'change') {\n self.pull.removeListener('change', pullChange);\n self.push.removeListener('change', pushChange);\n } else if (event === 'denied') {\n self.pull.removeListener('denied', pullDenied);\n self.push.removeListener('denied', pushDenied);\n } else if (event === 'active') {\n self.pull.removeListener('active', pullActive);\n self.push.removeListener('active', pushActive);\n } else if (event === 'paused') {\n self.pull.removeListener('paused', pullPaused);\n self.push.removeListener('paused', pushPaused);\n }\n });\n\n this.pull.on('removeListener', removeAll('pull'));\n this.push.on('removeListener', removeAll('push'));\n\n var promise = Promise.all([\n this.push,\n this.pull\n ]).then(function (resp) {\n var out = {\n push: resp[0],\n pull: resp[1]\n };\n self.emit('complete', out);\n if (callback) {\n callback(null, out);\n }\n self.removeAllListeners();\n return out;\n }, function (err) {\n self.cancel();\n if (callback) {\n // if there's a callback, then the callback can receive\n // the error event\n callback(err);\n } else {\n // if there's no callback, then we're safe to emit an error\n // event, which would otherwise throw an unhandled error\n // due to 'error' being a special event in EventEmitters\n self.emit('error', err);\n }\n self.removeAllListeners();\n if (callback) {\n // no sense throwing if we're already emitting an 'error' event\n throw err;\n }\n });\n\n this.then = function (success, err) {\n return promise.then(success, err);\n };\n\n this.catch = function (err) {\n return promise.catch(err);\n };\n}\n\nSync.prototype.cancel = function () {\n if (!this.canceled) {\n this.canceled = true;\n this.push.cancel();\n this.pull.cancel();\n }\n};\n\nfunction replication(PouchDB) {\n PouchDB.replicate = replicateWrapper;\n PouchDB.sync = sync;\n\n Object.defineProperty(PouchDB.prototype, 'replicate', {\n get: function () {\n var self = this;\n if (typeof this.replicateMethods === 'undefined') {\n this.replicateMethods = {\n from: function (other, opts, callback) {\n return self.constructor.replicate(other, self, opts, callback);\n },\n to: function (other, opts, callback) {\n return self.constructor.replicate(self, other, opts, callback);\n }\n };\n }\n return this.replicateMethods;\n }\n });\n\n PouchDB.prototype.sync = function (dbName, opts, callback) {\n return this.constructor.sync(this, dbName, opts, callback);\n };\n}\n\nPouchDB.plugin(IDBPouch)\n .plugin(HttpPouch$1)\n .plugin(mapreduce)\n .plugin(replication);\n\n// Pull from src because pouchdb-node/pouchdb-browser themselves\n\nexport default PouchDB;\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport jwtDecode from 'jwt-decode'\r\n\r\nexport default class Store {\r\n constructor (prefix) {\r\n this.prefix = prefix\r\n }\r\n\r\n get server () {\r\n return this.serverAddress\r\n }\r\n\r\n set server (address) {\r\n this.serverAddress = address\r\n }\r\n\r\n set userID (userid) {\r\n // this.USERID = userid\r\n }\r\n\r\n get userID () {\r\n try {\r\n let dCode = jwtDecode(this.refreshToken)\r\n return dCode.user_id\r\n } catch (err) {\r\n console.warn(\"Decoding failed!\")\r\n }\r\n\r\n }\r\n\r\n get appID () {\r\n return this.APPID\r\n }\r\n\r\n set appID (appid) {\r\n this.APPID = appid\r\n }\r\n\r\n get websocketAddress () {\r\n return this.wssocketAddress\r\n }\r\n\r\n set websocketAddress (websocAddress) {\r\n this.wssocketAddress = websocAddress\r\n }\r\n\r\n set token (token) {\r\n this.accessToken = token\r\n }\r\n\r\n get token () {\r\n return this.accessToken\r\n }\r\n\r\n set refreshToken (refresh) {\r\n this.token = ''\r\n this.privateRefreshToken = refresh\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n localStorage.setItem(`${this.prefix}_refresh`, refresh)\r\n }\r\n }\r\n\r\n get refreshToken () {\r\n if (this.privateRefreshToken) {\r\n return this.privateRefreshToken\r\n }\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n const rT = localStorage.getItem(`${this.prefix}_refresh`)\r\n if (rT) {\r\n return rT\r\n }\r\n }\r\n return null\r\n }\r\n\r\n set assetProvider (provider) {\r\n this.privateAssetProvider = provider\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n localStorage.setItem(`${this.prefix}_asset_provider`, JSON.stringify(provider))\r\n }\r\n }\r\n\r\n get assetProvider () {\r\n if (this.privateAssetProvider) {\r\n return this.privateAssetProvider\r\n }\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n try {\r\n return JSON.parse(localStorage.getItem(`${this.prefix}_asset_provider`))\r\n } catch (err) {\r\n console.warn('Unable to parse JSON payload ', err)\r\n }\r\n }\r\n return null\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport urlParse from 'url-parse'\r\nimport User from '../../../../model/User'\r\n\r\nexport default class UserApi {\r\n constructor (bv) {\r\n this.Blockv = bv\r\n this.client = bv.client\r\n this.store = bv.store\r\n this.dataPool = bv.dataPool\r\n }\r\n\r\n /**\r\n * Registers a user on the Blockv platform.\r\n *\r\n * @param registration contains properties of the user.\r\n * Only the properties to be registered should be set.\r\n * @return new Observable<User> instance\r\n */\r\n\r\n getAccessToken () {\r\n return this.store.token\r\n }\r\n\r\n setAccessToken (token) {\r\n this.store.token = ''\r\n this.store.token = token\r\n }\r\n\r\n getRefreshToken () {\r\n return this.store.refreshToken\r\n }\r\n\r\n setRefreshToken (token) {\r\n this.store.token = ''\r\n this.store.refreshToken = token\r\n }\r\n\r\n register (registration) {\r\n return this.client.request('POST', '/v1/users', registration, false)\r\n .then(\r\n (data) => {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.store.userID = data.user.id\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id\r\n })\r\n return data\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n /**\r\n * Logs a user into the Blockv platform. Accepts a user token (phone or email).\r\n *\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @param password the user's password.\r\n * @return JSON Object\r\n */\r\n\r\n login (token, tokenType, password) {\r\n const payload = {\r\n token,\r\n token_type: tokenType,\r\n auth_data: {\r\n password\r\n }\r\n }\r\n\r\n return this.client.request('POST', '/v1/user/login', payload, false).then(\r\n (data) => {\r\n if (!password) {\r\n const error = new Error('Login Failed, Password Reset')\r\n error.code = 'PASSWORD_RESET'\r\n throw error\r\n } else {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.store.userID = data.user.id\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id,\r\n client: this.client\r\n })\r\n return data\r\n }\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n /**\r\n * Logs a user into the Blockv platform. Accepts a guest id\r\n *\r\n * @param guestId the user's guest id.\r\n * @return JSON Object\r\n */\r\n loginGuest (guestId) {\r\n const payload = {\r\n token: guestId,\r\n token_type: 'guest_id'\r\n }\r\n return this.client.request('POST', '/v1/user/login', payload, false).then(\r\n (data) => {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id\r\n })\r\n return data\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n uploadAvatar (request) {\r\n // get file\r\n // change to formData\r\n return this.client.request('POST', '/v1/user/avatar', request, true)\r\n }\r\n\r\n /**\r\n * Fetches the current user's profile information from the Blockv platform.\r\n *\r\n * @return JSON Object\r\n */\r\n\r\n getCurrentUser (payload) {\r\n // get the current authenticated in user\r\n return this.client.request('GET', '/v1/user', payload, true).then(data => new User(data))\r\n }\r\n\r\n /**\r\n * Updates the current user's profile on the Blockv platform.\r\n * @param update holds the properties of the user, e.g. their first name.\r\n * Only the properties to be updated should be set.\r\n * @return JSON Object\r\n */\r\n updateUser (update) {\r\n return this.client.request('PATCH', '/v1/user', update, true)\r\n }\r\n\r\n /**\r\n * Gets a list of the current users tokens\r\n * @return JSON Object\r\n */\r\n\r\n getUserTokens () {\r\n return this.client.request('GET', '/v1/user/tokens', '', true)\r\n }\r\n\r\n /**\r\n * Verifies ownership of a token by submitting the verification code to the Blockv platform.\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @param code the verification code send to the user's token (phone or email).\r\n * @return JSON Object\r\n */\r\n verifyUserToken (verification) {\r\n return this.client.request('POST', '/v1/user/verify_token', verification, true)\r\n }\r\n\r\n /**\r\n * Sends a One-Time-Pin (OTP) to the user's token (phone or email).\r\n * This OTP may be used in place of a password to login.\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @return JSON Object\r\n */\r\n resetPassword (token, tokenType) {\r\n const payload = {\r\n token,\r\n token_type: tokenType\r\n }\r\n return this.client.request('POST', '/v1/user/reset_token', payload, false)\r\n }\r\n\r\n /**\r\n * Sends a verification code to the user's token (phone or email).\r\n * This verification code should be used to verifiy the user's ownership\r\n * of the token (phone or email).\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @return JSON Object\r\n */\r\n sendTokenVerification (token, tokenType) {\r\n const payload = {\r\n token,\r\n token_type: tokenType\r\n }\r\n return this.client.request('POST', '/v1/user/reset_token_verification', payload, false)\r\n }\r\n\r\n /**\r\n * Returns a server generated guest id\r\n * @return Object payload containing a guest user generated by the server\r\n */\r\n\r\n getGuestToken () {\r\n return this.client.request('POST', '/v1/user/guest', '', false).then(data => data.properties.guest_id)\r\n }\r\n\r\n /**\r\n * Log out the current user.\r\n * The current user will not longer be authorized to perform user\r\n * scoped requests on the Blockv platfrom.\r\n * @return new JSON\r\n */\r\n logout (noRequest = false) {\r\n this.Blockv.emit('logout')\r\n this.Blockv.WebSockets.close()\r\n console.log('trying to logout')\r\n if (noRequest) {\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n } else {\r\n return this.client.request('POST', '/v1/user/logout', {}, true).then(() => {\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n }).catch((err) => {\r\n console.warn(err)\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n throw err\r\n })\r\n }\r\n \r\n }\r\n\r\n static mapString (o) {\r\n return Object.keys(o).map(key => `${key}=${o[key]}`).join('&')\r\n }\r\n\r\n encodeAssetProvider (url) {\r\n const aP = this.store.assetProvider\r\n const aPlen = aP.length\r\n const compare = urlParse(url)\r\n for (let i = 0; i < aPlen; i += 1) {\r\n const comparethis = urlParse(aP[i].uri)\r\n if (compare.hostname === comparethis.hostname) {\r\n // same uri so get the policy signature and key and append\r\n const queryString = UserApi.mapString(aP[i].descriptor)\r\n return `${url}?${queryString}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n addUserToken (payload) {\r\n /**\r\n * payload is\r\n * {\r\n * \"token\": \"another.email@domain.com\",\r\n * \"token_type\": \"email\",\r\n * \"is_primary\": false\r\n * }\r\n */\r\n return this.client.request('POST', '/v1/user/tokens', payload, true)\r\n }\r\n\r\n setDefaultToken (tokenId) {\r\n return this.client.request('PUT', `/v1/user/tokens/${tokenId}/default`, null, true)\r\n }\r\n\r\n /**\r\n * Deletes a Users Token\r\n * @param {String} tokenId\r\n * @return {Promise<Object>} returns a success\r\n */\r\n deleteUserToken (tokenId) {\r\n return this.client.request('DELETE', `/v1/user/tokens/${tokenId}`, null, true)\r\n }\r\n\r\n /**\r\n * Adds a redeemable the users account\r\n * @param {Object} payload Object containing the redeemable information\r\n * @return {Promise<Object>} returns a Object containing the new redeemable\r\n */\r\n async addRedeemable (payload) {\r\n const { userID } = this.store\r\n return this.client.request('POST', `/v1/users/${userID}/redeemables`, payload, true)\r\n }\r\n\r\n async getPublicUserProfile (userID) {\r\n return this.client.request('GET', `/v1/users/${userID}`, '', true)\r\n }\r\n\r\n /**\r\n * Logs the user in via OAuth in a browser popup window.\r\n * NOTE: This is a private method, subject to change once more OAuth flows have been fully implemented on the backend.\r\n * @private\r\n * @returns {Promise<boolean>} `true` if login completed, or `false` if login was cancelled by the user.\r\n */\r\n async loginOAuthPopup () {\r\n // Ensure SDK has been initialized\r\n if (!this.store.appID) throw new Error('Please initialize the SDK and set your App ID first.')\r\n\r\n // Generate random state ID\r\n const stateID = Math.random().toString(36).substr(2)\r\n\r\n // Generate the oauth URL\r\n const redirectURI = 'https://login.blockv.io/send-event.html'\r\n const uri = `https://login.blockv.io/?response_type=code&client_id=${this.store.appID}&redirect_uri=${encodeURIComponent(redirectURI)}&scope=all&state=${stateID}`\r\n\r\n // Create popup window\r\n const newWindow = window.open(uri, '_blank', 'left=200,top=200,width=360,height=480,chrome,centerscreen')\r\n if (!newWindow) {\r\n throw new Error('Unable to login, popups have been blocked')\r\n }\r\n // Create pending promise\r\n let promiseResolved = false\r\n let promiseSuccess = null\r\n let promiseFail = null\r\n const promise = new Promise((resolve, reject) => {\r\n promiseSuccess = resolve\r\n promiseFail = reject\r\n })\r\n\r\n // Create window close checker\r\n const closeChecker = setInterval(() => {\r\n // Check if window was closed\r\n if (!newWindow.closed) return false\r\n\r\n // It was, cancel timer\r\n clearInterval(closeChecker)\r\n\r\n // If promise was never resolved, the user must have closed the popup before logging in. Resolve the promise.\r\n if (!promiseResolved) promiseSuccess(false)\r\n }, 250)\r\n\r\n // Create message listener\r\n const messageListener = async (e) => {\r\n // Ensure it's from the correct origin\r\n if (e.origin !== 'https://login.blockv.io') return false\r\n\r\n // Ensure the state matches\r\n if (e.data.state !== stateID) return false\r\n\r\n // Ensure the action matches\r\n if (e.data.action !== 'oauth-response') return false\r\n console.log(e.data)\r\n // Check response type\r\n if (e.data.code) {\r\n let oauthObj = {\r\n 'grant_type': 'authorization_code',\r\n 'client_id': this.Blockv.store.appID,\r\n 'code': e.data.code,\r\n 'redirect_uri': redirectURI\r\n }\r\n let oa = await this.Blockv.client.request('POST', '/v1/oauth/token', oauthObj, false)\r\n // We have our user data, store it\r\n this.setRefreshToken(oa.refresh_token.token)\r\n this.store.token = oa.access_token.token\r\n\r\n // Get user info and set the store properties\r\n const profile = await this.getCurrentUser()\r\n this.store.userID = profile.id\r\n\r\n // Get asset provider info and store it\r\n const assetProviders = await this.client.request('GET', '/v1/user/asset_providers', null, true)\r\n this.store.assetProvider = assetProviders.asset_provider\r\n\r\n // Inform data pool that the current user changed\r\n this.dataPool.setSessionInfo({\r\n userID: profile.id\r\n })\r\n\r\n // Done\r\n promiseResolved = true\r\n promiseSuccess(true)\r\n } else {\r\n // Login failed, return error\r\n const err = new Error(e.data.error_text || 'Unable to login.')\r\n err.code = e.data.error\r\n promiseResolved = true\r\n promiseFail(err)\r\n }\r\n\r\n // Cleanup, remove event listener\r\n newWindow.close()\r\n window.removeEventListener('message', messageListener)\r\n clearInterval(closeChecker)\r\n return true\r\n }\r\n\r\n // Attach message listener\r\n window.addEventListener('message', messageListener)\r\n\r\n // Done, return promise\r\n return promise\r\n }\r\n\r\n // Used for manual OAuth Login flow\r\n async loginOauthCode (redirectURI, code) {\r\n let oauthObj = {\r\n 'grant_type': 'authorization_code',\r\n 'client_id': this.store.appID,\r\n 'code': code,\r\n 'redirect_uri': redirectURI\r\n }\r\n let oa = await this.Blockv.client.request('POST', '/v1/oauth/token', oauthObj, false)\r\n // We have our user data, store it\r\n this.setRefreshToken(oa.refresh_token.token)\r\n this.store.token = oa.access_token.token\r\n\r\n // Get user info and set the store properties\r\n const profile = await this.getCurrentUser()\r\n this.store.userID = profile.id\r\n\r\n // Get asset provider info and store it\r\n const assetProviders = await this.client.request('GET', '/v1/user/asset_providers', null, true)\r\n this.store.assetProvider = assetProviders.asset_provider\r\n\r\n // Inform data pool that the current user changed\r\n this.dataPool.setSessionInfo({\r\n userID: profile.id\r\n })\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\nimport fetch from '@brillout/fetch'\nimport jwtDecode from 'jwt-decode'\nimport EventEmitter from '../EventEmitter'\n\n/* global FormData */\n\n/** List of known error messages to replace the server-supplied ones */\nconst ErrorCodes = {\n 2: 'Blank App ID',\n 17: 'Invalid App ID',\n 401: 'Token has Expired',\n 516: 'Invalid Payload',\n 517: 'Invalid Payload',\n 521: 'Token Unavailable',\n 527: 'Invalid Date Format',\n 1004: 'Invalid Request Payload',\n 1701: 'vAtom Unrecognized',\n 1708: 'vAtom Unvailable',\n 2030: 'No user found, Please register an account first.',\n 2031: 'Authentication Failed',\n 2032: 'Login Failed, Please try again',\n 2034: 'Invalid Token',\n 2037: 'Upload Avatar Failed',\n 2049: 'Refresh Token Expired / Not Whitelisted',\n 2051: 'Too many login attempts, Please try again later.',\n 2552: 'Unable To Retrieve Token',\n 2553: 'Token ID Invalid',\n 2562: 'Cannot Delete Primary Token',\n 2563: 'Token Already Confirmed',\n 2564: 'Invalid Verification Code',\n 2566: 'Token Already Confirmed',\n 2567: 'Invalid Verification Code',\n 2569: 'Invalid Token Type',\n 2571: 'Invalid Email',\n 2572: 'Invalid Phone Number'\n}\n\nexport default class Client extends EventEmitter {\n /** @private */\n constructor (bv) {\n super()\n this.Blockv = bv\n this.store = bv.store\n }\n\n /**\n * Sends a request to the backend.\n * @param {string} method The HTTP method, ie. \"GET\", \"POST\"\n * @param {string} endpoint The backend API endpoint, ie. \"/v1/user\"\n * @param {string|object|FormData} payload The request body. Can be null.\n * @param {boolean} auth `true` if this request should contain the current user's access token.\n * @param {object} headers Optional extra HTTP headers to add to the request.\n * @returns {Promise<object>} The server's response payload.\n */\n async request (method, endpoint, payload, auth, headers) {\n // Ensure our access token is up to date, if this is an authenticated request\n if (auth) await this.checkToken()\n\n // Attach headers\n if (!headers) headers = {}\n headers['App-Id'] = this.store.appID\n if (auth) headers['Authorization'] = `Bearer ${this.store.token}`\n\n // Send request\n return this.authRequest(method, endpoint, payload, headers)\n }\n\n /** @private */\n async authRequest (method, endpoint, payload, headers) {\n \n // Send request start event\n let t0 = performance.now();\n let statekey = Math.random().toString(36).substr(2)\n this.emit('requestTimerStart', {\n url: this.store.server + endpoint,\n method,\n event: 'start',\n statekey,\n time: t0\n })\n\n // Check payload type\n let body = null\n if (!payload) {\n // If no body, make it undefined so that fetch() doesn't complain about having a payload on GET requests\n body = undefined\n } else if (typeof FormData !== 'undefined' && payload instanceof FormData) {\n // Don't add Content-Type header, fetch() adds it's own, which is required because it specifies the form data boundary\n body = payload\n } else if (typeof body === 'object') {\n // Convert to JSON\n body = JSON.stringify(payload)\n headers['Content-Type'] = 'application/json'\n } else {\n // Unknown payload type, assume application/json content type, unless specified in extra headers\n body = payload\n if (!extraHeaders['Content-Type']) headers['Content-Type'] = 'application/json'\n }\n \n // try get a response\n let response = null\n let json = null\n try {\n\n // Send request\n response = await fetch(this.store.server + endpoint, { method, body, headers })\n\n // Decode JSON\n json = await response.json()\n\n // Send timing event\n var t1 = performance.now();\n this.emit('requestTimerEnd', {\n url: this.store.server + endpoint,\n method,\n milliseconds: t1 - t0,\n statekey,\n event: 'end'\n })\n\n } catch (err) {\n\n // Request failed, send timing event\n var t1 = performance.now();\n this.emit('requestTimerEnd', {\n url: this.store.server + endpoint,\n method,\n milliseconds: t1 - t0,\n statekey,\n event: 'end'\n })\n\n throw err\n\n }\n \n \n // Check for server error\n if (json.payload === undefined && json.error === 2051) {\n\n // Check for the special login locked error\n // We need to pull the timestamp that is in the reponse.message to show when they\n // can login agin\n\n // HACK: Pull time from original server error string\n const dateString = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z/g.exec(response.message)\n let lockedUntil = new Date(dateString)\n\n // Throw error\n const error = new Error(`Too many login attempts, try again at ${lockedUntil}`)\n error.code = json.error || response.status || 0\n error.httpStatus = response.status\n error.requestID = json.request_id\n error.serverMessage = json.message\n error.lockedUntil = lockedUntil\n throw error\n\n } else if (json && json.payload === undefined && response.status == 200) {\n\n // Sometimes, just sometimes, the backend will send a response outside of the usual `payload` param.\n // In this case, just wrap it.\n json = {\n payload: json\n }\n \n } else if (json.payload === undefined) {\n\n // Throw the error returned by the server\n const error = new Error(ErrorCodes[response.error] || json.message || 'An unknown server error has occurred')\n error.code = json.error || response.status || 0\n error.httpStatus = response.status\n error.requestID = json.request_id\n error.serverMessage = json.message\n throw error\n \n }\n\n // Check for main reactor error payload\n if (json.payload && json.payload.main && json.payload.main.error) {\n // Reactor error\n var err = json.payload.main.error.Code || response.status || 0\n const error = new Error(ErrorCodes[err] || json.payload.main.error.Msg || 'An unknown server error occurred.')\n error.code = err\n error.serverMessage = json.payload.main.error.Msg || ''\n error.httpStatus = response.status\n error.requestID = json.request_id\n throw error\n }\n \n // No error, continue\n return json.payload\n }\n\n /**\n * Uses the refresh token to fetch and store a new access token from the backend.\n * @private\n */\n refreshToken () {\n\n // Check if currently fetching an access token\n if (this.tokenFetchPromise)\n return this.tokenFetchPromise\n\n // Start fetching\n this.tokenFetchPromise = this.request('POST', '/v1/access_token', '', false, {\n Authorization: `Bearer ${this.store.refreshToken}`\n }).then(data => {\n\n // Store it\n this.store.token = data.access_token.token\n this.tokenFetchPromise = null\n\n }).catch(err => {\n\n // Failed to fetch the token! Keep throwing the error up the chain\n console.warn('Failed to fetch a fresh access token from the backend.', err)\n this.tokenFetchPromise = null\n if (err.code == '2049' || err.message.includes('Bad token')) {\n this.Blockv.UserManager.logout(true)\n }\n throw err\n\n })\n\n // Return promise\n return this.tokenFetchPromise\n\n }\n\n /**\n * Checks if the current access token is still valid and has not expired yet. If it is, it will fetch a new one.\n * @private\n * @returns {Promise} Resolves when the access token is valid.\n */\n async checkToken () {\n // define our vars\n let decodedToken\n let nowDate\n let expirationTime\n\n // Catch errors with decoding the current access token\n try {\n decodedToken = jwtDecode(this.store.token)\n expirationTime = (decodedToken.exp * 1000)\n nowDate = Date.now()\n\n // quick calc to determine if the token has expired\n if ((nowDate + 5000) > expirationTime) throw new Error('Token expired.')\n } catch (e) {\n // There was an error with the access token. Fetch a new one.\n return this.refreshToken()\n }\n\n // Done\n return true\n }\n}\n","\"use strict\";\n\nvar assert = require('@brillout/assert');\n\nvar fetch;\n\nif( isBrowser() ) {\n assert.usage(\n window.fetch!==undefined,\n [\n \"This browser doesn't support `fetch` (`window.fetch===undefined`).\",\n \"Is this running in Internet Explorer?\",\n \"Note that the `@brillout/fetch` library doesn't support IE. If you want to support IE then use another fetch library.\"\n ].join('\\n')\n );\n fetch = window.fetch.bind(window);\n} else {\n // We use `eval('require')` instead of `require` to\n // make sure that webpack doesn't bundle `node-fetch`.\n fetch = eval('require')('node-fetch');\n}\n\nmodule.exports = fetch;\n\nfunction isBrowser() {\n return typeof window !== \"undefined\";\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport EventEmitter from '../../internal/EventEmitter'\r\n\r\nexport default class WebSockets extends EventEmitter {\r\n constructor (store, client, address) {\r\n super()\r\n this.store = store\r\n this.client = client\r\n this.address = address\r\n\r\n /** The WebSocket connection */\r\n this.socket = null\r\n\r\n /** Time until the next retry */\r\n this.delayTime = 1000\r\n\r\n /** If true, the websocket will continue to retry the connection if it fails */\r\n this.shouldRetry = false\r\n }\r\n\r\n /** This will be true if the connection is ready to send and receive messages */\r\n get isOpen () {\r\n return this.socket && this.socket.readyState === 1\r\n }\r\n\r\n /**\r\n * The connect function establishes a connection to the WebSocket.\r\n * @public\r\n * @return {Promise<WebSockets>}\r\n */\r\n async connect () {\r\n // Stay connected after this point\r\n this.shouldRetry = true\r\n\r\n // if the websocket is connected or connecting already, then stop\r\n if (this.socket) {\r\n return this\r\n }\r\n\r\n // before we connect, make sure the token is valid, or else retry again soon\r\n try {\r\n await this.client.checkToken()\r\n } catch (err) {\r\n console.warn('WebSocket unable to get client token! Will retry soon...')\r\n this.retryConnection()\r\n return this\r\n }\r\n\r\n // if the websocket is connected or connecting already, then stop\r\n if (this.socket) {\r\n return this\r\n }\r\n\r\n // Create the websocket\r\n const url = `${this.address}/ws?app_id=${encodeURIComponent(this.store.appID)}&token=${encodeURIComponent(this.store.token)}`\r\n this.socket = new WebSocket(url)\r\n this.socket.addEventListener('open', this.handleConnected.bind(this))\r\n this.socket.addEventListener('message', this.handleMessage.bind(this))\r\n this.socket.addEventListener('error', this.handleError.bind(this))\r\n this.socket.addEventListener('close', this.handleClose.bind(this))\r\n\r\n // Done\r\n return this\r\n }\r\n\r\n /**\r\n * This sends a message through the web socket\r\n * @param {*} cmd\r\n */\r\n sendMessage (cmd) {\r\n if (this.socket && this.socket.readyState === 1) {\r\n this.socket.send(JSON.stringify(cmd))\r\n } else {\r\n console.warn('WebSocket: Attempted to send message up, but the socket is not ready.')\r\n }\r\n }\r\n\r\n /**\r\n * The handleMessage function allows the different types of messages to be returned:\r\n * stateUpdate, inventory, activity, and, info.\r\n * @private\r\n * @param {JSON<Object>} e A JSON Object that is passed into the function from connect()\r\n * @return {JSON<Object>} A JSON Object is returned containing the list of chosen message types\r\n */\r\n handleMessage (e) {\r\n const ed = JSON.parse(e.data)\r\n this.trigger('websocket.raw', ed)\r\n\r\n // if the message is a RPC message\r\n if (ed.msg_type === 'rpc') {\r\n this.trigger('websocket.rpc', ed)\r\n }\r\n // if the user only wants state updates\r\n if (ed.msg_type === 'state_update') {\r\n this.trigger('stateUpdate', ed)\r\n }\r\n\r\n // if the user only wants inventory updates\r\n if (ed.msg_type === 'inventory') {\r\n this.trigger('inventory', ed)\r\n }\r\n\r\n // if the user only wants activity updates\r\n if (ed.msg_type === 'my_events') {\r\n this.trigger('activity', ed)\r\n }\r\n\r\n // if the user only wants info updates\r\n if (ed.msg_type === 'info') {\r\n this.trigger('info', ed)\r\n }\r\n\r\n if (ed) {\r\n this.trigger('all', ed)\r\n }\r\n }\r\n\r\n /**\r\n * Lets the User know that the connection is connected\r\n * @private\r\n * @param {Event<SocketStatus>} e no need for inputting the parameter\r\n * @return {Function<connected>} triggers the connected function\r\n */\r\n handleConnected (e) {\r\n this.delayTime = 1000\r\n this.trigger('connected', e)\r\n }\r\n\r\n /**\r\n * When the connection drops or the Websocket is closed.\r\n * This function will auto-retry connection until successfully connected\r\n * @private\r\n * @return {Promise<WebSockets>} returns the connection function\r\n */\r\n retryConnection () {\r\n // Clear previous retry timer\r\n if (this.retryTimer) {\r\n clearTimeout(this.retryTimer)\r\n }\r\n\r\n // Create a new retry timer\r\n this.retryTimer = setTimeout(() => {\r\n // Clear timer\r\n this.retryTimer = null\r\n\r\n // Check if we want to be connected\r\n if (!this.shouldRetry) {\r\n return\r\n }\r\n\r\n // Increase retry delay for next time\r\n if (this.delayTime < 8000) {\r\n this.delayTime *= 2\r\n }\r\n\r\n // connect again\r\n this.connect()\r\n }, this.delayTime)\r\n }\r\n\r\n /**\r\n * Handles the Web socket error event. We don't need to retry, because handleClose is also called on errors.\r\n * @private\r\n * @param {Error} err The error that happened\r\n */\r\n handleError (err) {\r\n this.socket = null\r\n console.warn('[WebSocket] Connection failed: ' + err.message)\r\n }\r\n\r\n /**\r\n * Handles the Web socket close event\r\n * @private\r\n * @param {Event} e no need for inputting, It is a Websocket Event\r\n */\r\n handleClose () {\r\n this.socket = null\r\n this.retryConnection()\r\n }\r\n\r\n /**\r\n * @public\r\n * Forcefully closes the Web socket.\r\n Note: Socket will be set to null. Auto connect will be disabled.\r\n */\r\n close () {\r\n // Prevent retrying\r\n this.shouldRetry = false\r\n\r\n // Cancel retry timer if there is one\r\n if (this.retryTimer) {\r\n clearTimeout(this.retryTimer)\r\n this.retryTimer = null\r\n }\r\n\r\n // Close socket if it's open\r\n if (this.socket) {\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n}\r\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","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}","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","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\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 */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\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) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = now\n\nfunction now() {\n return new Date().getTime()\n}\n","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport DataObject from '../DataObject'\r\n/**\r\n * This region plugin provides access to the current user's inventory.\r\n *\r\n * To get an instance, call `DataPool.region('inventory')`\r\n */\r\nexport default class InventoryRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'inventory' }\r\n\r\n /** Constructor */\r\n constructor (dataPool) {\r\n super(dataPool)\r\n // Make sure we have a valid current user\r\n if (!this.dataPool.sessionInfo || !this.dataPool.sessionInfo.userID) {\r\n throw new Error('You cannot query the inventory region without being logged in.')\r\n }\r\n // Store current user ID\r\n this.currentUserID = this.dataPool.sessionInfo.userID\r\n }\r\n\r\n /** Our state key is the current user's ID */\r\n get stateKey () {\r\n return 'inventory:' + this.currentUserID\r\n }\r\n\r\n /** There should only be one inventory region */\r\n matches (id, descriptor) {\r\n return id === 'inventory'\r\n }\r\n\r\n /** Shut down this region if the current user changes */\r\n onSessionInfoChanged () {\r\n this.close()\r\n }\r\n\r\n /** \r\n * Load current state from the server. The process is as follows:\r\n * \r\n * 1. Call /hash API to get the current inventory hash, if it matches our local copy then stop.\r\n * 2. Call /sync API to fetch all vatom sync numbers\r\n * 3. For all vatoms in our db which is not returned by /sync, remove\r\n * 4. For all vatoms which are not in our dbb, or whose sync number is different, fetch via individual GET (batched)\r\n * \r\n * If at any point the above process throws an error, fall back to the old approach:\r\n * \r\n * 1. Fetch all vatoms from the /inventory API\r\n * 2. For any vatoms in our db not returned by /inventory, remove\r\n * \r\n */\r\n async load () {\r\n\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n let ids = null\r\n try {\r\n\r\n // Load via new method\r\n ids = await this.loadNew()\r\n\r\n } catch (err) {\r\n\r\n // Failed! Try via the old method\r\n console.warn('[DataPool > InventoryRegion] Unable to sync via the new method! Attempting the old method now. Reason:', err)\r\n ids = await this.loadOld()\r\n\r\n }\r\n\r\n // Resume websocket events\r\n this.resumeMessages()\r\n return ids\r\n\r\n }\r\n\r\n async loadNew() {\r\n\r\n // Check SDK config to see if the new sync method is disabled\r\n if (this.dataPool.disableSyncV2)\r\n throw new Error('V2 synchronization algorithm is disabled in the config.')\r\n\r\n // Stop if no vatoms\r\n if (!Array.from(this.objects.values()).find(obj => obj.type == 'vatom'))\r\n throw new Error(`V2 synchronization is disabled if the inventory is empty, since it's faster to use the old method for initial sync.`)\r\n\r\n // Get current inventory hash and compare with server's\r\n let currentHash = this.objects.getExtra('hash')\r\n let serverHashReq = await this.dataPool.Blockv.client.request('GET', '/v1/user/vatom/inventory/hash', null, true)\r\n if (!serverHashReq.hash)\r\n throw new Error('The server did not return a hash for our current inventory.')\r\n if (currentHash && currentHash == serverHashReq.hash)\r\n return console.log('[DataPool > InventoryRegion] Sync complete, our hash matches the server, no changes needed.')\r\n\r\n // We are not in sync with the server. Fetch all vatom IDs and their sync numbers\r\n var allSyncs = []\r\n var page = 0\r\n var nextToken = null\r\n while (true) {\r\n\r\n // Fetch next page of IDs\r\n page += 1\r\n console.log(`[DataPool > InventoryRegion] Fetching page ${page} of sync statuses...`)\r\n let res = await this.dataPool.Blockv.client.request('GET', '/v1/user/vatom/inventory/index?limit=1000' + (nextToken ? `&next_token=${nextToken}` : ''), null, true)\r\n\r\n // Add to array\r\n allSyncs = allSyncs.concat(res.vatoms || [])\r\n\r\n // Get next token\r\n nextToken = res.next_token\r\n if (!nextToken)\r\n break\r\n\r\n }\r\n\r\n // Remove vatoms which are no longer here\r\n let keysToRemove = Array.from(this.objects.values()).filter(obj => obj.type == 'vatom' && !allSyncs.find(sync => sync.id == obj.id)).map(obj => obj.id)\r\n this.removeObjects(keysToRemove)\r\n if (keysToRemove.length > 0)\r\n console.log(`DataPool > InventoryRegion] Removed ${keysToRemove.length} vatoms which are no longer in the inventory`)\r\n\r\n // Check which vatoms are out of sync\r\n var idsToFetch = []\r\n for (let syncInfo of allSyncs) {\r\n\r\n // Get local vatom\r\n let vatom = this.getItem(syncInfo.id, false)\r\n if (!vatom || vatom.sync != syncInfo.sync)\r\n idsToFetch.push(syncInfo.id)\r\n\r\n }\r\n\r\n // Fetch vatoms in bulk\r\n let VatomsPerPage = 100\r\n let remainingIds = idsToFetch\r\n while (remainingIds.length > 0) {\r\n\r\n // Fetch next 100 vatoms\r\n let ids = remainingIds.slice(0, VatomsPerPage)\r\n remainingIds = remainingIds.slice(VatomsPerPage)\r\n console.log(`[DataPool > InventoryRegion] Fetching ${ids.length} updates, ${remainingIds.length} vatoms left...`)\r\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids }, true)\r\n\r\n // Create list of new objects\r\n let newObjects = []\r\n\r\n // Add vatoms to the list\r\n for (let v of response.vatoms)\r\n newObjects.push(new DataObject('vatom', v.id, v))\r\n\r\n // Add faces to the list\r\n for (let f of response.faces)\r\n newObjects.push(new DataObject('face', f.id, f))\r\n\r\n // Add actions to the list\r\n for (let a of response.actions)\r\n newObjects.push(new DataObject('action', a.name, a))\r\n\r\n // Update the pool\r\n this.addObjects(newObjects)\r\n\r\n }\r\n\r\n // Done! Store the inventory hash for next sync\r\n this.objects.setExtra('hash', serverHashReq.hash)\r\n console.log(`[DataPool > InventoryRegion] Sync complete! We fetched ${idsToFetch.length} vatoms, and removed ${keysToRemove.length} vatoms.`)\r\n\r\n }\r\n\r\n async loadOld() {\r\n\r\n // Go through all pages on the server, we want _everything_\r\n let pageCount = 1\r\n let loadedIDs = []\r\n while (true) {\r\n // Fetch all vatoms the user owns, via a Discover call\r\n console.debug(`[DataPool > InventoryRegion] Fetching owned vatoms, page ${pageCount}...`)\r\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/inventory', { \r\n parent_id: \"*\",\r\n limit: 1000,\r\n page: pageCount\r\n }, true)\r\n\r\n // Create list of new objects\r\n let newObjects = []\r\n\r\n // Add vatoms to the list\r\n for (let v of response.vatoms) {\r\n loadedIDs.push(v.id)\r\n newObjects.push(new DataObject('vatom', v.id, v))\r\n }\r\n\r\n // Add faces to the list\r\n for (let f of response.faces) {\r\n loadedIDs.push(f.id)\r\n newObjects.push(new DataObject('face', f.id, f))\r\n }\r\n\r\n // Add actions to the list\r\n for (let a of response.actions) {\r\n loadedIDs.push(a.name)\r\n newObjects.push(new DataObject('action', a.name, a))\r\n }\r\n // Update the pool\r\n this.addObjects(newObjects)\r\n\r\n // Increase page index for next iteration\r\n pageCount += 1\r\n\r\n // Stop if no items were returned\r\n if (newObjects.length === 0) {\r\n break\r\n }\r\n }\r\n\r\n // Return array of all items\r\n return loadedIDs\r\n }\r\n\r\n /** @override Called on WebSocket message. */\r\n async processMessage (msg) {\r\n // Call super\r\n super.processMessage(msg)\r\n // We only handle inventory update messages after this.\r\n if (msg.msg_type !== 'inventory') {\r\n return\r\n }\r\n\r\n // Get vatom ID\r\n let vatomID = msg.payload && msg.payload.id\r\n if (!vatomID) {\r\n return console.warn(`[DataPool > BVWebSocketRegion] Got websocket message with no vatom ID in it: `, msg)\r\n }\r\n // Check if this is an incoming or outgoing vatom\r\n if (msg.payload.old_owner === this.currentUserID && msg.payload.new_owner !== this.currentUserID) {\r\n // Vatom is no longer owned by us\r\n this.removeObjects([vatomID])\r\n } else if (msg.payload.old_owner !== this.currentUserID && msg.payload.new_owner === this.currentUserID) {\r\n\r\n // Vatom is now our inventory! Fetch vatom payload\r\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [vatomID] }, true)\r\n \r\n // Add vatom to new objects list\r\n let objects = []\r\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(v => objects.push(v))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n // Add new objects\r\n this.addObjects(objects)\r\n } else {\r\n // Logic error, old owner and new owner cannot be the same\r\n console.warn(`[DataPool > BVWebSocketRegion] Logic error in WebSocket message, old_owner and new_owner shouldn't be the same: ${vatomRef.id}`)\r\n }\r\n }\r\n\r\n /** \r\n * Override the get() function to not return vatoms with a different owner. This can happen during a preemptive transfer,\r\n * where the vatom is given a new owner ID but not removed entirely from this region. The host app should still see it as removed though.\r\n */\r\n get(waitUntilStable = true) {\r\n\r\n // Pass on if we should wait\r\n if (waitUntilStable)\r\n return super.get(true)\r\n\r\n // Filter array of vatoms\r\n return super.get(false).filter(v => v.properties.owner == this.currentUserID)\r\n\r\n }\r\n\r\n // When a preemptive change occurs, clear our stored hash so that the next inventory refresh will query with the server.\r\n // Normally this should not be needed since the hash on the server should change as well, but sometimes if an action fails\r\n // and we fail to rollback the DB we'll be stuck with an outdated vatom.\r\n willAdd (object) {\r\n super.willAdd(object)\r\n this.onObjectPreemptivelyChanged(object) \r\n }\r\n \r\n willUpdateFields (object, newData) {\r\n super.willUpdateFields(object, newData)\r\n this.onObjectPreemptivelyChanged(object) \r\n }\r\n\r\n willUpdateField (object, keyPath, oldValue, newValue) {\r\n super.willUpdateField(object, keyPath, oldValue, newValue)\r\n this.onObjectPreemptivelyChanged(object)\r\n }\r\n \r\n willRemove (objectOrID) {\r\n super.willRemove(objectOrID)\r\n this.objects.setExtra('hash', '')\r\n }\r\n \r\n onObjectPreemptivelyChanged(object) {\r\n\r\n // Update object's sync # so that on the next refresh we fetch it's state from the server.\r\n object.data.sync = -1\r\n\r\n // Clear our hash\r\n this.objects.setExtra('hash', '')\r\n\r\n }\r\n\r\n}\r\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport DataObject from '../DataObject'\r\n\r\n/**\r\n * This region plugin provides access to a collection of vatoms identified by their IDs.\r\n * The 'inventory' region is much mor reliable, so if you know that your vatoms are owned bby the current user,\r\n * use the inventory region with a filter rather.\r\n *\r\n * TODO: Retry a few times\r\n *\r\n * To get an instance, call `DataPool.region('ids', [\"id1\", \"id2\"])`\r\n */\r\nexport default class VatomIDRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'ids' }\r\n\r\n /** Constructor */\r\n constructor (dataPool, ids) {\r\n super(dataPool)\r\n \r\n // Don't cache this content\r\n this.noCache = true\r\n\r\n // Store IDs. Sort them to keep our stateKey in check.\r\n this.ids = ids.sort()\r\n }\r\n\r\n /** Our state key is the list of IDs */\r\n get stateKey () {\r\n return 'ids:' + this.ids.join(',')\r\n }\r\n\r\n /** Check if a region request matches our region */\r\n matches (id, descriptor) {\r\n // Check all filters match\r\n if (id !== 'ids') return false\r\n if (!descriptor || descriptor.length !== this.ids.length) return false\r\n for (let i = 0; i < this.ids.length; i++) {\r\n if (descriptor[i] !== this.ids[i]) {\r\n return false\r\n }\r\n }\r\n\r\n // Yes they do\r\n return true\r\n }\r\n\r\n /** Load current state from the server */\r\n async load () {\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n // Fetch data\r\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: this.ids }, true)\r\n\r\n // Add vatom to new objects list\r\n let objects = []\r\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n\r\n // Add new objects\r\n this.addObjects(objects)\r\n\r\n // Resume websocket messages\r\n this.resumeMessages()\r\n\r\n // Return array of IDs\r\n return objects.map(o => o.id)\r\n }\r\n}\r\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport Discover from '../../../client/Discover'\r\nimport DataObject from '../DataObject'\r\n\r\n/**\r\n * This region plugin provides access to a collection of vatoms that are children of another vatom.\r\n * The 'inventory' region is much mor reliable, so if you know that your vatoms are owned by the current user,\r\n * use the inventory region with a filter rather.\r\n *\r\n * To get an instance, call `DataPool.region('children', \"parent-id\")`\r\n */\r\nexport default class VatomChildrenRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'children' }\r\n\r\n /** Constructor */\r\n constructor (dataPool, parentID) {\r\n super(dataPool)\r\n \r\n // Don't cache this content\r\n this.noCache = true\r\n\r\n // Store ID\r\n this.parentID = parentID\r\n }\r\n\r\n /** Our state key is the list of IDs */\r\n get stateKey () {\r\n return 'children:' + this.parentID\r\n }\r\n\r\n /** Check if a region request matches our region */\r\n matches (id, descriptor) {\r\n return id === 'children' && descriptor === this.parentID\r\n }\r\n\r\n /** Load current state from the server */\r\n async load () {\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n // Fetch data\r\n let payload = new Discover().setScope(Discover.FieldParentID, this.parentID).getPayload()\r\n let response = await this.dataPool.Blockv.client.request('POST', '/vatom/discover', payload, true)\r\n\r\n // Add vatom to new objects list\r\n let objects = []\r\n response.results.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n\r\n // Add new objects\r\n this.addObjects(objects)\r\n\r\n // Resume websocket messages\r\n this.resumeMessages()\r\n\r\n // Return array of IDs\r\n return objects.map(o => o.id)\r\n }\r\n}\r\n","/* gloabl Events */\nimport BLOCKvRegion from './BLOCKvRegion'\nimport DataObject from '../DataObject'\nimport Events from '../EventEmitter'\n\n/**\n * This region plugin provides access to a collection of vatoms that has been dropped within the specified region on the map.\n *\n * To get an instance, call `DataPool.region('geopos', { top_right: { lat: ..., lon: ... }, bottom_left: { lat: ..., lon: ... } })`\n */\nexport default class GeoPosRegion extends BLOCKvRegion {\n /** Plugin ID */\n static get id () { return 'geopos' }\n\n /** Constructor */\n constructor (dataPool, coordinates) {\n super(dataPool)\n // Don't cache this content\n this.noCache = true\n\n // Fail if coordinates are invalid\n if (!coordinates || !coordinates.top_right || !coordinates.top_right.lat || !coordinates.top_right.lon || !coordinates.bottom_left || !coordinates.bottom_left.lat || !coordinates.bottom_left.lon) {\n throw new Error('Please specify the top_right and bottom_left coordinates in the region descriptor.')\n }\n\n // Store coordinates\n this.coordinates = coordinates\n\n // Send region command to the WebSocket\n this.sendRegionCommand()\n\n // Listen for events\n this.onWebSocketOpen = this.onWebSocketOpen.bind(this)\n this.socket.addEventListener('connected', this.onWebSocketOpen)\n }\n\n /** Called when this region is going to be shut down */\n close () {\n super.close()\n\n // Remove listeners\n this.socket.removeEventListener('connected', this.onWebSocketOpen)\n }\n\n /** Called when the WebSocket connection re-opens */\n onWebSocketOpen () {\n this.sendRegionCommand()\n }\n\n /** Sends the region command up the websocket to enable region monitoring */\n sendRegionCommand () {\n\n // Stop if WebSocket is not connected\n if (!this.socket.isOpen)\n return\n\n // Convert our coordinates into the ones needed by the command\n let topLeft = {\n lat: Math.max(this.coordinates.top_right.lat, this.coordinates.bottom_left.lat),\n lon: Math.min(this.coordinates.top_right.lon, this.coordinates.bottom_left.lon)\n }\n let bottomRight = {\n lat: Math.min(this.coordinates.top_right.lat, this.coordinates.bottom_left.lat),\n lon: Math.max(this.coordinates.top_right.lon, this.coordinates.bottom_left.lon)\n }\n\n // Create command payload\n let cmd = {\n id: '1',\n version: '1',\n type: 'command',\n cmd: 'monitor',\n payload: {\n top_left: topLeft,\n bottom_right: bottomRight\n }\n }\n\n // Send it up\n console.log('Sending WS command: ' + JSON.stringify(cmd))\n this.dataPool.Blockv.WebSockets.sendMessage(cmd)\n }\n\n /**\n * Returns true if the object with the specified ID exists in the cache.\n *\n * @param {*} id The object's ID\n * @returns {boolean} True if the object exists.\n */\n has (id) {\n if(!super.has(id))\n return false\n \n let object = this.objects.get(id)\n\n // Check if dropped\n if (object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].dropped) {\n return true\n }\n }\n /** Our state key is the region */\n get stateKey () {\n return 'geopos:' + this.coordinates.top_right.lat + ',' + this.coordinates.top_right.lon + ' ' + this.coordinates.bottom_left.lat + ',' + this.coordinates.bottom_left.lon\n }\n\n /** Check if a region request matches our region */\n matches (id, descriptor) {\n // Check all filters match\n if (id !== 'geopos') return false\n if (!descriptor || !descriptor.top_right || !descriptor.bottom_left) return false\n if (descriptor.top_right.lat !== this.coordinates.top_right.lat) return false\n if (descriptor.top_right.lon !== this.coordinates.top_right.lon) return false\n if (descriptor.bottom_left.lat !== this.coordinates.bottom_left.lat) return false\n if (descriptor.bottom_left.lon !== this.coordinates.bottom_left.lon) return false\n\n // Yes they do\n return true\n }\n\n /** Load current state from the server */\n async load () {\n // Pause websocket events\n this.pauseMessages()\n\n let payload = {\n top_right: this.coordinates.top_right,\n bottom_left: this.coordinates.bottom_left,\n filter: 'all',\n limit: 10000\n }\n\n if (this.coordinates.publisher_fqdn)\n payload['publisher_fqdn'] = this.coordinates.publisher_fqdn\n // Fetch data\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/geodiscover', payload, true)\n\n // Add vatom to new objects list\n let objects = []\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n\n // Add new objects\n this.addObjects(objects)\n\n // Resume websocket messages\n this.resumeMessages()\n\n // Return array of IDs\n return objects.map(o => o.id)\n }\n\n /** This region type should not be cached */\n save () {}\n\n /** Don't return vatoms which are not dropped */\n map (object) {\n if(this.coordinates.publisher_fqdn && object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].publisher_fqdn !== this.coordinates.publisher_fqdn)\n return null\n \n // Check if dropped\n if (object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].dropped) {\n return super.map(object)\n }\n // Vatom is not dropped!\n return null\n }\n\n /**\n * Processes a WebSocket message.\n *\n * @private Called by BVWebSocketRegion.\n * @abstract Subclasses can override to process other WebSocket messages. Always call super.processMessage(msg) though.\n * @param {Object} msg The raw JSON from the websocket event message\n */\n async processMessage(msg) {\n super.processMessage(msg)\n\n // Check for map add event\n if (msg.msg_type === 'map' && msg.payload.op === 'add') {\n\n // A vatom was added to the map. Fetch vatom, add components to data pool\n let objects = []\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [msg.payload.vatom_id] }, true)\n let vatom = new DataObject('vatom', response.vatoms[0].id, response.vatoms[0])\n objects.push(vatom)\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n this.addObjects(objects)\n return\n\n } else if (msg.msg_type === 'map' && msg.payload.op === 'remove') {\n\n // A vatom was removed from the map. Undrop it\n this.preemptiveChange(msg.payload.vatom_id, 'vAtom::vAtomType.dropped', false)\n return\n\n } else if (msg.msg_type == 'state_update') {\n\n // Get vatom ID\n let vatomID = msg.payload && msg.payload.id\n if (!vatomID) {\n throw new Error(`Got websocket message with no vatom ID in it.`)\n }\n\n // Check if this is a newly dropped vatom\n let dropped = msg.payload.new_object && msg.payload.new_object['vAtom::vAtomType'] && msg.payload.new_object['vAtom::vAtomType'].dropped\n if (!dropped) {\n return\n }\n\n // Check if we already have this vatom\n if (this.objects.get(vatomID)) {\n return\n }\n\n // A new vatom was dropped! Pause WebSocket message processing\n this.pauseMessages()\n\n // Fetch vatom payload\n this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [vatomID] }, true).then(response => {\n // Add vatom to new objects list\n let objects = []\n objects.push(new DataObject('vatom', response.vatoms[0].id, response.vatoms[0]))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n\n // Add new objects\n this.addObjects(objects)\n }).catch(err => {\n // Log it\n console.warn(`[DataPool > GeoPosRegion] A vatom was dropped, but we could not fetch it's payload! ` + err.message)\n }).then(e => {\n // Resume message processing\n this.resumeMessages()\n })\n\n }\n }\n}\n","var atob = require('./atob');\n\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {\n var code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n}\n\nmodule.exports = function(str) {\n var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw \"Illegal base64url string!\";\n }\n\n try{\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n};\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction polyfill (input) {\n var str = String(input).replace(/=+$/, '');\n if (str.length % 4 == 1) {\n throw new InvalidCharacterError(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (\n // initialize result and counters\n var bc = 0, bs, buffer, idx = 0, output = '';\n // get next character\n buffer = str.charAt(idx++);\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n}\n\n\nmodule.exports = typeof window !== 'undefined' && window.atob && window.atob.bind(window) || polyfill;\n","const assert = require('./assert');\nconst assert_internal = require('./internal');\nconst assert_usage = require('./usage');\nconst assert_warning = require('./warning');\nconst log = require('./log');\n\nmodule.exports = assert;\nmodule.exports.internal = assert_internal;\nmodule.exports.usage = assert_usage;\nmodule.exports.warning = assert_warning;\nmodule.exports.log = log;\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_warning: true,\n });\n return assert.apply(this, args);\n};\n","var logify_input = require('./log').logify_input;\nvar titleFormat = require('@brillout/format-text').titleFormat;\nvar isNodejs = require('./utils/isNodejs');\n\nvar option_keys = {\n is_warning: 'is_warning',\n is_usage: 'is_usage',\n is_internal: 'is_internal',\n details: 'details',\n};\n\nmodule.exports = reassert;\n\nfunction reassert(condition) {\n // assert\n if( condition ) {\n return condition;\n }\n\n // parse arguments\n var parsed = parseArguments([].slice.call(arguments, 1));\n var msgs = parsed.msgs;\n var opts = parsed.opts;\n\n var callStack = getCallStack();\n\n // build error message\n var message = getErrorMessage(condition, msgs, opts, callStack);\n\n // throw logic\n throwError(message, opts, callStack);\n\n // convenience to write code like `if( ! require('reassert/soft')(condition) ) return;`\n return condition;\n}\n\nfunction parseArguments(args) {\n var msgs = [];\n var opts = {};\n for(var i in args) {\n var arg = args[i];\n var is_option_arg = arg && arg.IS_REASSERT_OPTS;\n if( is_option_arg ) {\n for(var j in arg) {\n if( !option_keys[j] && j!=='IS_REASSERT_OPTS' ) {\n var msg = 'Unkonwn option `'+j+'`';\n throw new Error('Reassert: [Internal Error]: '+msg);\n }\n opts[j] = arg[j];\n }\n } else {\n msgs.push(arg);\n }\n }\n\n return {msgs: msgs, opts: opts};\n}\n\nfunction getErrorMessage(condition, msgs, opts, callStack) {\n var message = [];\n\n message = message.concat(getErrorDetailsMessage(opts));\n\n if( ! is_browser() ) {\n message = message.concat(getStackMessage(opts, msgs, callStack));\n message.push('\\n');\n }\n\n message = message.concat(getErrorSummaryMessage(condition, msgs, opts));\n\n return message;\n}\nfunction getErrorSummaryMessage(condition, msgs, opts) {\n let message = [];\n\n var title = (\n opts[option_keys.is_warning] && 'Warning' ||\n opts[option_keys.is_usage] && 'Wrong Usage' ||\n opts[option_keys.is_internal] && 'Internal Error' ||\n 'Assertion Fail'\n );\n\n message.push(titleFormat(title));\n\n if( msgs.length===0 ) {\n message.push('Failed assertion condition: `'+condition+' != true`');\n }\n\n for(var i in msgs) {\n var msg = msgs[i];\n var str = logify_input(msg);\n\n message.push(str);\n }\n\n if( opts.details ) {\n message.push('');\n message.push('See \"Error Details\" above for more information.');\n }\n\n return message;\n}\nfunction getStackMessage(opts, msgs, callStack) {\n if( opts[option_keys.is_warning] && msgs.length>0 ) {\n return [];\n }\n\n /*\n // Without this Node.js adds a `[` and a `]` to the error string\n var niceFormattingPrefix = 'Error\\n at:';\n */\n\n return [\n // niceFormattingPrefix,\n titleFormat('Stack Trace'),\n callStack.join('\\n')\n ];\n}\nfunction getErrorDetailsMessage(opts) {\n if( ! opts.details ) {\n return [];\n }\n\n var message = [\n titleFormat('Error Details')\n ];\n\n for(var i in opts.details) {\n message.push(logify_input(opts.details[i]));\n }\n\n message.push('\\n');\n\n return message;\n}\n\nfunction throwError(message, opts, callStack) {\n var interupt_execution = !opts[option_keys.is_warning];\n\n if( isNodejs() ) {\n if( interupt_execution ) {\n var err = new Error();\n err.stack = message.join('\\n');\n throw err;\n } else {\n for(var i in message) console.error(message[i]);\n }\n }\n\n if( is_browser() ) {\n if( interupt_execution ) {\n throw__browser(message);\n } else {\n setTimeout(function() {\n throw__browser(message);\n }, 0);\n }\n }\n}\n\nfunction throw__browser(message) {\n for(var i in message) console.error(message[i]);\n Error.stackTraceLimit = Infinity;\n throw new Error();\n}\n\nfunction getCallStack() {\n var stackTraceLimit__original = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n var callStackString = new Error().stack;\n Error.stackTraceLimit = stackTraceLimit__original;\n\n var lines = callStackString.split('\\n');\n\n var lines__filtered = [];\n for(var i in lines) {\n var line = lines[i];\n if( line === 'Error' ) {\n continue;\n }\n if( line.indexOf('/node_modules/reassert/') !== -1 ) {\n continue;\n }\n if( line.indexOf(' (internal/') !== -1 ) {\n continue;\n }\n // line = line.replace(/^ */, '');\n // line = line.replace(/^at */, ' ');\n lines__filtered.push(line);\n }\n\n var callStack = lines__filtered;\n return callStack;\n}\n\n/* TODO - reimplement soft errors\n\n // determine whether we are in production\n var prod = is_prod();\n\n var message = 'Assertion-Error'+(prod?'[prod]':'[dev]')+': '+condition+'!=true';\n var interupt_execution = (!prod || opts[option_keys.is_hard]) && !opts[option_keys.is_soft];\n\nfunction is_prod() {\n var prod_browser = is_browser() && window.location.hostname !== 'localhost';\n var prod_nodejs = isNodejs() && process.env['NODE_ENV'] === 'production';\n return prod_browser || prod_nodejs;\n}\n*/\n\nfunction is_browser() {\n return typeof window !== \"undefined\";\n}\n","var isNodejs = require('./utils/isNodejs');\n\nlog.logify_input = logify_input;\n\nmodule.exports = log;\n\nvar project_name = 'Reassert';\nvar stringification_name = '(Reassert-stringification)';\n\nfunction log() {\n for(var i in arguments) {\n var input = arguments[i];\n var str = logify_input(input);\n console.log(str);\n }\n}\n\nfunction logify_input(input) {\n var str = get_str(input);\n\n // We cap huge strings to make scrolling not impossible\n var LIMIT = 10000;\n if( str && str.length > LIMIT ) {\n return str.slice(0, LIMIT)+'[CROPPED-BY-REASSERT]';\n }\n\n return str;\n}\n\nfunction get_str(input) {\n if( ! input ) {\n return input;\n }\n\n if( input.constructor === Array ) {\n return stringify_object(input);\n }\n\n var PREFIX_UGLY = '[object ';\n var input_str = toStr(input);\n if( input_str.slice(0, PREFIX_UGLY.length) === PREFIX_UGLY ) {\n return stringify_object(input);\n }\n return input_str;\n}\n\nfunction stringify_object(obj) {\n var obj_copy = get_prettier_copy(obj);\n try {\n return JSON.stringify(obj_copy, null, 2);\n } catch(e) {\n if( isNodejs() ) {\n var util = require('util');\n return util.inspect(obj);\n }\n return toStr(obj_copy)+'['+e+'][Error]'+stringification_name;\n }\n}\n\nfunction get_prettier_copy(el, parent_objects=[]) {\n if( ! (el instanceof Object) ) {\n return el;\n }\n\n if( el instanceof RegExp ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = '[RegExp: '+toStr(el)+']';\n return str;\n };\n }\n return el;\n }\n if( el instanceof Function ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = (\n ! el.name ? (\n '[Function]'\n ) : (\n '[Function: '+el.name+']'\n )\n );\n return str;\n };\n }\n return el;\n }\n\n if( el.constructor !== Object && el.constructor !== Array ) {\n return el;\n }\n\n if( parent_objects.includes(el) ) {\n return '[ALREADY_PRINTED_COPY]';\n }\n parent_objects = [el, ...parent_objects];\n\n var el_copy = new (el.constructor);\n for(var key in el) {\n el_copy[key] = get_prettier_copy(el[key], parent_objects);\n }\n return el_copy;\n}\n\nfunction toStr(thing) {\n if( typeof thing === \"object\" && !thing.toString ) {\n return '[object Object]';\n }\n return (''+thing);\n}\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\n\nmodule.exports = str => {\n\tif (typeof str !== 'string' || str.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstr = stripAnsi(str);\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst code = str.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input;\n","'use strict';\n\nmodule.exports = () => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[a-zA-Z\\\\d]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, 'g');\n};\n","'use strict';\n/* eslint-disable yoda */\nmodule.exports = x => {\n\tif (Number.isNaN(x)) {\n\t\treturn false;\n\t}\n\n\t// code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tx >= 0x1100 && (\n\t\t\tx <= 0x115f || // Hangul Jamo\n\t\t\tx === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tx === 0x232a || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= x && x <= 0x4dbf) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4e00 <= x && x <= 0xa4c6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xa960 <= x && x <= 0xa97c) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xac00 <= x && x <= 0xd7a3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xf900 <= x && x <= 0xfaff) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xfe10 <= x && x <= 0xfe19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xfe30 <= x && x <= 0xfe6b) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xff01 <= x && x <= 0xff60) ||\n\t\t\t(0xffe0 <= x && x <= 0xffe6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1b000 <= x && x <= 0x1b001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1f200 <= x && x <= 0x1f251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= x && x <= 0x3fffd)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_internal: true,\n });\n return assert.apply(this, args);\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_usage: true,\n });\n return assert.apply(this, args);\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_warning: true,\n });\n return assert.apply(this, args);\n};\n","\r\n/**\r\n * This is Version 2 of the Mempool. This version supports region monitoring, as well as timed updates.\r\n * Once this class is generic enough and the Data Pool Protocol is implemented, we can split this out into it's own npm module.\r\n *\r\n * This aims to follow what is described in https://github.com/BLOCKvIO/Data-Pool-Protocol/blob/master/Data%20Pool%20Protocol.md\r\n *\r\n */\r\nexport default class DataPool {\r\n constructor () {\r\n // Region plugins\r\n this.plugins = [\r\n require('./plugins/InventoryRegion').default,\r\n require('./plugins/VatomIDRegion').default,\r\n require('./plugins/VatomChildrenRegion').default,\r\n require('./plugins/GeoPosRegion').default\r\n ]\r\n\r\n // Currently active regions\r\n this.regions = []\r\n\r\n // Session information\r\n this.sessionInfo = {}\r\n }\r\n\r\n /**\r\n * Fetches or creates a vatom region.\r\n *\r\n * @param {string} id The plugin ID.\r\n * @param {*} descriptor Region-specific filtering information. See plugins for more info.\r\n */\r\n region (id, descriptor) {\r\n // Find existing region\r\n let region = this.regions.find(r => r.matches(id, descriptor))\r\n if (region) {\r\n return region\r\n }\r\n // We need to create a new region. Find region plugin\r\n let Region = this.plugins.find(p => p.id === id)\r\n if (!Region) {\r\n throw new Error(`Region with ID '${id}' not found.`)\r\n }\r\n // Create and store region\r\n region = new Region(this, descriptor)\r\n this.regions.push(region)\r\n\r\n // Return new region\r\n return region\r\n }\r\n\r\n /** Removes the specified region */\r\n removeRegion (region) {\r\n for (let i = 0; i < this.regions.length; i++) {\r\n if (this.regions[i] === region) {\r\n return this.regions.splice(i, 1)\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update session-specific information used by plugins.\r\n */\r\n setSessionInfo (info) {\r\n // Store it\r\n this.sessionInfo = info\r\n\r\n // Notify regions\r\n for (let r of this.regions) {\r\n r.onSessionInfoChanged(info)\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport jwtDecode from 'jwt-decode'\r\n\r\n/* global window */\r\n\r\nexport default class UserManager {\r\n constructor (UserApi, store) {\r\n this.UserApi = UserApi\r\n this.store = store\r\n }\r\n\r\n /**\r\n * An Alternate version of the register function\r\n * @param {Object} registration An Object containing all the information to register a user.\r\n * @return {Promise<Object>} returns a success Object containing user specific information\r\n */\r\n register (registration) {\r\n return this.UserApi.register(registration)\r\n }\r\n\r\n /**\r\n * Allows the user to login to the platform\r\n * @param {String} token Email / Phone Number of the user\r\n * @param {String} tokenType Description of the token : ie. \"phone_number\" or \"email\"\r\n * @param {String} password The password that the user has set\r\n * @return {Promise<Object>} returns a object containing the user that has logged in.\r\n */\r\n login (token, tokenType, password) {\r\n return this.UserApi.login(token, tokenType, password)\r\n }\r\n\r\n /**\r\n * Login with an Account without registering. A unique login string is generated by the server.\r\n * @param {String} guestId A String generated by the server used to login.\r\n * A Guest account can be made into a registered account by patching\r\n * @return {Promise<Object>} A Object that contains the guest user that was logged in.\r\n */\r\n loginGuest (guestId) {\r\n return this.UserApi.loginGuest(guestId)\r\n }\r\n\r\n /**\r\n * Logs out the currently logged in user.\r\n * @return {Promise<Object>} Logout success message\r\n */\r\n logout (noRequest = false) {\r\n return this.UserApi.logout(noRequest)\r\n }\r\n\r\n /**\r\n * Logs the user in via OAuth in a browser popup window.\r\n * NOTE: This is a private method, subject to change once more OAuth flows have been fully implemented on the backend.\r\n * @private\r\n * @returns {Promise<boolean>} `true` if login completed, or `false` if login was cancelled by the user.\r\n */\r\n loginOAuthPopup() {\r\n return this.UserApi.loginOAuthPopup()\r\n }\r\n\r\n /**\r\n * Gets information about the currently logged in user.\r\n * @return {Promise<Object>} Contains the users information such as ID, Avatar, Name etc.\r\n */\r\n getCurrentUser () {\r\n return this.UserApi.getCurrentUser()\r\n }\r\n\r\n /**\r\n * Returns a list of user tokens\r\n * @return {Promise<Object>} An Object containing a list of Email Address's and Phone Number's.\r\n */\r\n getCurrentUserTokens () {\r\n return this.UserApi.getUserTokens()\r\n }\r\n\r\n /**\r\n * Allows the uploading of a new avatar for the user.\r\n * @param {FormData} formData Uploads the FormData containing the new avatar for the user\r\n * @return {Promise<Object>} An Object containing a upload success message\r\n */\r\n uploadAvatar (formData) {\r\n return this.UserApi.uploadAvatar(formData)\r\n }\r\n\r\n /**\r\n * Allows the user to be edited\r\n * @param {Object} payload A payload containg the fields to be changed for the user.\r\n * @return {Promise<Object>} returns a user Object containing the updated users info.\r\n */\r\n updateUser (payload) {\r\n return this.UserApi.updateUser(payload)\r\n }\r\n\r\n /**\r\n * Returns the Access Token\r\n * @return {Promise<Object>} Returns a Object containing the Access Token String.\r\n */\r\n getAccessToken () {\r\n return this.UserApi.getAccessToken()\r\n }\r\n\r\n /**\r\n * Automatically Encodes the Asset Provides URI's\r\n * @param {String} url The URL that needs to be encoded\r\n */\r\n encodeAssetProvider (url) {\r\n return this.UserApi.encodeAssetProvider(url)\r\n }\r\n\r\n /**\r\n * Sends a Verification Token to verify the token is valid\r\n * @param {String} token Phone Number / Email Address\r\n * @param {String} token_type Description of the Token above ie. \"phone_number\" / \"email\"\r\n * @return {} An Email / SMS will be sent to the token with a verification code.\r\n */\r\n sendTokenVerification (token, tokenType) {\r\n return this.UserApi.sendTokenVerification(token, tokenType)\r\n }\r\n\r\n getRefreshToken () {\r\n return this.UserApi.getRefreshToken()\r\n }\r\n\r\n setRefreshToken (token) {\r\n return this.UserApi.setRefreshToken(token)\r\n }\r\n\r\n /**\r\n * Verify a users Token\r\n * @param {Object} verify An Object containing the token, token_type and the verification code.\r\n * {\"token\" : \"someone@blockv.org\", \"token_type\" : \"email\", \"verify_code\" : \"00000\" }\r\n * @return {Promise<Object>} An Object containing the outcome of the verification of the token.\r\n */\r\n verifyUserToken (verify) {\r\n return this.UserApi.verifyUserToken(verify)\r\n }\r\n\r\n /**\r\n * Allows additional tokens to be added to the user\r\n * @param {Object} payload An Object containing the tokens that need to be added to the user.\r\n * @return {Promise<Object>} An Object with the updated user profile.\r\n */\r\n addUserToken (payload) {\r\n return this.UserApi.addUserToken(payload)\r\n }\r\n\r\n /**\r\n * Sets the token to be the primary option\r\n * @param {[type]} tokenID id of the token that needs to be set as the defualt\r\n */\r\n setDefaultToken (tokenID) {\r\n return this.UserApi.setDefaultToken(tokenID)\r\n }\r\n\r\n /**\r\n * Removes a Token from the user's profile.\r\n * @param {String} tokenId ID of the token that needs to be deleted\r\n * @return {Promise<Object>} A Success / Faile object with the outcome of the deletion.\r\n */\r\n deleteUserToken (tokenId) {\r\n return this.UserApi.deleteUserToken(tokenId)\r\n }\r\n\r\n getGuestToken () {\r\n return this.UserApi.getGuestToken()\r\n }\r\n\r\n /**\r\n * Sends a verification token to the token that was supplied.\r\n * NB! this will reset the current password.\r\n * @param {String} token The Token that needs to be reset (Phone Number / Email Address)\r\n * @param {String} token_type Description of the Token to be reset\r\n */\r\n resetPassword (token, tokenType) {\r\n return this.UserApi.resetPassword(token, tokenType)\r\n }\r\n\r\n /**\r\n * Returns a Public User Profile\r\n * @param {String} userID Public User ID\r\n * @return {Promise<Object>} Returns a Public User Object\r\n */\r\n getPublicUserProfile (userID) {\r\n return this.UserApi.getPublicUserProfile(userID)\r\n }\r\n\r\n addRedeemable (payload) {\r\n return this.UserApi.addRedeemable(payload)\r\n }\r\n\r\n /**\r\n * Checked to see if the refresh token is valid\r\n * @return {Boolean} returns True / False if the refresh token is valid\r\n */\r\n get isLoggedIn () {\r\n // stop if no access provider credentials exist\r\n if (!this.store.assetProvider)\r\n return false\r\n // define our vars\r\n let decodedToken\r\n let nowDate\r\n let expirationTime\r\n const { refreshToken } = this.store\r\n // if no refreshToken\r\n if (!refreshToken) {\r\n return false\r\n }\r\n try {\r\n // decode token\r\n decodedToken = jwtDecode(refreshToken)\r\n expirationTime = (decodedToken.exp * 1000)\r\n nowDate = Date.now()\r\n // quick calc to determine if the token has expired\r\n return nowDate < (expirationTime - 30000)\r\n } catch (e) {\r\n // decoding fails\r\n return false\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n\r\nimport Vatom from '../../../../model/Vatom'\r\n\r\nexport default class VatomApi {\r\n constructor (client) {\r\n this.client = client\r\n }\r\n\r\n getActions (templateID) {\r\n return this.client.request('GET', `/v1/user/actions/${templateID}`, {}, true)\r\n .then((data) => {\r\n const len = data.length\r\n const actions = []\r\n for (let i = 0; i < len;) {\r\n const action = data[i].name.split('::Action::')\r\n actions.push(\r\n {\r\n template_id: action[0],\r\n action: action[1]\r\n }\r\n )\r\n i += 1\r\n }\r\n return actions\r\n })\r\n }\r\n\r\n performAction (action, payload) {\r\n return this.client.request('POST', `/v1/user/vatom/action/${action}`, payload, true).then(data => data.main.output)\r\n }\r\n\r\n getUserInventory (payload) {\r\n return this.client.request('POST', '/v1/user/vatom/inventory', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n if (template !== 'vatomic::v1::vAtom::Avatar') {\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n getUserVatoms (payload) {\r\n return this.client.request('POST', '/v1/user/vatom/get', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n geoDiscover (payload) {\r\n return this.client.request('POST', '/v1/vatom/geodiscover', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n geoDiscoverGroups (payload) {\r\n return this.client.request('POST', '/v1/vatom/geodiscovergroups', payload, true).then(data => data)\r\n }\r\n\r\n getVatomChildren (parentID) {\r\n return this.client.request('POST', '/v1/vatom/discover', { \r\n scope: {\r\n key: \"vAtom::vAtomType.parent_id\" ,\r\n value: parentID\r\n },\r\n return: {\r\n type: \"*\",\r\n fields: []\r\n }\r\n }, true).then(data => {\r\n const { actions, faces, results } = data\r\n const vatoms = results\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n setParent (payload) {\r\n return this.client.request('PATCH', '/v1/vatoms', payload, true).then(data => data)\r\n }\r\n\r\n trashVatom (vatomID) {\r\n const payload = {\r\n 'this.id': vatomID\r\n }\r\n return this.client.request('POST', '/v1/user/vatom/trash', payload, true).then(data => data)\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport VatomApi from '../../internal/net/rest/api/VatomApi'\r\nexport default class Vatoms {\r\n constructor (blockv) {\r\n this.Blockv = blockv\r\n this.vatomApi = new VatomApi(blockv.client)\r\n }\r\n\r\n /**\r\n * Returns a list of actions that can be performed on a template\r\n * @param {[String]} templateID Template ID is the vAtom template iD\r\n * @return {[Promise<Object>]} returns a object containing a list of available actions\r\n */\r\n\r\n getActions (templateID) {\r\n return this.vatomApi.getActions(templateID)\r\n }\r\n\r\n /**\r\n * [performAction description]\r\n * @param {String} vatomId id of the vatom to perform action\r\n * @param {String} action can be either of the following : Drop, Pickup , Transfer , Require\r\n * @param {Object} payload contains geo-coordianates or anything else sent along with vatomid\r\n * @return {Promise<Object>} json payload nested\r\n */\r\n\r\n transferTo (user, actionName = 'Transfer', vatomId) {\r\n // Check if user is a VatomUser\r\n var payload = {}\r\n if (typeof user === 'string') {\r\n // Check if string is email or phone number\r\n if (/^0x[a-fA-F0-9]{40}$/.test(user)) {\r\n // HACK: Sending to an Ethereum address, append \"Eth\" to the action name\r\n if (!actionName.startsWith('Eth')) {\r\n actionName = 'Eth' + actionName\r\n }\r\n\r\n // Use this address\r\n payload['new.owner.eth_address'] = user\r\n } else if (user.indexOf('@') !== -1) {\r\n payload['new.owner.email'] = user\r\n } else if (user.indexOf('+') === 0) {\r\n payload['new.owner.phone_number'] = user\r\n } else {\r\n payload['new.owner.id'] = user\r\n }\r\n } else {\r\n // This must be a VatomUser, fetch the identifying property\r\n if (user.userID) {\r\n payload['new.owner.id'] = user.userID\r\n } else if (user.phoneNumber) {\r\n payload['new.owner.phone_number'] = user.phoneNumber\r\n } else if (user.email) {\r\n payload['new.owner.email'] = user.email\r\n } else {\r\n return Promise.reject({ code: 'INVALID_PARAMETER', message: `The user object supplied didn't have any identifying fields. It must have either a userID, an email, or a phoneNumber.` })\r\n }\r\n }\r\n\r\n // Send request\r\n return this.performAction(vatomId, actionName, payload)\r\n }\r\n\r\n performAction (vatomId, action, payload) {\r\n let undos = []\r\n switch (action) {\r\n case 'Transfer':\r\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.owner', '.'))\r\n break\r\n\r\n case 'Drop':\r\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.geo_pos', payload))\r\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', true))\r\n break\r\n\r\n case 'Pickup':\r\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', false))\r\n break\r\n\r\n case 'Redeem':\r\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.owner', '.'))\r\n break\r\n\r\n default:\r\n break\r\n }\r\n\r\n return this.vatomApi.performAction(action, Object.assign({ 'this.id': vatomId }, payload)).catch(err => {\r\n undos.map(u => u())\r\n throw err\r\n })\r\n }\r\n\r\n /** Called to combine the specified vatom into this one. Note that some faces override the Combine action,\r\n * so in order to get those actions as well you should use `combineWith()` on `VatomView` instead. */\r\n combineWith (vatom, otherVatom) {\r\n // Pre-emptively set the parent ID\r\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(otherVatom.id, 'vAtom::vAtomType.parent_id', vatom.id)\r\n // Set parent\r\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [otherVatom.id], parent_id: vatom.id }, true).catch(err => {\r\n // Failed, reset vatom reference\r\n undo()\r\n throw err\r\n })\r\n }\r\n\r\n /** Called to remove all child vatoms from this vatom */\r\n split (vatom) {\r\n // Get vatom's parent ID\r\n let newParentID = vatom.properties.parent_id || '.'\r\n // Get all children\r\n return this.getVatomChildren(vatom.id).then(children => {\r\n // Remove parent IDs\r\n return Promise.all(children.map(child => {\r\n // Pre-emptively update parent ID\r\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(child.id, 'vAtom::vAtomType.parent_id', newParentID)\r\n // Do patch\r\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [child.id], parent_id: newParentID }, true).catch(err => {\r\n // Failed, reset vatom reference\r\n undo()\r\n throw err\r\n })\r\n }))\r\n })\r\n }\r\n\r\n /**\r\n * Gets the current users vAtom inventory\r\n * @return {Promise<Array<Object>>} return a list of JSON Objects that contain the users inventory\r\n * No parameters are required for this call\r\n */\r\n\r\n getUserInventory () {\r\n return this.Blockv.dataPool.region('inventory').get()\r\n }\r\n\r\n /**\r\n * Gets a vAtom based on the vAtom ID\r\n * @param {[String]} vatomId ID of the vAtom that is being searched for\r\n * @return {[Promise<Object>} returns a JSON Object containing the vAtom.\r\n */\r\n\r\n async getUserVatoms (vatomIds) {\r\n // Make sure it's an array\r\n if (typeof vatomIds === 'string') {\r\n vatomIds = [vatomIds]\r\n }\r\n\r\n // Load all from inventory\r\n let vatoms = []\r\n for (let id of vatomIds) {\r\n let vatom = await this.Blockv.dataPool.region('inventory').getItem(id)\r\n if (vatom) {\r\n vatoms.push(vatom)\r\n } else {\r\n break\r\n }\r\n }\r\n // If all found, stop\r\n if (vatoms.length === vatomIds.length) {\r\n return vatoms\r\n }\r\n\r\n // Not all the vatoms were in the inventory, create a new region\r\n return this.Blockv.dataPool.region('ids', vatomIds).get()\r\n }\r\n\r\n /**\r\n * Gets a list of vAtoms based on the coordinates.\r\n * @param {[Object]} bottomLeft containing a \"lat\" and \"lon\" coordinate\r\n * @param {[Object]} topRight containing a \"lat\" and \"lon\" coordinate\r\n * @param {[String]} filter defaults to \"all\"\r\n * @return {[Promise<Object>} returns a list of vAtoms, faces and actions\r\n */\r\n geoDiscover (bottomLeft, topRight, filter = 'vatoms') {\r\n const payload = {\r\n bottom_left: {\r\n lat: bottomLeft.lat,\r\n lon: bottomLeft.lon\r\n },\r\n top_right: {\r\n lat: topRight.lat,\r\n lon: topRight.lon\r\n },\r\n filter\r\n }\r\n\r\n return this.vatomApi.geoDiscover(payload)\r\n }\r\n\r\n /**\r\n * Discover groups of vAtoms with Keys\r\n * @param {Object} bottomLeft contains a lat and lon coordinate.\r\n * Coordinate must be integers and not string\r\n * @param {Object} topRight contains a lat and lon coordinate.\r\n * Coordinate must be integers and not strings\r\n * @param {Integer} precision 1 - 12 defines the accuracy of the combination.\r\n * @param {String} filter defaults to all\r\n * @return {Promise<Object>} Returns a list of groups\r\n */\r\n geoDiscoverGroups (bottomLeft, topRight, precision = 2, filter = 'all') {\r\n const payload = {\r\n bottom_left: {\r\n lat: bottomLeft.lat,\r\n lon: bottomLeft.lon\r\n },\r\n top_right: {\r\n lat: topRight.lat,\r\n lon: topRight.lon\r\n },\r\n precision,\r\n filter\r\n }\r\n\r\n return this.vatomApi.geoDiscoverGroups(payload)\r\n }\r\n\r\n /**\r\n *\r\n * @param {String} parentID ID of the vatom that you would like to list the children\r\n * @returns {Promise<Vatom[]>} Array of vatoms\r\n */\r\n getVatomChildren (parentID) {\r\n\r\n // Check if vatom is in the inventory\r\n if (this.Blockv.dataPool.region('inventory').has(parentID)) {\r\n\r\n // It is, read children from inventory region\r\n return this.Blockv.dataPool.region('inventory').get().then(children => {\r\n return children.filter(v => v.properties.parent_id === parentID)\r\n })\r\n\r\n }\r\n\r\n // Not in inventory region, read from API\r\n return this.vatomApi.getVatomChildren(parentID)\r\n \r\n }\r\n\r\n setParentID(childID, newParentID) {\r\n\r\n // Pre-emptively update parent ID\r\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(childID, 'vAtom::vAtomType.parent_id', newParentID)\r\n\r\n // Do patch\r\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [childID], parent_id: newParentID }, true).catch(err => {\r\n\r\n // Failed, reset vatom reference\r\n undo()\r\n throw err\r\n\r\n })\r\n\r\n }\r\n\r\n /**\r\n * \r\n * @param {*} vatomIds Array of vatoms that will be changed \r\n * @param {*} parentId ID or . to set the children to\r\n */\r\n setParent (payload) {\r\n let parentPayload = {\r\n ids: [payload.id],\r\n parent_id: payload.parent_id\r\n }\r\n return this.vatomApi.setParent(parentPayload)\r\n }\r\n\r\n /**\r\n * Removes the specified vAtom from the current user's inventory\r\n * @param {String} vatomID Id of the vAtom you want to remove\r\n * @return {Promise<Object>} An object containing a success message\r\n */\r\n trashVatom (vatomID) {\r\n let undos = []\r\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomID, 'vAtom::vAtomType.owner', '.'))\r\n return this.vatomApi.trashVatom(vatomID).catch(err => {\r\n undos.map(u => u())\r\n throw err\r\n })\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nexport default class Activity {\r\n constructor (activityApi) {\r\n this.activityApi = activityApi\r\n }\r\n\r\n /**\r\n * Returns a list of messages of activity\r\n * @return {Promise<Object>} JSON array containing all the activity from the user.\r\n */\r\n myThreads () {\r\n return this.activityApi.threads()\r\n }\r\n\r\n /**\r\n * Returns a single activity message thread\r\n * @param {String} name Unique identifier from the myThreads response\r\n * @return {Promise<Object>} returns a detailed object containing the thread\r\n */\r\n myThreadMessages (name) {\r\n return this.activityApi.threadMessages(name)\r\n }\r\n\r\n /**\r\n * Send a message to a user that appears in the \"activity\" tab\r\n * @param {String} id id of the user that is going to receive the message\r\n * @param {String} message Message that will get sent to the user\r\n * @return {Promise<Object>} Success Object\r\n */\r\n sendMessage (id, message) {\r\n return this.activityApi.sendMessage(id, message)\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n\r\nexport default class ActivityApi {\r\n constructor (client) {\r\n this.client = client\r\n }\r\n\r\n threads () {\r\n return this.client.request('POST', '/v1/activity/mythreads', {}, true).then(data => data.threads)\r\n }\r\n\r\n threadMessages (name) {\r\n const payload = {\r\n name,\r\n cursor: '',\r\n count: 100\r\n }\r\n return this.client.request('POST', '/v1/activity/mythreadmessages', payload, true).then(data => data)\r\n }\r\n\r\n sendMessage (id, message) {\r\n const payload = {\r\n message,\r\n id\r\n }\r\n return this.client.request('POST', '/v1/user/message', payload, true).then(data => data)\r\n }\r\n}\r\n","//\r\n\r\nimport EventEmitter from '../../internal/EventEmitter'\r\nimport WebSockets from './WebSockets'\r\n\r\n// This is a wrapper around the WebSockets class, which allows for multiple sockets to be active at once.\r\n// It matches the API of that class exactly.\r\nexport default class MultiWebSockets extends EventEmitter {\r\n\r\n constructor (store, client) {\r\n super()\r\n\r\n this.store = store\r\n this.client = client\r\n this.sockets = []\r\n\r\n }\r\n\r\n /** This will be true if the connection is ready to send and receive messages */\r\n get isOpen () {\r\n\r\n // Return true if any of the websockets are open\r\n return !!this.sockets.find(s => s.isOpen)\r\n\r\n }\r\n\r\n /**\r\n * The connect function establishes a connection to the WebSocket.\r\n * @public\r\n * @return {Promise<MultiWebSockets>}\r\n */\r\n connect() {\r\n\r\n // Create sockets if needed\r\n if (this.sockets.length == 0) {\r\n\r\n // Get array of socket addresses\r\n let addresses = this.store.websocketAddress\r\n if (typeof addresses == 'string')\r\n addresses = [addresses]\r\n\r\n // Create sockets\r\n for (let address of addresses)\r\n this.sockets.push(new WebSockets(this.store, this.client, address))\r\n\r\n // Override the newly created socket's trigger() and emit() to instead trigger and emit on us\r\n for (let socket of this.sockets) {\r\n socket.trigger = this.trigger.bind(this)\r\n socket.triggerEvent = this.triggerEvent.bind(this)\r\n socket.emit = this.emit.bind(this)\r\n }\r\n\r\n }\r\n\r\n // Connect them all\r\n return Promise.all(this.sockets.map(s => s.connect())).then(e => this)\r\n\r\n }\r\n\r\n /**\r\n * This sends a message through the web socket\r\n * @param {*} cmd\r\n */\r\n sendMessage (cmd) {\r\n \r\n // Send message to all sockets\r\n for (let socket of this.sockets)\r\n socket.sendMessage(cmd)\r\n\r\n }\r\n\r\n /**\r\n * @public\r\n * Forcefully closes the Web socket.\r\n * Note: Socket will be set to null. Auto connect will be disabled.\r\n */\r\n close () {\r\n \r\n // Close all sockets\r\n for (let socket of this.sockets) socket.close()\r\n this.sockets = []\r\n \r\n }\r\n\r\n}","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport DataPool from '../internal/DataPool'\r\nimport Store from '../internal/repo/Store'\r\nimport UserManager from './manager/UserManager'\r\nimport UserApi from '../internal/net/rest/api/UserApi'\r\nimport Vatoms from './manager/Vatoms'\r\nimport Activity from './manager/Activity'\r\nimport ActivityApi from '../internal/net/rest/api/ActivityApi'\r\nimport Client from '../internal/net/Client'\r\nimport MultiWebSockets from './manager/MultiWebSockets'\r\nimport EventEmitter from '../internal/EventEmitter';\r\n\r\nexport default class Blockv extends EventEmitter {\r\n constructor (payload) {\r\n super()\r\n const prefix = payload.prefix || payload.appID\r\n\r\n this.store = new Store(prefix)\r\n this.store.appID = payload.appID\r\n this.store.server = payload.server || 'https://api.blockv.io'\r\n this.store.websocketAddress = payload.websocketAddress || 'wss://newws.blockv.io'\r\n\r\n this.dataPool = new DataPool(this)\r\n this.dataPool.Blockv = this\r\n this.dataPool.disableSyncV2 = payload.disableSyncV2\r\n this.client = new Client(this)\r\n\r\n const userApi = new UserApi(this)\r\n const activityApi = new ActivityApi(this.client)\r\n\r\n this.Activity = new Activity(activityApi)\r\n this.WebSockets = new MultiWebSockets(this.store, this.client)\r\n this.UserManager = new UserManager(userApi, this.store)\r\n this.Vatoms = new Vatoms(this)\r\n\r\n if (this.UserManager.isLoggedIn) {\r\n this.dataPool.setSessionInfo({ userID: this.store.userID, client: this.client })\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n// This is the entry point when importing this library into a web app.\r\n\r\nexport { default } from './client/Blockv'\r\nexport { default as Discover } from './client/Discover'\r\n\r\n// Attach SDK version information to the window\r\nif (typeof window != 'undefined') window.BlockvSDKInfo = {\r\n version: require('../package.json').version\r\n}"],"sourceRoot":""}
\No newline at end of file