diff --git a/.gitignore b/.gitignore index f9d9cc0..f514ca1 100755 --- a/.gitignore +++ b/.gitignore @@ -99,3 +99,4 @@ Examples/BasicExample/.DS_Store Sources/.DS_Store Sources/AnalyticsLive/.DS_Store +.DS_Store diff --git a/Package.resolved b/Package.resolved index 84fc12b..2ffb74e 100755 --- a/Package.resolved +++ b/Package.resolved @@ -5,8 +5,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/segmentio/analytics-swift.git", "state" : { - "revision" : "bfa46967624eb54b046c994ac80b2d65ab24b59d", - "version" : "1.7.2" + "revision" : "5d3a762da5412d324205a58358b95e1da334c21e", + "version" : "1.8.0" } }, { diff --git a/Package.swift b/Package.swift index b42a101..b2c596d 100755 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 5.7 +// swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -18,7 +18,7 @@ let package = Package( targets: ["AnalyticsLive"]) ], dependencies: [ - .package(url: "https://github.com/segmentio/analytics-swift.git", from: "1.7.2"), + .package(url: "https://github.com/segmentio/analytics-swift.git", from: "1.8.0"), .package(url: "https://github.com/segmentio/substrata-swift.git", from: "2.0.11"), //.package(path: "../substrata-swift") ], @@ -37,9 +37,13 @@ let package = Package( ], resources: [ .copy("TestHelpers/filterSettings.json"), + .copy("TestHelpers/badSettings.json"), .copy("TestHelpers/testbundle.js"), .copy("TestHelpers/addliveplugin.js"), .copy("TestHelpers/MyEdgeFunctions.js"), + .copy("TestHelpers/badtest.js"), + .copy("TestHelpers/runtimeBundle.js"), + .copy("TestHelpers/runtimeBundleNoProcess.js") ]), ] ) diff --git a/Sources/AnalyticsLive/LivePlugins/AnalyticsJS.swift b/Sources/AnalyticsLive/LivePlugins/AnalyticsJS.swift index 4d00a1c..7ec6fb2 100755 --- a/Sources/AnalyticsLive/LivePlugins/AnalyticsJS.swift +++ b/Sources/AnalyticsLive/LivePlugins/AnalyticsJS.swift @@ -1,6 +1,6 @@ // // File.swift -// +// // // Created by Brandon Sneed on 5/5/22. // @@ -14,8 +14,6 @@ public class AnalyticsJS: JSExport { internal weak var analytics: Analytics? - internal var addedPlugins = [(String?, LivePlugin)]() - internal lazy var currentLivePluginVersion: String? = { return LivePlugins.currentLivePluginVersion() }() @@ -36,9 +34,13 @@ public class AnalyticsJS: JSExport { Self.existingInstances.removeAll(where: { $0 === self.analytics }) } + static func insertOrigin(event: RawEvent?, data: [String: Any]) -> RawEvent? { guard var working = event else { return event } - if let newContext = try? working.context?.add(value: data, forKey: "__eventOrigin") { + if let newContext = try? working.context?.add( + value: data, + forKey: "__eventOrigin" + ) { working.context = newContext } return working @@ -46,50 +48,81 @@ public class AnalyticsJS: JSExport { internal func originMarkerEnrichment(event: RawEvent?) -> RawEvent? { return Self.insertOrigin(event: event, data: [ - "type": "signals", + "type": "js", "version": currentLivePluginVersion ?? "" ]) } + private func contextEnrichment(with context: [String: Any]?) -> EnrichmentClosure { + return { event in + guard var working = event, let context = context else { + return event + } + + // Get existing context as dictionary and merge with new context + var mergedContext = working.context?.dictionaryValue ?? [:] + mergedContext.merge(context) { _, new in new } + + do { + working.context = try JSON(mergedContext) + } catch { + // If JSON creation fails, return original event + return event + } + return working + } + } + + private func enrichments(with context: [String: Any]?) -> [EnrichmentClosure] { + var enrichments = [originMarkerEnrichment] + if let context = context { + enrichments.append(contextEnrichment(with: context)) + } + return enrichments + } + internal func setupExports() { exportProperty(named: "traits") { [weak self] in - guard let self else { return nil } - let traits: [String: Any]? = analytics?.traits() + guard let self, let analytics = self.analytics else { return nil } + let traits: [String: Any]? = analytics.traits() return traits as? JSConvertible } exportProperty(named: "userId") { [weak self] in - guard let self else { return nil } - return analytics?.userId + return self?.analytics?.userId } exportProperty(named: "anonymousId") { [weak self] in - guard let self else { return nil } - return analytics?.anonymousId + return self?.analytics?.anonymousId } exportMethod(named: "track") { [weak self] in self?.track(args: $0) } - exportMethod(named: "identify") { [weak self] in self?.identify(args: $0) } + exportMethod(named: "identify") { + [weak self] in self?.identify(args: $0) + } exportMethod(named: "screen") { [weak self] in self?.screen(args: $0) } exportMethod(named: "group") { [weak self] in self?.group(args: $0) } - exportMethod(named: "alias") { [weak self] in self?.alias(args: $0) } exportMethod(named: "add") { [weak self] in self?.add(args: $0) } exportMethod(named: "flush") { [weak self] in self?.flush(args: $0) } exportMethod(named: "reset") { [weak self] in self?.reset(args: $0) } - exportMethod(named: "removeLivePlugins") { [weak self] in self?.removeLivePlugins(args: $0) } } public override func construct(args: [JSConvertible?]) { if let writeKey = args.typed(as: String.self, index: 0) { - let existing = Self.existingInstances.first(where: { $0.writeKey == writeKey }) + let existing = Self.existingInstances.first( + where: { $0.writeKey == writeKey + }) if let existing { self.analytics = existing return } else { // we do some work on user-created instances to avoid multiple instances of the same write key // by just attaching whatever existing instance that might exist with that write key. - let createdAnalytics = Analytics(configuration: Configuration(writeKey: writeKey) - .trackApplicationLifecycleEvents(false) + let createdAnalytics = Analytics( + configuration: Configuration( + writeKey: writeKey + ) + .setTrackedApplicationLifecycleEvents(.none) ) Self.existingInstances.append(createdAnalytics) self.analytics = createdAnalytics @@ -99,113 +132,109 @@ public class AnalyticsJS: JSExport { public func track(args: [JSConvertible?]) -> JSConvertible? { guard let analytics else { return nil } - guard let name = args.typed(as: String.self, index: 0) else { return nil } - let properties = args.typed(as: Dictionary.self, index: 1) - - let addEventOrigin: EnrichmentClosure = { [weak self] event in - return Self.insertOrigin(event: event, data: [ - "type": "signals", - "version": self?.currentLivePluginVersion ?? "" - ]) + guard let name = args.typed(as: String.self, index: 0) else { + return nil } + let properties = args.typed(as: Dictionary.self, index: 1) + let context = args.typed(as: Dictionary.self, index: 2) - analytics.track(name: name, properties: properties, enrichments: [addEventOrigin]) + analytics + .track( + name: name, + properties: properties, + enrichments: enrichments(with: context) + ) return nil } public func identify(args: [JSConvertible?]) -> JSConvertible? { guard let analytics else { return nil } - guard let userId = args.typed(as: String.self, index: 0) else { return nil } + guard let userId = args.typed(as: String.self, index: 0) else { + return nil + } let traits = args.typed(as: Dictionary.self, index: 1) - analytics.identify(userId: userId, traits: traits, enrichments: [originMarkerEnrichment]) + let context = args.typed(as: Dictionary.self, index: 2) + analytics + .identify( + userId: userId, + traits: traits, + enrichments: enrichments(with: context) + ) return nil } public func screen(args: [JSConvertible?]) -> JSConvertible? { guard let analytics else { return nil } - guard let title = args.typed(as: String.self, index: 0) else { return nil } + guard let title = args.typed(as: String.self, index: 0) else { + return nil + } let category = args.typed(as: String.self, index: 1) let properties = args.typed(as: Dictionary.self, index: 2) - analytics.screen(title: title, category: category, properties: properties, enrichments: [originMarkerEnrichment]) + let context = args.typed(as: Dictionary.self, index: 3) + analytics + .screen( + title: title, + category: category, + properties: properties, + enrichments: enrichments(with: context) + ) return nil + } public func group(args: [JSConvertible?]) -> JSConvertible? { guard let analytics else { return nil } - guard let groupId = args.typed(as: String.self, index: 0) else { return nil } + guard let groupId = args.typed(as: String.self, index: 0) else { + return nil + } let traits = args.typed(as: Dictionary.self, index: 1) - analytics.group(groupId: groupId, traits: traits, enrichments: [originMarkerEnrichment]) - return nil - } - - public func alias(args: [JSConvertible?]) -> JSConvertible? { - guard let analytics else { return nil } - guard let newId = args.typed(as: String.self, index: 0) else { return nil } - analytics.alias(newId: newId, enrichments: [originMarkerEnrichment]) + let context = args.typed(as: Dictionary.self, index: 2) + analytics + .group( + groupId: groupId, + traits: traits, + enrichments: enrichments(with: context) + ) return nil + } public func flush(args: [JSConvertible?]) -> JSConvertible? { guard let analytics else { return nil } analytics.flush() return nil + } public func reset(args: [JSConvertible?]) -> JSConvertible? { guard let analytics else { return nil } analytics.reset() return nil + } public func add(args: [JSConvertible?]) -> JSConvertible? { - var result = false - - guard let analytics else { return result } - guard let plugin = args.typed(as: JSClass.self, index: 0) else { return result } + guard let analytics else { return nil } + guard let plugin = args.typed(as: JSClass.self, index: 0) else { + return false + } let type = plugin["type"]?.typed(as: Int.self) let destination = plugin["destination"]?.typed(as: String.self) - guard let type = type else { return result } + guard let type = type else { return false } + guard let pluginType = PluginType(rawValue: type) else { return false } - guard let pluginType = PluginType(rawValue: type) else { return result } let edgeFn = LivePlugin(jsPlugin: plugin, type: pluginType) if let dest = destination { // we have a destination specified, so add it there - if let d = analytics.find(key: dest) { - //DispatchQueue.main.async { - _ = d.add(plugin: edgeFn) - //} - result = true - self.addedPlugins.append((dest, edgeFn)) - } + guard let d = analytics.find(key: dest) else { return false } + _ = d.add(plugin: edgeFn) + return true } else { - //DispatchQueue.main.async { - _ = analytics.add(plugin: edgeFn) - //} - result = true - self.addedPlugins.append((nil, edgeFn)) + _ = analytics.add(plugin: edgeFn) + return true } - return result - } - - public func removeLivePlugins(args: [JSConvertible?]) -> JSConvertible? { - guard let analytics else { return nil } - - for tuple in self.addedPlugins { - let (dest, p) = tuple - if let dst = dest { - // Remove from destination - if let d = analytics.find(key: dst) { - d.remove(plugin: p) - } - } else { - // Remove from main timeline - analytics.remove(plugin: p) - } - } - self.addedPlugins.removeAll() - return nil } } diff --git a/Sources/AnalyticsLive/LivePlugins/Bundler.swift b/Sources/AnalyticsLive/LivePlugins/Bundler.swift index 3510689..c23cba5 100755 --- a/Sources/AnalyticsLive/LivePlugins/Bundler.swift +++ b/Sources/AnalyticsLive/LivePlugins/Bundler.swift @@ -11,7 +11,7 @@ internal class Bundler { static var sessionConfig = URLSessionConfiguration.default class func getLocalBundleFolderURL() -> URL { - let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) + let paths = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask) var result = paths[0] result.appendPathComponent("segmentJSBundles") if let identifier = Bundle.main.bundleIdentifier { diff --git a/Sources/AnalyticsLive/LivePlugins/EmbeddedJS.swift b/Sources/AnalyticsLive/LivePlugins/EmbeddedJS.swift index a578ea9..438c29f 100755 --- a/Sources/AnalyticsLive/LivePlugins/EmbeddedJS.swift +++ b/Sources/AnalyticsLive/LivePlugins/EmbeddedJS.swift @@ -23,7 +23,7 @@ public struct EmbeddedJS { public static let edgeFnBaseSetupScript = """ class LivePlugin { constructor(type, destination) { - console.log("js: LivePlugin.constructor() called"); + //console.log("js: LivePlugin.constructor() called"); this._type = type; this._destination = destination; } @@ -39,7 +39,7 @@ public struct EmbeddedJS { update(settings, type) { } execute(event) { - console.log("js: LivePlugin.execute() called"); + //console.log("js: LivePlugin.execute() called"); var result = event; switch(event.type) { case "identify": @@ -66,7 +66,7 @@ public struct EmbeddedJS { } track(event) { - console.log("js: Super.track() called"); + //console.log("js: Super.track() called"); return event; } @@ -79,7 +79,7 @@ public struct EmbeddedJS { } screen(event) { - console.log("js: Super.screen() called"); + //console.log("js: Super.screen() called"); return event; } diff --git a/Sources/AnalyticsLive/LivePlugins/LivePlugins.swift b/Sources/AnalyticsLive/LivePlugins/LivePlugins.swift index 2279ddb..9699d1d 100755 --- a/Sources/AnalyticsLive/LivePlugins/LivePlugins.swift +++ b/Sources/AnalyticsLive/LivePlugins/LivePlugins.swift @@ -18,35 +18,34 @@ public protocol LivePluginsDependent { /** This is the main plugin for the EdgeFunctions feature. */ -public class LivePlugins: UtilityPlugin { +public class LivePlugins: UtilityPlugin, WaitingPlugin { public let type: PluginType = .utility public let key = "LivePlugins" + public weak var analytics: Analytics? = nil internal struct Constants { static let userDefaultsKey = "LivePlugin" static let versionKey = "version" static let downloadURLKey = "downloadURL" - static let edgeFunctionFilename = "livePlugin.js" } - public let pluginKeyName = "LivePlugins" - - public weak var analytics: Analytics? = nil - - public var engine = JSEngine() + internal var engine = JSEngine() internal let fallbackFileURL: URL? internal let forceFallback: Bool internal var analyticsJS: AnalyticsJS? + internal let localJSURLs: [URL] @Atomic var dependents = [LivePluginsDependent]() - public init(fallbackFileURL: URL?, force: Bool = false) { + public init(fallbackFileURL: URL?, force: Bool = false, exceptionHandler: ((JSError) -> Void)? = nil, localJSURLs: [URL] = []) { self.fallbackFileURL = fallbackFileURL self.forceFallback = force - engine.exceptionHandler = { error in + self.localJSURLs = localJSURLs + let defaultHandler: ((JSError) -> Void)? = { error in print(error) } + engine.exceptionHandler = exceptionHandler ?? defaultHandler } deinit { @@ -57,26 +56,34 @@ public class LivePlugins: UtilityPlugin { public func configure(analytics: Analytics) { self.analytics = analytics + // if we find an existing liveplugins instance ... + if analytics.find(pluginType: LivePlugins.self) !== self { + // remove ourselves. + //DispatchQueue.main.async { + analytics.remove(plugin: self) + //} + return + } } public func update(settings: Settings, type: UpdateType) { if type != .initial { return } + guard let analytics else { return } - // if we find an existing liveplugins instance ... - if analytics?.find(pluginType: LivePlugins.self) !== self { - // remove ourselves. we can't do this in configure. - analytics?.remove(plugin: self) - return - } - + // pause the event timeline while get get our JS set up. + analytics.pauseEventProcessing(plugin: self) + setupEngine(self.engine) let edgeFnData = toDictionary(settings.edgeFunction) - setEdgeFnData(edgeFnData) - - // schedule this for later, lets let plugins finish setting up... - DispatchQueue.main.async { - self.loadEdgeFn(url: Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename)) + setEdgeFnData(edgeFnData) { success in + // schedule this for later, lets let plugins finish setting up... + DispatchQueue.main.async { [weak self] in + guard let self else { return } + let useFallback = self.forceFallback || !success + self.loadEdgeFn(url: Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename), useFallback: useFallback) + analytics.resumeEventProcessing(plugin: self) + } } } @@ -91,6 +98,7 @@ public class LivePlugins: UtilityPlugin { // MARK: - Internal Stuff +// MARK: - Engine Related bits extension LivePlugins { internal func setupEngine(_ engine: JSEngine) { guard let analytics else { return } @@ -107,15 +115,13 @@ extension LivePlugins { engine.evaluate(script: EmbeddedJS.enumSetupScript, evaluator: "EmbeddedJS.enumSetupScript") engine.evaluate(script: EmbeddedJS.edgeFnBaseSetupScript, evaluator: "EmbeddedJS.edgeFnBaseSetupScript") } - - internal func loadEdgeFn(url: URL) { - // setup error handler - engine.exceptionHandler = { error in - print(error.string) - } - +} + +// MARK: - EdgeFn management +extension LivePlugins { + internal func loadEdgeFn(url: URL, useFallback: Bool) { var localURL = url - if forceFallback, let fallbackFileURL { + if useFallback, let fallbackFileURL { localURL = fallbackFileURL } if FileManager.default.fileExists(atPath: localURL.path) == false { @@ -132,6 +138,14 @@ extension LivePlugins { d.prepare(engine: engine) } + // load local JS files + for url in self.localJSURLs { + if let data = try? Data(contentsOf: url) { + let scriptString = String(data: data, encoding: .utf8) ?? "" + engine.evaluate(script: scriptString, evaluator: "local file \(url)") + } + } + engine.loadBundle(url: localURL) { [weak self] error in print(error) guard let self else { return } @@ -143,32 +157,75 @@ extension LivePlugins { } /** - Stores the retrieved settings data for Edge Functions. Input will be a JSON dictionary from Segment's - settings endpoint. + Stores the retrieved settings data for Edge Functions. + Input should be a JSON dictionary from Segment's settings endpoint. - Internal Use Only + Completion is ALWAYS called - guaranteed. */ - internal func setEdgeFnData(_ data: [AnyHashable : Any]?) { - guard let data = data as? [String: Any] else { return } + internal func setEdgeFnData(_ data: [AnyHashable : Any]?, completion: @escaping (Bool) -> Void) { + // Early validation - if data is invalid, we're done + guard let validData = validateEdgeFnData(data) else { + completion(false) + return + } - let versionExists = data.keys.contains(Constants.versionKey) - let downloadURLExists = data.keys.contains(Constants.downloadURLKey) + // Check if we need to update + if shouldUpdateEdgeFunction(newData: validData) { + performEdgeFnUpdate(data: validData, completion: completion) + } else { + // No update needed, existing file is current + completion(true) + } + } + + private func validateEdgeFnData(_ data: [AnyHashable : Any]?) -> [String: Any]? { + guard let data = data as? [String: Any], + data.keys.contains(Constants.versionKey), + data.keys.contains(Constants.downloadURLKey) else { + return nil + } + return data + } + + private func shouldUpdateEdgeFunction(newData: [String: Any]) -> Bool { + guard let currentData = currentData() else { + // No existing data, so we need to download + return true + } - if versionExists && downloadURLExists { - // it's actually valid - if let currentData = currentData() { - // if it's newer than what we have, store it and initiate download. - let newVersion = data.valueToInt(for: Constants.versionKey) - let currentVersion = currentData.valueToInt(for: Constants.versionKey) - if let newVersion = newVersion, let currentVersion = currentVersion { - if newVersion > currentVersion { - update(data: data) - } - } - } else { - // we didn't have it before, so store it - update(data: data) + // Compare versions + let newVersion = newData.valueToInt(for: Constants.versionKey) ?? 0 + let currentVersion = currentData.valueToInt(for: Constants.versionKey) ?? 0 + + return newVersion > currentVersion + } + + private func performEdgeFnUpdate(data: [String: Any], completion: @escaping (Bool) -> Void) { + guard let urlString = data[Constants.downloadURLKey] as? String else { + // URL is missing or invalid - ALWAYS call completion + completion(false) + return + } + + // Save the new data first + UserDefaults.standard.set(data, forKey: Constants.userDefaultsKey) + + // Handle empty URL case (disable bundle) + guard !urlString.isEmpty, let url = URL(string: urlString) else { + // Empty URL means disable the bundle + Bundler.disableBundleURL(localURL: Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename)) + completion(true) // Successfully disabled + return + } + + // Perform the actual download + let localURL = Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename) + Bundler.download(url: url, to: localURL) { success in + if success { + print("New EdgeFunction bundle downloaded and installed.") } + // ALWAYS call completion, no matter what + completion(success) } } @@ -181,27 +238,6 @@ extension LivePlugins { let version = currentData?.valueToString(for: Constants.versionKey) return version } - - private func update(data: [String: Any]) { - guard let urlString = data[Constants.downloadURLKey] as? String else { return } - let url = URL(string: urlString) - - UserDefaults.standard.set(data, forKey: Constants.userDefaultsKey) - - if let url = url { - Bundler.download(url: url, to: Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename)) { (success) in - if success { - print("New EdgeFunction bundle downloaded and installed.") - } - DispatchQueue.main.async { - self.loadEdgeFn(url: Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename)) - } - } - } else { - // bundle string was empty, disable the bundle. - Bundler.disableBundleURL(localURL: Bundler.getLocalBundleURL(bundleName: Constants.edgeFunctionFilename)) - } - } internal static func clearCache() { // remove the store info about said edgefn. diff --git a/Sources/AnalyticsLive/Signals/.DS_Store b/Sources/AnalyticsLive/Signals/.DS_Store deleted file mode 100755 index 70182d0..0000000 Binary files a/Sources/AnalyticsLive/Signals/.DS_Store and /dev/null differ diff --git a/Sources/AnalyticsLive/Signals/AutoTracking/Networking/SignalsNetworkTracking.swift b/Sources/AnalyticsLive/Signals/AutoTracking/Networking/SignalsNetworkTracking.swift index 22cd093..cb92559 100755 --- a/Sources/AnalyticsLive/Signals/AutoTracking/Networking/SignalsNetworkTracking.swift +++ b/Sources/AnalyticsLive/Signals/AutoTracking/Networking/SignalsNetworkTracking.swift @@ -38,6 +38,7 @@ public class SignalsNetworkProtocol: URLProtocol, URLSessionDataDelegate { internal var session: URLSession? = nil internal var sessionTask: URLSessionDataTask? = nil + internal let requestId: String = UUID().uuidString @Atomic internal var receivedData: Data? = nil @Atomic internal var response: URLResponse? = nil @@ -73,7 +74,18 @@ public class SignalsNetworkProtocol: URLProtocol, URLSessionDataDelegate { sessionTask?.resume() // emit our request signal since it's about to go out. - emit(action: .request) + let contentType = newRequest.value(forHTTPHeaderField: "Content-Type") + let data = NetworkSignal.NetworkData( + action: .request, + url: newRequest.url, + body: deserialize(contentType: contentType, data: newRequest.httpBody), + contentType: contentType, + method: newRequest.httpMethod, + status: nil, + requestId: requestId + ) + let signal = NetworkSignal(data: data) + Signals.shared.emit(signal: signal, source: .autoNetwork) } override public func stopLoading() { @@ -104,7 +116,20 @@ public class SignalsNetworkProtocol: URLProtocol, URLSessionDataDelegate { } client?.urlProtocolDidFinishLoading(self) - emit(action: .response) + + let httpResponse = self.response as? HTTPURLResponse + let contentType = httpResponse?.value(forHTTPHeaderField: "Content-Type") + let data = NetworkSignal.NetworkData( + action: .response, + url: request.url, + body: deserialize(contentType: contentType, data: request.httpBody), + contentType: contentType, + method: request.httpMethod, + status: httpResponse?.statusCode, + requestId: requestId + ) + let signal = NetworkSignal(data: data) + Signals.shared.emit(signal: signal, source: .autoNetwork) } } @@ -137,7 +162,7 @@ extension SignalsNetworkProtocol { } extension SignalsNetworkProtocol { - func deserialize(contentType: String?) -> [String: Any]? { + func deserialize(contentType: String?, data: Data?) -> [String: Any]? { guard let contentType else { return nil } let parts = contentType.components(separatedBy: ";") // strip any params off .. we can't really evaluate them that well @@ -146,18 +171,6 @@ extension SignalsNetworkProtocol { let deserializer = Self.deserializers[ct] ?? Self.deserializers[contentType] ?? Self.textPlain return deserializer(receivedData) } - - func emit(action: NetworkSignal.NetworkAction) { - guard let url = request.url else { return } - let httpResponse = self.response as? HTTPURLResponse - let statusCode = httpResponse?.statusCode - - let contentType = httpResponse?.value(forHTTPHeaderField: "Content-Type") - let data = deserialize(contentType: contentType) - - let s = NetworkSignal(action: action, url: url, statusCode: statusCode, data: data) - Signals.shared.emit(signal: s, source: .autoNetwork) - } } final class SignalsAuthenticationChallengeSender: NSObject, URLAuthenticationChallengeSender { diff --git a/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalNavigation.swift b/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalNavigation.swift index f0e13b5..eccfbd1 100755 --- a/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalNavigation.swift +++ b/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalNavigation.swift @@ -34,37 +34,45 @@ internal class SignalNavCache { } func push(root: String, source: SignalSource = .autoSwiftUI) { + var previousScreen: String? = nil + var currentScreen = "" + if case .root = current { - let signalLeave = NavigationSignal(action: .leaving, screen: current.name) - Signals.shared.emit(signal: signalLeave, source: .autoSwiftUI) + previousScreen = current.name } if case .none = current { screens.append(.root(root)) - let signalEnter = NavigationSignal(action: .entering, screen: current.name) - Signals.shared.emit(signal: signalEnter, source: source) + currentScreen = current.name } + + let signal = NavigationSignal(currentScreen: currentScreen, previousScreen: previousScreen) + Signals.shared.emit(signal: signal, source: source) } func push(screenName: String) { - let signalLeave = NavigationSignal(action: .leaving, screen: current.name) - Signals.shared.emit(signal: signalLeave, source: .autoSwiftUI) + let previousScreen = current.name screens.append(.screen(screenName)) - let signalEnter = NavigationSignal(action: .entering, screen: current.name) - Signals.shared.emit(signal: signalEnter, source: .autoSwiftUI) + let currentScreen = current.name + let signal = NavigationSignal(currentScreen: currentScreen, previousScreen: previousScreen) + Signals.shared.emit(signal: signal, source: .autoSwiftUI) } func pop() { + var previousScreen: String? = nil + var currentScreen = "" + if screens.count == 2 { - let signalLeave = NavigationSignal(action: .leaving, screen: current.name) - Signals.shared.emit(signal: signalLeave, source: .autoSwiftUI) + previousScreen = current.name screens.removeLast() } if case .root = current { - let signalEnter = NavigationSignal(action: .entering, screen: current.name) - Signals.shared.emit(signal: signalEnter, source: .autoSwiftUI) + currentScreen = current.name } + + let signal = NavigationSignal(currentScreen: currentScreen, previousScreen: previousScreen) + Signals.shared.emit(signal: signal, source: .autoSwiftUI) } var current: NavEntry { return screens.last ?? .none } diff --git a/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalTabView.swift b/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalTabView.swift index 4200309..483664e 100644 --- a/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalTabView.swift +++ b/Sources/AnalyticsLive/Signals/AutoTracking/SwiftUI/SignalTabView.swift @@ -102,7 +102,7 @@ public struct SignalTabView : SignalingUI, View @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 7.0, *) extension SignalTabView where SelectionValue == Int { - nonisolated public init(@ViewBuilder content: () -> Content) { + public init(@ViewBuilder content: () -> Content) { self.lifecycle = TabViewLifecycle(id: id) // this has to come first self.content = content() self.userDefinedSelection = nil diff --git a/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUINavController.swift b/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUINavController.swift index 63f7def..81e4279 100644 --- a/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUINavController.swift +++ b/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUINavController.swift @@ -67,92 +67,44 @@ internal class NavigationSwizzler { } extension UINavigationController { + private func getScreenName(from viewController: UIViewController?) -> String? { + return viewController?.accessibilityLabel ?? viewController?.title ?? viewController?.navigationItem.title + } + + private func emitNavigationSignal(to currentVC: UIViewController?, from previousVC: UIViewController?, fallback: String) { + let navSignal = NavigationSignal( + currentScreen: getScreenName(from: currentVC) ?? fallback, + previousScreen: getScreenName(from: previousVC) + ) + Signals.emit(signal: navSignal, source: .autoUIKit) + } + @objc dynamic func swizzled_pushViewController(_ viewController: UIViewController, animated: Bool) { - // Get info before we push let fromVC = topViewController - - // Call original implementation self.swizzled_pushViewController(viewController, animated: animated) - - // Emit 'leaving' signal for the screen we're leaving - if let fromScreen = fromVC?.accessibilityLabel ?? fromVC?.title ?? fromVC?.navigationItem.title { - let leavingSignal = NavigationSignal(action: .leaving, screen: fromScreen) - Signals.emit(signal: leavingSignal, source: .autoSwiftUI) - } - - // Emit 'entering' signal for the screen we're pushing to - if let toScreen = viewController.accessibilityLabel ?? viewController.title ?? viewController.navigationItem.title { - let enteringSignal = NavigationSignal(action: .entering, screen: toScreen) - Signals.emit(signal: enteringSignal, source: .autoSwiftUI) - } + emitNavigationSignal(to: viewController, from: fromVC, fallback: "Unknown ") } @objc dynamic func swizzled_popViewController(animated: Bool) -> UIViewController? { - // Get info before we pop let fromVC = topViewController let toVC = viewControllers.count > 1 ? viewControllers[viewControllers.count - 2] : nil - - // Call original implementation let result = self.swizzled_popViewController(animated: animated) - - // Emit 'leaving' signal for the screen we're popping from - if let fromScreen = fromVC?.accessibilityLabel ?? fromVC?.title ?? fromVC?.navigationItem.title { - let leavingSignal = NavigationSignal(action: .leaving, screen: fromScreen) - Signals.emit(signal: leavingSignal, source: .autoSwiftUI) - } - - // Emit 'entering' signal for the screen we're popping back to - if let toScreen = toVC?.accessibilityLabel ?? toVC?.title ?? toVC?.navigationItem.title { - let enteringSignal = NavigationSignal(action: .entering, screen: toScreen) - Signals.emit(signal: enteringSignal, source: .autoSwiftUI) - } - + emitNavigationSignal(to: toVC, from: fromVC, fallback: "Unknown ") return result } @objc dynamic func swizzled_popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]? { - // Get info before we pop let fromVC = topViewController - - // Call original implementation let result = self.swizzled_popToViewController(viewController, animated: animated) - - // Emit 'leaving' signal for current screen - if let fromScreen = fromVC?.accessibilityLabel ?? fromVC?.title ?? fromVC?.navigationItem.title { - let leavingSignal = NavigationSignal(action: .leaving, screen: fromScreen) - Signals.emit(signal: leavingSignal, source: .autoSwiftUI) - } - - // Emit 'entering' signal for target screen - if let toScreen = viewController.accessibilityLabel ?? viewController.title ?? viewController.navigationItem.title { - let enteringSignal = NavigationSignal(action: .entering, screen: toScreen) - Signals.emit(signal: enteringSignal, source: .autoSwiftUI) - } - + emitNavigationSignal(to: viewController, from: fromVC, fallback: "Unknown ") return result } - @objc dynamic func swizzled_popToRootViewController(animated: Bool) -> [UIViewController]? { - // Get info before we pop let fromVC = topViewController let rootVC = viewControllers.first - - // Call original implementation let result = self.swizzled_popToRootViewController(animated: animated) - - // Emit 'leaving' signal for current screen - if let fromScreen = fromVC?.accessibilityLabel ?? fromVC?.title ?? fromVC?.navigationItem.title { - let leavingSignal = NavigationSignal(action: .leaving, screen: fromScreen) - Signals.emit(signal: leavingSignal, source: .autoSwiftUI) - } - - // Emit 'entering' signal for target screen - if let toScreen = rootVC?.accessibilityLabel ?? rootVC?.title ?? rootVC?.navigationItem.title { - let enteringSignal = NavigationSignal(action: .entering, screen: toScreen) - Signals.emit(signal: enteringSignal, source: .autoSwiftUI) - } - + emitNavigationSignal(to: rootVC, from: fromVC, fallback: "Unknown ") return result } } diff --git a/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUIViewController.swift b/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUIViewController.swift index 2fc605c..5edd15b 100644 --- a/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUIViewController.swift +++ b/Sources/AnalyticsLive/Signals/AutoTracking/UIKit/SignalUIViewController.swift @@ -50,69 +50,66 @@ internal class ModalSwizzler { } extension UIViewController { + private func extractBasicName(from vc: UIViewController?) -> String? { + return vc?.accessibilityLabel ?? vc?.title ?? vc?.navigationItem.title + } + + private func extractSwiftUIHostingName() -> String? { + guard let hostingController = self as? UIHostingController else { return nil } + + let mirror = Mirror(reflecting: hostingController.rootView) + let typeName = String(describing: mirror.subjectType) + .replacingOccurrences(of: "ModifiedContent<", with: "") + .replacingOccurrences(of: ", RootModifier>", with: "") + .replacingOccurrences(of: ", _TraitWritingModifier<.*>>", with: "", options: .regularExpression) + .replacingOccurrences(of: "AnyView", with: "") + .trimmingCharacters(in: .whitespacesAndNewlines) + + return typeName.isEmpty ? nil : typeName + } + var meaningfulName: String { - // Try all our previous methods first - if let name = self.accessibilityLabel ?? self.title ?? self.navigationItem.title { - return name - } + // Try basic name extraction first + if let name = extractBasicName(from: self) { return name } - // If we're in a navigation controller, try to get its title + // If we're a nav controller, try the top VC if let nav = self as? UINavigationController, - let topVC = nav.topViewController, - let navTitle = topVC.accessibilityLabel ?? topVC.title ?? topVC.navigationItem.title { - return navTitle - } + let name = extractBasicName(from: nav.topViewController) { return name } - // If we have a navigation controller, try its top view controller - if let nav = self.navigationController, - let navTitle = nav.topViewController?.accessibilityLabel ?? - nav.topViewController?.title ?? - nav.topViewController?.navigationItem.title { - return navTitle - } + // If we have a nav controller, try its top VC + if let name = extractBasicName(from: navigationController?.topViewController) { return name } - // If we've got a hosting controller, try to get the SwiftUI view name - if let hostingController = self as? UIHostingController { - let mirror = Mirror(reflecting: hostingController.rootView) - let value = String(describing: mirror.subjectType) - .replacingOccurrences(of: "ModifiedContent<", with: "") - .replacingOccurrences(of: ", RootModifier>", with: "") - .replacingOccurrences(of: ", _TraitWritingModifier<.*>>", with: "", options: .regularExpression) - .replacingOccurrences(of: "AnyView", with: "") - .trimmingCharacters(in: .whitespacesAndNewlines) - if value.isEmpty == false { - return value - } - } + // Try SwiftUI hosting controller + if let name = extractSwiftUIHostingName() { return name } - // Clean up the type name if we have to use it + // Fall back to type name return String(describing: type(of: self)) } @objc dynamic func swizzled_present(_ viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)? = nil) { + let fromScreen = self.meaningfulName let modalScreen = viewControllerToPresent.meaningfulName - // Call original implementation self.swizzled_present(viewControllerToPresent, animated: animated, completion: completion) - // Just emit the modal signal and save the name - let modalSignal = NavigationSignal(action: .modal, screen: modalScreen) - Signals.emit(signal: modalSignal, source: .autoSwiftUI) + let navSignal = NavigationSignal(currentScreen: modalScreen, previousScreen: fromScreen) + Signals.emit(signal: navSignal, source: .autoUIKit) + ModalSwizzler.shared.currentModalName = modalScreen } @objc dynamic func swizzled_dismiss(animated: Bool, completion: (() -> Void)? = nil) { - // Get the saved modal name let modalScreen = ModalSwizzler.shared.currentModalName ?? self.meaningfulName + let backToScreen = presentingViewController?.meaningfulName - // Call original implementation self.swizzled_dismiss(animated: animated, completion: completion) - // Just emit leaving for the modal - let leavingSignal = NavigationSignal(action: .leaving, screen: modalScreen) - Signals.emit(signal: leavingSignal, source: .autoSwiftUI) + let navSignal = NavigationSignal( + currentScreen: backToScreen ?? "Unknown ", + previousScreen: modalScreen + ) + Signals.emit(signal: navSignal, source: .autoUIKit) - // Clear the saved name ModalSwizzler.shared.currentModalName = nil } } diff --git a/Sources/AnalyticsLive/Signals/Broadcasters/SegmentBroadcaster.swift b/Sources/AnalyticsLive/Signals/Broadcasters/SegmentBroadcaster.swift index 28cd304..b7a118f 100755 --- a/Sources/AnalyticsLive/Signals/Broadcasters/SegmentBroadcaster.swift +++ b/Sources/AnalyticsLive/Signals/Broadcasters/SegmentBroadcaster.swift @@ -23,7 +23,7 @@ public class SegmentBroadcaster: SignalBroadcaster { internal var mini: MiniAnalytics? = nil public func added(signal: any RawSignal) { - var s = signal + let s = signal if sendToSegment { mini?.track(signal: s, obfuscate: obfuscate) } diff --git a/Sources/AnalyticsLive/Signals/Context.swift b/Sources/AnalyticsLive/Signals/Context.swift new file mode 100644 index 0000000..24045a9 --- /dev/null +++ b/Sources/AnalyticsLive/Signals/Context.swift @@ -0,0 +1,61 @@ +// +// Context.swift +// AnalyticsLive +// +// Created by Brandon Sneed on 7/16/25. +// +import Foundation +import Substrata + +public struct StaticContext: Codable { + struct Application: Codable { + let name: String + let version: String + let build: String + let namespace: String + } + + struct Library: Codable { + let name: String + let version: String + } + + let app: Application + let library: Library + let signalsRuntime: String? + + private static var _signalsRuntimeVersion: String? = nil + + static let values: StaticContext = { + let info = Bundle.main.infoDictionary ?? [:] + + let name = info["CFBundleDisplayName"] as? String + ?? info["CFBundleName"] as? String + ?? "" + + let application = Application( + name: name, + version: info["CFBundleShortVersionString"] as? String ?? "", + build: info["CFBundleVersion"] as? String ?? "", + namespace: Bundle.main.bundleIdentifier ?? "" + ) + + let library = Library( + name: "analytics-swift-live", + version: __analyticslive_version + ) + + return StaticContext( + app: application, + library: library, + signalsRuntime: _signalsRuntimeVersion + ) + }() + + static func configureRuntimeVersion(engine: JSEngine?) { + guard _signalsRuntimeVersion == nil else { return } + guard let engine else { return } + let jsVersion = engine.value(for: "SEGMENT_SIGNALS_RUNTIME_VERSION")?.typed(as: String.self) + _signalsRuntimeVersion = jsVersion + } +} diff --git a/Sources/AnalyticsLive/Signals/Minilytics/MiniAnalytics.swift b/Sources/AnalyticsLive/Signals/Minilytics/MiniAnalytics.swift index b827562..1780c7d 100755 --- a/Sources/AnalyticsLive/Signals/Minilytics/MiniAnalytics.swift +++ b/Sources/AnalyticsLive/Signals/Minilytics/MiniAnalytics.swift @@ -81,7 +81,7 @@ internal class MiniAnalytics { } func track(signal: any RawSignal, obfuscate: Bool) { - var input = signal + let input = signal var signal = signal if obfuscate, let obf = signal as? JSONObfuscation { @@ -149,8 +149,8 @@ internal class MiniAnalytics { // MARK: - Network Stuff extension MiniAnalytics { - private static let defaultAPIHost = "signals.segment.io/v1" - //private static let defaultAPIHost = "signals.segment.build/v1" + //private static let defaultAPIHost = "signals.segment.io/v1" + private static let defaultAPIHost = "signals.segment.build/v1" func segmentURL(for host: String, path: String) -> URL? { let s = "https://\(host)\(path)" diff --git a/Sources/AnalyticsLive/Signals/Runtime/SignalsJS.swift b/Sources/AnalyticsLive/Signals/Runtime/SignalsJS.swift deleted file mode 100755 index 3810a3d..0000000 --- a/Sources/AnalyticsLive/Signals/Runtime/SignalsJS.swift +++ /dev/null @@ -1,244 +0,0 @@ -/** -THIS FILE IS GENERATED!! DO NOT MODIFY! -THIS FILE IS GENERATED!! DO NOT MODIFY! -THIS FILE IS GENERATED!! DO NOT MODIFY! - -Use embedJS.sh to re-generate if needed. -*/ - -internal class SignalsRuntime { - static let embeddedJS = """ - - - // Raw Signal Definitions --------------------------------- - const SignalType = Object.freeze({ - Interaction: "interaction", - Navigation: "navigation", - Network: "network", - LocalData: "localData", - Instrumentation: "instrumentation", - UserDefined: "userDefined" - }) - - - class RawSignal { - anonymousId; - type; - data; - timestamp; - index; - - constructor(type, data) { - this.anonymousId = analytics.anonymousId - this.type = type - this.data = data - this.timestamp = new Date() - this.index = -1 // this is set on signals.add(...) - } - } - - - // Navigation Signal Definitions -------------------------- - const NavigationAction = Object.freeze({ - Forward: "forward", - Backward: "backward", - Modal: "modal", - Entering: "entering", - Leaving: "leaving", - Page: "page", - Popup: "popup" - }) - - class NavigationData { - action; - screen; - constructor(action, screen) { - this.action = action - this.screen = screen - } - } - - class NavigationSignal extends RawSignal { - constructor(action, screen) { - let data = new NavigationData(action, screen) - super(SignalType.Navigation, data) - } - } - - - // Interaction Signal Definitions ------------------------- - class InteractionData { - component; - info; - data; - constructor(component, info, data) { - this.component = component - this.info = info - this.data = data - } - } - - class InteractionSignal extends RawSignal { - constructor(component, info, object) { - let data = new InteractionData(component, info, object) - super(SignalType.Interaction, data) - } - } - - - // Network Signal Definitions ----------------------------- - const NetworkAction = Object.freeze({ - Request: "request", - Response: "response" - }) - - class NetworkData { - action; - url; - data; - constructor(action, url, data) { - this.action = action - this.url = url - this.data = data - } - } - - class NetworkSignal extends RawSignal { - constructor(action, url, object) { - let data = new NetworkData(action, url, object) - super(SignalType.Network, data) - } - } - - - // LocalData Signal Definitions --------------------------- - - const LocalDataAction = Object.freeze({ - Loaded: "loaded", - Updated: "updated", - Saved: "saved", - Deleted: "deleted", - Undefined: "undefined" - }) - - class LocalData { - action; - identifier; - data; - constructor(action, identifier, data) { - this.action = action - this.identifier = identifier - this.data = data - } - } - - class LocalDataSignal extends RawSignal { - constructor(action, identifier, object) { - let data = new LocalData(action, identifier, object) - super(SignalType.LocalData, data) - } - } - - - // Instrumentation Signal Definitions --------------------- - - const EventType = Object.freeze({ - Track: "track", - Screen: "screen", - Identify: "identify", - Group: "group", - Alias: "alias" - }) - - class InstrumentationData { - type; - rawEvent; - constructor(rawEvent) { - this.type = rawEvent.event - this.rawEvent = rawEvent - } - } - - class InstrumentationSignal extends RawSignal { - constructor(rawEvent) { - let data = new InstrumentationData(rawEvent) - super(SignalType.Instrumentation, data) - } - } - - - // Signals Class Defintion -------------------------------- - - class Signals { - constructor() { - this.signalBuffer = [] - this.signalCounter = 0 - this.maxBufferSize = 1000 - } - - add(signal) { - if (this.signalCounter < 0) { - // we've rolled over? start back at zero. - this.signalCounter = 0 - } - if (signal.index == -1) { - signal.index = getNextIndex() - } - this.signalBuffer.unshift(signal) - // R-E-S-P-E-C-T that's what this maxBufferSize means to me - if (this.signalBuffer.length > this.maxBufferSize) { - this.signalBuffer.pop() - } - } - - getNextIndex() { - let index = this.signalCounter - this.signalCounter += 1 - return index - } - - find(fromSignal, signalType, predicate) { - var fromIndex = 0 - if (fromSignal != null) { - this.signalBuffer.find((signal, index) => { - if (fromSignal === signal) { - fromIndex = index - } - }) - } - - for (let i = fromIndex; i < this.signalBuffer.length; i++) { - let s = this.signalBuffer[i] - if ((s.type === signalType) || (signalType == undefined)) { - if (predicate != null) { - try { - if (predicate(s)) { - return s - } - } catch (e) { - } - } else { - return s - } - } - } - - return null - } - - findAndApply(fromSignal, signalType, searchPredicate, applyPredicate) { - let result = this.find(fromSignal, signalType, searchPredicate) - if (result) { - applyPredicate(result) - } - return result - } - } - - let signals = new Signals(); - - - - """ -} - diff --git a/Sources/AnalyticsLive/Signals/Signals.swift b/Sources/AnalyticsLive/Signals/Signals.swift index 72b1fff..1efb918 100755 --- a/Sources/AnalyticsLive/Signals/Signals.swift +++ b/Sources/AnalyticsLive/Signals/Signals.swift @@ -8,26 +8,27 @@ import Foundation import Segment import Substrata -public class Signals: Plugin, LivePluginsDependent { +public class Signals: Plugin { public let key = "SignalsPlugin" public var type: PluginType = .after public weak var analytics: Analytics? = nil - + internal var signalObject: JSClass? = nil + internal var signalAdd: JSFunction? = nil internal var processSignals: JSFunction? = nil internal var engine: JSEngine? = nil internal var broadcasters = [SignalBroadcaster]() internal var broadcastTimer: QueueTimer? = nil @Atomic internal var counter: Int = 0 @Atomic internal var configuration: SignalsConfiguration = SignalsConfiguration(writeKey: "NONE") - + struct QueuedSignal { let signal: any RawSignal let source: SignalSource } @Atomic internal var queuedSignals = [QueuedSignal]() @Atomic internal var ready = false - + public var anonymousId: String { get { if let anonId = analytics?.anonymousId { @@ -37,31 +38,31 @@ public class Signals: Plugin, LivePluginsDependent { } } } - + public var nextIndex: Int { var result: Int = -1 guard let signalObject else { return result } - guard let index = signalObject.call(method: "getNextIndex", args: nil)?.typed(as: Int.self) else { return result } + guard let index = signalObject.call(method: "_getNextIndex", args: nil)?.typed(as: Int.self) else { return result } result = index return result } - + static public let shared = Signals() - + internal init() { } - + public func configure(analytics: Analytics) { self.analytics = analytics - + if let e = analytics.find(pluginType: LivePlugins.self) { e.addDependent(plugin: self) } - + for var b in broadcasters { b.analytics = analytics } } - + public func execute(event: T?) -> T? { guard let event else { return event } // prevent possible infinite recursion ... @@ -75,24 +76,28 @@ public class Signals: Plugin, LivePluginsDependent { emit(signal: s, source: .manual) return event } - + public func flush() { for b in broadcasters { b.relay() } } - + public func useConfiguration(_ configuration: SignalsConfiguration) { + // Stop existing swizzlers + stopAllSwizzlers() + _configuration.set(configuration) - - updateJSConfiguration() - updateNativeConfiguration() - + updateConfiguration() + + // Start swizzlers with new config + startConfiguredSwizzlers() + for var b in broadcasters { b.analytics = analytics } } - + public func emit(signal: T, source: SignalSource = .manual) { if ready == false { let queued = QueuedSignal(signal: signal, source: source) @@ -101,7 +106,7 @@ public class Signals: Plugin, LivePluginsDependent { } return } - + switch source { case .autoNetwork: if !configuration.useNetworkAutoSignal { @@ -118,38 +123,54 @@ public class Signals: Plugin, LivePluginsDependent { case .manual: break } - - if let json = try? JSON(with: signal) { + + var workingSignal = signal + workingSignal.context = StaticContext.values + + if let json = try? JSON(with: workingSignal) { guard let dict = json.dictionaryValue?.toJSConvertible() else { return } - + for b in broadcasters { // sometimes it's useful to get it in both formats since we have them // and it bypasses double-conversion. See DebugBroadcaster. - b.added(signal: signal) + b.added(signal: workingSignal) if let jB = b as? SignalJSONBroadcaster { jB.added(signal: dict) } } - signalObject?.call(method: "add", args: [dict]) + + signalAdd?.call(args: [dict]) + processSignals?.call(args: [dict]) + + /** Perf tracking ... + // Start timing the expensive part + let startTime = CFAbsoluteTimeGetCurrent() processSignals?.call(args: [dict]) + let endTime = CFAbsoluteTimeGetCurrent() + + let processingTime = (endTime - startTime) * 1000 // Convert to milliseconds + SignalPerformanceTracker.shared.recordProcessingTime(processingTime) + */ } - + + var shouldRelay = false _counter.mutate { c in c += 1 + if c > configuration.maximumBufferSize || c >= configuration.relayCount { + c = 0 + shouldRelay = true + } } - - let signalCount = _counter.wrappedValue - if signalCount > configuration.maximumBufferSize || signalCount >= configuration.relayCount { - _counter.set(0) + if shouldRelay { for b in broadcasters { b.relay() } } } - + public func buffer() -> [JSConvertible]? { let buffer = signalObject?["signalBuffer"]?.typed(as: Array.self) return buffer } - + static public func emit(signal: T, source: SignalSource = .manual) { Signals.shared.emit(signal: signal, source: source) } @@ -157,15 +178,50 @@ public class Signals: Plugin, LivePluginsDependent { // MARK: -- LivePluginsDependent -extension Signals { +extension Signals: LivePluginsDependent { public func prepare(engine: JSEngine) { self.engine = engine - - engine.evaluate(script: SignalsRuntime.embeddedJS, evaluator: "Signals.prepare") - + } + + public func readyToStart() { + _ready.set(true) + + // get all our entry points and config stuff up to date ... + locateJSRequirements() + updateConfiguration() + + replayQueuedSignals() + } + + public func teardown(engine: JSEngine) { + _ready.set(false) + stopAllSwizzlers() + } +} + +// MARK: -- Swizzler Lifecycle Management + +extension Signals { + internal func stopAllSwizzlers() { + #if canImport(UIKit) && !os(watchOS) + TabBarSwizzler.shared.stop() + NavigationSwizzler.shared.stop() + ModalSwizzler.shared.stop() + TapSwizzler.shared.stop() + #endif + + // Remove network tracking plugin if it exists + if let analytics = analytics { + if let networkPlugin = analytics.find(pluginType: SignalsNetworkTracking.self) { + analytics.remove(plugin: networkPlugin) + } + } + } + + internal func startConfiguredSwizzlers() { if configuration.useSwiftUIAutoSignal { let _ = SignalNavCache.shared // touch this so it gets set up. - + #if canImport(UIKit) && !os(watchOS) // needed for SwiftUI TabView's. TabBarSwizzler.shared.start() @@ -173,7 +229,7 @@ extension Signals { ModalSwizzler.shared.start() #endif } - + #if canImport(UIKit) && !os(watchOS) if configuration.useUIKitAutoSignal { TabBarSwizzler.shared.start() @@ -181,52 +237,57 @@ extension Signals { TapSwizzler.shared.start() } #endif - + if configuration.useNetworkAutoSignal { _ = analytics?.add(plugin: SignalsNetworkTracking()) } } - - public func readyToStart() { - _ready.set(true) - - // get all our entry points and config stuff up to date ... - locateJSReqs() - updateJSConfiguration() - updateNativeConfiguration() - - replayQueuedSignals() - } - - public func teardown(engine: Substrata.JSEngine) { - _ready.set(false) - } } -// MARK: -- Internal Stuff +// MARK: -- Configuration & Setup extension Signals { - internal func locateJSReqs() { + internal func locateJSRequirements() { assert(engine != nil, "ERROR: JSEngine hasn't been set!") engine?.perform { if signalObject == nil { signalObject = engine?["signals"]?.typed(as: JSClass.self) + signalAdd = signalObject?.value(for: "_add")?.typed(as: JSFunction.self) } - + if processSignals == nil { processSignals = engine?["processSignal"]?.typed(as: JSFunction.self) } } } - + + internal func updateConfiguration() { + // Update JS configuration + signalObject?.setValue(configuration.maximumBufferSize, for: "maxBufferSize") + StaticContext.configureRuntimeVersion(engine: engine) + + // Update native configuration + broadcasters = configuration.broadcasters + broadcastTimer = QueueTimer(interval: configuration.relayInterval, handler: { [weak self] in + guard let self else { return } + for b in self.broadcasters { b.relay() } + }) + + SignalsNetworkProtocol.allowedHosts = configuration.allowedNetworkHosts + SignalsNetworkProtocol.blockedHosts = configuration.blockedNetworkHosts + } +} + +// MARK: -- Utilities + +extension Signals { internal func replayQueuedSignals() { - assert(signalObject != nil, "ERROR: SignalObject is nil!") if queuedSignals.count > 0 { let queued = queuedSignals _queuedSignals.mutate { qs in qs.removeAll() } - + for item in queued { var signal = item.signal // update these, as we wouldn't have had them earlier @@ -237,22 +298,7 @@ extension Signals { } } } - - internal func updateJSConfiguration() { - signalObject?.setValue(configuration.maximumBufferSize, for: "maxBufferSize") - } - - internal func updateNativeConfiguration() { - broadcasters = configuration.broadcasters - broadcastTimer = QueueTimer(interval: configuration.relayInterval, handler: { [weak self] in - guard let self else { return } - for b in self.broadcasters { b.relay() } - }) - - SignalsNetworkProtocol.allowedHosts = configuration.allowedNetworkHosts - SignalsNetworkProtocol.blockedHosts = configuration.blockedNetworkHosts - } - + internal func isRepeating(event: RawEvent?) -> Bool { let type: String? = event?.context?.value(forKeyPath: KeyPath("__eventOrigin.type")) guard let type else { return false } @@ -262,3 +308,35 @@ extension Signals { return false } } + +// MARK: - Testing Utils +/// Reset the shared instance -- *FOR TESTING ONLY* +/// Needs to be here to access the @Atomic's. +extension Signals { + internal func reset() { + _ready.set(false) + _counter.set(0) + _queuedSignals.mutate { $0.removeAll() } + + stopAllSwizzlers() + + signalObject = nil + processSignals = nil + engine = nil + + broadcasters.removeAll() + broadcastTimer = nil + + analytics = nil + + _configuration.set(SignalsConfiguration(writeKey: "NONE")) + } + + internal func setReady(_ value: Bool) { + _ready.set(value) + } + + internal func queuedSignalsCount() -> Int { + return queuedSignals.count + } +} diff --git a/Sources/AnalyticsLive/Signals/Types.swift b/Sources/AnalyticsLive/Signals/Types.swift index 37f79d1..c283f63 100755 --- a/Sources/AnalyticsLive/Signals/Types.swift +++ b/Sources/AnalyticsLive/Signals/Types.swift @@ -54,35 +54,27 @@ public protocol RawSignal: Codable { var type: SignalType { get set } var timestamp: String { get set } var index: Int { get set } + var context: StaticContext? { get set } // this is set at emit time var data: T { get set } } // MARK: -- Navigation Signal public struct NavigationSignal: RawSignal { - public enum NavigationAction: String, Codable { - case forward - case backward - case modal - case entering - case leaving - case page - case popup - } - public struct NavigationData: Codable { - let action: NavigationAction - let screen: String + let currentScreen: String + let previousScreen: String? } public var anonymousId: String = Signals.shared.anonymousId public var type: SignalType = .navigation public var timestamp: String = Date().iso8601() public var index: Int = Signals.shared.nextIndex + public var context: StaticContext? = nil public var data: NavigationData - public init(action: NavigationAction, screen: String) { - self.data = NavigationData(action: action, screen: screen) + public init(currentScreen: String, previousScreen: String? = nil) { + self.data = NavigationData(currentScreen: currentScreen, previousScreen: previousScreen) } } @@ -91,15 +83,23 @@ public struct NavigationSignal: RawSignal { public struct InteractionSignal: RawSignal { public struct InteractionData: Codable { - let component: String - let title: String? - let data: JSON? + public struct Target: Codable { + let component: String + let title: String? + let data: JSON? + } + let target: Target + + init(component: String, title: String? = nil, data: JSON? = nil) { + self.target = Target(component: component, title: title, data: data) + } } public var anonymousId: String = Signals.shared.anonymousId public var type: SignalType = .interaction public var timestamp: String = Date().iso8601() public var index: Int = Signals.shared.nextIndex + public var context: StaticContext? = nil public var data: InteractionData public init(component: String, title: String? = nil, data: [String: Any]? = nil) { @@ -122,24 +122,52 @@ public struct NetworkSignal: RawSignal { public struct NetworkData: Codable { let action: NetworkAction - let url: URL - let statusCode: Int? - let data: JSON? + let url: URL? + let body: JSON? + let contentType: String? + let method: String? + let status: Int? + let ok: Bool? + let requestId: String + + init(action: NetworkAction, url: URL?, body: [String: Any]?, contentType: String?, method: String?, status: Int?, requestId: String) { + if let body { + let json: JSON? = try? JSON(body) + self.body = json + } else { + self.body = nil + } + + self.action = action + self.url = url + self.contentType = contentType + self.method = method + self.status = status + self.ok = (status ?? 0 >= 200 && status ?? 0 < 300) + self.requestId = requestId + } + + init(action: NetworkAction, url: URL?, body: JSON?, contentType: String?, method: String?, status: Int?, ok: Bool?, requestId: String) { + self.body = body + self.action = action + self.url = url + self.contentType = contentType + self.method = method + self.status = status + self.ok = ok + self.requestId = requestId + } } public var anonymousId: String = Signals.shared.anonymousId public var type: SignalType = .network public var timestamp: String = Date().iso8601() public var index: Int = Signals.shared.nextIndex + public var context: StaticContext? = nil public var data: NetworkData - public init(action: NetworkAction, url: URL, statusCode: Int? = nil, data: [String: Any]? = nil) { - if let data { - let json: JSON? = try? JSON(data) - self.data = NetworkData(action: action, url: url, statusCode: statusCode, data: json) - } else { - self.data = NetworkData(action: action, url: url, statusCode: statusCode, data: nil) - } + public init(data: NetworkData) { + self.data = data } } @@ -164,6 +192,7 @@ public struct LocalDataSignal: RawSignal { public var type: SignalType = .localData public var timestamp: String = Date().iso8601() public var index: Int = Signals.shared.nextIndex + public var context: StaticContext? = nil public var data: LocalData public init(action: LocalDataAction, identifier: String, data: [String: Any]? = nil) { @@ -197,6 +226,7 @@ public struct InstrumentationSignal: RawSignal { public var type: SignalType = .instrumentation public var timestamp: String = Date().iso8601() public var index: Int = Signals.shared.nextIndex + public var context: StaticContext? = nil public var data: InstrumentationData public init(event: RawEvent) { @@ -226,6 +256,7 @@ struct MyKindaSignal: RawSignal { var type: SignalType = .userDefined var timestamp: String = Date().iso8601() var index: Int = Signals.shared.nextIndex + var context: StaticContext? = nil var data: MyKindaData init(that: String) { diff --git a/Sources/AnalyticsLive/Signals/Utilities/Obfuscation.swift b/Sources/AnalyticsLive/Signals/Utilities/Obfuscation.swift index 4676c86..a3b3233 100755 --- a/Sources/AnalyticsLive/Signals/Utilities/Obfuscation.swift +++ b/Sources/AnalyticsLive/Signals/Utilities/Obfuscation.swift @@ -37,8 +37,17 @@ extension NetworkSignal: JSONObfuscation { public func obfuscated() -> any RawSignal { var working = self let wData = working.data - let obfuscated = obfuscate(working.data.data) - let data = NetworkData(action: wData.action, url: wData.url, statusCode: wData.statusCode, data: obfuscated) + let obfuscated = obfuscate(working.data.body) + let data = NetworkSignal.NetworkData( + action: wData.action, + url: wData.url, + body: obfuscated, + contentType: wData.contentType, + method: wData.method, + status: wData.status, + ok: wData.ok, + requestId: wData.requestId + ) working.data = data return working } diff --git a/Sources/AnalyticsLive/Signals/Utilities/PerfTracker.swift b/Sources/AnalyticsLive/Signals/Utilities/PerfTracker.swift new file mode 100644 index 0000000..0506471 --- /dev/null +++ b/Sources/AnalyticsLive/Signals/Utilities/PerfTracker.swift @@ -0,0 +1,56 @@ +/* + +import Foundation + +internal class SignalPerformanceTracker { + static let shared = SignalPerformanceTracker() + + private var processingTimes: [Double] = [] + private let queue = DispatchQueue(label: "signal.performance.tracker") + + private init() {} + + internal func recordProcessingTime(_ time: Double) { + queue.async { + self.processingTimes.append(time) + } + } + + internal func printStats() { + queue.sync { + guard !processingTimes.isEmpty else { + print("No signal processing times recorded") + return + } + + let totalTime = processingTimes.reduce(0, +) + let avgTime = totalTime / Double(processingTimes.count) + let maxTime = processingTimes.max() ?? 0 + let minTime = processingTimes.min() ?? 0 + + // Calculate percentiles + let sorted = processingTimes.sorted() + let p50 = sorted[sorted.count / 2] + let p95 = sorted[Int(Double(sorted.count) * 0.95)] + let p99 = sorted[Int(Double(sorted.count) * 0.99)] + + print("=== Signal Processing Performance ===") + print("Total signals: \(processingTimes.count)") + print("Average: \(String(format: "%.2f", avgTime))ms") + print("Min: \(String(format: "%.2f", minTime))ms") + print("Max: \(String(format: "%.2f", maxTime))ms") + print("P50: \(String(format: "%.2f", p50))ms") + print("P95: \(String(format: "%.2f", p95))ms") + print("P99: \(String(format: "%.2f", p99))ms") + print("=====================================") + } + } + + internal func reset() { + queue.async { + self.processingTimes.removeAll() + } + } +} + +*/ diff --git a/Tests/.DS_Store b/Tests/.DS_Store deleted file mode 100755 index 9745018..0000000 Binary files a/Tests/.DS_Store and /dev/null differ diff --git a/Tests/AnalyticsLiveTests/.DS_Store b/Tests/AnalyticsLiveTests/.DS_Store deleted file mode 100755 index fc4fb0a..0000000 Binary files a/Tests/AnalyticsLiveTests/.DS_Store and /dev/null differ diff --git a/Tests/AnalyticsLiveTests/LivePlugins/EdgeFnDataTests.swift b/Tests/AnalyticsLiveTests/LivePlugins/EdgeFnDataTests.swift new file mode 100644 index 0000000..7cec1a2 --- /dev/null +++ b/Tests/AnalyticsLiveTests/LivePlugins/EdgeFnDataTests.swift @@ -0,0 +1,376 @@ +// +// EdgeFnDataTests.swift +// AnalyticsLive +// +// Created by Brandon Sneed on 7/14/25. +// + +import Foundation +import XCTest +@testable import Segment +@testable import Substrata +@testable import AnalyticsLive + +/** + Dedicated tests for EdgeFunction data handling logic. + These tests specifically target the setEdgeFnData method and related download logic + to ensure completion callbacks are ALWAYS called and edge cases are handled properly. + */ +class EdgeFunctionDataHandlingTests: XCTestCase { + + // Use the exact same URL strings that will be put in test data + let validDownloadURLString = "http://segment.com/bundles/testbundle.js" + let invalidDownloadURLString = "http://error.com/bundles/testbundle.js" + let malformedURLString = "not-a-valid-url-at-all" + + var livePlugins: LivePlugins! + + override func setUpWithError() throws { + // Setup mock network handling - following the exact pattern from BundlerTests + Bundler.sessionConfig = URLSessionConfiguration.ephemeral + Bundler.sessionConfig.protocolClasses = [URLProtocolMock.self] + + let dataFile = bundleTestFile(file: "testbundle.js") + let bundleData = try Data(contentsOf: dataFile!) + + // Create URLs from the exact strings we'll use in test data + let validURL = URL(string: validDownloadURLString)! + let errorURL = URL(string: invalidDownloadURLString)! + let malformedURL = URL(string: malformedURLString)! // this surprisingly works lol. + + URLProtocolMock.testURLs = [ + validURL: .success(bundleData), + errorURL: .failure(NetworkError.failed(URLError.cannotLoadFromNetwork)), + malformedURL: .failure(NetworkError.failed(URLError.badURL)) + ] + + // Clear any existing cache + LivePlugins.clearCache() + + // Create a fresh LivePlugins instance + livePlugins = LivePlugins(fallbackFileURL: bundleTestFile(file: "testbundle.js")) + } + + override func tearDownWithError() throws { + Bundler.sessionConfig = URLSessionConfiguration.default + LivePlugins.clearCache() + livePlugins = nil + } + + // MARK: - Completion Callback Guarantee Tests + + func testCompletionCalledWithNilData() throws { + let expectation = XCTestExpectation(description: "Completion called with nil data") + + livePlugins.setEdgeFnData(nil) { success in + XCTAssertFalse(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + func testCompletionCalledWithInvalidDataType() throws { + let expectation = XCTestExpectation(description: "Completion called with invalid data type") + + let invalidData: [AnyHashable: Any] = ["someKey": 123] // Not a string dict + + livePlugins.setEdgeFnData(invalidData) { success in + XCTAssertFalse(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + func testCompletionCalledWithMissingVersionKey() throws { + let expectation = XCTestExpectation(description: "Completion called with missing version") + + let dataWithoutVersion: [String: Any] = [ + "downloadURL": "http://example.com/bundle.js" + // Missing version key + ] + + livePlugins.setEdgeFnData(dataWithoutVersion) { success in + XCTAssertFalse(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + func testCompletionCalledWithMissingDownloadURLKey() throws { + let expectation = XCTestExpectation(description: "Completion called with missing downloadURL") + + let dataWithoutURL: [String: Any] = [ + "version": 1 + // Missing downloadURL key + ] + + livePlugins.setEdgeFnData(dataWithoutURL) { success in + XCTAssertFalse(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + func testCompletionCalledWithInvalidURLString() throws { + let expectation = XCTestExpectation(description: "Completion called with invalid URL") + + let dataWithInvalidURL: [String: Any] = [ + "version": 1, + "downloadURL": 12345 // Not a string! + ] + + livePlugins.setEdgeFnData(dataWithInvalidURL) { success in + XCTAssertFalse(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + func testCompletionCalledWithEmptyURLString() throws { + let expectation = XCTestExpectation(description: "Completion called with empty URL") + + let dataWithEmptyURL: [String: Any] = [ + "version": 1, + "downloadURL": "" // Empty string - should disable bundle + ] + + livePlugins.setEdgeFnData(dataWithEmptyURL) { success in + XCTAssertTrue(success) // Empty URL is treated as "disable" = success + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + func testCompletionCalledWithMalformedURL() throws { + let expectation = XCTestExpectation(description: "Completion called with malformed URL") + + let dataWithBadURL: [String: Any] = [ + "version": 1, + "downloadURL": "not-a-valid-url-at-all" + ] + + livePlugins.setEdgeFnData(dataWithBadURL) { success in + XCTAssertFalse(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 1.0) + } + + // MARK: - Version Comparison Tests + + func testFirstTimeInstallTriggersDownload() throws { + let expectation = XCTestExpectation(description: "First install triggers download") + + let newData: [String: Any] = [ + "version": 1, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(newData) { success in + XCTAssertTrue(success) + expectation.fulfill() + } + + wait(for: [expectation], timeout: 5.0) + } + + func testNewerVersionTriggersDownload() throws { + // First, install version 1 + let firstExpectation = XCTestExpectation(description: "Install version 1") + + let initialData: [String: Any] = [ + "version": 1, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(initialData) { success in + XCTAssertTrue(success) + firstExpectation.fulfill() + } + + wait(for: [firstExpectation], timeout: 5.0) + + // Now try to install version 2 + let secondExpectation = XCTestExpectation(description: "Install version 2") + + let newerData: [String: Any] = [ + "version": 2, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(newerData) { success in + XCTAssertTrue(success) + secondExpectation.fulfill() + } + + wait(for: [secondExpectation], timeout: 5.0) + } + + func testSameVersionSkipsDownload() throws { + // First, install version 1 + let firstExpectation = XCTestExpectation(description: "Install version 1") + + let initialData: [String: Any] = [ + "version": 1, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(initialData) { success in + XCTAssertTrue(success) + firstExpectation.fulfill() + } + + wait(for: [firstExpectation], timeout: 5.0) + + // Now try to install same version again + let secondExpectation = XCTestExpectation(description: "Skip same version") + + let sameData: [String: Any] = [ + "version": 1, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(sameData) { success in + XCTAssertTrue(success) // Should succeed but skip download + secondExpectation.fulfill() + } + + wait(for: [secondExpectation], timeout: 1.0) // Should be fast since no download + } + + func testOlderVersionSkipsDownload() throws { + // First, install version 2 + let firstExpectation = XCTestExpectation(description: "Install version 2") + + let newerData: [String: Any] = [ + "version": 2, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(newerData) { success in + XCTAssertTrue(success) + firstExpectation.fulfill() + } + + wait(for: [firstExpectation], timeout: 5.0) + + // Now try to "downgrade" to version 1 + let secondExpectation = XCTestExpectation(description: "Skip older version") + + let olderData: [String: Any] = [ + "version": 1, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(olderData) { success in + XCTAssertTrue(success) // Should succeed but skip download + secondExpectation.fulfill() + } + + wait(for: [secondExpectation], timeout: 1.0) // Should be fast since no download + } + + // MARK: - Network Failure Tests + + func testNetworkFailureCallsCompletion() throws { + let expectation = XCTestExpectation(description: "Network failure calls completion") + + let dataWithFailingURL: [String: Any] = [ + "version": 1, + "downloadURL": invalidDownloadURLString + ] + + livePlugins.setEdgeFnData(dataWithFailingURL) { success in + XCTAssertFalse(success) // Should fail due to network error + expectation.fulfill() + } + + wait(for: [expectation], timeout: 5.0) + } + + // MARK: - Edge Case Tests + + func testInvalidVersionNumbersHandledGracefully() throws { + let expectation = XCTestExpectation(description: "Invalid version numbers handled") + + let dataWithBadVersion: [String: Any] = [ + "version": "not-a-number", + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(dataWithBadVersion) { success in + // Should handle gracefully - version will default to 0 + expectation.fulfill() + } + + wait(for: [expectation], timeout: 5.0) + } + + func testConcurrentCallsHandledSafely() throws { + let expectation1 = XCTestExpectation(description: "First call completes") + let expectation2 = XCTestExpectation(description: "Second call completes") + + let data1: [String: Any] = [ + "version": 1, + "downloadURL": validDownloadURLString + ] + + let data2: [String: Any] = [ + "version": 2, + "downloadURL": validDownloadURLString + ] + + // Fire both calls simultaneously + livePlugins.setEdgeFnData(data1) { success in + expectation1.fulfill() + } + + livePlugins.setEdgeFnData(data2) { success in + expectation2.fulfill() + } + + wait(for: [expectation1, expectation2], timeout: 10.0) + } + + // MARK: - Cache and UserDefaults Tests + + func testUserDefaultsUpdatedOnSuccessfulDownload() throws { + let expectation = XCTestExpectation(description: "UserDefaults updated") + + let testData: [String: Any] = [ + "version": 42, + "downloadURL": validDownloadURLString + ] + + livePlugins.setEdgeFnData(testData) { success in + XCTAssertTrue(success) + + // Verify UserDefaults was updated + let savedData = UserDefaults.standard.dictionary(forKey: "LivePlugin") + XCTAssertNotNil(savedData) + XCTAssertEqual(savedData?["version"] as? Int, 42) + + expectation.fulfill() + } + + wait(for: [expectation], timeout: 5.0) + } +} + +// MARK: - Helper Extensions + +extension EdgeFunctionDataHandlingTests { + + /// Helper to get test bundle file URLs - matching the working pattern + private func bundleTestFile(file: String) -> URL? { + // This should match however bundleTestFile is implemented in the working tests + return Bundle.module.url(forResource: file, withExtension: nil) + } +} diff --git a/Tests/AnalyticsLiveTests/LivePlugins/LivePluginTests.swift b/Tests/AnalyticsLiveTests/LivePlugins/LivePluginTests.swift index 869ec06..ea965d7 100755 --- a/Tests/AnalyticsLiveTests/LivePlugins/LivePluginTests.swift +++ b/Tests/AnalyticsLiveTests/LivePlugins/LivePluginTests.swift @@ -44,7 +44,7 @@ class LivePluginTests: XCTestCase { checkIfLeaked(ajs) } - func testEdgeFnMultipleLoad() throws { + /*func testEdgeFnMultipleLoad() throws { LivePlugins.clearCache() let analytics = Analytics(configuration: Configuration(writeKey: "1234")) @@ -62,7 +62,7 @@ class LivePluginTests: XCTestCase { waitUntilFinished(analytics: analytics) checkIfLeaked(analytics) - } + }*/ func testEdgeFnLoad() throws { LivePlugins.clearCache() @@ -128,38 +128,82 @@ class LivePluginTests: XCTestCase { // Ensure that BOOL values are preserved XCTAssertTrue(dv!["isBool"] as! Bool) } - - func testAddRemoveLivePlugins() throws { + + func testForceFallbackLoadsCorrectly() throws { LivePlugins.clearCache() - + let analytics = Analytics(configuration: Configuration(writeKey: "1234")) - - let livePlugin = LivePlugins(fallbackFileURL: bundleTestFile(file: "addliveplugin.js")) - - // The script addliveplugins.js will add a LivePlugin to both the main timeline and the - // timeline of the Segment destination - analytics.add(plugin: livePlugin) - + + // Create LivePlugins with forceFallback = true + let livePlugins = LivePlugins(fallbackFileURL: bundleTestFile(file: "testbundle.js"), force: true) + analytics.add(plugin: livePlugins) + + let outputReader = OutputReaderPlugin() + analytics.add(plugin: outputReader) + waitUntilStarted(analytics: analytics) + + // Send an event to verify the fallback JS is working + analytics.track(name: "test fallback", properties: nil) + + var lastEvent: RawEvent? = nil + while lastEvent == nil { + RunLoop.main.run(until: Date.distantPast) + lastEvent = outputReader.lastEvent + } + + // Verify the fallback file was loaded by checking for the expected message + let msg: String? = lastEvent?.context?[keyPath: "livePluginMessage"]! + XCTAssertEqual(msg, "This came from a LivePlugin") + + waitUntilFinished(analytics: analytics) + checkIfLeaked(analytics) + } - let lpMain = analytics.find(pluginType: LivePlugin.self) - let lpDest = analytics.find(key: "Segment.io")?.timeline.find(pluginType: LivePlugin.self) - - XCTAssertNotNil(lpMain) - XCTAssertNotNil(lpDest) - - livePlugin.engine.evaluate(script: "analytics.removeLivePlugins()") - - let lpMainAfter = analytics.find(pluginType: LivePlugin.self) - let lpDestAfter = analytics.find(key: "Segment.io")?.timeline.find(pluginType: LivePlugin.self) - - XCTAssertNil(lpMainAfter) - XCTAssertNil(lpDestAfter) + func testBadSettingsDataTriggersFallback() throws { + LivePlugins.clearCache() + + // Setup mock network to ensure any download attempts fail + Bundler.sessionConfig = URLSessionConfiguration.ephemeral + Bundler.sessionConfig.protocolClasses = [URLProtocolMock.self] + + // Add the failing URL from badSettings.json to the mock dictionary + let failingURL = URL(string: "http://this-will-fail-no-mock.com/bundle.js")! + URLProtocolMock.testURLs = [ + failingURL: .failure(NetworkError.failed(URLError.cannotLoadFromNetwork)) + ] + + // Load bad settings from JSON file - this contains an edgeFunction with a URL that will fail + let badDefaults = Settings.load(resource: "badSettings.json", bundle: Bundle.module) + + let config = Configuration(writeKey: "testBadSettings").defaultSettings(badDefaults) + let analytics = Analytics(configuration: config) + + // Add LivePlugins with fallback file + let livePlugins = LivePlugins(fallbackFileURL: bundleTestFile(file: "testbundle.js")) + analytics.add(plugin: livePlugins) + + let outputReader = OutputReaderPlugin() + analytics.add(plugin: outputReader) + + waitUntilStarted(analytics: analytics) - analytics.remove(plugin: livePlugin) + // Send an event to verify the fallback JS is working + analytics.track(name: "test bad settings fallback", properties: nil) + + var lastEvent: RawEvent? = nil + while lastEvent == nil { + RunLoop.main.run(until: Date.distantPast) + lastEvent = outputReader.lastEvent + } - RunLoop.main.run(until: Date().addingTimeInterval(1)) + // Verify the fallback file was loaded despite the bad settings + let msg: String? = lastEvent?.context?[keyPath: "livePluginMessage"]! + XCTAssertEqual(msg, "This came from a LivePlugin") + // Clean up + Bundler.sessionConfig = URLSessionConfiguration.default + waitUntilFinished(analytics: analytics) checkIfLeaked(analytics) } } diff --git a/Tests/AnalyticsLiveTests/Signals/SignalsTests.swift b/Tests/AnalyticsLiveTests/Signals/SignalsTests.swift index 248e4bc..619762c 100755 --- a/Tests/AnalyticsLiveTests/Signals/SignalsTests.swift +++ b/Tests/AnalyticsLiveTests/Signals/SignalsTests.swift @@ -2,6 +2,20 @@ import XCTest import Segment @testable import AnalyticsLive +class MockBroadcaster: SignalBroadcaster { + var analytics: Analytics? + var relayCallCount = 0 + var addedSignals: [any RawSignal] = [] + + func added(signal: any RawSignal) { + addedSignals.append(signal) + } + + func relay() { + relayCallCount += 1 + } +} + final class TestSignals: XCTestCase { override func setUpWithError() throws { @@ -82,4 +96,394 @@ final class TestSignals: XCTestCase { waitForExpectations(timeout: 5) } + + func testCounterRelayOnCount() throws { + // Reset shared instance to clean state + Signals.shared.reset() + + let mockBroadcaster = MockBroadcaster() + + // Set up test configuration with low relay count + let config = SignalsConfiguration( + writeKey: "test", + maximumBufferSize: 1000, // High so it doesn't trigger + relayCount: 3, // Trigger after 3 signals + broadcasters: [mockBroadcaster] + ) + + // Configure the shared instance + Signals.shared.useConfiguration(config) + + // Set ready state to bypass queueing + Signals.shared.setReady(true) + + // Emit 2 signals - should not trigger relay + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 1")) + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 2")) + + XCTAssertEqual(mockBroadcaster.relayCallCount, 0, "Should not relay before threshold") + XCTAssertEqual(mockBroadcaster.addedSignals.count, 2, "Should have added 2 signals") + + // Emit 3rd signal - should trigger relay + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 3")) + + XCTAssertEqual(mockBroadcaster.relayCallCount, 1, "Should relay after hitting count threshold") + XCTAssertEqual(mockBroadcaster.addedSignals.count, 3, "Should have added 3 signals") + + // Emit another signal - counter should have reset, no relay yet + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 4")) + + XCTAssertEqual(mockBroadcaster.relayCallCount, 1, "Should still be 1 relay (counter reset)") + XCTAssertEqual(mockBroadcaster.addedSignals.count, 4, "Should have added 4 signals") + } + + func testCounterRelayOnBufferSize() throws { + Signals.shared.reset() + + let mockBroadcaster = MockBroadcaster() + + // Set up test configuration with low buffer size + let config = SignalsConfiguration( + writeKey: "test", + maximumBufferSize: 2, // Trigger after 2 signals + relayCount: 1000, // High so it doesn't trigger + broadcasters: [mockBroadcaster] + ) + + Signals.shared.useConfiguration(config) + Signals.shared.setReady(true) + + // Emit 1 signal - should not trigger + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 1")) + XCTAssertEqual(mockBroadcaster.relayCallCount, 0) + + // Emit 2nd signal - should not trigger (> threshold, not >=) + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 2")) + XCTAssertEqual(mockBroadcaster.relayCallCount, 0) + + // Emit 3rd signal - should trigger (counter > maximumBufferSize) + Signals.emit(signal: InteractionSignal(component: "button", title: "Test Button 3")) + XCTAssertEqual(mockBroadcaster.relayCallCount, 1, "Should relay when counter exceeds buffer size") + } + + func testSignalQueueing() throws { + Signals.shared.reset() + + let mockBroadcaster = MockBroadcaster() + + let config = SignalsConfiguration( + writeKey: "test", + broadcasters: [mockBroadcaster] + ) + + Signals.shared.useConfiguration(config) + + // Keep ready = false to test queueing + Signals.shared.setReady(false) + + // Emit signals while not ready - should be queued, not processed + Signals.emit(signal: InteractionSignal(component: "button", title: "Queued Button 1")) + Signals.emit(signal: NavigationSignal(currentScreen: "Queued Screen", previousScreen: "Root")) + Signals.emit(signal: InteractionSignal(component: "link", title: "Queued Link")) + + // Verify no signals reached the broadcaster yet + XCTAssertEqual(mockBroadcaster.addedSignals.count, 0, "No signals should be processed while not ready") + XCTAssertEqual(mockBroadcaster.relayCallCount, 0, "No relay should happen while not ready") + + // Verify signals are actually queued + let queuedCount = Signals.shared.queuedSignalsCount() // You'll need to add this method + XCTAssertEqual(queuedCount, 3, "Should have 3 queued signals") + } + + func testSignalReplay() throws { + Signals.shared.reset() + + let mockBroadcaster = MockBroadcaster() + + let config = SignalsConfiguration( + writeKey: "test", + broadcasters: [mockBroadcaster] + ) + + Signals.shared.useConfiguration(config) + + // Queue some signals while not ready + Signals.shared.setReady(false) + Signals.emit(signal: InteractionSignal(component: "button", title: "Queued Button 1")) + Signals.emit(signal: InteractionSignal(component: "button", title: "Queued Button 2")) + + // Verify they're queued + XCTAssertEqual(Signals.shared.queuedSignalsCount(), 2) + XCTAssertEqual(mockBroadcaster.addedSignals.count, 0) + + // Now set ready = true and trigger replay + Signals.shared.setReady(true) + + // Manually trigger replay to test the logic + Signals.shared.replayQueuedSignals() + + // Verify queued signals were replayed + XCTAssertEqual(mockBroadcaster.addedSignals.count, 2, "Both queued signals should be replayed") + XCTAssertEqual(Signals.shared.queuedSignalsCount(), 0, "Queue should be empty after replay") + } + + func testFullStackSignalProcessingWithCustomJS() throws { + LivePlugins.clearCache() + + // Get our custom JS files + guard let myEdgeFunctionsJS = bundleTestFile(file: "MyEdgeFunctions.js"), + let testBundleJS = bundleTestFile(file: "testbundle.js") else { + XCTFail("Could not find test JS files") + return + } + + // Set up analytics with output reader to capture generated events + let config = Configuration(writeKey: "integration_test") + .flushInterval(999999999) + .flushAt(99999999) + .setTrackedApplicationLifecycleEvents(.none) + let analytics = Analytics(configuration: config) + + let outputReader = OutputReaderPlugin() + analytics.add(plugin: outputReader) + + // Create LivePlugins with our custom JS and strict error handling + let livePlugins = LivePlugins( + fallbackFileURL: bundleTestFile(file: "runtimeBundleNoProcess.js"), // No fallback needed for this test + force: true, + exceptionHandler: { error in + XCTFail("JS Error detected: \(error.string)") + }, + localJSURLs: [myEdgeFunctionsJS, testBundleJS] + ) + + // Set up signals with mock broadcaster to capture signals + let mockBroadcaster = MockBroadcaster() + let signalsConfig = SignalsConfiguration( + writeKey: "integration_test", + maximumBufferSize: 1000, + broadcasters: [mockBroadcaster] + ) + + // Wire up the system + analytics.add(plugin: livePlugins) + analytics.add(plugin: Signals.shared) + Signals.shared.useConfiguration(signalsConfig) + + // Wait for everything to be ready + analytics.waitUntilStarted() + + // Give JS engine a moment to load our custom files + Thread.sleep(forTimeInterval: 1.0) + + // Test 1: Navigation signal should trigger screenCall() -> analytics.screen() + let navigationSignal = NavigationSignal(currentScreen: "Test Screen", previousScreen: "Root") + Signals.emit(signal: navigationSignal) + + // Wait for the signal to be processed and event generated + var screenEvent: RawEvent? = nil + let startTime = Date() + while screenEvent == nil && Date().timeIntervalSince(startTime) < 5.0 { + RunLoop.main.run(until: Date.distantPast) + if let lastEvent = outputReader.lastEvent, lastEvent.type == "screen" { + screenEvent = lastEvent + } + } + + XCTAssertNotNil(screenEvent, "Navigation signal should have generated a screen event") + if let screenEvent = screenEvent { + XCTAssertEqual(screenEvent.type, "screen") + print("Generated screen event: \(screenEvent.prettyPrint())") + } + + // Test 2: Interaction signal should trigger trackAddToCart() -> analytics.track() + // needs network signal with product data + let body: [String: Any] = [ + "data": ["id": "1", "title": "Test Product", "price": 10.0] + ] + let networkData = NetworkSignal.NetworkData(action: .response, url: URL(string: "https://example.com/proudcts/1"), body: body, contentType: "application/json", method: nil, status: 200, requestId: "1234") + let networkSignal = NetworkSignal(data: networkData) + Signals.emit(signal: networkSignal) + + let interactionSignal = InteractionSignal(component: "button", title: "Add to cart") + Signals.emit(signal: interactionSignal) + + // Wait for the track event + var trackEvent: TrackEvent? = nil + let trackStartTime = Date() + while trackEvent == nil && Date().timeIntervalSince(trackStartTime) < 5.0 { + RunLoop.main.run(until: Date.distantPast) + if let lastEvent = outputReader.lastEvent as? TrackEvent { + if lastEvent.event == "Add to cart" { + trackEvent = lastEvent + } + } + } + + XCTAssertNotNil(trackEvent, "Interaction signal should have generated a track event") + if let trackEvent = trackEvent { + XCTAssertEqual(trackEvent.event, "Add to cart") + print("Generated track event: \(trackEvent.prettyPrint())") + } + + // Verify signals were captured by the broadcaster + XCTAssertGreaterThanOrEqual(mockBroadcaster.addedSignals.count, 2, + "Should have captured at least 2 signals") + + // Verify signal types + let signalTypes = mockBroadcaster.addedSignals.map { $0.type } + XCTAssertTrue(signalTypes.contains(.navigation), "Should have captured navigation signal") + XCTAssertTrue(signalTypes.contains(.interaction), "Should have captured interaction signal") + + print("Test completed successfully! Captured \(mockBroadcaster.addedSignals.count) signals") + } + + func testJSErrorHandling() throws { + LivePlugins.clearCache() + + // Get our intentionally broken JS file from the bundle + guard let badJSFile = bundleTestFile(file: "badtest.js") else { + XCTFail("Could not find badtest.js file") + return + } + + let analytics = Analytics(configuration: Configuration(writeKey: "error_test")) + + let errorExpectation = self.expectation(description: "JS error caught") + + // This should trigger our error handler + let livePlugins = LivePlugins( + fallbackFileURL: nil, + force: false, + exceptionHandler: { error in + print("Caught expected JS error: \(error.string)") + XCTAssertTrue(error.string.contains("thisFunctionDoesNotExist") || + error.string.contains("not defined") || + error.string.contains("ReferenceError"), + "Error should mention the missing function or reference error") + errorExpectation.fulfill() + }, + localJSURLs: [badJSFile] + ) + + analytics.add(plugin: livePlugins) + analytics.waitUntilStarted() + + // Give time for JS to load and error + waitForExpectations(timeout: 5) + } + + func testBundledRuntimeFileLoad() throws { + LivePlugins.clearCache() + + // Set up analytics with output reader to capture generated events + let config = Configuration(writeKey: "integration_test") + .flushInterval(999999999) + .flushAt(99999999) + .setTrackedApplicationLifecycleEvents(.none) + let analytics = Analytics(configuration: config) + + let outputReader = OutputReaderPlugin() + analytics.add(plugin: outputReader) + + // Create LivePlugins with our custom JS and strict error handling + let livePlugins = LivePlugins( + fallbackFileURL: bundleTestFile(file: "runtimeBundle.js"), + force: true, + exceptionHandler: { error in + XCTFail("JS Error detected: \(error.string)") + } + ) + + // Set up signals with mock broadcaster to capture signals + let mockBroadcaster = MockBroadcaster() + let signalsConfig = SignalsConfiguration( + writeKey: "integration_test", + maximumBufferSize: 1000, + broadcasters: [mockBroadcaster] + ) + + // Wire up the system + analytics.add(plugin: livePlugins) + analytics.add(plugin: Signals.shared) + Signals.shared.useConfiguration(signalsConfig) + + // Wait for everything to be ready + analytics.waitUntilStarted() + } + + /*func testPerformance() throws { + // Get our custom JS files + guard let myEdgeFunctionsJS = bundleTestFile(file: "MyEdgeFunctions.js"), + let testBundleJS = bundleTestFile(file: "testbundle.js") else { + XCTFail("Could not find test JS files") + return + } + + LivePlugins.clearCache() + + SignalPerformanceTracker.shared.reset() + + // Set up analytics with output reader to capture generated events + let config = Configuration(writeKey: "integration_test") + .flushInterval(999999999) + .flushAt(99999999) + .setTrackedApplicationLifecycleEvents(.none) + let analytics = Analytics(configuration: config) + + //let outputReader = OutputReaderPlugin() + //analytics.add(plugin: outputReader) + + // Create LivePlugins with our custom JS and strict error handling + let livePlugins = LivePlugins( + fallbackFileURL: bundleTestFile(file: "runtimeBundle.js"), + force: true, + exceptionHandler: { error in + XCTFail("JS Error detected: \(error.string)") + }, + //localJSURLs: [myEdgeFunctionsJS, testBundleJS] + ) + + // Set up signals with mock broadcaster to capture signals + let mockBroadcaster = MockBroadcaster() + let signalsConfig = SignalsConfiguration( + writeKey: "integration_test", + maximumBufferSize: 1000, + broadcasters: [mockBroadcaster] + ) + + // Wire up the system + analytics.add(plugin: livePlugins) + analytics.add(plugin: Signals.shared) + Signals.shared.useConfiguration(signalsConfig) + + // Wait for everything to be ready + analytics.waitUntilStarted() + + let expectation = self.expectation(description: "Signals emitted") + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + for _ in 0..<1 { + let navigationSignal = NavigationSignal(currentScreen: "Test Screen", previousScreen: "Root") + Signals.emit(signal: navigationSignal) + + let body: [String: Any] = [ + "data": ["id": "1", "title": "Test Product", "price": 10.0] + ] + let networkData = NetworkSignal.NetworkData(action: .response, url: URL(string: "https://example.com/products/1"), body: body, contentType: "application/json", method: nil, status: 200, requestId: "1234") + let networkSignal = NetworkSignal(data: networkData) + Signals.emit(signal: networkSignal) + + let interactionSignal = InteractionSignal(component: "button", title: "Add to cart") + Signals.emit(signal: interactionSignal) + } + expectation.fulfill() + } + + wait(for: [expectation], timeout: 120) + + //print(outputReader.lastEvent!) + + SignalPerformanceTracker.shared.printStats() + }*/ } diff --git a/Tests/AnalyticsLiveTests/TestHelpers/MyEdgeFunctions.js b/Tests/AnalyticsLiveTests/TestHelpers/MyEdgeFunctions.js index d61fdd5..b9ee745 100755 --- a/Tests/AnalyticsLiveTests/TestHelpers/MyEdgeFunctions.js +++ b/Tests/AnalyticsLiveTests/TestHelpers/MyEdgeFunctions.js @@ -1,47 +1,28 @@ -console.log("edgefn script loaded for reals.") - function screenCall(currentSignal) { - if (currentSignal.type == "NavigationChange") { - analytics.screen( - currentSignal.data.screen, - "category", - { prop1: "hello"} - ) - } + if (currentSignal.type == "navigation") { + analytics.screen(currentSignal.data.currentScreen, "category", { prop1: "hello"}) + } } function trackAddToCart(currentSignal) { - if (currentSignal.type == "UIInteraction" && - currentSignal.data.title == "Add to cart") { + if (currentSignal.type == "interaction" && + currentSignal.data.target.title == "Add to cart") { var properties = new Object() - let network = signals.find(currentSignal, NetworkActivity.type, (signal) => { - return signal.event === NetworkActivity.event.Response - }) + let network = signals.find(currentSignal, "network", (signal) => { + return signal.data.url.includes("/products") + }) if (network) { - properties.price = network.data.options.priceV2.amount - properties.currency = network.data.options.priceV2.currencyCode - properties.productId = network.data.options.id + properties.price = network.data.price + properties.productId = network.data.id properties.productName = network.data.title } - analytics.track(currentSignal.data.title, properties) - } -} - -function detectIdentify(currentSignal) { - if (currentSignal.type == "UIInteraction" && currentSignal.data.control == "Username") { - let loginTapped = signals.find(currentSignal, UIInteraction.type, (signal) => { - return signal.data.title === "Login" - }) - if (loginTapped) { - analytics.identify(currentSignal.data.title, null) - } + analytics.track(currentSignal.data.target.title, properties) } } function processSignal(signal) { screenCall(signal) trackAddToCart(signal) - detectIdentify(signal) } diff --git a/Tests/AnalyticsLiveTests/TestHelpers/badSettings.json b/Tests/AnalyticsLiveTests/TestHelpers/badSettings.json new file mode 100644 index 0000000..b3faa51 --- /dev/null +++ b/Tests/AnalyticsLiveTests/TestHelpers/badSettings.json @@ -0,0 +1,36 @@ +{ + "_lastModified": "2025-07-08T12:21:53.398Z", + "integrations": { + "Segment.io": { + "apiKey": "testkey", + "unbundledIntegrations": [], + "addBundledMetadata": true, + "apiHost": "api.segment.io/v1" + } + }, + "plan": { + "track": { + "__default": { + "enabled": true, + "integrations": {} + } + } + }, + "edgeFunction": { + "downloadURL": "http://this-will-fail-no-mock.com/bundle.js", + "version": 1 + }, + "analyticsNextEnabled": true, + "middlewareSettings": {}, + "enabledMiddleware": {}, + "metrics": { + "sampleRate": 0.1, + "host": "api.segment.io/v1" + }, + "legacyVideoPluginsEnabled": false, + "remotePlugins": [], + "autoInstrumentationSettings": { + "disableTraffic": false, + "sampleRate": 0 + } +} diff --git a/Tests/AnalyticsLiveTests/TestHelpers/badtest.js b/Tests/AnalyticsLiveTests/TestHelpers/badtest.js new file mode 100644 index 0000000..68ac763 --- /dev/null +++ b/Tests/AnalyticsLiveTests/TestHelpers/badtest.js @@ -0,0 +1,3 @@ +console.log("This will work"); +thisFunctionDoesNotExist(); // This should cause an error +console.log("This won't run"); diff --git a/Tests/AnalyticsLiveTests/TestHelpers/runtimeBundle.js b/Tests/AnalyticsLiveTests/TestHelpers/runtimeBundle.js new file mode 100644 index 0000000..d321551 --- /dev/null +++ b/Tests/AnalyticsLiveTests/TestHelpers/runtimeBundle.js @@ -0,0 +1,98 @@ +console.log("howdy!") +globalThis.SEGMENT_SIGNALS_RULES_DEBUG = true; + +/*! For license information please see bundle.js.LICENSE.txt */ +!function(){var e={70:function(e){"use strict";var t=Object.prototype.toString;e.exports=t},115:function(e,t,n){"use strict";var r;r=!0===n(766)?1:0,e.exports=r},141:function(e,t,n){"use strict";var r=n(4850),u={uint16:n(5585),uint8:r};e.exports=u},449:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var u=n(4510)();e.exports=function(){return u&&"symbol"===r(Symbol.toStringTag)}},469:function(e){"use strict";var t="function"==typeof Uint32Array?Uint32Array:void 0;e.exports=t},558:function(e){"use strict";var t="function"==typeof Uint8Array?Uint8Array:null;e.exports=t},583:function(e,t,n){"use strict";var r=n(8914);e.exports=r},640:function(e){"use strict";var t="function"==typeof Symbol?Symbol.toStringTag:"";e.exports=t},667:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=u(n(5406));function o(e,t){if(!Array.isArray(e))return!0===a(e,t);var n,u,i,f,h=e[0];switch(h){case"!":return!o(e[1],t);case"or":for(var p=1;p":case">=":return function(e,t,n,r){if(s(e)&&(e=o(e,r)),s(t)&&(t=o(t,r)),"number"!=typeof e||"number"!=typeof t)return!1;switch(n){case"<=":return e<=t;case">=":return e>=t;case"<":return e":return e>t;default:throw new Error("Invalid operator in compareNumbers: ".concat(n))}}(a(e[1],t),a(e[2],t),h,t);case"in":return function(e,t,n){return void 0!==t.find(function(t){return a(t,n)===e})}(a(e[1],t),a(e[2],t),t);case"contains":return i=a(e[1],t),f=a(e[2],t),"string"==typeof i&&"string"==typeof f&&-1!==i.indexOf(f);case"match":return n=a(e[1],t),u=a(e[2],t),"string"==typeof n&&"string"==typeof u&&function(e,t){var n,r;e:for(;e.length>0;){var u,i;if(u=(n=c(e)).star,i=n.chunk,e=n.pattern,u&&""===i)return!0;var o=l(i,t),a=o.t,s=o.ok,f=o.err;if(f)return!1;if(!s||!(0===a.length||e.length>0)){if(u)for(var h=0;h0)continue;t=a;continue e}if(f)return!1}return!1}t=a}return 0===t.length}(u,n);case"lowercase":var D=a(e[1],t);return"string"!=typeof D?null:D.toLowerCase();case"typeof":return r(a(e[1],t));case"length":return function(e){return null===e?0:Array.isArray(e)||"string"==typeof e?e.length:NaN}(a(e[1],t));default:throw new Error("FQL IR could not evaluate for token: ".concat(h))}}function a(e,t){return Array.isArray(e)?e:"object"===r(e)?e.value:(0,i.default)(t,e)}function s(e){return!!Array.isArray(e)&&(("lowercase"===e[0]||"length"===e[0]||"typeof"===e[0])&&2===e.length||("contains"===e[0]||"match"===e[0])&&3===e.length)}function c(e){for(var t={star:!1,chunk:"",pattern:""};e.length>0&&"*"===e[0];)e=e.slice(1),t.star=!0;var n,r=!1;e:for(n=0;n0;){if(0===t.length)return u;switch(e[0]){case"[":var i=t[0];t=t.slice(1);var o=!0;(e=e.slice(1)).length>0&&"^"===e[0]&&(o=!1,e=e.slice(1));for(var a=!1,s=0;;){if(e.length>0&&"]"===e[0]&&s>0){e=e.slice(1);break}var c,l="";if(c=(n=f(e)).char,e=n.newChunk,n.err)return u;if(l=c,"-"===e[0]&&(l=(r=f(e.slice(1))).char,e=r.newChunk,r.err))return u;c<=i&&i<=l&&(a=!0),s++}if(a!==o)return u;break;case"?":t=t.slice(1),e=e.slice(1);break;case"\\":if(0===(e=e.slice(1)).length)return u.err=!0,u;default:if(e[0]!==t[0])return u;t=t.slice(1),e=e.slice(1)}}return u.t=t,u.ok=!0,u.err=!1,u}function f(e){var t={char:"",newChunk:"",err:!1};return 0===e.length||"-"===e[0]||"]"===e[0]||"\\"===e[0]&&0===(e=e.slice(1)).length?(t.err=!0,t):(t.char=e[0],t.newChunk=e.slice(1),0===t.newChunk.length&&(t.err=!0),t)}t.default=function(e,t){if(!t)throw new Error("No matcher supplied!");switch(t.type){case"all":return!0;case"fql":return function(e,t){if(!e)return!1;try{e=JSON.parse(e)}catch(t){throw new Error('Failed to JSON.parse FQL intermediate representation "'.concat(e,'": ').concat(t))}var n=o(e,t);return"boolean"==typeof n&&n}(t.ir,e);default:throw new Error("Matcher of type ".concat(t.type," unsupported."))}}},680:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=u(n(9407)),o=u(n(5406)),a=u(n(2278)),s=n(6888),c=n(2047);function l(e,t){h(e,t.drop,function(e,t){t.forEach(function(t){return delete e[t]})})}function f(e,t){h(e,t.allow,function(e,t){Object.keys(e).forEach(function(n){t.includes(n)||delete e[n]})})}function h(e,t,n){Object.entries(t).forEach(function(t){var u=t[0],i=t[1],a=function(e){"object"===r(e)&&null!==e&&n(e,i)},s=""===u?e:(0,o.default)(e,u);Array.isArray(s)?s.forEach(a):a(s)})}function p(e,t){var n=JSON.parse(JSON.stringify(e));for(var u in t.map)if(t.map.hasOwnProperty(u)){var i=t.map[u],a=u.split("."),l=void 0;if(a.length>1?(a.pop(),l=(0,o.default)(n,a.join("."))):l=e,"object"===r(l)){if(i.copy){var f=(0,o.default)(n,i.copy);void 0!==f&&(0,s.dset)(e,u,f)}else if(i.move){var h=(0,o.default)(n,i.move);void 0!==h&&(0,s.dset)(e,u,h),(0,c.unset)(e,i.move)}else i.hasOwnProperty("set")&&(0,s.dset)(e,u,i.set);if(i.to_string){var p=(0,o.default)(e,u);if("string"==typeof p||"object"===r(p)&&null!==p)continue;void 0!==p?(0,s.dset)(e,u,JSON.stringify(p)):(0,s.dset)(e,u,"undefined")}}}}function D(e,t){return!(t.sample.percent<=0)&&(t.sample.percent>=1||(t.sample.path?function(e,t){var n=(0,o.default)(e,t.sample.path),r=(0,i.default)(JSON.stringify(n)),u=-64,s=[];v(r.slice(0,8),s);for(var c=0,l=0;l<64&&1!==s[l];l++)c++;if(0!==c){var f=[];v(r.slice(9,16),f),u-=c,s.splice(0,c),f.splice(64-c),s=s.concat(f)}return s[63]=0===s[63]?1:0,(0,a.default)(parseInt(s.join(""),2),u)=1;u/=2)r-u>=0?(r-=u,t.push(1)):t.push(0)}t.default=function(e,t){for(var n=e,r=0,u=t;r>>20)-i|0}},2995:function(e){"use strict";e.exports=2146435072},3041:function(e,t,n){"use strict";var r=n(4121);e.exports=function(e){return r(e,[0,0],1,0)}},3081:function(e,t,n){"use strict";var r=n(7680),u=n(1817),i=n(6782),o=n(8473);e.exports=function(e,t,n,a){return i(e)||u(e)?(t[a]=e,t[a+n]=0,t):0!==e&&o(e)o?e<0?u:r:(t<=a?(t+=52,d=2220446049250313e-31):d=1,D(y,e),n=y[0],n&=2148532223,d*v(n|=t+i<<20,y[1])))}},3934:function(e){"use strict";var t="function"==typeof Float64Array?Float64Array:null;e.exports=t},4006:function(e,t,n){"use strict";var r=n(6073);e.exports=r},4107:function(e,t,n){"use strict";var r=n(7968),u=n(7740),i=n(9150);e.exports=function(){var e,t;if("function"!=typeof i)return!1;try{t=new i(t=[1,3.14,-3.14,u+1,u+2]),e=r(t)&&1===t[0]&&3===t[1]&&t[2]===u-2&&0===t[3]&&1===t[4]}catch(t){e=!1}return e}},4121:function(e,t,n){"use strict";var r=n(7115),u=n(1898),i=n(1595),o=new u(1),a=new r(o.buffer),s=i.HIGH,c=i.LOW;e.exports=function(e,t,n,r){return o[0]=e,t[r]=a[s],t[r+n]=a[c],t}},4287:function(e,t,n){"use strict";var r=n(762);e.exports=r},4396:function(e){"use strict";e.exports=1023},4510:function(e,t,n){"use strict";var r=n(9121);e.exports=r},4557:function(e,t,n){"use strict";var r=n(1714),u=/\s+at.*(?:\(|\s)(.*)\)?/,i=/^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/,o=void 0===r.homedir?"":r.homedir();e.exports=function(e,t){return t=Object.assign({pretty:!1},t),e.replace(/\\/g,"/").split("\n").filter(function(e){var t=e.match(u);if(null===t||!t[1])return!0;var n=t[1];return!n.includes(".app/Contents/Resources/electron.asar")&&!n.includes(".app/Contents/Resources/default_app.asar")&&!i.test(n)}).filter(function(e){return""!==e.trim()}).map(function(e){return t.pretty?e.replace(u,function(e,t){return e.replace(t,t.replace(o,"~"))}):e}).join("\n")}},4637:function(e,t,n){"use strict";var r=n(9020);e.exports=r},4850:function(e,t,n){"use strict";var r,u=n(1971),i=n(1853),o=n(3699);r=u()?i:o,e.exports=r},5099:function(e){"use strict";e.exports=Number},5249:function(e){"use strict";var t=Object.prototype.hasOwnProperty;e.exports=function(e,n){return null!=e&&t.call(e,n)}},5309:function(e,t,n){"use strict";var r=n(8184),u="function"==typeof Uint16Array;e.exports=function(e){return u&&e instanceof Uint16Array||"[object Uint16Array]"===r(e)}},5406:function(e,t,n){var r;function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}"object"==u(t)?e.exports=function(e,t,n,r,u){for(t=t.split?t.split("."):t,r=0;r1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2?arguments[2]:void 0;if(i=function(e){for(var t=1;t3?(u=D===r)&&(a=i[(o=i[4])?5:(o=3,3)],i[4]=i[5]=e):i[0]<=p&&((u=n<2&&pr||r>D)&&(i[4]=n,i[5]=r,h.n=D,o=0))}if(u||n>1)return s;throw f=!0,r}return function(u,l,D){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,D),o=l,a=D;(t=o<2?e:a)||!f;){i||(o?o<3?(o>1&&(h.n=-1),p(o,a)):h.n=a:h.v=a);try{if(c=2,i){if(o||(u="next"),t=i[u]){if(!(t=t.call(i,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,o<2&&(o=0)}else 1===o&&(t=i.return)&&t.call(i),o<2&&(a=TypeError("The iterator does not provide a '"+u+"' method"),o=1);i=e}else if((t=(f=h.n<0)?a:n.call(r,h))!==s)break}catch(t){i=e,o=1,a=t}finally{c=1}}return{value:t,done:f}}}(n,i,o),!0),l}var s={};function c(){}function l(){}function f(){}t=Object.getPrototypeOf;var h=[][i]?t(t([][i]())):(u(t={},i,function(){return this}),t),p=f.prototype=c.prototype=Object.create(h);function D(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,u(e,o,"GeneratorFunction")),e.prototype=Object.create(p),e}return l.prototype=f,u(p,"constructor",f),u(f,"constructor",l),l.displayName="GeneratorFunction",u(f,o,"GeneratorFunction"),u(p),u(p,o,"Generator"),u(p,i,function(){return this}),u(p,"toString",function(){return"[object Generator]"}),(r=function(){return{w:a,m:D}})()}function u(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}u=function(e,t,n,r){if(t)i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{function o(t,n){u(e,t,function(e){return this._invoke(t,n,e)})}o("next",0),o("throw",1),o("return",2)}},u(e,t,n,r)}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=o(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,u=function(){};return{s:u,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:u}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function o(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n>2]|=s.charCodeAt(c)<<8*c--;for(u=s=0;u>4]+r[s]+~~a[u|15&[s,5*s+1,3*s+5,7*s][c]])<<(c=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*c+s++%4])|i>>>-c),t,n])t=0|c[1],n=c[2];for(s=4;s;)o[--s]+=c[s]}for(e="";s<32;)e+=(o[s>>3]>>4*(1^s++)&15).toString(16);return e}},9511:function(e,t,n){"use strict";var r=n(8184),u="function"==typeof Uint32Array;e.exports=function(e){return u&&e instanceof Uint32Array||"[object Uint32Array]"===r(e)}},9550:function(e,t,n){"use strict";var r=n(5249);e.exports=r},9567:function(e,t,n){"use strict";var r=n(2442);e.exports=r}},t={};function n(r){var u=t[r];if(void 0!==u)return u.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};!function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.find=function(e,n,r){return t.filter(e,n,r)[0]},this.filter=function(e,n,r){return t.signalBuffer.slice(t.signalBuffer.indexOf(e)+1).filter(function(e){return e.type===n}).filter(function(e){return r?r(e):function(){return!0}})},this.signalBuffer=n,this._maxBufferSize=1e3});function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function l(e,t){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},l(e,t)}var f,h=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=function(e,t,n){return t=c(t),function(e,t){if(t&&("object"==a(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,n||[],c(e).constructor):t.apply(e,n))}(this,t,[n]))._add=function(t){e._signalCounter<0&&(e._signalCounter=0),"index"in t&&-1==t.index&&(t.index=e._getNextIndex()),e.signalBuffer.unshift(t),e.signalBuffer.length>e._maxBufferSize&&e.signalBuffer.pop()},e._getNextIndex=function(){var t=e._signalCounter;return e._signalCounter+=1,t},e._signalCounter=0,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&l(e,t)}(t,e),n=t,Object.defineProperty(n,"prototype",{writable:!1}),n;var n}(o);try{f=new RegExp("\\[(?=\"|'|\\d)|\\.|(?<=\"|'|\\d)]+","g")}catch(e){f=/\[|\.|]+/g}function p(e,t){return""===t||"."===t?e:null!==t&&null!=t?(Array.isArray(t)?t:t.split(f).filter(function(e){return e}).map(function(e){return e.replace(/'|"/g,"")})).reduce(function(e,t){return e&&e[t]},e):void 0}function D(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function v(e){return"object"===D(e)}function F(e){return Array.isArray(e)}function y(e){if(!v(e))return!1;var t=Object.keys(e);return!!t.some(function(e){return e.startsWith("@")})&&0===t.filter(function(e){return!e.startsWith("@")&&"_metadata"!==e}).length}function d(e){if(Array.isArray(e))return e.map(function(e){return d(e)});if(v(e)){var t=Object.assign({},e);return Object.keys(t).forEach(function(e){void 0===t[e]?delete t[e]:t[e]=d(t[e])}),t}return e}var m=n(8829),g=n.n(m);var b,w=(b=function(e,t){return b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},b(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}b(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function k(e){return function(e){if(Array.isArray(e))return C(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||A(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(e,t){if(e){if("string"==typeof e)return C(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&void 0!==arguments[1]?arguments[1]:[];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=S(t),function(e,t){if(t&&("object"==E(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,B()?Reflect.construct(t,n||[],S(e).constructor):t.apply(e,n))}(this,t,["/".concat(n.join("/")," ").concat(e,".")])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&O(e,t)}(t,e),n=t,Object.defineProperty(n,"prototype",{writable:!1}),n;var n}(function(e){function t(t,n){var r,u,i,o=this.constructor,a=e.call(this,t,n)||this;return Object.defineProperty(a,"name",{value:o.name,enumerable:!1,configurable:!0}),r=a,u=o.prototype,(i=Object.setPrototypeOf)?i(r,u):r.__proto__=u,function(e,t){void 0===t&&(t=e.constructor);var n=Error.captureStackTrace;n&&n(e,t)}(a),a}return w(t,e),t}(Error));function x(e){var t=[];return e.forEach(function(e){e instanceof g()?t.push.apply(t,k(e)):t.push(e)}),t}function T(e){var t=D(e);return"object"===t&&Object.keys(e).some(function(e){return e.startsWith("@")})?"directive":t}var _={};function P(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!y(e)&&!v(e)){var n=D(e);throw new j("should be a directive object but it is ".concat($(n)," ").concat(n),t)}var r=Object.keys(e),u=r.filter(function(e){return e.startsWith("@")});if(u.length>1)throw new j("should only have one @-prefixed key but it has ".concat(u.length," keys"),t);if(r.filter(function(e){return!e.startsWith("@")&&"_metadata"!==e}).length>0)throw new j("should only have one @-prefixed key but it has ".concat(r.length," keys"),t);var i=u[0],o=_[i];if("function"!=typeof o)throw new j("has an invalid directive: ".concat(i),t);o(e[i],t)}function L(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);switch(n){case"directive":return P(e,t);case"object":case"array":case"boolean":case"string":case"number":case"null":return;default:throw new j("should be a mapping directive or a JSON value but it is ".concat($(n)," ").concat(n),t)}}function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);switch(n){case"directive":return P(e,t);case"string":return;default:throw new j("should be a string or a mapping directive but it is ".concat($(n)," ").concat(n),t)}}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);switch(n){case"directive":return P(e,t);case"object":return U(e,t);default:throw new j("should be a object or a mapping directive but it is ".concat($(n)," ").concat(n),t)}}function q(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:[];t.forEach(function(t){t(e,n)})}}function I(e,t){return function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if("string"==typeof n&&n.lengtht)throw new j("should be a string of length ".concat(t," or less"),r)}}function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);if("string"!==n)throw new j("should be a string but it is ".concat($(n)," ").concat(n),t)}function z(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:[];M(e,n);var r=e;if(!t.includes(r.toLowerCase()))throw new j("should be one of ".concat(t.join(", ")," but it is ").concat(JSON.stringify(r)),n)}}function V(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);if("boolean"!==n)throw new j("should be a boolean but it is ".concat($(n)," ").concat(n),t)}function U(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);if("object"!==n)throw new j("should be an object but it is ".concat($(n)," ").concat(n),t);var r=e,u=Object.keys(r),i=u.find(function(e){return"@"===e.charAt(0)});if(i)throw new j("shouldn't have directive (@-prefixed) keys but it has ".concat(JSON.stringify(i)),t);var o=[];if(u.forEach(function(e){try{W(r[e],[].concat(k(t),[e]))}catch(e){o.push(e)}}),o.length)throw new(g())(x(o))}function H(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];U(e,n);var r=[],u=e;if(Object.entries(t).forEach(function(e){var t,i,o=(i=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(t,i)||A(t,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],s=o[1],c=s.required,l=s.optional;try{if(c){if(void 0===u[a])throw new j("should have field ".concat(JSON.stringify(a)," but it doesn't"),n);c(u[a],[].concat(k(n),[a]))}else l&&void 0!==u[a]&&l(u[a],[].concat(k(n),[a]))}catch(e){r.push(e)}}),r.length)throw new(g())(x(r))}function J(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=D(e);if("array"!==n)throw new j("should be an array but it is ".concat($(n)," ").concat(n),t)}function G(e,t){Array.isArray(e)||(e=[e]),e.forEach(function(e){_[e]=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{t(n,[].concat(k(r),[e]))}catch(e){var u=e;if(e instanceof j||e instanceof g())throw e;throw new j(u.message,r)}}})}function $(e){switch(e.charAt(0)){case"a":case"e":case"i":case"o":case"u":return"an";default:return"a"}}function W(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];switch(T(e)){case"directive":return P(e,t);case"object":return U(e,t);case"array":return J(e,t);default:return null}}function Y(e){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Y(e)}function Z(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Q(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".",r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return v(e)||!r&&F(e)?Object.entries(e).reduce(function(e,u){var i,o,a=(o=2,function(e){if(Array.isArray(e))return e}(i=u)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(i,o)||function(e,t){if(e){if("string"==typeof e)return K(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?K(e,t):void 0}}(i,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=a[0],c=a[1],l=t?"".concat(t).concat(n).concat(s):s;return Q(Q({},e),ee(c,l,n,r))},{}):X({},t,e)};function te(e,t,n){return(t=Qe(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ne(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError($e(e)+" is not iterable")}function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(e,t)||Je(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ue(e,t,n,r){var u=ie(he(1&r?e.prototype:e),t,n);return 2&r&&"function"==typeof u?function(e){return u.apply(n,e)}:u}function ie(){return ie="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=he(e)););return e}(e,t);if(r){var u=Object.getOwnPropertyDescriptor(r,t);return u.get?u.get.call(arguments.length<3?e:n):u.value}},ie.apply(null,arguments)}function oe(e,t,n){return t=he(t),ae(e,le()?Reflect.construct(t,n||[],he(e).constructor):t.apply(e,n))}function ae(e,t){if(t&&("object"==$e(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function se(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&fe(e,t)}function ce(e){var t="function"==typeof Map?new Map:void 0;return ce=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(le())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var u=new(e.bind.apply(e,r));return n&&fe(u,n.prototype),u}(e,arguments,he(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),fe(n,e)},ce(e)}function le(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(le=function(){return!!e})()}function fe(e,t){return fe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},fe(e,t)}function he(e){return he=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},he(e)}function pe(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",u=n.toStringTag||"@@toStringTag";function i(n,r,u,i){var s=r&&r.prototype instanceof a?r:a,c=Object.create(s.prototype);return De(c,"_invoke",function(n,r,u){var i,a,s,c=0,l=u||[],f=!1,h={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return i=t,a=0,s=e,h.n=n,o}};function p(n,r){for(a=n,s=r,t=0;!f&&c&&!u&&t3?(u=D===r)&&(s=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=p&&((u=n<2&&pr||r>D)&&(i[4]=n,i[5]=r,h.n=D,a=0))}if(u||n>1)return o;throw f=!0,r}return function(u,l,D){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,D),a=l,s=D;(t=a<2?e:s)||!f;){i||(a?a<3?(a>1&&(h.n=-1),p(a,s)):h.n=s:h.v=s);try{if(c=2,i){if(a||(u="next"),t=i[u]){if(!(t=t.call(i,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=i.return)&&t.call(i),a<2&&(s=TypeError("The iterator does not provide a '"+u+"' method"),a=1);i=e}else if((t=(f=h.n<0)?s:n.call(r,h))!==o)break}catch(t){i=e,a=1,s=t}finally{c=1}}return{value:t,done:f}}}(n,u,i),!0),c}var o={};function a(){}function s(){}function c(){}t=Object.getPrototypeOf;var l=[][r]?t(t([][r]())):(De(t={},r,function(){return this}),t),f=c.prototype=a.prototype=Object.create(l);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,De(e,u,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=c,De(f,"constructor",c),De(c,"constructor",s),s.displayName="GeneratorFunction",De(c,u,"GeneratorFunction"),De(f),De(f,u,"Generator"),De(f,r,function(){return this}),De(f,"toString",function(){return"[object Generator]"}),(pe=function(){return{w:i,m:h}})()}function De(e,t,n,r){var u=Object.defineProperty;try{u({},"",{})}catch(e){u=0}De=function(e,t,n,r){if(t)u?u(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{function i(t,n){De(e,t,function(e){return this._invoke(t,n,e)})}i("next",0),i("throw",1),i("return",2)}},De(e,t,n,r)}var ve=pe().m(St),Fe=pe().m(Yn),ye=pe().m(Zn),de=pe().m(Qn),me=pe().m(xr),ge=pe().m(Lr),be=pe().m(Nr),we=pe().m(Rr),Ee=pe().m(wu),ke=pe().m(Eu),Ae=pe().m(ku),Ce=pe().m(Bu),Be=pe().m(Su),Se=pe().m(Ou),Oe=pe().m(ju),je=pe().m(xu),xe=pe().m(Tu),Te=pe().m(_u),_e=pe().m(Pu),Pe=pe().m(Lu),Le=pe().m(Nu),Ne=pe().m(Ru),Re=pe().m(qu),qe=pe().m(Iu),Ie=pe().m(Mu),Me=pe().m(zu),ze=pe().m(Vu),Ve=pe().m(ci);function Ue(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Je(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,u=function(){};return{s:u,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:u}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw i}}}}function He(e){return function(e){if(Array.isArray(e))return Ge(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Je(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Je(e,t){if(e){if("string"==typeof e)return Ge(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ge(e,t):void 0}}function Ge(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n0?[e]:gt(t=e)&&Symbol.iterator in t?Array.from(e):gt(e)?Object.keys(e).map(function(t){return[t,e[t]]}):[];var t}function ct(e){return Dt(e=lt(e))?[]:Ft(e)?e:[e]}function lt(e){return e instanceof Ke&&ut(e.valueOf)?e.valueOf():e}function ft(e){return e=Number(e),isNaN(e)?0:e}function ht(e){return"number"==typeof e}function pt(e){return e&&ut(e.toLiquid)?pt(e.toLiquid()):e}function Dt(e){return null==e}function vt(e){return void 0===e}function Ft(e){return"[object Array]"===et.call(e)}function yt(e){return e&&ht(e.length)}function dt(e,t){for(var n in e=e||{})if(nt.call(e,n)&&!1===t(e[n],n,e))break;return e}function mt(e){return e[e.length-1]}function gt(e){var t=$e(e);return null!==e&&("object"===t||"function"===t)}function bt(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=[],u=e;u2&&void 0!==arguments[2]?arguments[2]:" ",function(e,t){return t+e})}function Et(e,t,n,r){for(var u=t-(e=String(e)).length;u-- >0;)e=r(e,n);return e}function kt(e){return e}function At(e,t){return null==e&&null==t?0:null==e?1:null==t||(e=tt.call(e))<(t=tt.call(t))?-1:e>t?1:0}function Ct(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r> ":" ",n=wt(String(e),String(a).length),o="".concat(t).concat(n,"| "),s=e===r?"\n"+wt("^",u+o.length):"";return(o+=i[e-1])+s}).join("\n"),s),enumerable:!1}),this.message=function(e,t){t.file&&(e+=", file:".concat(t.file));var n=re(t.getPosition(),2),r=n[0],u=n[1];return e+=", line:".concat(r,", col:").concat(u)}(this.message,this.token),this.stack=this.message+"\n"+this.context+"\n"+this.stack,this.originalError&&(this.stack+="\nFrom "+this.originalError.stack)}}],[{key:"is",value:function(e){return"LiquidError"===(null==e?void 0:e[Ot])}}])}(ce(Error)),xt=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n])).name="TokenizationError",ue(t,"update",r,3)([]),r}return se(t,e),Ze(t)}(jt),Tt=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n])).name="ParseError",r.message=e.message,ue(t,"update",r,3)([]),r}return se(t,e),Ze(t)}(jt),_t=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n.token])).name="RenderError",r.message=e.message,ue(t,"update",r,3)([]),r}return se(t,e),Ze(t,null,[{key:"is",value:function(e){return"RenderError"===e.name}}])}(jt),Pt=function(e){function t(e){var n;We(this,t),(n=oe(this,t,[e[0],e[0].token])).errors=e,n.name="LiquidErrors";var r=e.length>1?"s":"";return n.message="".concat(e.length," error").concat(r," found"),ue(t,"update",n,3)([]),n}return se(t,e),Ze(t,null,[{key:"is",value:function(e){return"LiquidErrors"===e.name}}])}(jt),Lt=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n])).name="UndefinedVariableError",r.message=e.message,ue(t,"update",r,3)([]),r}return se(t,e),Ze(t)}(jt),Nt=function(e){function t(e){var n;return We(this,t),(n=oe(this,t,["undefined variable: ".concat(e)])).name="InternalUndefinedVariableError",n.variableName=e,n}return se(t,e),Ze(t)}(ce(Error)),Rt=function(e){function t(e){var n;return We(this,t),(n=oe(this,t,[e])).name="AssertionError",n.message=e+"",n}return se(t,e),Ze(t)}(ce(Error)),qt=[0,0,0,0,0,0,0,0,0,20,4,4,4,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,2,8,0,0,0,0,8,0,0,0,64,0,65,0,0,33,33,33,33,33,33,33,33,33,33,0,0,2,2,2,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0];function It(e){var t=e.charCodeAt(0);return t>=128?!qt[t]:!!(1&qt[t])}function Mt(e,t){if(!e){var n="function"==typeof t?t():t||"expect ".concat(e," to be true");throw new Rt(n)}}function zt(e){Mt(!e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unexpected ".concat(JSON.stringify(e)))}qt[160]=qt[5760]=qt[6158]=qt[8192]=qt[8193]=qt[8194]=qt[8195]=qt[8196]=qt[8197]=qt[8198]=qt[8199]=qt[8200]=qt[8201]=qt[8202]=qt[8232]=qt[8233]=qt[8239]=qt[8287]=qt[12288]=4,qt[8220]=qt[8221]=128;var Vt=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"equals",value:function(e){return Dt(lt(e))}},{key:"gt",value:function(){return!1}},{key:"geq",value:function(){return!1}},{key:"lt",value:function(){return!1}},{key:"leq",value:function(){return!1}},{key:"valueOf",value:function(){return null}}])}(Ke),Ut=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"equals",value:function(e){return!(e instanceof t||(rt(e=lt(e))||Ft(e)?0!==e.length:!gt(e)||0!==Object.keys(e).length))}},{key:"gt",value:function(){return!1}},{key:"geq",value:function(){return!1}},{key:"lt",value:function(){return!1}},{key:"leq",value:function(){return!1}},{key:"valueOf",value:function(){return""}}],[{key:"is",value:function(e){return e instanceof t}}])}(Ke),Ht=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"equals",value:function(e){return!1===e||!!Dt(lt(e))||(rt(e)?/^\s*$/.test(e):ue(t,"equals",this,3)([e]))}}],[{key:"is",value:function(e){return e instanceof t}}])}(Ut),Jt=function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t)).i=0,u.length=e,u.name="".concat(r,"-").concat(n),u}return se(t,e),Ze(t,[{key:"next",value:function(){this.i++}},{key:"index0",value:function(){return this.i}},{key:"index",value:function(){return this.i+1}},{key:"first",value:function(){return 0===this.i}},{key:"last",value:function(){return this.i===this.length-1}},{key:"rindex",value:function(){return this.length-this.i}},{key:"rindex0",value:function(){return this.length-this.i-1}},{key:"valueOf",value:function(){return JSON.stringify(this)}}])}(Ke),Gt=function(){return Ze(function e(){We(this,e),this.buffer=""},[{key:"write",value:function(e){this.buffer+=at(e)}}])}(),$t=Ze(function e(){throw We(this,e),this.buffer="",this.stream=null,new Error("streaming not supported in browser")}),Wt=function(){return Ze(function e(){We(this,e),this.buffer=""},[{key:"write",value:function(e){"string"!=typeof(e=lt(e))&&""===this.buffer?this.buffer=e:this.buffer=at(this.buffer)+at(e)}}])}(),Yt=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return""};return We(this,t),(e=oe(this,t)).superBlockRender=n,e}return se(t,e),Ze(t,[{key:"super",value:pe().m(function e(){var t;return pe().w(function(e){for(;;)switch(e.n){case 0:return t=new Gt,e.n=1,this.superBlockRender(t);case 1:return e.a(2,t.buffer)}},e,this)})}])}(Ke);function Zt(e){return e&&ut(e.equals)&&ut(e.gt)&&ut(e.geq)&&ut(e.lt)&&ut(e.leq)}var Qt=new Vt,Xt={true:!0,false:!1,nil:Qt,null:Qt,empty:new Ut,blank:new Ht};function Kt(e){for(var t={},n=0,r=Object.entries(e);n0?"-":"+")+wt(r,2,"0")+(t.flags[":"]?":":"")+wt(u,2,"0")}var hn={a:function(e){return e.getShortWeekdayName()},A:function(e){return e.getLongWeekdayName()},b:function(e){return e.getShortMonthName()},B:function(e){return e.getLongMonthName()},c:function(e){return e.toLocaleString()},C:function(e){return function(e){return parseInt(e.getFullYear().toString().substring(0,2),10)}(e)},d:function(e){return e.getDate()},e:function(e){return e.getDate()},H:function(e){return e.getHours()},I:function(e){return String(e.getHours()%12||12)},j:function(e){return an(e)},k:function(e){return e.getHours()},l:function(e){return String(e.getHours()%12||12)},L:function(e){return e.getMilliseconds()},m:function(e){return e.getMonth()+1},M:function(e){return e.getMinutes()},N:function(e,t){var n=Number(t.width)||9;return function(e,t){return Et(e,t,arguments.length>2&&void 0!==arguments[2]?arguments[2]:" ",function(e,t){return e+t})}(String(e.getMilliseconds()).slice(0,n),n,"0")},p:function(e){return e.getHours()<12?"AM":"PM"},P:function(e){return e.getHours()<12?"am":"pm"},q:function(e){return function(e){var t=e.getDate();if([11,12,13].includes(t))return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}(e)},s:function(e){return Math.round(e.getTime()/1e3)},S:function(e){return e.getSeconds()},u:function(e){return e.getDay()||7},U:function(e){return sn(e,0)},w:function(e){return e.getDay()},W:function(e){return sn(e,1)},x:function(e){return e.toLocaleDateString()},X:function(e){return e.toLocaleTimeString()},y:function(e){return e.getFullYear().toString().slice(2,4)},Y:function(e){return e.getFullYear()},z:fn,Z:function(e,t){return e.getTimeZoneName()||fn(e,t)},t:function(){return"\t"},n:function(){return"\n"},"%":function(){return"%"}};function pn(e,t){for(var n,r="",u=t;n=un.exec(u);)r+=u.slice(0,n.index),u=u.slice(n.index+n[0].length),r+=Dn(e,n);return r+u}function Dn(e,t){var n=re(t,5),r=n[0],u=n[1],i=void 0===u?"":u,o=n[2],a=n[3],s=n[4],c=hn[s];if(!c)return r;var l,f={},h=Ue(i);try{for(h.s();!(l=h.n()).done;)f[l.value]=!0}catch(e){h.e(e)}finally{h.f()}var p,D=String(c(e,{flags:f,width:o,modifier:a})),v=ln.has(s)?" ":"0",F=o||cn[s]||0;return f["^"]?D=D.toUpperCase():f["#"]&&(D=He(p=D).some(function(e){return e>="a"&&e<="z"})?p.toUpperCase():p.toLowerCase()),f._?v=" ":f[0]&&(v="0"),f["-"]&&(F=0),wt(D,F,v)}function vn(){return"undefined"!=typeof Intl?Intl.DateTimeFormat:void 0}hn.h=hn.b;var Fn=/([zZ]|([+-])(\d{2}):?(\d{2}))$/,yn=["January","February","March","April","May","June","July","August","September","October","November","December"],dn=yn.map(function(e){return e.slice(0,3)}),mn=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],gn=mn.map(function(e){return e.slice(0,3)}),bn=function(){function e(t,n,r){We(this,e),this.locale=n,this.DateTimeFormat=vn(),this.date=new Date(t),this.timezoneFixed=void 0!==r,void 0===r&&(r=this.date.getTimezoneOffset()),this.timezoneOffset=rt(r)?e.getTimezoneOffset(r,this.date):r,this.timezoneName=rt(r)?r:"";var u=6e4*(this.date.getTimezoneOffset()-this.timezoneOffset),i=this.date.getTime()+u;this.displayDate=new Date(i)}return Ze(e,[{key:"getTime",value:function(){return this.displayDate.getTime()}},{key:"getMilliseconds",value:function(){return this.displayDate.getMilliseconds()}},{key:"getSeconds",value:function(){return this.displayDate.getSeconds()}},{key:"getMinutes",value:function(){return this.displayDate.getMinutes()}},{key:"getHours",value:function(){return this.displayDate.getHours()}},{key:"getDay",value:function(){return this.displayDate.getDay()}},{key:"getDate",value:function(){return this.displayDate.getDate()}},{key:"getMonth",value:function(){return this.displayDate.getMonth()}},{key:"getFullYear",value:function(){return this.displayDate.getFullYear()}},{key:"toLocaleString",value:function(e,t){return(null==t?void 0:t.timeZone)?this.date.toLocaleString(e,t):this.displayDate.toLocaleString(e,t)}},{key:"toLocaleTimeString",value:function(e){return this.displayDate.toLocaleTimeString(e)}},{key:"toLocaleDateString",value:function(e){return this.displayDate.toLocaleDateString(e)}},{key:"getTimezoneOffset",value:function(){return this.timezoneOffset}},{key:"getTimeZoneName",value:function(){return this.timezoneFixed?this.timezoneName:this.DateTimeFormat?this.DateTimeFormat().resolvedOptions().timeZone:void 0}},{key:"getLongMonthName",value:function(){var e;return null!==(e=this.format({month:"long"}))&&void 0!==e?e:yn[this.getMonth()]}},{key:"getShortMonthName",value:function(){var e;return null!==(e=this.format({month:"short"}))&&void 0!==e?e:dn[this.getMonth()]}},{key:"getLongWeekdayName",value:function(){var e;return null!==(e=this.format({weekday:"long"}))&&void 0!==e?e:mn[this.displayDate.getDay()]}},{key:"getShortWeekdayName",value:function(){var e;return null!==(e=this.format({weekday:"short"}))&&void 0!==e?e:gn[this.displayDate.getDay()]}},{key:"valid",value:function(){return!isNaN(this.getTime())}},{key:"format",value:function(e){return this.DateTimeFormat&&this.DateTimeFormat(this.locale,e).format(this.displayDate)}}],[{key:"createDateFixedToTimezone",value:function(t,n){var r=t.match(Fn);if(r&&"Z"===r[1])return new e(+new Date(t),n,0);if(r&&r[2]&&r[3]&&r[4]){var u=re(r,5),i=u[2],o=u[3],a=u[4],s=("+"===i?-1:1)*(60*parseInt(o,10)+parseInt(a,10));return new e(+new Date(t),n,s)}return new e(t,n)}},{key:"getTimezoneOffset",value:function(e,t){var n=t.toLocaleString("en-US",{timeZone:e}),r=t.toLocaleString("en-US",{timeZone:"UTC"}),u=new Date(n);return(+new Date(r)-+u)/6e4}}])}(),wn=function(){return Ze(function e(t,n){We(this,e),this.base=0,this.message="".concat(t," limit exceeded"),this.limit=n},[{key:"use",value:function(e){e=ft(e),Mt(this.base+e<=this.limit,this.message),this.base+=e}},{key:"check",value:function(e){Mt((e=ft(e))<=this.limit,this.message)}}])}(),En=function(e){function t(e,n,r,u,i,o,a,s){var c,l=re(n,2),f=l[0],h=l[1];We(this,t),(c=oe(this,t,[e,r,u,i,s])).trimLeft=!1,c.trimRight=!1;for(var p="-"===r[f],D="-"===r[h-1],v=p?f+1:f,F=D?h-1:h;vv&&4&qt[r.charCodeAt(F-1)];)F--;return c.contentRange=[v,F],c.trimLeft=p||o,c.trimRight=D||a,c}return se(t,e),Ze(t,[{key:"content",get:function(){return this.input.slice(this.contentRange[0],this.contentRange[1])}}])}(Xe),kn=function(e){function t(e,n,r,u,i){var o;We(this,t);var a=u.trimTagLeft,s=u.trimTagRight,c=u.tagDelimiterLeft,l=u.tagDelimiterRight,f=n+c.length,h=r-l.length;return(o=oe(this,t,[Vr.Tag,[f,h],e,n,r,a,s,i])).tokenizer=new dr(e,u.operators,i,o.contentRange),o.name=o.tokenizer.readTagName(),o.tokenizer.assert(o.name,"illegal tag syntax, tag name expected"),o.tokenizer.skipBlank(),o.args=o.tokenizer.input.slice(o.tokenizer.p,o.contentRange[1]),o}return se(t,e),Ze(t)}(En),An=function(e){function t(e,n,r,u,i){We(this,t);var o=u.trimOutputLeft,a=u.trimOutputRight,s=u.outputDelimiterLeft,c=u.outputDelimiterRight,l=[n+s.length,r-c.length];return oe(this,t,[Vr.Output,l,e,n,r,o,a,i])}return se(t,e),Ze(t)}(En),Cn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.HTML,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.trimLeft=0,i.trimRight=0,i}return se(t,e),Ze(t,[{key:"getContent",value:function(){return this.input.slice(this.begin+this.trimLeft,this.end-this.trimRight)}}])}(Xe),Bn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Number,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.content=Number(i.getText()),i}return se(t,e),Ze(t)}(Xe),Sn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Word,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.content=i.getText(),i}return se(t,e),Ze(t)}(Xe),On=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Literal,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.literal=i.getText(),i.content=Xt[i.literal],i}return se(t,e),Ze(t)}(Xe),jn={"==":2,"!=":2,">":2,"<":2,">=":2,"<=":2,contains:2,not:1,and:0,or:0},xn={"==":0,"!=":0,">":0,"<":0,">=":0,"<=":0,contains:0,not:1,and:0,or:0},Tn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Operator,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.operator=i.getText(),i}return se(t,e),Ze(t,[{key:"getPrecedence",value:function(){var e=this.getText();return e in jn?jn[e]:1}}])}(Xe),_n=function(e){function t(e,n,r,u,i,o){var a;return We(this,t),(a=oe(this,t,[Vr.PropertyAccess,r,u,i,o])).variable=e,a.props=n,a}return se(t,e),Ze(t)}(Xe),Pn=function(e){function t(e,n,r,u,i,o){var a;return We(this,t),(a=oe(this,t,[Vr.Filter,r,u,i,o])).name=e,a.args=n,a}return se(t,e),Ze(t)}(Xe),Ln=function(e){function t(e,n,r,u,i,o){var a;return We(this,t),(a=oe(this,t,[Vr.Hash,e,n,r,o])).input=e,a.begin=n,a.end=r,a.name=u,a.value=i,a.file=o,a}return se(t,e),Ze(t)}(Xe),Nn=/[\da-fA-F]/,Rn=/[0-7]/,qn={b:"\b",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v"};function In(e){var t=e.charCodeAt(0);return t>=97?t-87:t>=65?t-55:t-48}var Mn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Quoted,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.content=function(e){for(var t="",n=1;n2&&void 0!==arguments[2]&&arguments[2];return pe().m(function r(){return pe().w(function(r){for(;;)switch(r.n){case 0:if(e){r.n=1;break}return r.a(2);case 1:if(!("content"in e)){r.n=2;break}return r.a(2,e.content);case 2:if(!Qr(e)){r.n=4;break}return r.n=3,Yn(e,t,n);case 3:case 5:return r.a(2,r.v);case 4:if(!Kr(e)){r.n=6;break}return r.n=5,Zn(e,t);case 6:return r.a(2)}},r)})()}function Yn(e,t,n){var r,u,i,o,a,s,c,l,f;return pe().w(function(h){for(;;)switch(h.p=h.n){case 0:r=[],u=Ue(e.props),h.p=1,u.s();case 2:if((i=u.n()).done){h.n=5;break}return o=i.value,s=r,h.n=3,Wn(o,t,!1);case 3:c=h.v,s.push.call(s,c);case 4:h.n=2;break;case 5:h.n=7;break;case 6:h.p=6,l=h.v,u.e(l);case 7:return h.p=7,u.f(),h.f(7);case 8:if(h.p=8,!e.variable){h.n=11;break}return h.n=9,Wn(e.variable,t,n);case 9:return a=h.v,h.n=10,t._getFromScope(a,r);case 10:return h.a(2,h.v);case 11:return h.n=12,t._get(r);case 12:return h.a(2,h.v);case 13:h.n=16;break;case 14:if(h.p=14,f=h.v,!n||"InternalUndefinedVariableError"!==f.name){h.n=15;break}return h.a(2,null);case 15:throw new Lt(f,e);case 16:return h.a(2)}},Fe,null,[[8,14],[1,6,7,8]])}function Zn(e,t){var n,r;return pe().w(function(u){for(;;)switch(u.n){case 0:return u.n=1,Wn(e.lhs,t);case 1:return n=u.v,u.n=2,Wn(e.rhs,t);case 2:return r=u.v,t.memoryLimit.use(r-n+1),u.a(2,bt(+n,+r+1))}},ye)}function Qn(e){var t,n,r,u,i;return pe().w(function(o){for(;;)switch(o.p=o.n){case 0:t=[],n=Ue(e),o.p=1,n.s();case 2:if((r=n.n()).done){o.n=8;break}if(!Gr(u=r.value)){o.n=6;break}case 3:if(!(t.length&&t[t.length-1].getPrecedence()>u.getPrecedence())){o.n=5;break}return o.n=4,t.pop();case 4:o.n=3;break;case 5:t.push(u),o.n=7;break;case 6:return o.n=7,u;case 7:o.n=2;break;case 8:o.n=10;break;case 9:o.p=9,i=o.v,n.e(i);case 10:return o.p=10,n.f(),o.f(10);case 11:if(!t.length){o.n=13;break}return o.n=12,t.pop();case 12:o.n=11;break;case 13:return o.a(2)}},de,null,[[1,9,10,11]])}function Xn(e,t){return!Kn(e,t)}function Kn(e,t){return e=lt(e),t.opts.jsTruthy?!e:!1===e||null==e}var er={"==":tr,"!=":function(e,t){return!tr(e,t)},">":function(e,t){return Zt(e)?e.gt(t):Zt(t)?t.lt(e):lt(e)>lt(t)},"<":function(e,t){return Zt(e)?e.lt(t):Zt(t)?t.gt(e):lt(e)=":function(e,t){return Zt(e)?e.geq(t):Zt(t)?t.leq(e):lt(e)>=lt(t)},"<=":function(e,t){return Zt(e)?e.leq(t):Zt(t)?t.geq(e):lt(e)<=lt(t)},contains:function(e,t){return Ft(e=lt(e))?e.some(function(e){return tr(e,t)}):!!ut(null==e?void 0:e.indexOf)&&e.indexOf(lt(t))>-1},not:function(e,t){return Kn(lt(e),t)},and:function(e,t,n){return Xn(lt(e),n)&&Xn(lt(t),n)},or:function(e,t,n){return Xn(lt(e),n)||Xn(lt(t),n)}};function tr(e,t){return Zt(e)?e.equals(t):Zt(t)?t.equals(e):(e=lt(e),t=lt(t),Ft(e)?Ft(t)&&function(e,t){return e.length===t.length&&!e.some(function(e,n){return!tr(e,t[n])})}(e,t):e===t)}var nr=Ze(function e(t,n,r,u){We(this,e),this.key=t,this.value=n,this.next=r,this.prev=u}),rr=function(){return Ze(function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;We(this,e),this.limit=t,this.size=n,this.cache={},this.head=new nr("HEAD",null,null,null),this.tail=new nr("TAIL",null,null,null),this.head.next=this.tail,this.tail.prev=this.head},[{key:"write",value:function(e,t){if(this.cache[e])this.cache[e].value=t;else{var n=new nr(e,t,this.head.next,this.head);this.head.next.prev=n,this.head.next=n,this.cache[e]=n,this.size++,this.ensureLimit()}}},{key:"read",value:function(e){if(this.cache[e]){var t=this.cache[e].value;return this.remove(e),this.write(e,t),t}}},{key:"remove",value:function(e){var t=this.cache[e];t.prev.next=t.next,t.next.prev=t.prev,delete this.cache[e],this.size--}},{key:"clear",value:function(){this.head.next=this.tail,this.tail.prev=this.head,this.size=0,this.cache={}}},{key:"ensureLimit",value:function(){this.size>this.limit&&this.remove(this.tail.prev.key)}}])}();function ur(e,t){var n=document.createElement("base");n.href=e;var r=document.getElementsByTagName("head")[0];r.insertBefore(n,r.firstChild);var u=document.createElement("a");u.href=t;var i=u.href;return r.removeChild(n),i}var ir=Object.freeze({__proto__:null,resolve:function(e,t,n){return e.length&&"/"!==mt(e)&&(e+="/"),ur(e,t).replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/,function(e,t,r){var u=r.split("/").pop();return/\.\w+$/.test(u)?e:t+r+n})},readFile:function(e){return tn(this,void 0,void 0,pe().m(function t(){return pe().w(function(t){for(;;)if(0===t.n)return t.a(2,new Promise(function(t,n){var r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?t(r.responseText):n(new Error(r.statusText))},r.onerror=function(){n(new Error("An error occurred whilst receiving the response."))},r.open("GET",e),r.send()}))},t)}))},readFileSync:function(e){var t=new XMLHttpRequest;if(t.open("GET",e,!1),t.send(),t.status<200||t.status>=300)throw new Error(t.statusText);return t.responseText},exists:function(e){return tn(this,void 0,void 0,pe().m(function e(){return pe().w(function(e){for(;;)if(0===e.n)return e.a(2,!0)},e)}))},existsSync:function(e){return!0},dirname:function(e){return ur(e,".")},sep:"/"});function or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return JSON.stringify(e,null,t)}var ar={default:function(e,t){if(Ft(e=lt(e))||rt(e))return e.length?e:t;for(var n=arguments.length,r=new Array(n>2?n-2:0),u=2;u1&&void 0!==arguments[1]?arguments[1]:0,n=[];return JSON.stringify(e,function(e,t){if("object"!==$e(t)||null===t)return t;for(;n.length>0&&n[n.length-1]!==this;)n.pop();return n.includes(t)?"[Circular]":(n.push(t),t)},t)}},sr={"&":"&","<":"<",">":">",'"':""","'":"'"},cr={"&":"&","<":"<",">":">",""":'"',"'":"'"};function lr(e){return e=at(e),this.context.memoryLimit.use(e.length),e.replace(/&|<|>|"|'/g,function(e){return sr[e]})}function fr(e){return e=at(e),this.context.memoryLimit.use(e.length),e.replace(/&(amp|lt|gt|#34|#39);/g,function(e){return cr[e]})}var hr=Object.freeze({__proto__:null,escape:lr,xml_escape:function(e){return lr.call(this,e)},escape_once:function(e){return lr.call(this,fr.call(this,e))},newline_to_br:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/\r?\n/gm,"
\n")},strip_html:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/||<.*?>|/g,"")}}),pr=function(){return Ze(function e(t){We(this,e),this.mapping=t,this.sep="/"},[{key:"exists",value:function(e){return tn(this,void 0,void 0,pe().m(function t(){return pe().w(function(t){for(;;)if(0===t.n)return t.a(2,this.existsSync(e))},t,this)}))}},{key:"existsSync",value:function(e){return!Dt(this.mapping[e])}},{key:"readFile",value:function(e){return tn(this,void 0,void 0,pe().m(function t(){return pe().w(function(t){for(;;)if(0===t.n)return t.a(2,this.readFileSync(e))},t,this)}))}},{key:"readFileSync",value:function(e){var t=this.mapping[e];if(Dt(t))throw new Error("ENOENT: ".concat(e));return t}},{key:"dirname",value:function(e){var t=e.split(this.sep);return t.pop(),t.join(this.sep)}},{key:"resolve",value:function(e,t,n){if(t+=n,"."===e)return t;var r,u=e.split(/\/+/),i=Ue(t.split(this.sep));try{for(i.s();!(r=i.n()).done;){var o=r.value;"."!==o&&""!==o&&(".."===o?(u.length>1||""!==u[0])&&u.pop():u.push(o))}}catch(e){i.e(e)}finally{i.f()}return u.join(this.sep)}}])}(),Dr={root:["."],layouts:["."],partials:["."],relativeReference:!0,jekyllInclude:!1,keyValueSeparator:":",cache:void 0,extname:"",fs:ir,dynamicPartials:!0,jsTruthy:!1,dateFormat:"%A, %B %-e, %Y at %-l:%M %P %z",locale:"",trimTagRight:!1,trimTagLeft:!1,trimOutputRight:!1,trimOutputLeft:!1,greedy:!0,tagDelimiterLeft:"{%",tagDelimiterRight:"%}",outputDelimiterLeft:"{{",outputDelimiterRight:"}}",preserveTimezones:!1,strictFilters:!1,strictVariables:!1,ownPropertyOnly:!0,lenientIf:!1,globals:{},keepOutputType:!1,operators:er,memoryLimit:1/0,parseLimit:1/0,renderLimit:1/0};function vr(e){var t=[];return Ft(e)&&(t=e),rt(e)&&(t=[e]),t}function Fr(e,t){if(e&&$r(e))for(var n=t?4:16;qt[e.input.charCodeAt(e.end-1-e.trimRight)]&n;)e.trimRight++}function yr(e,t){if(e&&$r(e)){for(var n=t?4:16;qt[e.input.charCodeAt(e.begin+e.trimLeft)]&n;)e.trimLeft++;"\n"===e.input.charAt(e.begin+e.trimLeft)&&e.trimLeft++}}var dr=function(){return Ze(function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Dr.operators,r=arguments.length>2?arguments[2]:void 0,u=arguments.length>3?arguments[3]:void 0;We(this,e),this.input=t,this.file=r,this.rawBeginAt=-1,this.p=u?u[0]:0,this.N=u?u[1]:t.length,this.opTrie=Kt(n),this.literalTrie=Kt(Xt)},[{key:"readExpression",value:function(){return new $n(this.readExpressionTokens())}},{key:"readExpressionTokens",value:pe().m(function e(){var t,n;return pe().w(function(e){for(;;)switch(e.n){case 0:if(!(this.p0&&void 0!==arguments[0]?arguments[0]:Dr,t=[];this.p-1?this.readEndrawOrRawContent(e):this.match(t)?this.readTagToken(e):this.match(n)?this.readOutputToken(e):this.readHTMLToken([t,n])}},{key:"readHTMLToken",value:function(e){for(var t=this,n=this.p;this.p1&&void 0!==arguments[1]&&arguments[1];for(this.skipBlank();this.p0&&void 0!==arguments[0]?arguments[0]:Dr,t=this.file,n=this.input,r=e.outputDelimiterRight,u=this.p;if(-1===this.readToDelimiter(r,!0))throw this.error("output ".concat(this.snapshot(u)," not closed"),u);return new An(n,u,this.p,e,t)}},{key:"readEndrawOrRawContent",value:function(e){for(var t=e.tagDelimiterLeft,n=e.tagDelimiterRight,r=this.p,u=this.readTo(t)-t.length;this.p0&&void 0!==arguments[0]?arguments[0]:Dr,t=[];this.p1&&void 0!==arguments[1]?arguments[1]:this.p;return new xt(e,new Sn(this.input,t,this.N,this.file))}},{key:"assert",value:function(e,t,n){if(!e)throw this.error("function"==typeof t?t():t,n)}},{key:"snapshot",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.p;return JSON.stringify((e=this.input.slice(t,this.N)).length>32?e.slice(0,29)+"...":e)}},{key:"readWord",value:function(){return this.readIdentifier()}},{key:"readIdentifier",value:function(){this.skipBlank();for(var e=this.p;!this.end()&&It(this.peek());)++this.p;return new Sn(this.input,e,this.p,this.file)}},{key:"readNonEmptyIdentifier",value:function(){var e=this.readIdentifier();return e.size()?e:void 0}},{key:"readTagName",value:function(){return this.skipBlank(),"#"===this.input[this.p]?this.input.slice(this.p,++this.p):this.readIdentifier().getText()}},{key:"readHashes",value:function(e){for(var t=[];;){var n=this.readHash(e);if(!n)return t;t.push(n)}}},{key:"readHash",value:function(e){this.skipBlank(),","===this.peek()&&++this.p;var t=this.p,n=this.readNonEmptyIdentifier();if(n){var r;this.skipBlank();var u=rt(e)?e:e?"=":":";return this.peek()===u&&(++this.p,r=this.readValue()),new Ln(this.input,t,this.p,n,r,this.file)}}},{key:"remaining",value:function(){return this.input.slice(this.p,this.N)}},{key:"advance",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.p+=e}},{key:"end",value:function(){return this.p>=this.N}},{key:"read",value:function(){return this.input[this.p++]}},{key:"readTo",value:function(e){for(;this.p0&&void 0!==arguments[0])||arguments[0],t=[];;)if("["!==this.peek()){if(e&&!t.length){var n=this.readNonEmptyIdentifier();if(n){t.push(n);continue}}if("."!==this.peek()||"."===this.peek(1))break;this.p++;var r=this.readNonEmptyIdentifier();if(!r)break;t.push(r)}else{this.p++;var u=this.readValue()||new Sn(this.input,this.p,this.p,this.file);this.assert(-1!==this.readTo("]"),"[ not closed"),t.push(u)}return t}},{key:"readNumber",value:function(){this.skipBlank();var e=!1,t=!1,n=0;for(64&this.peekType()&&n++;this.p+n<=this.N;)if(32&this.peekType(n))t=!0,n++;else{if("."!==this.peek(n)||"."===this.peek(n+1))break;if(e||!t)return;e=!0,n++}if(t&&!It(this.peek(n))){var r=new Bn(this.input,this.p,this.p+n,this.file);return this.advance(n),r}}},{key:"readLiteral",value:function(){this.skipBlank();var e=this.matchTrie(this.literalTrie);if(-1!==e){var t=new On(this.input,this.p,e,this.file);return this.p=e,t}}},{key:"readRange",value:function(){this.skipBlank();var e=this.p;if("("===this.peek()){++this.p;var t=this.readValueOrThrow();this.skipBlank(),this.assert("."===this.read()&&"."===this.read(),"invalid range syntax");var n=this.readValueOrThrow();return this.skipBlank(),this.assert(")"===this.read(),"invalid range syntax"),new zn(this.input,e,this.p,t,n,this.file)}}},{key:"readValueOrThrow",value:function(){var e=this,t=this.readValue();return this.assert(t,function(){return"unexpected token ".concat(e.snapshot(),", value expected")}),t}},{key:"readQuoted",value:function(){this.skipBlank();var e=this.p;if(8&this.peekType()){++this.p;for(var t=!1;this.p0&&void 0!==arguments[0]?arguments[0]:0;return this.p+e>=this.N?0:qt[this.input.charCodeAt(this.p+e)]}},{key:"peek",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.p+e>=this.N?"":this.input[this.p+e]}},{key:"skipBlank",value:function(){for(;4&this.peekType();)++this.p}}])}(),mr=function(){return Ze(function e(t,n){We(this,e),this.handlers={},this.stopRequested=!1,this.tokens=t,this.parseToken=n},[{key:"on",value:function(e,t){return this.handlers[e]=t,this}},{key:"trigger",value:function(e,t){var n=this.handlers[e];return!!n&&(n.call(this,t),!0)}},{key:"start",value:function(){var e;for(this.trigger("start");!this.stopRequested&&(e=this.tokens.shift());)if(!(this.trigger("token",e)||Wr(e)&&this.trigger("tag:".concat(e.name),e))){var t=this.parseToken(e,this.tokens);this.trigger("template",t)}return this.stopRequested||this.trigger("end"),this}},{key:"stop",value:function(){return this.stopRequested=!0,this}}])}(),gr=Ze(function e(t){We(this,e),this.token=t}),br=function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t,[e])).name=e.name,u.liquid=r,u.tokenizer=e.tokenizer,u}return se(t,e),Ze(t)}(gr),wr=function(){return Ze(function e(t,n){We(this,e),this.hash={};var r,u=Ue((t instanceof dr?t:new dr(t,{})).readHashes(n));try{for(u.s();!(r=u.n()).done;){var i=r.value;this.hash[i.name.content]=i.value}}catch(e){u.e(e)}finally{u.f()}},[{key:"render",value:pe().m(function e(t){var n,r,u,i,o;return pe().w(function(e){for(;;)switch(e.n){case 0:n={},r=0,u=Object.keys(this.hash);case 1:if(!(r0&&"default"===this.filters[0].name,e.n=1,this.initial.evaluate(t,n);case 1:r=e.v,u=Ue(this.filters),e.p=2,u.s();case 3:if((i=u.n()).done){e.n=6;break}return o=i.value,e.n=4,o.render(r,t);case 4:r=e.v;case 5:e.n=3;break;case 6:e.n=8;break;case 7:e.p=7,a=e.v,u.e(a);case 8:return e.p=8,u.f(),e.f(8);case 9:return e.a(2,r)}},e,this,[[2,7,8,9]])})},{key:"getFilter",value:function(e,t){var n=e.filters[t];return Mt(n||!e.options.strictFilters,function(){return"undefined filter: ".concat(t)}),n}}])}(),Cr=function(e){function t(e,n){var r,u;We(this,t),r=oe(this,t,[e]);var i=new dr(e.input,n.options.operators,e.file,e.contentRange);r.value=new Ar(i.readFilteredValue(),n);var o=r.value.filters,a=n.options.outputEscape;if(!(null===(u=o[o.length-1])||void 0===u?void 0:u.raw)&&a){var s=new Pn(toString.call(a),[],"",0,0);o.push(new kr(s,a,n))}return r}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value.value(t,!1);case 1:r=e.v,n.write(r);case 2:return e.a(2)}},e,this)})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value;case 1:return e.a(2)}},e,this)})}])}(gr),Br=function(e){function t(e){var n;return We(this,t),(n=oe(this,t,[e])).str=e.getContent(),n}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){return pe().w(function(e){for(;;)switch(e.n){case 0:n.write(this.str);case 1:return e.a(2)}},e,this)})}])}(gr),Sr=function(){function e(t,n){We(this,e),this.segments=t,this.location=n}return Ze(e,[{key:"toString",value:function(){return zr(this.segments,!0)}},{key:"toArray",value:function(){var t=pe().m(n);function n(){var r,u,i,o,a,s,c=arguments;return pe().w(function(t){for(;;)switch(t.n){case 0:for(r=c.length,u=new Array(r),i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return nn(xr(e,Object.assign(Object.assign({},jr),t).partials,!1))}function _r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return rn(xr(e,Object.assign(Object.assign({},jr),t).partials,!0))}var Pr=function(){return Ze(function e(t){We(this,e),this.stack=[{names:t,aliases:new Map}]},[{key:"has",value:function(e){var t,n=Ue(this.stack);try{for(n.s();!(t=n.n()).done;)if(t.value.names.has(e))return!0}catch(e){n.e(e)}finally{n.f()}return!1}},{key:"push",value:function(e){return this.stack.push({names:e,aliases:new Map}),this}},{key:"pop",value:function(){var e;return null===(e=this.stack.pop())||void 0===e?void 0:e.names}},{key:"add",value:function(e){this.stack[0].names.add(e)}},{key:"alias",value:function(e){var t=e.segments[0];if(rt(t)){var n=this.getAlias(t);if(void 0!==n)return new Sr([].concat(He(n),He(e.segments.slice(1))),e.location)}}},{key:"setAlias",value:function(e,t){this.stack[this.stack.length-1].aliases.set(e,t)}},{key:"deleteAlias",value:function(e){this.stack[this.stack.length-1].aliases.delete(e)}},{key:"getAlias",value:function(e){var t,n=Ue(this.stack);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(r.aliases.has(e))return r.aliases.get(e);if(r.names.has(e))return}}catch(e){n.e(e)}finally{n.f()}}}])}();function Lr(e){return pe().w(function(t){for(;;)switch(t.n){case 0:if(!eu(e)){t.n=2;break}return t.d(ne(Rr(e)),1);case 1:t.n=3;break;case 2:if(!(e instanceof Ar)){t.n=3;break}return t.d(ne(Nr(e)),3);case 3:return t.a(2)}},ge)}function Nr(e){var t,n,r,u,i,o,a,s,c,l,f,h;return pe().w(function(p){for(;;)switch(p.p=p.n){case 0:t=Ue(e.initial.postfix),p.p=1,t.s();case 2:if((n=t.n()).done){p.n=4;break}if(!eu(r=n.value)){p.n=3;break}return p.d(ne(Rr(r)),3);case 3:p.n=2;break;case 4:p.n=6;break;case 5:p.p=5,l=p.v,t.e(l);case 6:return p.p=6,t.f(),p.f(6);case 7:u=Ue(e.filters),p.p=8,u.s();case 9:if((i=u.n()).done){p.n=19;break}o=i.value,a=Ue(o.args),p.p=10,a.s();case 11:if((s=a.n()).done){p.n=15;break}if(!Er(c=s.value)||!c[1]){p.n=13;break}return p.d(ne(Rr(c[1])),12);case 12:p.n=14;break;case 13:if(!eu(c)){p.n=14;break}return p.d(ne(Rr(c)),14);case 14:p.n=11;break;case 15:p.n=17;break;case 16:p.p=16,f=p.v,a.e(f);case 17:return p.p=17,a.f(),p.f(17);case 18:p.n=9;break;case 19:p.n=21;break;case 20:p.p=20,h=p.v,u.e(h);case 21:return p.p=21,u.f(),p.f(21);case 22:return p.a(2)}},be,null,[[10,16,17,18],[8,20,21,22],[1,5,6,7]])}function Rr(e){return pe().w(function(t){for(;;)switch(t.n){case 0:if(!Kr(e)){t.n=3;break}return t.d(ne(Rr(e.lhs)),1);case 1:return t.d(ne(Rr(e.rhs)),2);case 2:t.n=4;break;case 3:if(!Qr(e)){t.n=4;break}return t.n=4,qr(e);case 4:return t.a(2)}},we)}function qr(e){var t=[],n=e.file,r=e.props[0];n=n||r.file,Yr(r)||Zr(r)||Xr(r)?t.push(r.content):Qr(r)&&t.push.apply(t,He(qr(r).segments));var u,i=Ue(e.props.slice(1));try{for(i.s();!(u=i.n()).done;){var o=u.value;n=n||o.file,Yr(o)||Zr(o)||Xr(o)?t.push(o.content):Qr(o)&&t.push(qr(o))}}catch(e){i.e(e)}finally{i.f()}var a=re(e.getPosition(),2),s=a[0],c=a[1];return new Sr(t,{row:s,col:c,file:n})}var Ir,Mr=/^[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*$/;function zr(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],r=e[0];rt(r)&&(!t||r.match(Mr)?n.push("".concat(r)):n.push("['".concat(r,"']")));var u,i=Ue(e.slice(1));try{for(i.s();!(u=i.n()).done;){var o=u.value;o instanceof Sr?n.push("[".concat(zr(o.segments),"]")):rt(o)?o.match(Mr)?n.push(".".concat(o)):n.push("['".concat(o,"']")):n.push("[".concat(o,"]"))}}catch(e){i.e(e)}finally{i.f()}return n.join("")}!function(e){e.Partials="partials",e.Layouts="layouts",e.Root="root"}(Ir||(Ir={}));var Vr,Ur=function(){return Ze(function e(t){if(We(this,e),this.options=t,t.relativeReference){var n=t.fs.sep;Mt(n,"`fs.sep` is required for relative reference");var r=new RegExp(["."+n,".."+n,"./","../"].map(function(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}).join("|"));this.shouldLoadRelative=function(e){return r.test(e)}}else this.shouldLoadRelative=function(e){return!1};this.contains=this.options.fs.contains||function(){return!0}},[{key:"lookup",value:pe().m(function e(t,n,r,u){var i,o,a,s,c,l,f;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:i=this.options.fs,o=this.options[n],a=Ue(this.candidates(t,o,u,n!==Ir.Root)),e.p=1,a.s();case 2:if((s=a.n()).done){e.n=7;break}if(c=s.value,!r){e.n=3;break}l=i.existsSync(c),e.n=5;break;case 3:return e.n=4,i.exists(c);case 4:l=e.v;case 5:if(!l){e.n=6;break}return e.a(2,c);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,f=e.v,a.e(f);case 9:return e.p=9,a.f(),e.f(9);case 10:throw this.lookupError(t,o);case 11:return e.a(2)}},e,this,[[1,8,9,10]])})},{key:"candidates",value:pe().m(function e(t,n,r,u){var i,o,a,s,c,l,f,h,p,D,v,F,y,d;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(i=this.options,o=i.fs,a=i.extname,!this.shouldLoadRelative(t)||!r){e.n=8;break}s=o.resolve(this.dirname(r),t,a),c=Ue(n),e.p=1,c.s();case 2:if((l=c.n()).done){e.n=5;break}if(f=l.value,u&&!this.contains(f,s)){e.n=4;break}return e.n=3,s;case 3:return e.a(3,5);case 4:e.n=2;break;case 5:e.n=7;break;case 6:e.p=6,y=e.v,c.e(y);case 7:return e.p=7,c.f(),e.f(7);case 8:h=Ue(n),e.p=9,h.s();case 10:if((p=h.n()).done){e.n=12;break}if(D=p.value,v=o.resolve(D,t,a),u&&!this.contains(D,v)){e.n=11;break}return e.n=11,v;case 11:e.n=10;break;case 12:e.n=14;break;case 13:e.p=13,d=e.v,h.e(d);case 14:return e.p=14,h.f(),e.f(14);case 15:if(void 0===o.fallback){e.n=16;break}if(void 0===(F=o.fallback(t))){e.n=16;break}return e.n=16,F;case 16:return e.a(2)}},e,this,[[9,13,14,15],[1,6,7,8]])})},{key:"dirname",value:function(e){var t=this.options.fs;return Mt(t.dirname,"`fs.dirname` is required for relative reference"),t.dirname(e)}},{key:"lookupError",value:function(e,t){var n=new Error("ENOENT");return n.message='ENOENT: Failed to lookup "'.concat(e,'" in "').concat(t,'"'),n.code="ENOENT",n}}])}(),Hr=function(){return Ze(function e(t){We(this,e),this.liquid=t,this.cache=this.liquid.options.cache,this.fs=this.liquid.options.fs,this.parseFile=this.cache?this._parseFileCached:this._parseFile,this.loader=new Ur(this.liquid.options),this.parseLimit=new wn("parse length",t.options.parseLimit)},[{key:"parse",value:function(e,t){e=String(e),this.parseLimit.use(e.length);var n=new dr(e,this.liquid.options.operators,t).readTopLevelTokens(this.liquid.options);return this.parseTokens(n)}},{key:"parseTokens",value:function(e){for(var t,n=[],r=[];t=e.shift();)try{n.push(this.parseToken(t,e))}catch(e){if(!this.liquid.options.catchAllErrors)throw e;r.push(e)}if(r.length)throw new Pt(r);return n}},{key:"parseToken",value:function(e,t){try{if(Wr(e)){var n=this.liquid.tags[e.name];return Mt(n,'tag "'.concat(e.name,'" not found')),new n(e,t,this.liquid,this)}return tu(e)===Vr.Output?new Cr(e,this.liquid):new Br(e)}catch(t){if(jt.is(t))throw t;throw new Tt(t,e)}}},{key:"parseStream",value:function(e){var t=this;return new mr(e,function(e,n){return t.parseToken(e,n)})}},{key:"_parseFileCached",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ir.Root,u=arguments.length>3?arguments[3]:void 0;return pe().m(function i(){var o,a,s,c,l,f,h;return pe().w(function(i){for(;;)switch(i.p=i.n){case 0:return o=n.cache,a=n.loader.shouldLoadRelative(e)?u+","+e:r+":"+e,i.n=1,o.read(a);case 1:if(!(s=i.v)){i.n=2;break}return i.a(2,s);case 2:if(c=n._parseFile(e,t,r,u),!t){i.n=4;break}return i.n=3,c;case 3:f=i.v,i.n=5;break;case 4:f=nn(c);case 5:return l=f,o.write(a,l),i.p=6,i.n=7,l;case 7:return i.a(2,i.v);case 8:throw i.p=8,h=i.v,o.remove(a),h;case 9:return i.a(2)}},i,null,[[6,8]])})()}},{key:"_parseFile",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ir.Root,u=arguments.length>3?arguments[3]:void 0;return pe().m(function i(){var o,a,s,c,l;return pe().w(function(i){for(;;)switch(i.n){case 0:return i.n=1,n.loader.lookup(e,r,t,u);case 1:if(o=i.v,a=n,!t){i.n=2;break}s=n.fs.readFileSync(o),i.n=4;break;case 2:return i.n=3,n.fs.readFile(o);case 3:s=i.v;case 4:return c=s,l=o,i.a(2,a.parse.call(a,c,l))}},i)})()}}])}();function Jr(e){return!!(tu(e)&Vr.Delimited)}function Gr(e){return tu(e)===Vr.Operator}function $r(e){return tu(e)===Vr.HTML}function Wr(e){return tu(e)===Vr.Tag}function Yr(e){return tu(e)===Vr.Quoted}function Zr(e){return tu(e)===Vr.Number}function Qr(e){return tu(e)===Vr.PropertyAccess}function Xr(e){return tu(e)===Vr.Word}function Kr(e){return tu(e)===Vr.Range}function eu(e){return(1667&tu(e))>0}function tu(e){return e?e.kind:-1}!function(e){e[e.Number=1]="Number",e[e.Literal=2]="Literal",e[e.Tag=4]="Tag",e[e.Output=8]="Output",e[e.HTML=16]="HTML",e[e.Filter=32]="Filter",e[e.Hash=64]="Hash",e[e.PropertyAccess=128]="PropertyAccess",e[e.Word=256]="Word",e[e.Range=512]="Range",e[e.Quoted=1024]="Quoted",e[e.Operator=2048]="Operator",e[e.FilteredValue=4096]="FilteredValue",e[e.Delimited=12]="Delimited"}(Vr||(Vr={}));var nu,ru=function(){function e(){var t,n,r,u,i,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Dr,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},l=c.memoryLimit,f=c.renderLimit;We(this,e),this.scopes=[{}],this.registers={},this.breakCalled=!1,this.continueCalled=!1,this.sync=!!s.sync,this.opts=a,this.globals=null!==(t=s.globals)&&void 0!==t?t:a.globals,this.environments=gt(o)?o:Object(o),this.strictVariables=null!==(n=s.strictVariables)&&void 0!==n?n:this.opts.strictVariables,this.ownPropertyOnly=null!==(r=s.ownPropertyOnly)&&void 0!==r?r:a.ownPropertyOnly,this.memoryLimit=null!=l?l:new wn("memory alloc",null!==(u=s.memoryLimit)&&void 0!==u?u:a.memoryLimit),this.renderLimit=null!=f?f:new wn("template render",Jn().now()+(null!==(i=s.renderLimit)&&void 0!==i?i:a.renderLimit))}return Ze(e,[{key:"getRegister",value:function(e){return this.registers[e]=this.registers[e]||{}}},{key:"setRegister",value:function(e,t){return this.registers[e]=t}},{key:"saveRegister",value:function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r2&&void 0!==arguments[2]?arguments[2]:this.strictVariables;return pe().m(function u(){var i;return pe().w(function(u){for(;;)switch(u.n){case 0:rt(t)&&(t=t.split(".")),i=0;case 1:if(!(i0&&void 0!==arguments[0]?arguments[0]:{},this.opts,{sync:this.sync,globals:this.globals,strictVariables:this.strictVariables},{renderLimit:this.renderLimit,memoryLimit:this.memoryLimit})}},{key:"findScope",value:function(e){for(var t=this.scopes.length-1;t>=0;t--){var n=this.scopes[t];if(e in n)return n}return e in this.environments?this.environments:this.globals}}])}();function uu(e,t,n){if(e=pt(e),t=lt(t),Dt(e))return e;if(Ft(e)&&t<0)return e[e.length+ +t];var r=function(e,t,n){return!n||nt.call(e,t)||e instanceof Ke?e[t]:void 0}(e,t,n);return void 0===r&&e instanceof Ke?e.liquidMethodMissing(t):ut(r)?r.call(e):"size"===t?function(e){return nt.call(e,"size")||void 0!==e.size?e.size:Ft(e)||rt(e)?e.length:"object"===$e(e)?Object.keys(e).length:void 0}(e):"first"===t?function(e){return Ft(e)?e[0]:e.first}(e):"last"===t?function(e){return Ft(e)?e[e.length-1]:e.last}(e):r}!function(e){e[e.OUTPUT=0]="OUTPUT",e[e.STORE=1]="STORE"}(nu||(nu={}));var iu=Ct(Math.abs),ou=Ct(Math.max),au=Ct(Math.min),su=Ct(Math.ceil),cu=Ct(function(e,t){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?Math.floor(e/t):e/t}),lu=Ct(Math.floor),fu=Ct(function(e,t){return e-t}),hu=Ct(function(e,t){return e%t}),pu=Ct(function(e,t){return e*t}),Du=Object.freeze({__proto__:null,abs:iu,at_least:ou,at_most:au,ceil:su,divided_by:cu,floor:lu,minus:fu,modulo:hu,times:pu,round:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;e=lt(e),t=lt(t);var n=Math.pow(10,t);return Math.round(e*n)/n},plus:function(e,t){return e=lt(e),t=lt(t),Number(e)+Number(t)}}),vu=/(?:[\0-\/:-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u086F\u0888\u088F-\u0896\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF4-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1716-\u171E\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C8B-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3007-\u3029\u3030\u3036-\u303A\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6E6-\uA6EF\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7CE\uA7CF\uA7D2\uA7D4\uA7DD-\uA7F1\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDBF\uDDF4-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDD3F\uDD66-\uDD68\uDD6E\uDD86-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEC1\uDEC5-\uDEFB\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDF6F\uDF86-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC76-\uDC7E\uDCBB-\uDCC1\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE42-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDF7F\uDF8A\uDF8C\uDF8D\uDF8F\uDFB6\uDFC1\uDFC3\uDFC4\uDFC6\uDFCB\uDFD4-\uDFE0\uDFE3-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDECF\uDEE4-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFBF\uDFE1-\uDFEF\uDFFA-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDEFF\uDF11\uDF3B-\uDF3D\uDF43-\uDF4F\uDF5B-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD812-\uD817\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83C\uD83D\uD83F\uD87C\uD87D\uD87F\uD889-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC3F\uDC56-\uDC5F]|\uD810[\uDFFB-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD818[\uDC00-\uDCFF\uDD3A-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6F\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDD3F\uDD6D-\uDD6F\uDD7A-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFE\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD833[\uDC00-\uDCEF\uDCFA-\uDEFF\uDF2E\uDF2F\uDF47-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDC2F\uDC6E-\uDC8E\uDC90-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCFA-\uDDCF\uDDFB-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,Fu={raw:/\s+/g,default:vu,pretty:/(?:[\0- "#%\*\x2D\/:<>\?\[-\^`\{-\}\x7F-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u086F\u0888\u088F-\u0896\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF4-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1716-\u171E\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C8B-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3007-\u3029\u3030\u3036-\u303A\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6E6-\uA6EF\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7CE\uA7CF\uA7D2\uA7D4\uA7DD-\uA7F1\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDBF\uDDF4-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDD3F\uDD66-\uDD68\uDD6E\uDD86-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEC1\uDEC5-\uDEFB\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDF6F\uDF86-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC76-\uDC7E\uDCBB-\uDCC1\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE42-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDF7F\uDF8A\uDF8C\uDF8D\uDF8F\uDFB6\uDFC1\uDFC3\uDFC4\uDFC6\uDFCB\uDFD4-\uDFE0\uDFE3-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDECF\uDEE4-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFBF\uDFE1-\uDFEF\uDFFA-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDEFF\uDF11\uDF3B-\uDF3D\uDF43-\uDF4F\uDF5B-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD812-\uD817\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83C\uD83D\uD83F\uD87C\uD87D\uD87F\uD889-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC3F\uDC56-\uDC5F]|\uD810[\uDFFB-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD818[\uDC00-\uDCFF\uDD3A-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6F\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDD3F\uDD6D-\uDD6F\uDD7A-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFE\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD833[\uDC00-\uDCEF\uDCFA-\uDEFF\uDF2E\uDF2F\uDF47-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDC2F\uDC6E-\uDC8E\uDC90-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCFA-\uDDCF\uDDFB-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,ascii:/[^A-Za-z0-9]+/g,latin:vu,none:null},yu=Object.freeze({__proto__:null,url_decode:function(e){return decodeURIComponent(at(e)).replace(/\+/g," ")},url_encode:function(e){return encodeURIComponent(at(e)).replace(/%20/g,"+")},cgi_escape:function(e){return encodeURIComponent(at(e)).replace(/%20/g,"+").replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})},uri_escape:function(e){return encodeURI(at(e)).replace(/%5B/g,"[").replace(/%5D/g,"]")},slugify:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e=at(e);var r=Fu[t];return r&&("latin"===t&&(e=function(e){return e.replace(/[àáâãäå]/g,"a").replace(/[æ]/g,"ae").replace(/[ç]/g,"c").replace(/[èéêë]/g,"e").replace(/[ìíîï]/g,"i").replace(/[ð]/g,"d").replace(/[ñ]/g,"n").replace(/[òóôõöø]/g,"o").replace(/[ùúûü]/g,"u").replace(/[ýÿ]/g,"y").replace(/[ß]/g,"ss").replace(/[œ]/g,"oe").replace(/[þ]/g,"th").replace(/[ẞ]/g,"SS").replace(/[Œ]/g,"OE").replace(/[Þ]/g,"TH")}(e)),e=e.replace(r,"-").replace(/^-|-$/g,"")),n?e:e.toLowerCase()}}),du=Ct(function(e,t){var n=ct(e),r=Dt(t)?" ":at(t),u=n.length*(1+r.length);return this.context.memoryLimit.use(u),n.join(r)}),mu=Ct(function(e){return yt(e)?mt(e):""}),gu=Ct(function(e){return yt(e)?e[0]:""}),bu=Ct(function(e){var t=ct(e);return this.context.memoryLimit.use(t.length),He(t).reverse()});function wu(e,t){var n,r,u,i,o,a,s,c,l,f;return pe().w(function(h){for(;;)switch(h.p=h.n){case 0:n=[],r=ct(e),this.context.memoryLimit.use(r.length),u=Ue(r),h.p=1,u.s();case 2:if((i=u.n()).done){h.n=7;break}if(o=i.value,a=n,s=o,!t){h.n=4;break}return h.n=3,this.context._getFromScope(o,at(t).split("."),!1);case 3:c=h.v,h.n=5;break;case 4:c=o;case 5:l=[s,c],a.push.call(a,l);case 6:h.n=2;break;case 7:h.n=9;break;case 8:h.p=8,f=h.v,u.e(f);case 9:return h.p=9,u.f(),h.f(9);case 10:return h.a(2,n.sort(function(e,t){var n=e[1],r=t[1];return nr?1:0}).map(function(e){return e[0]}))}},Ee,this,[[1,8,9,10]])}function Eu(e,t){var n,r,u,i,o,a,s,c;return pe().w(function(l){for(;;)switch(l.p=l.n){case 0:n=[],r=ct(e),this.context.memoryLimit.use(r.length),u=Ue(r),l.p=1,u.s();case 2:if((i=u.n()).done){l.n=5;break}return o=i.value,a=n,l.n=3,this.context._getFromScope(o,at(t),!1);case 3:s=l.v,a.push.call(a,s);case 4:l.n=2;break;case 5:l.n=7;break;case 6:l.p=6,c=l.v,u.e(c);case 7:return l.p=7,u.f(),l.f(7);case 8:return l.a(2,n)}},ke,this,[[1,6,7,8]])}function ku(e,t){var n,r,u,i,o,a,s,c,l;return pe().w(function(f){for(;;)switch(f.p=f.n){case 0:n=0,r=ct(e),u=Ue(r),f.p=1,u.s();case 2:if((i=u.n()).done){f.n=7;break}if(o=i.value,s=Number,!t){f.n=4;break}return f.n=3,this.context._getFromScope(o,at(t),!1);case 3:c=f.v,f.n=5;break;case 4:c=o;case 5:a=s(c),n+=Number.isNaN(a)?0:a;case 6:f.n=2;break;case 7:f.n=9;break;case 8:f.p=8,l=f.v,u.e(l);case 9:return f.p=9,u.f(),f.f(9);case 10:return f.a(2,n)}},Ae,this,[[1,8,9,10]])}function Au(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=ct(e),r=ct(t);return this.context.memoryLimit.use(n.length+r.length),n.concat(r)}function Cu(e){var t=this;return this.context.opts.jekyllWhere?function(t){return Ut.is(e)?tr(t,e):Ft(t)?(n=e,t.some(function(e){return tr(e,n)})):tr(t,e);var n}:void 0===e?function(e){return Xn(e,t.context)}:function(t){return tr(t,e)}}function Bu(e,t,n,r){var u,i,o,a,s,c,l,f,h;return pe().w(function(p){for(;;)switch(p.p=p.n){case 0:u=[],t=ct(t),this.context.memoryLimit.use(t.length),i=new dr(at(n)).readScopeValue(),o=Ue(t),p.p=1,o.s();case 2:if((a=o.n()).done){p.n=5;break}return s=a.value,l=u,p.n=3,Wn(i,this.context.spawn(s));case 3:f=p.v,l.push.call(l,f);case 4:p.n=2;break;case 5:p.n=7;break;case 6:p.p=6,h=p.v,o.e(h);case 7:return p.p=7,o.f(),p.f(7);case 8:return c=Cu.call(this,r),p.a(2,t.filter(function(t,n){return c(u[n])===e}))}},Ce,this,[[1,6,7,8]])}function Su(e,t,n,r){var u,i,o,a,s,c,l,f;return pe().w(function(h){for(;;)switch(h.p=h.n){case 0:u=[],i=new Ar(at(r),this.liquid),o=ct(t),this.context.memoryLimit.use(o.length),a=Ue(o),h.p=1,a.s();case 2:if((s=a.n()).done){h.n=5;break}return c=s.value,this.context.push(te({},n,c)),h.n=3,i.value(this.context);case 3:l=h.v,this.context.pop(),l===e&&u.push(c);case 4:h.n=2;break;case 5:h.n=7;break;case 6:h.p=6,f=h.v,a.e(f);case 7:return h.p=7,a.f(),h.f(7);case 8:return h.a(2,u)}},Be,this,[[1,6,7,8]])}function Ou(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Bu.call(this,!0,e,t,n)),1);case 1:return r.a(2,r.v)}},Se,this)}function ju(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Bu.call(this,!1,e,t,n)),1);case 1:return r.a(2,r.v)}},Oe,this)}function xu(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Su.call(this,!0,e,t,n)),1);case 1:return r.a(2,r.v)}},je,this)}function Tu(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Su.call(this,!1,e,t,n)),1);case 1:return r.a(2,r.v)}},xe,this)}function _u(e,t){var n,r,u,i,o,a,s;return pe().w(function(c){for(;;)switch(c.p=c.n){case 0:n=new Map,e=st(e),r=new dr(at(t)).readScopeValue(),this.context.memoryLimit.use(e.length),u=Ue(e),c.p=1,u.s();case 2:if((i=u.n()).done){c.n=5;break}return o=i.value,c.n=3,Wn(r,this.context.spawn(o));case 3:a=c.v,n.has(a)||n.set(a,[]),n.get(a).push(o);case 4:c.n=2;break;case 5:c.n=7;break;case 6:c.p=6,s=c.v,u.e(s);case 7:return c.p=7,u.f(),c.f(7);case 8:return c.a(2,He(n.entries()).map(function(e){var t=re(e,2);return{name:t[0],items:t[1]}}))}},Te,this,[[1,6,7,8]])}function Pu(e,t,n){var r,u,i,o,a,s,c;return pe().w(function(l){for(;;)switch(l.p=l.n){case 0:r=new Map,u=new Ar(at(n),this.liquid),e=st(e),this.context.memoryLimit.use(e.length),i=Ue(e),l.p=1,i.s();case 2:if((o=i.n()).done){l.n=5;break}return a=o.value,this.context.push(te({},t,a)),l.n=3,u.value(this.context);case 3:s=l.v,this.context.pop(),r.has(s)||r.set(s,[]),r.get(s).push(a);case 4:l.n=2;break;case 5:l.n=7;break;case 6:l.p=6,c=l.v,i.e(c);case 7:return l.p=7,i.f(),l.f(7);case 8:return l.a(2,He(r.entries()).map(function(e){var t=re(e,2);return{name:t[0],items:t[1]}}))}},_e,this,[[1,6,7,8]])}function Lu(e,t,n){var r,u,i,o,a;return pe().w(function(s){for(;;)switch(s.n){case 0:r=new dr(at(t)).readScopeValue(),u=ct(e),i=Cu.call(this,n),o=0;case 1:if(!(o2&&void 0!==arguments[2]?arguments[2]:1;return Dt(e=lt(e))?[]:(Ft(e)||(e=at(e)),t=t<0?e.length+t:t,this.context.memoryLimit.use(n),e.slice(t,t+n))},where:Ou,reject:ju,where_exp:xu,reject_exp:Tu,group_by:_u,group_by_exp:Pu,has:Ru,has_exp:qu,find_index:Iu,find_index_exp:Mu,find:zu,find_exp:Vu,uniq:function(e){return e=ct(e),this.context.memoryLimit.use(e.length),He(new Set(e))},sample:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(Dt(e=lt(e)))return[];Ft(e)||(e=at(e)),this.context.memoryLimit.use(t);var n=He(e).sort(function(){return Math.random()-.5});return 1===t?n[0]:n.slice(0,t)}});function Hu(e,t,n){var r,u,i,o=(null!==(r=null==e?void 0:e.length)&&void 0!==r?r:0)+(null!==(u=null==t?void 0:t.length)&&void 0!==u?u:0)+(null!==(i=null==n?void 0:n.length)&&void 0!==i?i:0);this.context.memoryLimit.use(o);var a=Gu(e,this.context.opts,n);return a?pn(a,t=Dt(t=lt(t))?this.context.opts.dateFormat:at(t)):e}function Ju(e,t,n,r){var u=Gu(e,this.context.opts);if(!u)return e;if("ordinal"===n){var i=u.getDate();return pn(u,"US"===r?"".concat(t," ").concat(i,"%q, %Y"):"".concat(i,"%q ").concat(t," %Y"))}return pn(u,"%d ".concat(t," %Y"))}function Gu(e,t,n){var r,u=null!=n?n:t.timezoneOffset,i=t.locale;return(r="now"===(e=lt(e))||"today"===e?new bn(Date.now(),i,u):ht(e)?new bn(1e3*e,i,u):rt(e)?/^\d+$/.test(e)?new bn(1e3*+e,i,u):t.preserveTimezones&&void 0===n?bn.createDateFixedToTimezone(e,i):new bn(e,i,u):new bn(e,i,u)).valid()?r:void 0}var $u=Object.freeze({__proto__:null,date:Hu,date_to_xmlschema:function(e){return Hu.call(this,e,"%Y-%m-%dT%H:%M:%S%:z")},date_to_rfc822:function(e){return Hu.call(this,e,"%a, %d %b %Y %H:%M:%S %z")},date_to_string:function(e,t,n){return Ju.call(this,e,"%b",t,n)},date_to_long_string:function(e,t,n){return Ju.call(this,e,"%B",t,n)}}),Wu=/[\u3040-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF]/g,Yu=/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\u303F\u3100-\u33FF\u4DC0-\u4DFF\uA000-\uABFF\uD7B0-\uD7FF\uE000-\uF8FF\uFB00-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,Zu=Object.freeze({__proto__:null,append:function(e,t){Mt(2===arguments.length,"append expect 2 arguments");var n=at(e),r=at(t);return this.context.memoryLimit.use(n.length+r.length),n+r},prepend:function(e,t){Mt(2===arguments.length,"prepend expect 2 arguments");var n=at(e),r=at(t);return this.context.memoryLimit.use(n.length+r.length),r+n},lstrip:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),t?(t=Bt(at(t)),n.replace(new RegExp("^[".concat(t,"]+"),"g"),"")):n.replace(/^\s+/,"")},downcase:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.toLowerCase()},upcase:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),at(t).toUpperCase()},remove:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),n.split(at(t)).join("")},remove_first:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),n.replace(at(t),"")},remove_last:function(e,t){var n=at(e);this.context.memoryLimit.use(n.length);var r=at(t),u=n.lastIndexOf(r);return-1===u?n:n.substring(0,u)+n.substring(u+r.length)},rstrip:function(e,t){return e=at(e),this.context.memoryLimit.use(e.length),t?(t=Bt(at(t)),e.replace(new RegExp("[".concat(t,"]+$"),"g"),"")):e.replace(/\s+$/,"")},split:function(e,t){var n=at(e);this.context.memoryLimit.use(n.length);for(var r=n.split(at(t));r.length&&""===r[r.length-1];)r.pop();return r},strip:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),t?(t=Bt(at(t)),n.replace(new RegExp("^[".concat(t,"]+"),"g"),"").replace(new RegExp("[".concat(t,"]+$"),"g"),"")):n.trim()},strip_newlines:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/\r?\n/gm,"")},capitalize:function(e){return e=at(e),this.context.memoryLimit.use(e.length),e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},replace:function(e,t,n){var r=at(e);return this.context.memoryLimit.use(r.length),r.split(at(t)).join(n)},replace_first:function(e,t,n){var r=at(e);return this.context.memoryLimit.use(r.length),r.replace(at(t),n)},replace_last:function(e,t,n){var r=at(e);this.context.memoryLimit.use(r.length);var u=at(t),i=r.lastIndexOf(u);if(-1===i)return r;var o=at(n);return r.substring(0,i)+o+r.substring(i+u.length)},truncate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"...",r=at(e);return this.context.memoryLimit.use(r.length),r.length<=t?e:r.substring(0,t-n.length)+n},truncatewords:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"...",r=at(e);this.context.memoryLimit.use(r.length);var u=r.split(/\s+/);t<=0&&(t=1);var i=u.slice(0,t).join(" ");return u.length>=t&&(i+=n),i},normalize_whitespace:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/\s+/g," ")},number_of_words:function(e,t){var n=at(e);if(this.context.memoryLimit.use(n.length),!(e=n.trim()))return 0;switch(t){case"cjk":return(e.match(Wu)||[]).length+(e.match(Yu)||[]).length;case"auto":return Wu.test(e)?e.match(Wu).length+(e.match(Yu)||[]).length:e.split(/\s+/).length;default:return e.split(/\s+/).length}},array_to_sentence_string:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";switch(this.context.memoryLimit.use(e.length),e.length){case 0:return"";case 1:return e[0];case 2:return"".concat(e[0]," ").concat(t," ").concat(e[1]);default:return"".concat(e.slice(0,-1).join(", "),", ").concat(t," ").concat(e[e.length-1])}}}),Qu=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},hr),Du),yu),Uu),$u),Zu),ar),Xu=function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t,[e,n,r])).identifier=u.tokenizer.readIdentifier(),u.key=u.identifier.content,u.tokenizer.assert(u.key,"expected variable name"),u.tokenizer.skipBlank(),u.tokenizer.assert("="===u.tokenizer.peek(),'expected "="'),u.tokenizer.advance(),u.value=new Ar(u.tokenizer.readFilteredValue(),u.liquid),u}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value.value(t,this.liquid.options.lenientIf);case 1:t.bottom()[this.key]=e.v;case 2:return e.a(2)}},e,this)})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value;case 1:return e.a(2)}},e,this)})},{key:"localScope",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.identifier;case 1:return e.a(2)}},e,this)})}])}(br),Ku=["offset","limit","reversed"],ei=function(e){function t(e,n,r,u){var i;We(this,t);var o,a=(i=oe(this,t,[e,n,r])).tokenizer.readIdentifier(),s=i.tokenizer.readIdentifier(),c=i.tokenizer.readValue();if(!a.size()||"in"!==s.content||!c)throw new Error("illegal tag: ".concat(e.getText()));i.variable=a.content,i.collection=c,i.hash=new wr(i.tokenizer,r.options.keyValueSeparator),i.templates=[],i.elseTemplates=[];var l=u.parseStream(n).on("start",function(){return o=i.templates}).on("tag:else",function(e){zt(e.args),o=i.elseTemplates}).on("tag:endfor",function(e){zt(e.args),l.stop()}).on("template",function(e){return o.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))});return l.start(),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f,h,p,D;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=this.liquid.renderer,h=st,e.n=1,Wn(this.collection,t);case 1:if(p=e.v,(u=h(p)).length){e.n=3;break}return e.n=2,r.renderTemplates(this.elseTemplates,t,n);case 2:return e.a(2);case 3:return i="continue-"+this.variable+"-"+this.collection.getText(),t.push({continue:t.getRegister(i)}),e.n=4,this.hash.render(t);case 4:o=e.v,t.pop(),a=this.liquid.options.orderedFilterParameters?Object.keys(o).filter(function(e){return Ku.includes(e)}):Ku.filter(function(e){return void 0!==o[e]}),u=a.reduce(function(e,t){return"offset"===t?(n=e,r=o.offset,n.slice(r)):"limit"===t?ni(e,o.limit):ti(e);var n,r},u),t.setRegister(i,(o.offset||0)+u.length),s={forloop:new Jt(u.length,this.collection.getText(),this.variable)},t.push(s),c=Ue(u),e.p=5,c.s();case 6:if((l=c.n()).done){e.n=10;break}return f=l.value,s[this.variable]=f,t.continueCalled=t.breakCalled=!1,e.n=7,r.renderTemplates(this.templates,t,n);case 7:if(!t.breakCalled){e.n=8;break}return e.a(3,10);case 8:s.forloop.next();case 9:e.n=6;break;case 10:e.n=12;break;case 11:e.p=11,D=e.v,c.e(D);case 12:return e.p=12,c.f(),e.f(12);case 13:t.continueCalled=t.breakCalled=!1,t.pop();case 14:return e.a(2)}},e,this,[[5,11,12,13]])})},{key:"children",value:pe().m(function e(){var t;return pe().w(function(e){for(;;)if(0===e.n)return t=this.templates.slice(),this.elseTemplates&&t.push.apply(t,He(this.elseTemplates)),e.a(2,t)},e,this)})},{key:"arguments",value:pe().m(function e(){var t,n,r;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.collection;case 1:t=0,n=Object.values(this.hash.hash);case 2:if(!(t0)){o=[];for(var t=[];!e.tokenizer.end();)t.push(e.tokenizer.readValueOrThrow()),e.tokenizer.skipBlank(),","===e.tokenizer.peek()?e.tokenizer.readTo(","):e.tokenizer.readTo("or");i.branches.push({values:t,templates:o})}}).on("tag:else",function(){a++,o=i.elseTemplates}).on("tag:endcase",function(){return s.stop()}).on("template",function(e){o===i.elseTemplates&&1!==a||o.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))});return s.start(),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f,h,p,D,v,F;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=this.liquid.renderer,p=lt,e.n=1,this.value.value(t,t.opts.lenientIf);case 1:D=e.v,u=p(D),i=!1,o=Ue(this.branches),e.p=2,o.s();case 3:if((a=o.n()).done){e.n=13;break}s=a.value,c=Ue(s.values),e.p=4,c.s();case 5:if((l=c.n()).done){e.n=9;break}return f=l.value,e.n=6,Wn(f,t,t.opts.lenientIf);case 6:if(h=e.v,!tr(u,h)){e.n=8;break}return e.n=7,r.renderTemplates(s.templates,t,n);case 7:return i=!0,e.a(3,9);case 8:e.n=5;break;case 9:e.n=11;break;case 10:e.p=10,v=e.v,c.e(v);case 11:return e.p=11,c.f(),e.f(11);case 12:e.n=3;break;case 13:e.n=15;break;case 14:e.p=14,F=e.v,o.e(F);case 15:return e.p=15,o.f(),e.f(15);case 16:if(i){e.n=17;break}return e.n=17,r.renderTemplates(this.elseTemplates,t,n);case 17:return e.a(2)}},e,this,[[4,10,11,12],[2,14,15,16]])})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value;case 1:return e.d(ne(this.branches.flatMap(function(e){return e.values})),2);case 2:return e.a(2)}},e,this)})},{key:"children",value:pe().m(function e(){var t;return pe().w(function(e){for(;;)if(0===e.n)return t=this.branches.flatMap(function(e){return e.templates}),this.elseTemplates&&t.push.apply(t,He(this.elseTemplates)),e.a(2,t)},e,this)})}])}(br),ii=function(e){function t(e,n,r){var u;for(We(this,t),u=oe(this,t,[e,n,r]);n.length;){var i=n.shift();if(Wr(i)&&"endcomment"===i.name)return ae(u)}throw new Error("tag ".concat(e.getText()," not closed"))}return se(t,e),Ze(t,[{key:"render",value:function(){}}])}(br),oi=function(e){function t(e,n,r,u){var i;We(this,t);var o=(i=oe(this,t,[e,n,r])).tokenizer;for(i.file=ai(o,i.liquid,u),i.currentFile=e.file;!o.end();){o.skipBlank();var a=o.p,s=o.readIdentifier();if(("with"===s.content||"for"===s.content)&&(o.skipBlank(),":"!==o.peek())){var c=o.readValue();if(c){var l=o.p,f=void 0;"as"===o.readIdentifier().content?f=o.readIdentifier():o.p=l,i[s.content]={value:c,alias:f&&f.content},o.skipBlank(),","===o.peek()&&o.advance();continue}}o.p=a;break}return i.hash=new wr(o,r.options.keyValueSeparator),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f,h,p,D,v,F,y,d,m,g,b,w,E,k,A;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=this.liquid,u=this.hash,e.n=1,ci(this.file,t,r);case 1:return Mt(i=e.v,function(){return'illegal file path "'.concat(i,'"')}),o=t.spawn(),a=o.bottom(),g=en,b=a,e.n=2,u.render(t);case 2:if(w=e.v,g(b,w),!this.with){e.n=4;break}return s=this.with,c=s.value,l=s.alias,e.n=3,Wn(c,t);case 3:a[l||i]=e.v;case 4:if(!this.for){e.n=15;break}return f=this.for,h=f.value,p=f.alias,E=st,e.n=5,Wn(h,t);case 5:k=e.v,D=E(k),a.forloop=new Jt(D.length,h.getText(),p),v=Ue(D),e.p=6,v.s();case 7:if((F=v.n()).done){e.n=11;break}return y=F.value,a[p]=y,e.n=8,r._parsePartialFile(i,o.sync,this.currentFile);case 8:return d=e.v,e.n=9,r.renderer.renderTemplates(d,o,n);case 9:a.forloop.next();case 10:e.n=7;break;case 11:e.n=13;break;case 12:e.p=12,A=e.v,v.e(A);case 13:return e.p=13,v.f(),e.f(13);case 14:e.n=17;break;case 15:return e.n=16,r._parsePartialFile(i,o.sync,this.currentFile);case 16:return m=e.v,e.n=17,r.renderer.renderTemplates(m,o,n);case 17:return e.a(2)}},e,this,[[6,12,13,14]])})},{key:"children",value:pe().m(function e(t,n){return pe().w(function(e){for(;;)switch(e.n){case 0:if(!t||!rt(this.file)){e.n=2;break}return e.n=1,this.liquid._parsePartialFile(this.file,n,this.currentFile);case 1:return e.a(2,e.v);case 2:return e.a(2,[])}},e,this)})},{key:"partialScope",value:function(){if(rt(this.file)){var e=Object.keys(this.hash.hash);if(this.with){var t=this.with,n=t.value,r=t.alias;rt(r)?e.push([r,n]):rt(this.file)&&e.push([this.file,n])}if(this.for){var u=this.for,i=u.value,o=u.alias;rt(o)?e.push([o,i]):rt(this.file)&&e.push([this.file,i])}return{name:this.file,isolated:!0,scope:e}}}},{key:"arguments",value:pe().m(function e(){var t,n,r,u,i;return pe().w(function(e){for(;;)switch(e.n){case 0:t=0,n=Object.values(this.hash.hash);case 1:if(!(t"),n.write(''))),n.write('')),e.n=4,s.renderTemplates(this.templates,t,n);case 4:n.write("");case 5:f++,c.next(),e.n=3;break;case 6:r.length&&n.write(""),t.pop();case 7:return e.a(2)}},e,this)})},{key:"children",value:pe().m(function e(){return pe().w(function(e){for(;;)if(0===e.n)return e.a(2,this.templates)},e,this)})},{key:"arguments",value:pe().m(function e(){var t,n,r;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.collection;case 1:t=0,n=Object.values(this.args.hash);case 2:if(!(t0?o=[]:i.branches.push({value:new Ar(e.tokenizer.readFilteredValue(),i.liquid),test:Xn,templates:o=[]})}).on("tag:else",function(){a++,o=i.elseTemplates}).on("tag:endunless",function(){this.stop()}).on("template",function(e){o===i.elseTemplates&&1!==a||o.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))}).start(),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:r=this.liquid.renderer,u=Ue(this.branches),e.p=1,u.s();case 2:if((i=u.n()).done){e.n=6;break}return o=i.value,a=o.value,s=o.test,c=o.templates,e.n=3,a.value(t,t.opts.lenientIf);case 3:if(l=e.v,!s(l,t)){e.n=5;break}return e.n=4,r.renderTemplates(c,t,n);case 4:return e.a(2);case 5:e.n=2;break;case 6:e.n=8;break;case 7:e.p=7,f=e.v,u.e(f);case 8:return e.p=8,u.f(),e.f(8);case 9:return e.n=10,r.renderTemplates(this.elseTemplates,t,n);case 10:return e.a(2)}},e,this,[[1,7,8,9]])})},{key:"children",value:pe().m(function(){var e,t;return pe().w(function(n){for(;;)if(0===n.n)return e=this.branches.flatMap(function(e){return e.templates}),this.elseTemplates&&(t=e).push.apply(t,He(this.elseTemplates)),n.a(2,e)},e,this)})},{key:"arguments",value:function(){return this.branches.map(function(e){return e.value})}}])}(br),bi=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"render",value:function(e,t){e.breakCalled=!0}}])}(br),wi=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"render",value:function(e,t){e.continueCalled=!0}}])}(br),Ei={assign:Xu,for:ei,capture:ri,case:ui,comment:ii,include:li,render:oi,decrement:fi,increment:Di,cycle:hi,if:pi,layout:vi,block:Fi,raw:yi,tablerow:mi,unless:gi,break:bi,continue:wi,echo:function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t,[e,n,r])).tokenizer.skipBlank(),u.tokenizer.end()||(u.value=new Ar(u.tokenizer.readFilteredValue(),u.liquid)),u}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r;return pe().w(function(e){for(;;)switch(e.n){case 0:if(this.value){e.n=1;break}return e.a(2);case 1:return e.n=2,this.value.value(t,!1);case 2:r=e.v,n.write(r);case 3:return e.a(2)}},e,this)})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:if(!this.value){e.n=1;break}return e.n=1,this.value;case 1:return e.a(2)}},e,this)})}])}(br),liquid:function(e){function t(e,n,r,u){var i;We(this,t);var o=(i=oe(this,t,[e,n,r])).tokenizer.readLiquidTagTokens(i.liquid.options);return i.templates=u.parseTokens(o),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.liquid.renderer.renderTemplates(this.templates,t,n);case 1:return e.a(2)}},e,this)})},{key:"children",value:pe().m(function e(){return pe().w(function(e){for(;;)if(0===e.n)return e.a(2,this.templates)},e,this)})}])}(br),"#":function(e){function t(e,n,r){var u;if(We(this,t),u=oe(this,t,[e,n,r]),-1!==e.args.search(/\n\s*[^#\s]/g))throw new Error("every line of an inline comment must start with a '#' character");return u}return se(t,e),Ze(t,[{key:"render",value:function(){}}])}(br)},ki=function(){function e(){var t,n,r,u,i,o=this,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};We(this,e),this.renderer=new Gn,this.filters={},this.tags={},this.options=((t=a).hasOwnProperty("root")&&(t.hasOwnProperty("partials")||(t.partials=t.root),t.hasOwnProperty("layouts")||(t.layouts=t.root)),t.hasOwnProperty("cache")&&(u="number"==typeof t.cache?t.cache>0?new rr(t.cache):void 0:"object"===$e(t.cache)?t.cache:t.cache?new rr(1024):void 0,t.cache=u),(t=Object.assign(Object.assign(Object.assign({},Dr),t.jekyllInclude?{dynamicPartials:!1}:{}),t)).fs.dirname&&t.fs.sep||!t.relativeReference||(console.warn("[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning"),t.relativeReference=!1),t.root=vr(t.root),t.partials=vr(t.partials),t.layouts=vr(t.layouts),t.outputEscape=t.outputEscape&&("escape"===(i=t.outputEscape)?lr:"json"===i?ar.json:(Mt(ut(i),"`outputEscape` need to be of type string or function"),i)),t.locale||(t.locale=null!==(r=null===(n=vn())||void 0===n?void 0:n().resolvedOptions().locale)&&void 0!==r?r:"en-US"),t.templates&&(t.fs=new pr(t.templates),t.relativeReference=!0,t.root=t.partials=t.layouts="."),t),this.parser=new Hr(this),dt(Ei,function(e,t){return o.registerTag(t,e)}),dt(Qu,function(e,t){return o.registerFilter(t,e)})}return Ze(e,[{key:"parse",value:function(e,t){return new Hr(this).parse(e,t)}},{key:"_render",value:function(e,t,n){var r=t instanceof ru?t:new ru(t,this.options,n);return this.renderer.renderTemplates(e,r)}},{key:"render",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,nn(this._render(e,t,Object.assign(Object.assign({},n),{sync:!1}))))},r,this)}))}},{key:"renderSync",value:function(e,t,n){return rn(this._render(e,t,Object.assign(Object.assign({},n),{sync:!0})))}},{key:"renderToNodeStream",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=new ru(t,this.options,n);return this.renderer.renderTemplatesToNodeStream(e,r)}},{key:"_parseAndRender",value:function(e,t,n){var r=this.parse(e);return this._render(r,t,n)}},{key:"parseAndRender",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,nn(this._parseAndRender(e,t,Object.assign(Object.assign({},n),{sync:!1}))))},r,this)}))}},{key:"parseAndRenderSync",value:function(e,t,n){return rn(this._parseAndRender(e,t,Object.assign(Object.assign({},n),{sync:!0})))}},{key:"_parsePartialFile",value:function(e,t,n){return new Hr(this).parseFile(e,t,Ir.Partials,n)}},{key:"_parseLayoutFile",value:function(e,t,n){return new Hr(this).parseFile(e,t,Ir.Layouts,n)}},{key:"_parseFile",value:function(e,t,n,r){return new Hr(this).parseFile(e,t,n,r)}},{key:"parseFile",value:function(e,t){return tn(this,void 0,void 0,pe().m(function n(){return pe().w(function(n){for(;;)if(0===n.n)return n.a(2,nn(new Hr(this).parseFile(e,!1,t)))},n,this)}))}},{key:"parseFileSync",value:function(e,t){return rn(new Hr(this).parseFile(e,!0,t))}},{key:"_renderFile",value:pe().m(function e(t,n,r){var u;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this._parseFile(t,r.sync,r.lookupType);case 1:return u=e.v,e.n=2,this._render(u,n,r);case 2:return e.a(2,e.v)}},e,this)})},{key:"renderFile",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,nn(this._renderFile(e,t,Object.assign(Object.assign({},n),{sync:!1}))))},r,this)}))}},{key:"renderFileSync",value:function(e,t,n){return rn(this._renderFile(e,t,Object.assign(Object.assign({},n),{sync:!0})))}},{key:"renderFileToNodeStream",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){var u;return pe().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,this.parseFile(e);case 1:return u=r.v,r.a(2,this.renderToNodeStream(u,t,n))}},r,this)}))}},{key:"_evalValue",value:function(e,t){var n=new Ar(e,this),r=t instanceof ru?t:new ru(t,this.options);return n.value(r)}},{key:"evalValue",value:function(e,t){return tn(this,void 0,void 0,pe().m(function n(){return pe().w(function(n){for(;;)if(0===n.n)return n.a(2,nn(this._evalValue(e,t)))},n,this)}))}},{key:"evalValueSync",value:function(e,t){return rn(this._evalValue(e,t))}},{key:"registerFilter",value:function(e,t){this.filters[e]=t}},{key:"registerTag",value:function(e,t){var n;this.tags[e]=ut(t)?t:(n=t,function(e){function t(e,r,u){var i;return We(this,t),i=oe(this,t,[e,r,u]),ut(n.parse)&&n.parse.call(i,e,r),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,r){var u;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,new wr(this.token.args,t.opts.keyValueSeparator).render(t);case 1:return u=e.v,e.n=2,n.render.call(this,t,r,u);case 2:return e.a(2,e.v)}},e,this)})}])}(br))}},{key:"plugin",value:function(t){return t.call(this,e)}},{key:"express",value:function(){var e=this,t=!0;return function(n,r,u){if(t){var i,o,a;t=!1;var s=vr(this.root);(i=e.options.root).unshift.apply(i,He(s)),(o=e.options.layouts).unshift.apply(o,He(s)),(a=e.options.partials).unshift.apply(a,He(s))}e.renderFile(n,r).then(function(e){return u(null,e)},u)}}},{key:"analyze",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){return pe().w(function(n){for(;;)if(0===n.n)return n.a(2,Tr(e,t))},n)}))}},{key:"analyzeSync",value:function(e){return _r(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}},{key:"parseAndAnalyze",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,Tr(this.parse(e,t),n))},r,this)}))}},{key:"parseAndAnalyzeSync",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return _r(this.parse(e,t),n)}},{key:"variables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Object.keys(r.variables))}},n,this)}))}},{key:"variablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Object.keys(n.variables)}},{key:"fullVariables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(new Set(Object.values(r.variables).flatMap(function(e){return e.map(function(e){return String(e)})}))))}},n,this)}))}},{key:"fullVariablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(new Set(Object.values(n.variables).flatMap(function(e){return e.map(function(e){return String(e)})})))}},{key:"variableSegments",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(St(Object.values(r.variables).flatMap(function(e){return e.map(function(e){return e.toArray()})}))))}},n,this)}))}},{key:"variableSegmentsSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(St(Object.values(n.variables).flatMap(function(e){return e.map(function(e){return e.toArray()})})))}},{key:"globalVariables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Object.keys(r.globals))}},n,this)}))}},{key:"globalVariablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Object.keys(n.globals)}},{key:"globalFullVariables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(new Set(Object.values(r.globals).flatMap(function(e){return e.map(function(e){return String(e)})}))))}},n,this)}))}},{key:"globalFullVariablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(new Set(Object.values(n.globals).flatMap(function(e){return e.map(function(e){return String(e)})})))}},{key:"globalVariableSegments",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(St(Object.values(r.globals).flatMap(function(e){return e.map(function(e){return e.toArray()})}))))}},n,this)}))}},{key:"globalVariableSegmentsSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(St(Object.values(n.globals).flatMap(function(e){return e.map(function(e){return e.toArray()})})))}}])}(),Ai=new ki({renderLimit:500,parseLimit:1e3,memoryLimit:1e8});function Ci(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Bi(e,t,n){return(t=function(e){var t=function(e){if("object"!=Si(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Si(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Si(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Si(e){return Si="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Si(e)}function Oi(e,t){if(e){if("string"==typeof e)return ji(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ji(e,t):void 0}}function ji(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);nNi)throw new Error('@replace requires a "pattern" less than '.concat(Ni," characters"));if(n.length>Ri)throw new Error('@replace requires a "replacement" less than '.concat(Ri," characters"));return t=t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),e.replace(new RegExp(t,r),n)}function Ii(e){if(v(e)){for(var t=Object.assign({},e),n=0,r=Object.keys(e);n1&&void 0!==arguments[1]?arguments[1]:{},n=D(t);if("object"!==n)throw new Error("data must be an object, got ".concat(n));var r=function(e){var t=function(e){for(var t=1;t1)throw new Error("The root mapping must only have a single directive object");var u=t[Object.keys(t)[0]];if(!u||"object"!==Si(u))throw new Error("The root directive must be an object");u.mapping=n}return t}(e);return W(r),d(Mi(r,t))}Pi("@replace",function(e,t){if(!v(e))throw new Error('@replace requires an object with a "pattern" key');if(!e.pattern)throw new Error('@replace requires a "pattern" key');null==e.replacement&&(e.replacement=""),e.pattern2&&null==e.replacement2&&(e.replacement2=""),null==e.ignorecase&&(e.ignorecase=!1),null==e.global&&(e.global=!0);var n=e.pattern,r=e.replacement,u=e.ignorecase,i=e.global;if(e.value){var o=Mi(e.value,t),a="";if("boolean"!=typeof o&&"number"!=typeof o||(o=String(o)),"string"==typeof o&&"string"==typeof n&&"string"==typeof r&&"boolean"==typeof u&&"boolean"==typeof i){var s="";i&&(s+="g"),u&&(s+="i"),a=qi(o,n,r,s),e.pattern2&&"string"==typeof e.pattern2&&"string"==typeof e.replacement2&&(a=qi(a,e.pattern2,e.replacement2,s))}return a}}),Pi("@arrayPath",function(e,t){if(!Array.isArray(e))throw new Error("@arrayPath expected array, got ".concat(D(e)));var n,r,u=(r=2,function(e){if(Array.isArray(e))return e}(n=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(n,r)||Oi(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=u[0],o=u[1],a="string"==typeof i?p(t,i.replace("$.","")):Mi(i,t);return["object","array"].includes(D(a))&&"object"===D(o)&&Object.keys(o).length>0?function(e){return null==e?arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?e:[]:F(e)?e:[e]}(a).map(function(e){return Mi(o,e)}):a}),Li("@path",function(e,t){return p(t,e.replace("$.",""))}),Li("@template",function(e,t){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"!=typeof e)throw new TypeError('Invalid template! Template should be a "string" but '.concat(D(e)," was given."));function n(e){return function(n){n=n.slice(e,-e).trim();var r=p(t,n);return null!=r?r:""}}return e.replace(/\{\{\{([^}]+)\}\}\}/g,n(3)).replace(/\{\{([^}]+)\}\}/g,n(2))}(e,t)}),Pi("@literal",function(e,t){return Mi(e,t)}),Pi("@flatten",function(e,t){if(!v(e))throw new Error('@flatten requires an object with a "separator" key');if(!e.separator)throw new Error('@flatten requires a "separator" key');var n=Mi(e.separator,t);if("string"!=typeof n)throw new Error("@flatten requires a string separator");var r=Mi(e.value,t);return ee(r,"",n,Boolean(e.omitArrays))}),Pi("@json",function(e,t){if(!v(e))throw new Error('@json requires an object with a "value" key');if(!e.mode)throw new Error('@json requires a "mode" key');if(!e.value)throw new Error('@json requires a "value" key');var n=Mi(e.value,t);return"encode"===e.mode?JSON.stringify(n):"decode"===e.mode?"string"==typeof n?JSON.parse(n):n:void 0}),Pi("@merge",function(e,t){if(!v(e))throw new Error('@merge requires an object with an "objects" key and a "direction" key');if(!e.direction)throw new Error('@merge requires a "direction" key');var n=Mi(e.direction,t);if(!e.objects)throw new Error('@merge requires a "objects" key');if(!Array.isArray(e.objects))throw new Error("@merge: expected opts.array, got ".concat(Si(e.objects)));var r,u=e.objects.map(function(e){return Mi(e,t)});return"left"===n&&u.reverse(),Object.assign.apply(Object,[{}].concat(function(e){if(Array.isArray(e))return ji(e)}(r=u)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||Oi(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))}),Pi("@transform",function(e,t){if(!v(e))throw new Error('@transform requires an object with an "apply" key and a "mapping" key');if(!e.mapping)throw new Error('@transform requires a "mapping" key');if(!e.apply)throw new Error('@transform requires a "apply" key');if(!v(e.apply))throw new Error('@transform "apply" key should be an object');var n=zi(e.apply,t);return Mi(e.mapping,n)}),Pi("@excludeWhenNull",function(e,t){var n=Mi(e,t);if(null!==n)return Ii(n)}),Pi("@liquid",function(e,t){return function(e,t){if("string"!=typeof e)throw new Error("liquid template value must be a string");if(0===e.length)return"";if(e.length>1e3)throw new Error("liquid template values are limited to 1000 characters");var n=Ai.parseAndRenderSync(e,t);return"string"!=typeof n?"error":n}(e,t)});var Vi=function(){function e(e){var t;this.callbacks={},this.warned=!1,this.maxListeners=null!==(t=null==e?void 0:e.maxListeners)&&void 0!==t?t:10}return e.prototype.warnIfPossibleMemoryLeak=function(e){this.warned||this.maxListeners&&this.callbacks[e].length>this.maxListeners&&(console.warn("Event Emitter: Possible memory leak detected; ".concat(String(e)," has exceeded ").concat(this.maxListeners," listeners.")),this.warned=!0)},e.prototype.on=function(e,t){return this.callbacks[e]?(this.callbacks[e].push(t),this.warnIfPossibleMemoryLeak(e)):this.callbacks[e]=[t],this},e.prototype.once=function(e,t){var n=this,r=function(){for(var u=[],i=0;i1?n-1:0),u=1;u=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:u}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw i}}}}function io(e,t){if(e){if("string"==typeof e)return oo(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?oo(e,t):void 0}}function oo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n2&&void 0!==arguments[2]?arguments[2]:{};null==u||null===(r=u.emitter)||void 0===r||r.emit(Gi.EvalRuleStart,{rule:e,signal:n.signalBuffer[0],signalBuffer:n.signalBuffer});var i=t.getSignalsByTriggers(n.signalBuffer,e.triggers,{emitter:null==u?void 0:u.emitter});return i?t.createMethodCallsFromMappingInput(e,i):[]}},{key:"getSignalsByTriggers",value:function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},u=function(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||io(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e),i=u[0],o=u.slice(1),a={},s=uo(t);try{var c,l=function(){var t,u,s=n.value;if(u="current"===s.ref?po(s,i)?i:void 0:o.find(function(e){return po(s,e)}),null==r||null===(t=r.emitter)||void 0===t||t.emit(Gi.EvalTriggerMatchResult,{match:Boolean(u),trigger:s,signal:i,signalBuffer:e}),!u)return{v:void 0};a[s.ref]=u};for(s.s();!(n=s.n()).done;)if(c=l())return c.v}catch(e){s.e(e)}finally{s.f()}return a}},{key:"createMethodCallsFromMappingInput",value:function(e,t){var n,r=[],u=uo(e.actions);try{for(u.s();!(n=u.n()).done;){var i=n.value;if("send-event"===i.action){var o=ho(i.mappings,t);r.push([i.mappings.type,o])}else"reset"===i.action&&r.push(["reset"])}}catch(e){u.e(e)}finally{u.f()}return r}}],(r=[{key:"eval",value:function(e){var n=this;return this.rules.flatMap(function(r){return t.evalSingleRule(r,e,{emitter:n})})}}])&&ao(n.prototype,r),u&&ao(n,u),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,u}(Wi);function vo(e){return vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vo(e)}function Fo(e){return function(e){if(Array.isArray(e))return go(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||mo(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yo(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(e,t)||mo(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mo(e,t){if(e){if("string"==typeof e)return go(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?go(e,t):void 0}}function go(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,i=!0,o=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){o=!0,u=e},f:function(){try{i||null==t.return||t.return()}finally{if(o)throw u}}}}(t.map(jo));try{for(r.s();!(n=r.n()).done;){var u=yo(n.value,2),i=u[0],o=u[1];try{e[i].apply(e,Fo(o))}catch(e){console.error("Error calling analytics.js method .".concat(i,"() with args ").concat(JSON.stringify(o),":"),e)}}}catch(e){r.e(e)}finally{r.f()}}(null!==(n=null==t?void 0:t.analytics)&&void 0!==n?n:function(){if(globalThis.analytics)return globalThis.analytics;if("undefined"!=typeof analytics)return analytics;throw new Error("No analytics instance found.")}(),r.eval(signals))}globalThis.SEGMENT_SIGNALS_RULES=[ + { + "actions": [ + { + "action": "send-event", + "mappings": { + "type": "screen", + "name": "Screen Viewed", + "context": {}, + "properties": { + "currentScreen": { + "@path": "$.current.data.currentScreen" + } + } + } + } + ], + "triggers": [ + { + "ref": "current", + "subscription": { + "data": { + "ir": [], + "contextualSignalType": { + "id": "navigation" + } + }, + "type": "fql" + } + } + ] + }, + { + "actions": [ + { + "action": "send-event", + "mappings": { + "type": "track", + "event": "Add to cart", + "context": {}, + "properties": { + "price": { + "@path": "$.trigger_2.data.body.data.price" + }, + "title": { + "@path": "$.current.data.target.title" + }, + "id ": { + "@path": "$.trigger_2.data.body.data.id" + } + } + } + } + ], + "triggers": [ + { + "ref": "current", + "subscription": { + "data": { + "ir": [ + "=", + "data.target.title", + { + "value": "Add to cart" + } + ], + "contextualSignalType": { + "id": "interaction" + } + }, + "type": "fql" + } + }, + { + "ref": "trigger_2", + "subscription": { + "data": { + "ir": [ + "contains", + "data.url", + { + "value": "/products" + } + ], + "contextualSignalType": { + "id": "network-response" + } + }, + "type": "fql" + } + } + ] + } +],null!==(xo=globalThis.signals)&&void 0!==xo||(globalThis.signals=new h),globalThis.SEGMENT_SIGNALS_RUNTIME_VERSION="2.2.0"}(),globalThis.processSignal=r.processSignal}(); diff --git a/Tests/AnalyticsLiveTests/TestHelpers/runtimeBundleNoProcess.js b/Tests/AnalyticsLiveTests/TestHelpers/runtimeBundleNoProcess.js new file mode 100644 index 0000000..d9aa5ac --- /dev/null +++ b/Tests/AnalyticsLiveTests/TestHelpers/runtimeBundleNoProcess.js @@ -0,0 +1,98 @@ +console.log("howdy!") +globalThis.SEGMENT_SIGNALS_RULES_DEBUG = false; + +/*! For license information please see bundle.js.LICENSE.txt */ +!function(){var e={70:function(e){"use strict";var t=Object.prototype.toString;e.exports=t},115:function(e,t,n){"use strict";var r;r=!0===n(766)?1:0,e.exports=r},141:function(e,t,n){"use strict";var r=n(4850),u={uint16:n(5585),uint8:r};e.exports=u},449:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var u=n(4510)();e.exports=function(){return u&&"symbol"===r(Symbol.toStringTag)}},469:function(e){"use strict";var t="function"==typeof Uint32Array?Uint32Array:void 0;e.exports=t},558:function(e){"use strict";var t="function"==typeof Uint8Array?Uint8Array:null;e.exports=t},583:function(e,t,n){"use strict";var r=n(8914);e.exports=r},640:function(e){"use strict";var t="function"==typeof Symbol?Symbol.toStringTag:"";e.exports=t},667:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=u(n(5406));function o(e,t){if(!Array.isArray(e))return!0===a(e,t);var n,u,i,f,h=e[0];switch(h){case"!":return!o(e[1],t);case"or":for(var p=1;p":case">=":return function(e,t,n,r){if(s(e)&&(e=o(e,r)),s(t)&&(t=o(t,r)),"number"!=typeof e||"number"!=typeof t)return!1;switch(n){case"<=":return e<=t;case">=":return e>=t;case"<":return e":return e>t;default:throw new Error("Invalid operator in compareNumbers: ".concat(n))}}(a(e[1],t),a(e[2],t),h,t);case"in":return function(e,t,n){return void 0!==t.find(function(t){return a(t,n)===e})}(a(e[1],t),a(e[2],t),t);case"contains":return i=a(e[1],t),f=a(e[2],t),"string"==typeof i&&"string"==typeof f&&-1!==i.indexOf(f);case"match":return n=a(e[1],t),u=a(e[2],t),"string"==typeof n&&"string"==typeof u&&function(e,t){var n,r;e:for(;e.length>0;){var u,i;if(u=(n=c(e)).star,i=n.chunk,e=n.pattern,u&&""===i)return!0;var o=l(i,t),a=o.t,s=o.ok,f=o.err;if(f)return!1;if(!s||!(0===a.length||e.length>0)){if(u)for(var h=0;h0)continue;t=a;continue e}if(f)return!1}return!1}t=a}return 0===t.length}(u,n);case"lowercase":var D=a(e[1],t);return"string"!=typeof D?null:D.toLowerCase();case"typeof":return r(a(e[1],t));case"length":return function(e){return null===e?0:Array.isArray(e)||"string"==typeof e?e.length:NaN}(a(e[1],t));default:throw new Error("FQL IR could not evaluate for token: ".concat(h))}}function a(e,t){return Array.isArray(e)?e:"object"===r(e)?e.value:(0,i.default)(t,e)}function s(e){return!!Array.isArray(e)&&(("lowercase"===e[0]||"length"===e[0]||"typeof"===e[0])&&2===e.length||("contains"===e[0]||"match"===e[0])&&3===e.length)}function c(e){for(var t={star:!1,chunk:"",pattern:""};e.length>0&&"*"===e[0];)e=e.slice(1),t.star=!0;var n,r=!1;e:for(n=0;n0;){if(0===t.length)return u;switch(e[0]){case"[":var i=t[0];t=t.slice(1);var o=!0;(e=e.slice(1)).length>0&&"^"===e[0]&&(o=!1,e=e.slice(1));for(var a=!1,s=0;;){if(e.length>0&&"]"===e[0]&&s>0){e=e.slice(1);break}var c,l="";if(c=(n=f(e)).char,e=n.newChunk,n.err)return u;if(l=c,"-"===e[0]&&(l=(r=f(e.slice(1))).char,e=r.newChunk,r.err))return u;c<=i&&i<=l&&(a=!0),s++}if(a!==o)return u;break;case"?":t=t.slice(1),e=e.slice(1);break;case"\\":if(0===(e=e.slice(1)).length)return u.err=!0,u;default:if(e[0]!==t[0])return u;t=t.slice(1),e=e.slice(1)}}return u.t=t,u.ok=!0,u.err=!1,u}function f(e){var t={char:"",newChunk:"",err:!1};return 0===e.length||"-"===e[0]||"]"===e[0]||"\\"===e[0]&&0===(e=e.slice(1)).length?(t.err=!0,t):(t.char=e[0],t.newChunk=e.slice(1),0===t.newChunk.length&&(t.err=!0),t)}t.default=function(e,t){if(!t)throw new Error("No matcher supplied!");switch(t.type){case"all":return!0;case"fql":return function(e,t){if(!e)return!1;try{e=JSON.parse(e)}catch(t){throw new Error('Failed to JSON.parse FQL intermediate representation "'.concat(e,'": ').concat(t))}var n=o(e,t);return"boolean"==typeof n&&n}(t.ir,e);default:throw new Error("Matcher of type ".concat(t.type," unsupported."))}}},680:function(e,t,n){"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}var u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=u(n(9407)),o=u(n(5406)),a=u(n(2278)),s=n(6888),c=n(2047);function l(e,t){h(e,t.drop,function(e,t){t.forEach(function(t){return delete e[t]})})}function f(e,t){h(e,t.allow,function(e,t){Object.keys(e).forEach(function(n){t.includes(n)||delete e[n]})})}function h(e,t,n){Object.entries(t).forEach(function(t){var u=t[0],i=t[1],a=function(e){"object"===r(e)&&null!==e&&n(e,i)},s=""===u?e:(0,o.default)(e,u);Array.isArray(s)?s.forEach(a):a(s)})}function p(e,t){var n=JSON.parse(JSON.stringify(e));for(var u in t.map)if(t.map.hasOwnProperty(u)){var i=t.map[u],a=u.split("."),l=void 0;if(a.length>1?(a.pop(),l=(0,o.default)(n,a.join("."))):l=e,"object"===r(l)){if(i.copy){var f=(0,o.default)(n,i.copy);void 0!==f&&(0,s.dset)(e,u,f)}else if(i.move){var h=(0,o.default)(n,i.move);void 0!==h&&(0,s.dset)(e,u,h),(0,c.unset)(e,i.move)}else i.hasOwnProperty("set")&&(0,s.dset)(e,u,i.set);if(i.to_string){var p=(0,o.default)(e,u);if("string"==typeof p||"object"===r(p)&&null!==p)continue;void 0!==p?(0,s.dset)(e,u,JSON.stringify(p)):(0,s.dset)(e,u,"undefined")}}}}function D(e,t){return!(t.sample.percent<=0)&&(t.sample.percent>=1||(t.sample.path?function(e,t){var n=(0,o.default)(e,t.sample.path),r=(0,i.default)(JSON.stringify(n)),u=-64,s=[];v(r.slice(0,8),s);for(var c=0,l=0;l<64&&1!==s[l];l++)c++;if(0!==c){var f=[];v(r.slice(9,16),f),u-=c,s.splice(0,c),f.splice(64-c),s=s.concat(f)}return s[63]=0===s[63]?1:0,(0,a.default)(parseInt(s.join(""),2),u)=1;u/=2)r-u>=0?(r-=u,t.push(1)):t.push(0)}t.default=function(e,t){for(var n=e,r=0,u=t;r>>20)-i|0}},2995:function(e){"use strict";e.exports=2146435072},3041:function(e,t,n){"use strict";var r=n(4121);e.exports=function(e){return r(e,[0,0],1,0)}},3081:function(e,t,n){"use strict";var r=n(7680),u=n(1817),i=n(6782),o=n(8473);e.exports=function(e,t,n,a){return i(e)||u(e)?(t[a]=e,t[a+n]=0,t):0!==e&&o(e)o?e<0?u:r:(t<=a?(t+=52,d=2220446049250313e-31):d=1,D(y,e),n=y[0],n&=2148532223,d*v(n|=t+i<<20,y[1])))}},3934:function(e){"use strict";var t="function"==typeof Float64Array?Float64Array:null;e.exports=t},4006:function(e,t,n){"use strict";var r=n(6073);e.exports=r},4107:function(e,t,n){"use strict";var r=n(7968),u=n(7740),i=n(9150);e.exports=function(){var e,t;if("function"!=typeof i)return!1;try{t=new i(t=[1,3.14,-3.14,u+1,u+2]),e=r(t)&&1===t[0]&&3===t[1]&&t[2]===u-2&&0===t[3]&&1===t[4]}catch(t){e=!1}return e}},4121:function(e,t,n){"use strict";var r=n(7115),u=n(1898),i=n(1595),o=new u(1),a=new r(o.buffer),s=i.HIGH,c=i.LOW;e.exports=function(e,t,n,r){return o[0]=e,t[r]=a[s],t[r+n]=a[c],t}},4287:function(e,t,n){"use strict";var r=n(762);e.exports=r},4396:function(e){"use strict";e.exports=1023},4510:function(e,t,n){"use strict";var r=n(9121);e.exports=r},4557:function(e,t,n){"use strict";var r=n(1714),u=/\s+at.*(?:\(|\s)(.*)\)?/,i=/^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/,o=void 0===r.homedir?"":r.homedir();e.exports=function(e,t){return t=Object.assign({pretty:!1},t),e.replace(/\\/g,"/").split("\n").filter(function(e){var t=e.match(u);if(null===t||!t[1])return!0;var n=t[1];return!n.includes(".app/Contents/Resources/electron.asar")&&!n.includes(".app/Contents/Resources/default_app.asar")&&!i.test(n)}).filter(function(e){return""!==e.trim()}).map(function(e){return t.pretty?e.replace(u,function(e,t){return e.replace(t,t.replace(o,"~"))}):e}).join("\n")}},4637:function(e,t,n){"use strict";var r=n(9020);e.exports=r},4850:function(e,t,n){"use strict";var r,u=n(1971),i=n(1853),o=n(3699);r=u()?i:o,e.exports=r},5099:function(e){"use strict";e.exports=Number},5249:function(e){"use strict";var t=Object.prototype.hasOwnProperty;e.exports=function(e,n){return null!=e&&t.call(e,n)}},5309:function(e,t,n){"use strict";var r=n(8184),u="function"==typeof Uint16Array;e.exports=function(e){return u&&e instanceof Uint16Array||"[object Uint16Array]"===r(e)}},5406:function(e,t,n){var r;function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}"object"==u(t)?e.exports=function(e,t,n,r,u){for(t=t.split?t.split("."):t,r=0;r1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2?arguments[2]:void 0;if(i=function(e){for(var t=1;t3?(u=D===r)&&(a=i[(o=i[4])?5:(o=3,3)],i[4]=i[5]=e):i[0]<=p&&((u=n<2&&pr||r>D)&&(i[4]=n,i[5]=r,h.n=D,o=0))}if(u||n>1)return s;throw f=!0,r}return function(u,l,D){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,D),o=l,a=D;(t=o<2?e:a)||!f;){i||(o?o<3?(o>1&&(h.n=-1),p(o,a)):h.n=a:h.v=a);try{if(c=2,i){if(o||(u="next"),t=i[u]){if(!(t=t.call(i,a)))throw TypeError("iterator result is not an object");if(!t.done)return t;a=t.value,o<2&&(o=0)}else 1===o&&(t=i.return)&&t.call(i),o<2&&(a=TypeError("The iterator does not provide a '"+u+"' method"),o=1);i=e}else if((t=(f=h.n<0)?a:n.call(r,h))!==s)break}catch(t){i=e,o=1,a=t}finally{c=1}}return{value:t,done:f}}}(n,i,o),!0),l}var s={};function c(){}function l(){}function f(){}t=Object.getPrototypeOf;var h=[][i]?t(t([][i]())):(u(t={},i,function(){return this}),t),p=f.prototype=c.prototype=Object.create(h);function D(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,u(e,o,"GeneratorFunction")),e.prototype=Object.create(p),e}return l.prototype=f,u(p,"constructor",f),u(f,"constructor",l),l.displayName="GeneratorFunction",u(f,o,"GeneratorFunction"),u(p),u(p,o,"Generator"),u(p,i,function(){return this}),u(p,"toString",function(){return"[object Generator]"}),(r=function(){return{w:a,m:D}})()}function u(e,t,n,r){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}u=function(e,t,n,r){if(t)i?i(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{function o(t,n){u(e,t,function(e){return this._invoke(t,n,e)})}o("next",0),o("throw",1),o("return",2)}},u(e,t,n,r)}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=o(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,u=function(){};return{s:u,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:u}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function o(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n>2]|=s.charCodeAt(c)<<8*c--;for(u=s=0;u>4]+r[s]+~~a[u|15&[s,5*s+1,3*s+5,7*s][c]])<<(c=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*c+s++%4])|i>>>-c),t,n])t=0|c[1],n=c[2];for(s=4;s;)o[--s]+=c[s]}for(e="";s<32;)e+=(o[s>>3]>>4*(1^s++)&15).toString(16);return e}},9511:function(e,t,n){"use strict";var r=n(8184),u="function"==typeof Uint32Array;e.exports=function(e){return u&&e instanceof Uint32Array||"[object Uint32Array]"===r(e)}},9550:function(e,t,n){"use strict";var r=n(5249);e.exports=r},9567:function(e,t,n){"use strict";var r=n(2442);e.exports=r}},t={};function n(r){var u=t[r];if(void 0!==u)return u.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};!function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:[];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.find=function(e,n,r){return t.filter(e,n,r)[0]},this.filter=function(e,n,r){return t.signalBuffer.slice(t.signalBuffer.indexOf(e)+1).filter(function(e){return e.type===n}).filter(function(e){return r?r(e):function(){return!0}})},this.signalBuffer=n,this._maxBufferSize=1e3});function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(s=function(){return!!e})()}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function l(e,t){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},l(e,t)}var f,h=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(e=function(e,t,n){return t=c(t),function(e,t){if(t&&("object"==a(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,s()?Reflect.construct(t,n||[],c(e).constructor):t.apply(e,n))}(this,t,[n]))._add=function(t){e._signalCounter<0&&(e._signalCounter=0),"index"in t&&-1==t.index&&(t.index=e._getNextIndex()),e.signalBuffer.unshift(t),e.signalBuffer.length>e._maxBufferSize&&e.signalBuffer.pop()},e._getNextIndex=function(){var t=e._signalCounter;return e._signalCounter+=1,t},e._signalCounter=0,e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&l(e,t)}(t,e),n=t,Object.defineProperty(n,"prototype",{writable:!1}),n;var n}(o);try{f=new RegExp("\\[(?=\"|'|\\d)|\\.|(?<=\"|'|\\d)]+","g")}catch(e){f=/\[|\.|]+/g}function p(e,t){return""===t||"."===t?e:null!==t&&null!=t?(Array.isArray(t)?t:t.split(f).filter(function(e){return e}).map(function(e){return e.replace(/'|"/g,"")})).reduce(function(e,t){return e&&e[t]},e):void 0}function D(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function v(e){return"object"===D(e)}function F(e){return Array.isArray(e)}function y(e){if(!v(e))return!1;var t=Object.keys(e);return!!t.some(function(e){return e.startsWith("@")})&&0===t.filter(function(e){return!e.startsWith("@")&&"_metadata"!==e}).length}function d(e){if(Array.isArray(e))return e.map(function(e){return d(e)});if(v(e)){var t=Object.assign({},e);return Object.keys(t).forEach(function(e){void 0===t[e]?delete t[e]:t[e]=d(t[e])}),t}return e}var m=n(8829),g=n.n(m);var b,w=(b=function(e,t){return b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},b(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}b(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function k(e){return function(e){if(Array.isArray(e))return C(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||A(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(e,t){if(e){if("string"==typeof e)return C(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&void 0!==arguments[1]?arguments[1]:[];return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=S(t),function(e,t){if(t&&("object"==E(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,B()?Reflect.construct(t,n||[],S(e).constructor):t.apply(e,n))}(this,t,["/".concat(n.join("/")," ").concat(e,".")])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&O(e,t)}(t,e),n=t,Object.defineProperty(n,"prototype",{writable:!1}),n;var n}(function(e){function t(t,n){var r,u,i,o=this.constructor,a=e.call(this,t,n)||this;return Object.defineProperty(a,"name",{value:o.name,enumerable:!1,configurable:!0}),r=a,u=o.prototype,(i=Object.setPrototypeOf)?i(r,u):r.__proto__=u,function(e,t){void 0===t&&(t=e.constructor);var n=Error.captureStackTrace;n&&n(e,t)}(a),a}return w(t,e),t}(Error));function x(e){var t=[];return e.forEach(function(e){e instanceof g()?t.push.apply(t,k(e)):t.push(e)}),t}function T(e){var t=D(e);return"object"===t&&Object.keys(e).some(function(e){return e.startsWith("@")})?"directive":t}var _={};function P(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!y(e)&&!v(e)){var n=D(e);throw new j("should be a directive object but it is ".concat($(n)," ").concat(n),t)}var r=Object.keys(e),u=r.filter(function(e){return e.startsWith("@")});if(u.length>1)throw new j("should only have one @-prefixed key but it has ".concat(u.length," keys"),t);if(r.filter(function(e){return!e.startsWith("@")&&"_metadata"!==e}).length>0)throw new j("should only have one @-prefixed key but it has ".concat(r.length," keys"),t);var i=u[0],o=_[i];if("function"!=typeof o)throw new j("has an invalid directive: ".concat(i),t);o(e[i],t)}function L(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);switch(n){case"directive":return P(e,t);case"object":case"array":case"boolean":case"string":case"number":case"null":return;default:throw new j("should be a mapping directive or a JSON value but it is ".concat($(n)," ").concat(n),t)}}function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);switch(n){case"directive":return P(e,t);case"string":return;default:throw new j("should be a string or a mapping directive but it is ".concat($(n)," ").concat(n),t)}}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);switch(n){case"directive":return P(e,t);case"object":return U(e,t);default:throw new j("should be a object or a mapping directive but it is ".concat($(n)," ").concat(n),t)}}function q(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:[];t.forEach(function(t){t(e,n)})}}function I(e,t){return function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if("string"==typeof n&&n.lengtht)throw new j("should be a string of length ".concat(t," or less"),r)}}function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);if("string"!==n)throw new j("should be a string but it is ".concat($(n)," ").concat(n),t)}function z(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:[];M(e,n);var r=e;if(!t.includes(r.toLowerCase()))throw new j("should be one of ".concat(t.join(", ")," but it is ").concat(JSON.stringify(r)),n)}}function V(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);if("boolean"!==n)throw new j("should be a boolean but it is ".concat($(n)," ").concat(n),t)}function U(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=T(e);if("object"!==n)throw new j("should be an object but it is ".concat($(n)," ").concat(n),t);var r=e,u=Object.keys(r),i=u.find(function(e){return"@"===e.charAt(0)});if(i)throw new j("shouldn't have directive (@-prefixed) keys but it has ".concat(JSON.stringify(i)),t);var o=[];if(u.forEach(function(e){try{W(r[e],[].concat(k(t),[e]))}catch(e){o.push(e)}}),o.length)throw new(g())(x(o))}function H(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];U(e,n);var r=[],u=e;if(Object.entries(t).forEach(function(e){var t,i,o=(i=2,function(e){if(Array.isArray(e))return e}(t=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(t,i)||A(t,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),a=o[0],s=o[1],c=s.required,l=s.optional;try{if(c){if(void 0===u[a])throw new j("should have field ".concat(JSON.stringify(a)," but it doesn't"),n);c(u[a],[].concat(k(n),[a]))}else l&&void 0!==u[a]&&l(u[a],[].concat(k(n),[a]))}catch(e){r.push(e)}}),r.length)throw new(g())(x(r))}function J(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=D(e);if("array"!==n)throw new j("should be an array but it is ".concat($(n)," ").concat(n),t)}function G(e,t){Array.isArray(e)||(e=[e]),e.forEach(function(e){_[e]=function(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{t(n,[].concat(k(r),[e]))}catch(e){var u=e;if(e instanceof j||e instanceof g())throw e;throw new j(u.message,r)}}})}function $(e){switch(e.charAt(0)){case"a":case"e":case"i":case"o":case"u":return"an";default:return"a"}}function W(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];switch(T(e)){case"directive":return P(e,t);case"object":return U(e,t);case"array":return J(e,t);default:return null}}function Y(e){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Y(e)}function Z(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Q(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".",r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return v(e)||!r&&F(e)?Object.entries(e).reduce(function(e,u){var i,o,a=(o=2,function(e){if(Array.isArray(e))return e}(i=u)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(i,o)||function(e,t){if(e){if("string"==typeof e)return K(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?K(e,t):void 0}}(i,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=a[0],c=a[1],l=t?"".concat(t).concat(n).concat(s):s;return Q(Q({},e),ee(c,l,n,r))},{}):X({},t,e)};function te(e,t,n){return(t=Qe(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ne(e){if(null!=e){var t=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],n=0;if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}}}throw new TypeError($e(e)+" is not iterable")}function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(e,t)||Je(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ue(e,t,n,r){var u=ie(he(1&r?e.prototype:e),t,n);return 2&r&&"function"==typeof u?function(e){return u.apply(n,e)}:u}function ie(){return ie="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=he(e)););return e}(e,t);if(r){var u=Object.getOwnPropertyDescriptor(r,t);return u.get?u.get.call(arguments.length<3?e:n):u.value}},ie.apply(null,arguments)}function oe(e,t,n){return t=he(t),ae(e,le()?Reflect.construct(t,n||[],he(e).constructor):t.apply(e,n))}function ae(e,t){if(t&&("object"==$e(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function se(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&fe(e,t)}function ce(e){var t="function"==typeof Map?new Map:void 0;return ce=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(le())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var u=new(e.bind.apply(e,r));return n&&fe(u,n.prototype),u}(e,arguments,he(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),fe(n,e)},ce(e)}function le(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(le=function(){return!!e})()}function fe(e,t){return fe=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},fe(e,t)}function he(e){return he=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},he(e)}function pe(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",u=n.toStringTag||"@@toStringTag";function i(n,r,u,i){var s=r&&r.prototype instanceof a?r:a,c=Object.create(s.prototype);return De(c,"_invoke",function(n,r,u){var i,a,s,c=0,l=u||[],f=!1,h={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,n){return i=t,a=0,s=e,h.n=n,o}};function p(n,r){for(a=n,s=r,t=0;!f&&c&&!u&&t3?(u=D===r)&&(s=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=p&&((u=n<2&&pr||r>D)&&(i[4]=n,i[5]=r,h.n=D,a=0))}if(u||n>1)return o;throw f=!0,r}return function(u,l,D){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&p(l,D),a=l,s=D;(t=a<2?e:s)||!f;){i||(a?a<3?(a>1&&(h.n=-1),p(a,s)):h.n=s:h.v=s);try{if(c=2,i){if(a||(u="next"),t=i[u]){if(!(t=t.call(i,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=i.return)&&t.call(i),a<2&&(s=TypeError("The iterator does not provide a '"+u+"' method"),a=1);i=e}else if((t=(f=h.n<0)?s:n.call(r,h))!==o)break}catch(t){i=e,a=1,s=t}finally{c=1}}return{value:t,done:f}}}(n,u,i),!0),c}var o={};function a(){}function s(){}function c(){}t=Object.getPrototypeOf;var l=[][r]?t(t([][r]())):(De(t={},r,function(){return this}),t),f=c.prototype=a.prototype=Object.create(l);function h(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,De(e,u,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=c,De(f,"constructor",c),De(c,"constructor",s),s.displayName="GeneratorFunction",De(c,u,"GeneratorFunction"),De(f),De(f,u,"Generator"),De(f,r,function(){return this}),De(f,"toString",function(){return"[object Generator]"}),(pe=function(){return{w:i,m:h}})()}function De(e,t,n,r){var u=Object.defineProperty;try{u({},"",{})}catch(e){u=0}De=function(e,t,n,r){if(t)u?u(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{function i(t,n){De(e,t,function(e){return this._invoke(t,n,e)})}i("next",0),i("throw",1),i("return",2)}},De(e,t,n,r)}var ve=pe().m(St),Fe=pe().m(Yn),ye=pe().m(Zn),de=pe().m(Qn),me=pe().m(xr),ge=pe().m(Lr),be=pe().m(Nr),we=pe().m(Rr),Ee=pe().m(wu),ke=pe().m(Eu),Ae=pe().m(ku),Ce=pe().m(Bu),Be=pe().m(Su),Se=pe().m(Ou),Oe=pe().m(ju),je=pe().m(xu),xe=pe().m(Tu),Te=pe().m(_u),_e=pe().m(Pu),Pe=pe().m(Lu),Le=pe().m(Nu),Ne=pe().m(Ru),Re=pe().m(qu),qe=pe().m(Iu),Ie=pe().m(Mu),Me=pe().m(zu),ze=pe().m(Vu),Ve=pe().m(ci);function Ue(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Je(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,u=function(){};return{s:u,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:u}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw i}}}}function He(e){return function(e){if(Array.isArray(e))return Ge(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Je(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Je(e,t){if(e){if("string"==typeof e)return Ge(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ge(e,t):void 0}}function Ge(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n0?[e]:gt(t=e)&&Symbol.iterator in t?Array.from(e):gt(e)?Object.keys(e).map(function(t){return[t,e[t]]}):[];var t}function ct(e){return Dt(e=lt(e))?[]:Ft(e)?e:[e]}function lt(e){return e instanceof Ke&&ut(e.valueOf)?e.valueOf():e}function ft(e){return e=Number(e),isNaN(e)?0:e}function ht(e){return"number"==typeof e}function pt(e){return e&&ut(e.toLiquid)?pt(e.toLiquid()):e}function Dt(e){return null==e}function vt(e){return void 0===e}function Ft(e){return"[object Array]"===et.call(e)}function yt(e){return e&&ht(e.length)}function dt(e,t){for(var n in e=e||{})if(nt.call(e,n)&&!1===t(e[n],n,e))break;return e}function mt(e){return e[e.length-1]}function gt(e){var t=$e(e);return null!==e&&("object"===t||"function"===t)}function bt(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=[],u=e;u2&&void 0!==arguments[2]?arguments[2]:" ",function(e,t){return t+e})}function Et(e,t,n,r){for(var u=t-(e=String(e)).length;u-- >0;)e=r(e,n);return e}function kt(e){return e}function At(e,t){return null==e&&null==t?0:null==e?1:null==t||(e=tt.call(e))<(t=tt.call(t))?-1:e>t?1:0}function Ct(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r> ":" ",n=wt(String(e),String(a).length),o="".concat(t).concat(n,"| "),s=e===r?"\n"+wt("^",u+o.length):"";return(o+=i[e-1])+s}).join("\n"),s),enumerable:!1}),this.message=function(e,t){t.file&&(e+=", file:".concat(t.file));var n=re(t.getPosition(),2),r=n[0],u=n[1];return e+=", line:".concat(r,", col:").concat(u)}(this.message,this.token),this.stack=this.message+"\n"+this.context+"\n"+this.stack,this.originalError&&(this.stack+="\nFrom "+this.originalError.stack)}}],[{key:"is",value:function(e){return"LiquidError"===(null==e?void 0:e[Ot])}}])}(ce(Error)),xt=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n])).name="TokenizationError",ue(t,"update",r,3)([]),r}return se(t,e),Ze(t)}(jt),Tt=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n])).name="ParseError",r.message=e.message,ue(t,"update",r,3)([]),r}return se(t,e),Ze(t)}(jt),_t=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n.token])).name="RenderError",r.message=e.message,ue(t,"update",r,3)([]),r}return se(t,e),Ze(t,null,[{key:"is",value:function(e){return"RenderError"===e.name}}])}(jt),Pt=function(e){function t(e){var n;We(this,t),(n=oe(this,t,[e[0],e[0].token])).errors=e,n.name="LiquidErrors";var r=e.length>1?"s":"";return n.message="".concat(e.length," error").concat(r," found"),ue(t,"update",n,3)([]),n}return se(t,e),Ze(t,null,[{key:"is",value:function(e){return"LiquidErrors"===e.name}}])}(jt),Lt=function(e){function t(e,n){var r;return We(this,t),(r=oe(this,t,[e,n])).name="UndefinedVariableError",r.message=e.message,ue(t,"update",r,3)([]),r}return se(t,e),Ze(t)}(jt),Nt=function(e){function t(e){var n;return We(this,t),(n=oe(this,t,["undefined variable: ".concat(e)])).name="InternalUndefinedVariableError",n.variableName=e,n}return se(t,e),Ze(t)}(ce(Error)),Rt=function(e){function t(e){var n;return We(this,t),(n=oe(this,t,[e])).name="AssertionError",n.message=e+"",n}return se(t,e),Ze(t)}(ce(Error)),qt=[0,0,0,0,0,0,0,0,0,20,4,4,4,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,2,8,0,0,0,0,8,0,0,0,64,0,65,0,0,33,33,33,33,33,33,33,33,33,33,0,0,2,2,2,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0];function It(e){var t=e.charCodeAt(0);return t>=128?!qt[t]:!!(1&qt[t])}function Mt(e,t){if(!e){var n="function"==typeof t?t():t||"expect ".concat(e," to be true");throw new Rt(n)}}function zt(e){Mt(!e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unexpected ".concat(JSON.stringify(e)))}qt[160]=qt[5760]=qt[6158]=qt[8192]=qt[8193]=qt[8194]=qt[8195]=qt[8196]=qt[8197]=qt[8198]=qt[8199]=qt[8200]=qt[8201]=qt[8202]=qt[8232]=qt[8233]=qt[8239]=qt[8287]=qt[12288]=4,qt[8220]=qt[8221]=128;var Vt=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"equals",value:function(e){return Dt(lt(e))}},{key:"gt",value:function(){return!1}},{key:"geq",value:function(){return!1}},{key:"lt",value:function(){return!1}},{key:"leq",value:function(){return!1}},{key:"valueOf",value:function(){return null}}])}(Ke),Ut=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"equals",value:function(e){return!(e instanceof t||(rt(e=lt(e))||Ft(e)?0!==e.length:!gt(e)||0!==Object.keys(e).length))}},{key:"gt",value:function(){return!1}},{key:"geq",value:function(){return!1}},{key:"lt",value:function(){return!1}},{key:"leq",value:function(){return!1}},{key:"valueOf",value:function(){return""}}],[{key:"is",value:function(e){return e instanceof t}}])}(Ke),Ht=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"equals",value:function(e){return!1===e||!!Dt(lt(e))||(rt(e)?/^\s*$/.test(e):ue(t,"equals",this,3)([e]))}}],[{key:"is",value:function(e){return e instanceof t}}])}(Ut),Jt=function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t)).i=0,u.length=e,u.name="".concat(r,"-").concat(n),u}return se(t,e),Ze(t,[{key:"next",value:function(){this.i++}},{key:"index0",value:function(){return this.i}},{key:"index",value:function(){return this.i+1}},{key:"first",value:function(){return 0===this.i}},{key:"last",value:function(){return this.i===this.length-1}},{key:"rindex",value:function(){return this.length-this.i}},{key:"rindex0",value:function(){return this.length-this.i-1}},{key:"valueOf",value:function(){return JSON.stringify(this)}}])}(Ke),Gt=function(){return Ze(function e(){We(this,e),this.buffer=""},[{key:"write",value:function(e){this.buffer+=at(e)}}])}(),$t=Ze(function e(){throw We(this,e),this.buffer="",this.stream=null,new Error("streaming not supported in browser")}),Wt=function(){return Ze(function e(){We(this,e),this.buffer=""},[{key:"write",value:function(e){"string"!=typeof(e=lt(e))&&""===this.buffer?this.buffer=e:this.buffer=at(this.buffer)+at(e)}}])}(),Yt=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return""};return We(this,t),(e=oe(this,t)).superBlockRender=n,e}return se(t,e),Ze(t,[{key:"super",value:pe().m(function e(){var t;return pe().w(function(e){for(;;)switch(e.n){case 0:return t=new Gt,e.n=1,this.superBlockRender(t);case 1:return e.a(2,t.buffer)}},e,this)})}])}(Ke);function Zt(e){return e&&ut(e.equals)&&ut(e.gt)&&ut(e.geq)&&ut(e.lt)&&ut(e.leq)}var Qt=new Vt,Xt={true:!0,false:!1,nil:Qt,null:Qt,empty:new Ut,blank:new Ht};function Kt(e){for(var t={},n=0,r=Object.entries(e);n0?"-":"+")+wt(r,2,"0")+(t.flags[":"]?":":"")+wt(u,2,"0")}var hn={a:function(e){return e.getShortWeekdayName()},A:function(e){return e.getLongWeekdayName()},b:function(e){return e.getShortMonthName()},B:function(e){return e.getLongMonthName()},c:function(e){return e.toLocaleString()},C:function(e){return function(e){return parseInt(e.getFullYear().toString().substring(0,2),10)}(e)},d:function(e){return e.getDate()},e:function(e){return e.getDate()},H:function(e){return e.getHours()},I:function(e){return String(e.getHours()%12||12)},j:function(e){return an(e)},k:function(e){return e.getHours()},l:function(e){return String(e.getHours()%12||12)},L:function(e){return e.getMilliseconds()},m:function(e){return e.getMonth()+1},M:function(e){return e.getMinutes()},N:function(e,t){var n=Number(t.width)||9;return function(e,t){return Et(e,t,arguments.length>2&&void 0!==arguments[2]?arguments[2]:" ",function(e,t){return e+t})}(String(e.getMilliseconds()).slice(0,n),n,"0")},p:function(e){return e.getHours()<12?"AM":"PM"},P:function(e){return e.getHours()<12?"am":"pm"},q:function(e){return function(e){var t=e.getDate();if([11,12,13].includes(t))return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}}(e)},s:function(e){return Math.round(e.getTime()/1e3)},S:function(e){return e.getSeconds()},u:function(e){return e.getDay()||7},U:function(e){return sn(e,0)},w:function(e){return e.getDay()},W:function(e){return sn(e,1)},x:function(e){return e.toLocaleDateString()},X:function(e){return e.toLocaleTimeString()},y:function(e){return e.getFullYear().toString().slice(2,4)},Y:function(e){return e.getFullYear()},z:fn,Z:function(e,t){return e.getTimeZoneName()||fn(e,t)},t:function(){return"\t"},n:function(){return"\n"},"%":function(){return"%"}};function pn(e,t){for(var n,r="",u=t;n=un.exec(u);)r+=u.slice(0,n.index),u=u.slice(n.index+n[0].length),r+=Dn(e,n);return r+u}function Dn(e,t){var n=re(t,5),r=n[0],u=n[1],i=void 0===u?"":u,o=n[2],a=n[3],s=n[4],c=hn[s];if(!c)return r;var l,f={},h=Ue(i);try{for(h.s();!(l=h.n()).done;)f[l.value]=!0}catch(e){h.e(e)}finally{h.f()}var p,D=String(c(e,{flags:f,width:o,modifier:a})),v=ln.has(s)?" ":"0",F=o||cn[s]||0;return f["^"]?D=D.toUpperCase():f["#"]&&(D=He(p=D).some(function(e){return e>="a"&&e<="z"})?p.toUpperCase():p.toLowerCase()),f._?v=" ":f[0]&&(v="0"),f["-"]&&(F=0),wt(D,F,v)}function vn(){return"undefined"!=typeof Intl?Intl.DateTimeFormat:void 0}hn.h=hn.b;var Fn=/([zZ]|([+-])(\d{2}):?(\d{2}))$/,yn=["January","February","March","April","May","June","July","August","September","October","November","December"],dn=yn.map(function(e){return e.slice(0,3)}),mn=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],gn=mn.map(function(e){return e.slice(0,3)}),bn=function(){function e(t,n,r){We(this,e),this.locale=n,this.DateTimeFormat=vn(),this.date=new Date(t),this.timezoneFixed=void 0!==r,void 0===r&&(r=this.date.getTimezoneOffset()),this.timezoneOffset=rt(r)?e.getTimezoneOffset(r,this.date):r,this.timezoneName=rt(r)?r:"";var u=6e4*(this.date.getTimezoneOffset()-this.timezoneOffset),i=this.date.getTime()+u;this.displayDate=new Date(i)}return Ze(e,[{key:"getTime",value:function(){return this.displayDate.getTime()}},{key:"getMilliseconds",value:function(){return this.displayDate.getMilliseconds()}},{key:"getSeconds",value:function(){return this.displayDate.getSeconds()}},{key:"getMinutes",value:function(){return this.displayDate.getMinutes()}},{key:"getHours",value:function(){return this.displayDate.getHours()}},{key:"getDay",value:function(){return this.displayDate.getDay()}},{key:"getDate",value:function(){return this.displayDate.getDate()}},{key:"getMonth",value:function(){return this.displayDate.getMonth()}},{key:"getFullYear",value:function(){return this.displayDate.getFullYear()}},{key:"toLocaleString",value:function(e,t){return(null==t?void 0:t.timeZone)?this.date.toLocaleString(e,t):this.displayDate.toLocaleString(e,t)}},{key:"toLocaleTimeString",value:function(e){return this.displayDate.toLocaleTimeString(e)}},{key:"toLocaleDateString",value:function(e){return this.displayDate.toLocaleDateString(e)}},{key:"getTimezoneOffset",value:function(){return this.timezoneOffset}},{key:"getTimeZoneName",value:function(){return this.timezoneFixed?this.timezoneName:this.DateTimeFormat?this.DateTimeFormat().resolvedOptions().timeZone:void 0}},{key:"getLongMonthName",value:function(){var e;return null!==(e=this.format({month:"long"}))&&void 0!==e?e:yn[this.getMonth()]}},{key:"getShortMonthName",value:function(){var e;return null!==(e=this.format({month:"short"}))&&void 0!==e?e:dn[this.getMonth()]}},{key:"getLongWeekdayName",value:function(){var e;return null!==(e=this.format({weekday:"long"}))&&void 0!==e?e:mn[this.displayDate.getDay()]}},{key:"getShortWeekdayName",value:function(){var e;return null!==(e=this.format({weekday:"short"}))&&void 0!==e?e:gn[this.displayDate.getDay()]}},{key:"valid",value:function(){return!isNaN(this.getTime())}},{key:"format",value:function(e){return this.DateTimeFormat&&this.DateTimeFormat(this.locale,e).format(this.displayDate)}}],[{key:"createDateFixedToTimezone",value:function(t,n){var r=t.match(Fn);if(r&&"Z"===r[1])return new e(+new Date(t),n,0);if(r&&r[2]&&r[3]&&r[4]){var u=re(r,5),i=u[2],o=u[3],a=u[4],s=("+"===i?-1:1)*(60*parseInt(o,10)+parseInt(a,10));return new e(+new Date(t),n,s)}return new e(t,n)}},{key:"getTimezoneOffset",value:function(e,t){var n=t.toLocaleString("en-US",{timeZone:e}),r=t.toLocaleString("en-US",{timeZone:"UTC"}),u=new Date(n);return(+new Date(r)-+u)/6e4}}])}(),wn=function(){return Ze(function e(t,n){We(this,e),this.base=0,this.message="".concat(t," limit exceeded"),this.limit=n},[{key:"use",value:function(e){e=ft(e),Mt(this.base+e<=this.limit,this.message),this.base+=e}},{key:"check",value:function(e){Mt((e=ft(e))<=this.limit,this.message)}}])}(),En=function(e){function t(e,n,r,u,i,o,a,s){var c,l=re(n,2),f=l[0],h=l[1];We(this,t),(c=oe(this,t,[e,r,u,i,s])).trimLeft=!1,c.trimRight=!1;for(var p="-"===r[f],D="-"===r[h-1],v=p?f+1:f,F=D?h-1:h;vv&&4&qt[r.charCodeAt(F-1)];)F--;return c.contentRange=[v,F],c.trimLeft=p||o,c.trimRight=D||a,c}return se(t,e),Ze(t,[{key:"content",get:function(){return this.input.slice(this.contentRange[0],this.contentRange[1])}}])}(Xe),kn=function(e){function t(e,n,r,u,i){var o;We(this,t);var a=u.trimTagLeft,s=u.trimTagRight,c=u.tagDelimiterLeft,l=u.tagDelimiterRight,f=n+c.length,h=r-l.length;return(o=oe(this,t,[Vr.Tag,[f,h],e,n,r,a,s,i])).tokenizer=new dr(e,u.operators,i,o.contentRange),o.name=o.tokenizer.readTagName(),o.tokenizer.assert(o.name,"illegal tag syntax, tag name expected"),o.tokenizer.skipBlank(),o.args=o.tokenizer.input.slice(o.tokenizer.p,o.contentRange[1]),o}return se(t,e),Ze(t)}(En),An=function(e){function t(e,n,r,u,i){We(this,t);var o=u.trimOutputLeft,a=u.trimOutputRight,s=u.outputDelimiterLeft,c=u.outputDelimiterRight,l=[n+s.length,r-c.length];return oe(this,t,[Vr.Output,l,e,n,r,o,a,i])}return se(t,e),Ze(t)}(En),Cn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.HTML,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.trimLeft=0,i.trimRight=0,i}return se(t,e),Ze(t,[{key:"getContent",value:function(){return this.input.slice(this.begin+this.trimLeft,this.end-this.trimRight)}}])}(Xe),Bn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Number,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.content=Number(i.getText()),i}return se(t,e),Ze(t)}(Xe),Sn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Word,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.content=i.getText(),i}return se(t,e),Ze(t)}(Xe),On=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Literal,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.literal=i.getText(),i.content=Xt[i.literal],i}return se(t,e),Ze(t)}(Xe),jn={"==":2,"!=":2,">":2,"<":2,">=":2,"<=":2,contains:2,not:1,and:0,or:0},xn={"==":0,"!=":0,">":0,"<":0,">=":0,"<=":0,contains:0,not:1,and:0,or:0},Tn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Operator,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.operator=i.getText(),i}return se(t,e),Ze(t,[{key:"getPrecedence",value:function(){var e=this.getText();return e in jn?jn[e]:1}}])}(Xe),_n=function(e){function t(e,n,r,u,i,o){var a;return We(this,t),(a=oe(this,t,[Vr.PropertyAccess,r,u,i,o])).variable=e,a.props=n,a}return se(t,e),Ze(t)}(Xe),Pn=function(e){function t(e,n,r,u,i,o){var a;return We(this,t),(a=oe(this,t,[Vr.Filter,r,u,i,o])).name=e,a.args=n,a}return se(t,e),Ze(t)}(Xe),Ln=function(e){function t(e,n,r,u,i,o){var a;return We(this,t),(a=oe(this,t,[Vr.Hash,e,n,r,o])).input=e,a.begin=n,a.end=r,a.name=u,a.value=i,a.file=o,a}return se(t,e),Ze(t)}(Xe),Nn=/[\da-fA-F]/,Rn=/[0-7]/,qn={b:"\b",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v"};function In(e){var t=e.charCodeAt(0);return t>=97?t-87:t>=65?t-55:t-48}var Mn=function(e){function t(e,n,r,u){var i;return We(this,t),(i=oe(this,t,[Vr.Quoted,e,n,r,u])).input=e,i.begin=n,i.end=r,i.file=u,i.content=function(e){for(var t="",n=1;n2&&void 0!==arguments[2]&&arguments[2];return pe().m(function r(){return pe().w(function(r){for(;;)switch(r.n){case 0:if(e){r.n=1;break}return r.a(2);case 1:if(!("content"in e)){r.n=2;break}return r.a(2,e.content);case 2:if(!Qr(e)){r.n=4;break}return r.n=3,Yn(e,t,n);case 3:case 5:return r.a(2,r.v);case 4:if(!Kr(e)){r.n=6;break}return r.n=5,Zn(e,t);case 6:return r.a(2)}},r)})()}function Yn(e,t,n){var r,u,i,o,a,s,c,l,f;return pe().w(function(h){for(;;)switch(h.p=h.n){case 0:r=[],u=Ue(e.props),h.p=1,u.s();case 2:if((i=u.n()).done){h.n=5;break}return o=i.value,s=r,h.n=3,Wn(o,t,!1);case 3:c=h.v,s.push.call(s,c);case 4:h.n=2;break;case 5:h.n=7;break;case 6:h.p=6,l=h.v,u.e(l);case 7:return h.p=7,u.f(),h.f(7);case 8:if(h.p=8,!e.variable){h.n=11;break}return h.n=9,Wn(e.variable,t,n);case 9:return a=h.v,h.n=10,t._getFromScope(a,r);case 10:return h.a(2,h.v);case 11:return h.n=12,t._get(r);case 12:return h.a(2,h.v);case 13:h.n=16;break;case 14:if(h.p=14,f=h.v,!n||"InternalUndefinedVariableError"!==f.name){h.n=15;break}return h.a(2,null);case 15:throw new Lt(f,e);case 16:return h.a(2)}},Fe,null,[[8,14],[1,6,7,8]])}function Zn(e,t){var n,r;return pe().w(function(u){for(;;)switch(u.n){case 0:return u.n=1,Wn(e.lhs,t);case 1:return n=u.v,u.n=2,Wn(e.rhs,t);case 2:return r=u.v,t.memoryLimit.use(r-n+1),u.a(2,bt(+n,+r+1))}},ye)}function Qn(e){var t,n,r,u,i;return pe().w(function(o){for(;;)switch(o.p=o.n){case 0:t=[],n=Ue(e),o.p=1,n.s();case 2:if((r=n.n()).done){o.n=8;break}if(!Gr(u=r.value)){o.n=6;break}case 3:if(!(t.length&&t[t.length-1].getPrecedence()>u.getPrecedence())){o.n=5;break}return o.n=4,t.pop();case 4:o.n=3;break;case 5:t.push(u),o.n=7;break;case 6:return o.n=7,u;case 7:o.n=2;break;case 8:o.n=10;break;case 9:o.p=9,i=o.v,n.e(i);case 10:return o.p=10,n.f(),o.f(10);case 11:if(!t.length){o.n=13;break}return o.n=12,t.pop();case 12:o.n=11;break;case 13:return o.a(2)}},de,null,[[1,9,10,11]])}function Xn(e,t){return!Kn(e,t)}function Kn(e,t){return e=lt(e),t.opts.jsTruthy?!e:!1===e||null==e}var er={"==":tr,"!=":function(e,t){return!tr(e,t)},">":function(e,t){return Zt(e)?e.gt(t):Zt(t)?t.lt(e):lt(e)>lt(t)},"<":function(e,t){return Zt(e)?e.lt(t):Zt(t)?t.gt(e):lt(e)=":function(e,t){return Zt(e)?e.geq(t):Zt(t)?t.leq(e):lt(e)>=lt(t)},"<=":function(e,t){return Zt(e)?e.leq(t):Zt(t)?t.geq(e):lt(e)<=lt(t)},contains:function(e,t){return Ft(e=lt(e))?e.some(function(e){return tr(e,t)}):!!ut(null==e?void 0:e.indexOf)&&e.indexOf(lt(t))>-1},not:function(e,t){return Kn(lt(e),t)},and:function(e,t,n){return Xn(lt(e),n)&&Xn(lt(t),n)},or:function(e,t,n){return Xn(lt(e),n)||Xn(lt(t),n)}};function tr(e,t){return Zt(e)?e.equals(t):Zt(t)?t.equals(e):(e=lt(e),t=lt(t),Ft(e)?Ft(t)&&function(e,t){return e.length===t.length&&!e.some(function(e,n){return!tr(e,t[n])})}(e,t):e===t)}var nr=Ze(function e(t,n,r,u){We(this,e),this.key=t,this.value=n,this.next=r,this.prev=u}),rr=function(){return Ze(function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;We(this,e),this.limit=t,this.size=n,this.cache={},this.head=new nr("HEAD",null,null,null),this.tail=new nr("TAIL",null,null,null),this.head.next=this.tail,this.tail.prev=this.head},[{key:"write",value:function(e,t){if(this.cache[e])this.cache[e].value=t;else{var n=new nr(e,t,this.head.next,this.head);this.head.next.prev=n,this.head.next=n,this.cache[e]=n,this.size++,this.ensureLimit()}}},{key:"read",value:function(e){if(this.cache[e]){var t=this.cache[e].value;return this.remove(e),this.write(e,t),t}}},{key:"remove",value:function(e){var t=this.cache[e];t.prev.next=t.next,t.next.prev=t.prev,delete this.cache[e],this.size--}},{key:"clear",value:function(){this.head.next=this.tail,this.tail.prev=this.head,this.size=0,this.cache={}}},{key:"ensureLimit",value:function(){this.size>this.limit&&this.remove(this.tail.prev.key)}}])}();function ur(e,t){var n=document.createElement("base");n.href=e;var r=document.getElementsByTagName("head")[0];r.insertBefore(n,r.firstChild);var u=document.createElement("a");u.href=t;var i=u.href;return r.removeChild(n),i}var ir=Object.freeze({__proto__:null,resolve:function(e,t,n){return e.length&&"/"!==mt(e)&&(e+="/"),ur(e,t).replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/,function(e,t,r){var u=r.split("/").pop();return/\.\w+$/.test(u)?e:t+r+n})},readFile:function(e){return tn(this,void 0,void 0,pe().m(function t(){return pe().w(function(t){for(;;)if(0===t.n)return t.a(2,new Promise(function(t,n){var r=new XMLHttpRequest;r.onload=function(){r.status>=200&&r.status<300?t(r.responseText):n(new Error(r.statusText))},r.onerror=function(){n(new Error("An error occurred whilst receiving the response."))},r.open("GET",e),r.send()}))},t)}))},readFileSync:function(e){var t=new XMLHttpRequest;if(t.open("GET",e,!1),t.send(),t.status<200||t.status>=300)throw new Error(t.statusText);return t.responseText},exists:function(e){return tn(this,void 0,void 0,pe().m(function e(){return pe().w(function(e){for(;;)if(0===e.n)return e.a(2,!0)},e)}))},existsSync:function(e){return!0},dirname:function(e){return ur(e,".")},sep:"/"});function or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return JSON.stringify(e,null,t)}var ar={default:function(e,t){if(Ft(e=lt(e))||rt(e))return e.length?e:t;for(var n=arguments.length,r=new Array(n>2?n-2:0),u=2;u1&&void 0!==arguments[1]?arguments[1]:0,n=[];return JSON.stringify(e,function(e,t){if("object"!==$e(t)||null===t)return t;for(;n.length>0&&n[n.length-1]!==this;)n.pop();return n.includes(t)?"[Circular]":(n.push(t),t)},t)}},sr={"&":"&","<":"<",">":">",'"':""","'":"'"},cr={"&":"&","<":"<",">":">",""":'"',"'":"'"};function lr(e){return e=at(e),this.context.memoryLimit.use(e.length),e.replace(/&|<|>|"|'/g,function(e){return sr[e]})}function fr(e){return e=at(e),this.context.memoryLimit.use(e.length),e.replace(/&(amp|lt|gt|#34|#39);/g,function(e){return cr[e]})}var hr=Object.freeze({__proto__:null,escape:lr,xml_escape:function(e){return lr.call(this,e)},escape_once:function(e){return lr.call(this,fr.call(this,e))},newline_to_br:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/\r?\n/gm,"
\n")},strip_html:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/||<.*?>|/g,"")}}),pr=function(){return Ze(function e(t){We(this,e),this.mapping=t,this.sep="/"},[{key:"exists",value:function(e){return tn(this,void 0,void 0,pe().m(function t(){return pe().w(function(t){for(;;)if(0===t.n)return t.a(2,this.existsSync(e))},t,this)}))}},{key:"existsSync",value:function(e){return!Dt(this.mapping[e])}},{key:"readFile",value:function(e){return tn(this,void 0,void 0,pe().m(function t(){return pe().w(function(t){for(;;)if(0===t.n)return t.a(2,this.readFileSync(e))},t,this)}))}},{key:"readFileSync",value:function(e){var t=this.mapping[e];if(Dt(t))throw new Error("ENOENT: ".concat(e));return t}},{key:"dirname",value:function(e){var t=e.split(this.sep);return t.pop(),t.join(this.sep)}},{key:"resolve",value:function(e,t,n){if(t+=n,"."===e)return t;var r,u=e.split(/\/+/),i=Ue(t.split(this.sep));try{for(i.s();!(r=i.n()).done;){var o=r.value;"."!==o&&""!==o&&(".."===o?(u.length>1||""!==u[0])&&u.pop():u.push(o))}}catch(e){i.e(e)}finally{i.f()}return u.join(this.sep)}}])}(),Dr={root:["."],layouts:["."],partials:["."],relativeReference:!0,jekyllInclude:!1,keyValueSeparator:":",cache:void 0,extname:"",fs:ir,dynamicPartials:!0,jsTruthy:!1,dateFormat:"%A, %B %-e, %Y at %-l:%M %P %z",locale:"",trimTagRight:!1,trimTagLeft:!1,trimOutputRight:!1,trimOutputLeft:!1,greedy:!0,tagDelimiterLeft:"{%",tagDelimiterRight:"%}",outputDelimiterLeft:"{{",outputDelimiterRight:"}}",preserveTimezones:!1,strictFilters:!1,strictVariables:!1,ownPropertyOnly:!0,lenientIf:!1,globals:{},keepOutputType:!1,operators:er,memoryLimit:1/0,parseLimit:1/0,renderLimit:1/0};function vr(e){var t=[];return Ft(e)&&(t=e),rt(e)&&(t=[e]),t}function Fr(e,t){if(e&&$r(e))for(var n=t?4:16;qt[e.input.charCodeAt(e.end-1-e.trimRight)]&n;)e.trimRight++}function yr(e,t){if(e&&$r(e)){for(var n=t?4:16;qt[e.input.charCodeAt(e.begin+e.trimLeft)]&n;)e.trimLeft++;"\n"===e.input.charAt(e.begin+e.trimLeft)&&e.trimLeft++}}var dr=function(){return Ze(function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Dr.operators,r=arguments.length>2?arguments[2]:void 0,u=arguments.length>3?arguments[3]:void 0;We(this,e),this.input=t,this.file=r,this.rawBeginAt=-1,this.p=u?u[0]:0,this.N=u?u[1]:t.length,this.opTrie=Kt(n),this.literalTrie=Kt(Xt)},[{key:"readExpression",value:function(){return new $n(this.readExpressionTokens())}},{key:"readExpressionTokens",value:pe().m(function e(){var t,n;return pe().w(function(e){for(;;)switch(e.n){case 0:if(!(this.p0&&void 0!==arguments[0]?arguments[0]:Dr,t=[];this.p-1?this.readEndrawOrRawContent(e):this.match(t)?this.readTagToken(e):this.match(n)?this.readOutputToken(e):this.readHTMLToken([t,n])}},{key:"readHTMLToken",value:function(e){for(var t=this,n=this.p;this.p1&&void 0!==arguments[1]&&arguments[1];for(this.skipBlank();this.p0&&void 0!==arguments[0]?arguments[0]:Dr,t=this.file,n=this.input,r=e.outputDelimiterRight,u=this.p;if(-1===this.readToDelimiter(r,!0))throw this.error("output ".concat(this.snapshot(u)," not closed"),u);return new An(n,u,this.p,e,t)}},{key:"readEndrawOrRawContent",value:function(e){for(var t=e.tagDelimiterLeft,n=e.tagDelimiterRight,r=this.p,u=this.readTo(t)-t.length;this.p0&&void 0!==arguments[0]?arguments[0]:Dr,t=[];this.p1&&void 0!==arguments[1]?arguments[1]:this.p;return new xt(e,new Sn(this.input,t,this.N,this.file))}},{key:"assert",value:function(e,t,n){if(!e)throw this.error("function"==typeof t?t():t,n)}},{key:"snapshot",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.p;return JSON.stringify((e=this.input.slice(t,this.N)).length>32?e.slice(0,29)+"...":e)}},{key:"readWord",value:function(){return this.readIdentifier()}},{key:"readIdentifier",value:function(){this.skipBlank();for(var e=this.p;!this.end()&&It(this.peek());)++this.p;return new Sn(this.input,e,this.p,this.file)}},{key:"readNonEmptyIdentifier",value:function(){var e=this.readIdentifier();return e.size()?e:void 0}},{key:"readTagName",value:function(){return this.skipBlank(),"#"===this.input[this.p]?this.input.slice(this.p,++this.p):this.readIdentifier().getText()}},{key:"readHashes",value:function(e){for(var t=[];;){var n=this.readHash(e);if(!n)return t;t.push(n)}}},{key:"readHash",value:function(e){this.skipBlank(),","===this.peek()&&++this.p;var t=this.p,n=this.readNonEmptyIdentifier();if(n){var r;this.skipBlank();var u=rt(e)?e:e?"=":":";return this.peek()===u&&(++this.p,r=this.readValue()),new Ln(this.input,t,this.p,n,r,this.file)}}},{key:"remaining",value:function(){return this.input.slice(this.p,this.N)}},{key:"advance",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.p+=e}},{key:"end",value:function(){return this.p>=this.N}},{key:"read",value:function(){return this.input[this.p++]}},{key:"readTo",value:function(e){for(;this.p0&&void 0!==arguments[0])||arguments[0],t=[];;)if("["!==this.peek()){if(e&&!t.length){var n=this.readNonEmptyIdentifier();if(n){t.push(n);continue}}if("."!==this.peek()||"."===this.peek(1))break;this.p++;var r=this.readNonEmptyIdentifier();if(!r)break;t.push(r)}else{this.p++;var u=this.readValue()||new Sn(this.input,this.p,this.p,this.file);this.assert(-1!==this.readTo("]"),"[ not closed"),t.push(u)}return t}},{key:"readNumber",value:function(){this.skipBlank();var e=!1,t=!1,n=0;for(64&this.peekType()&&n++;this.p+n<=this.N;)if(32&this.peekType(n))t=!0,n++;else{if("."!==this.peek(n)||"."===this.peek(n+1))break;if(e||!t)return;e=!0,n++}if(t&&!It(this.peek(n))){var r=new Bn(this.input,this.p,this.p+n,this.file);return this.advance(n),r}}},{key:"readLiteral",value:function(){this.skipBlank();var e=this.matchTrie(this.literalTrie);if(-1!==e){var t=new On(this.input,this.p,e,this.file);return this.p=e,t}}},{key:"readRange",value:function(){this.skipBlank();var e=this.p;if("("===this.peek()){++this.p;var t=this.readValueOrThrow();this.skipBlank(),this.assert("."===this.read()&&"."===this.read(),"invalid range syntax");var n=this.readValueOrThrow();return this.skipBlank(),this.assert(")"===this.read(),"invalid range syntax"),new zn(this.input,e,this.p,t,n,this.file)}}},{key:"readValueOrThrow",value:function(){var e=this,t=this.readValue();return this.assert(t,function(){return"unexpected token ".concat(e.snapshot(),", value expected")}),t}},{key:"readQuoted",value:function(){this.skipBlank();var e=this.p;if(8&this.peekType()){++this.p;for(var t=!1;this.p0&&void 0!==arguments[0]?arguments[0]:0;return this.p+e>=this.N?0:qt[this.input.charCodeAt(this.p+e)]}},{key:"peek",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.p+e>=this.N?"":this.input[this.p+e]}},{key:"skipBlank",value:function(){for(;4&this.peekType();)++this.p}}])}(),mr=function(){return Ze(function e(t,n){We(this,e),this.handlers={},this.stopRequested=!1,this.tokens=t,this.parseToken=n},[{key:"on",value:function(e,t){return this.handlers[e]=t,this}},{key:"trigger",value:function(e,t){var n=this.handlers[e];return!!n&&(n.call(this,t),!0)}},{key:"start",value:function(){var e;for(this.trigger("start");!this.stopRequested&&(e=this.tokens.shift());)if(!(this.trigger("token",e)||Wr(e)&&this.trigger("tag:".concat(e.name),e))){var t=this.parseToken(e,this.tokens);this.trigger("template",t)}return this.stopRequested||this.trigger("end"),this}},{key:"stop",value:function(){return this.stopRequested=!0,this}}])}(),gr=Ze(function e(t){We(this,e),this.token=t}),br=function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t,[e])).name=e.name,u.liquid=r,u.tokenizer=e.tokenizer,u}return se(t,e),Ze(t)}(gr),wr=function(){return Ze(function e(t,n){We(this,e),this.hash={};var r,u=Ue((t instanceof dr?t:new dr(t,{})).readHashes(n));try{for(u.s();!(r=u.n()).done;){var i=r.value;this.hash[i.name.content]=i.value}}catch(e){u.e(e)}finally{u.f()}},[{key:"render",value:pe().m(function e(t){var n,r,u,i,o;return pe().w(function(e){for(;;)switch(e.n){case 0:n={},r=0,u=Object.keys(this.hash);case 1:if(!(r0&&"default"===this.filters[0].name,e.n=1,this.initial.evaluate(t,n);case 1:r=e.v,u=Ue(this.filters),e.p=2,u.s();case 3:if((i=u.n()).done){e.n=6;break}return o=i.value,e.n=4,o.render(r,t);case 4:r=e.v;case 5:e.n=3;break;case 6:e.n=8;break;case 7:e.p=7,a=e.v,u.e(a);case 8:return e.p=8,u.f(),e.f(8);case 9:return e.a(2,r)}},e,this,[[2,7,8,9]])})},{key:"getFilter",value:function(e,t){var n=e.filters[t];return Mt(n||!e.options.strictFilters,function(){return"undefined filter: ".concat(t)}),n}}])}(),Cr=function(e){function t(e,n){var r,u;We(this,t),r=oe(this,t,[e]);var i=new dr(e.input,n.options.operators,e.file,e.contentRange);r.value=new Ar(i.readFilteredValue(),n);var o=r.value.filters,a=n.options.outputEscape;if(!(null===(u=o[o.length-1])||void 0===u?void 0:u.raw)&&a){var s=new Pn(toString.call(a),[],"",0,0);o.push(new kr(s,a,n))}return r}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value.value(t,!1);case 1:r=e.v,n.write(r);case 2:return e.a(2)}},e,this)})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value;case 1:return e.a(2)}},e,this)})}])}(gr),Br=function(e){function t(e){var n;return We(this,t),(n=oe(this,t,[e])).str=e.getContent(),n}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){return pe().w(function(e){for(;;)switch(e.n){case 0:n.write(this.str);case 1:return e.a(2)}},e,this)})}])}(gr),Sr=function(){function e(t,n){We(this,e),this.segments=t,this.location=n}return Ze(e,[{key:"toString",value:function(){return zr(this.segments,!0)}},{key:"toArray",value:function(){var t=pe().m(n);function n(){var r,u,i,o,a,s,c=arguments;return pe().w(function(t){for(;;)switch(t.n){case 0:for(r=c.length,u=new Array(r),i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return nn(xr(e,Object.assign(Object.assign({},jr),t).partials,!1))}function _r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return rn(xr(e,Object.assign(Object.assign({},jr),t).partials,!0))}var Pr=function(){return Ze(function e(t){We(this,e),this.stack=[{names:t,aliases:new Map}]},[{key:"has",value:function(e){var t,n=Ue(this.stack);try{for(n.s();!(t=n.n()).done;)if(t.value.names.has(e))return!0}catch(e){n.e(e)}finally{n.f()}return!1}},{key:"push",value:function(e){return this.stack.push({names:e,aliases:new Map}),this}},{key:"pop",value:function(){var e;return null===(e=this.stack.pop())||void 0===e?void 0:e.names}},{key:"add",value:function(e){this.stack[0].names.add(e)}},{key:"alias",value:function(e){var t=e.segments[0];if(rt(t)){var n=this.getAlias(t);if(void 0!==n)return new Sr([].concat(He(n),He(e.segments.slice(1))),e.location)}}},{key:"setAlias",value:function(e,t){this.stack[this.stack.length-1].aliases.set(e,t)}},{key:"deleteAlias",value:function(e){this.stack[this.stack.length-1].aliases.delete(e)}},{key:"getAlias",value:function(e){var t,n=Ue(this.stack);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(r.aliases.has(e))return r.aliases.get(e);if(r.names.has(e))return}}catch(e){n.e(e)}finally{n.f()}}}])}();function Lr(e){return pe().w(function(t){for(;;)switch(t.n){case 0:if(!eu(e)){t.n=2;break}return t.d(ne(Rr(e)),1);case 1:t.n=3;break;case 2:if(!(e instanceof Ar)){t.n=3;break}return t.d(ne(Nr(e)),3);case 3:return t.a(2)}},ge)}function Nr(e){var t,n,r,u,i,o,a,s,c,l,f,h;return pe().w(function(p){for(;;)switch(p.p=p.n){case 0:t=Ue(e.initial.postfix),p.p=1,t.s();case 2:if((n=t.n()).done){p.n=4;break}if(!eu(r=n.value)){p.n=3;break}return p.d(ne(Rr(r)),3);case 3:p.n=2;break;case 4:p.n=6;break;case 5:p.p=5,l=p.v,t.e(l);case 6:return p.p=6,t.f(),p.f(6);case 7:u=Ue(e.filters),p.p=8,u.s();case 9:if((i=u.n()).done){p.n=19;break}o=i.value,a=Ue(o.args),p.p=10,a.s();case 11:if((s=a.n()).done){p.n=15;break}if(!Er(c=s.value)||!c[1]){p.n=13;break}return p.d(ne(Rr(c[1])),12);case 12:p.n=14;break;case 13:if(!eu(c)){p.n=14;break}return p.d(ne(Rr(c)),14);case 14:p.n=11;break;case 15:p.n=17;break;case 16:p.p=16,f=p.v,a.e(f);case 17:return p.p=17,a.f(),p.f(17);case 18:p.n=9;break;case 19:p.n=21;break;case 20:p.p=20,h=p.v,u.e(h);case 21:return p.p=21,u.f(),p.f(21);case 22:return p.a(2)}},be,null,[[10,16,17,18],[8,20,21,22],[1,5,6,7]])}function Rr(e){return pe().w(function(t){for(;;)switch(t.n){case 0:if(!Kr(e)){t.n=3;break}return t.d(ne(Rr(e.lhs)),1);case 1:return t.d(ne(Rr(e.rhs)),2);case 2:t.n=4;break;case 3:if(!Qr(e)){t.n=4;break}return t.n=4,qr(e);case 4:return t.a(2)}},we)}function qr(e){var t=[],n=e.file,r=e.props[0];n=n||r.file,Yr(r)||Zr(r)||Xr(r)?t.push(r.content):Qr(r)&&t.push.apply(t,He(qr(r).segments));var u,i=Ue(e.props.slice(1));try{for(i.s();!(u=i.n()).done;){var o=u.value;n=n||o.file,Yr(o)||Zr(o)||Xr(o)?t.push(o.content):Qr(o)&&t.push(qr(o))}}catch(e){i.e(e)}finally{i.f()}var a=re(e.getPosition(),2),s=a[0],c=a[1];return new Sr(t,{row:s,col:c,file:n})}var Ir,Mr=/^[\u0080-\uFFFFa-zA-Z_][\u0080-\uFFFFa-zA-Z0-9_-]*$/;function zr(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],r=e[0];rt(r)&&(!t||r.match(Mr)?n.push("".concat(r)):n.push("['".concat(r,"']")));var u,i=Ue(e.slice(1));try{for(i.s();!(u=i.n()).done;){var o=u.value;o instanceof Sr?n.push("[".concat(zr(o.segments),"]")):rt(o)?o.match(Mr)?n.push(".".concat(o)):n.push("['".concat(o,"']")):n.push("[".concat(o,"]"))}}catch(e){i.e(e)}finally{i.f()}return n.join("")}!function(e){e.Partials="partials",e.Layouts="layouts",e.Root="root"}(Ir||(Ir={}));var Vr,Ur=function(){return Ze(function e(t){if(We(this,e),this.options=t,t.relativeReference){var n=t.fs.sep;Mt(n,"`fs.sep` is required for relative reference");var r=new RegExp(["."+n,".."+n,"./","../"].map(function(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}).join("|"));this.shouldLoadRelative=function(e){return r.test(e)}}else this.shouldLoadRelative=function(e){return!1};this.contains=this.options.fs.contains||function(){return!0}},[{key:"lookup",value:pe().m(function e(t,n,r,u){var i,o,a,s,c,l,f;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:i=this.options.fs,o=this.options[n],a=Ue(this.candidates(t,o,u,n!==Ir.Root)),e.p=1,a.s();case 2:if((s=a.n()).done){e.n=7;break}if(c=s.value,!r){e.n=3;break}l=i.existsSync(c),e.n=5;break;case 3:return e.n=4,i.exists(c);case 4:l=e.v;case 5:if(!l){e.n=6;break}return e.a(2,c);case 6:e.n=2;break;case 7:e.n=9;break;case 8:e.p=8,f=e.v,a.e(f);case 9:return e.p=9,a.f(),e.f(9);case 10:throw this.lookupError(t,o);case 11:return e.a(2)}},e,this,[[1,8,9,10]])})},{key:"candidates",value:pe().m(function e(t,n,r,u){var i,o,a,s,c,l,f,h,p,D,v,F,y,d;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:if(i=this.options,o=i.fs,a=i.extname,!this.shouldLoadRelative(t)||!r){e.n=8;break}s=o.resolve(this.dirname(r),t,a),c=Ue(n),e.p=1,c.s();case 2:if((l=c.n()).done){e.n=5;break}if(f=l.value,u&&!this.contains(f,s)){e.n=4;break}return e.n=3,s;case 3:return e.a(3,5);case 4:e.n=2;break;case 5:e.n=7;break;case 6:e.p=6,y=e.v,c.e(y);case 7:return e.p=7,c.f(),e.f(7);case 8:h=Ue(n),e.p=9,h.s();case 10:if((p=h.n()).done){e.n=12;break}if(D=p.value,v=o.resolve(D,t,a),u&&!this.contains(D,v)){e.n=11;break}return e.n=11,v;case 11:e.n=10;break;case 12:e.n=14;break;case 13:e.p=13,d=e.v,h.e(d);case 14:return e.p=14,h.f(),e.f(14);case 15:if(void 0===o.fallback){e.n=16;break}if(void 0===(F=o.fallback(t))){e.n=16;break}return e.n=16,F;case 16:return e.a(2)}},e,this,[[9,13,14,15],[1,6,7,8]])})},{key:"dirname",value:function(e){var t=this.options.fs;return Mt(t.dirname,"`fs.dirname` is required for relative reference"),t.dirname(e)}},{key:"lookupError",value:function(e,t){var n=new Error("ENOENT");return n.message='ENOENT: Failed to lookup "'.concat(e,'" in "').concat(t,'"'),n.code="ENOENT",n}}])}(),Hr=function(){return Ze(function e(t){We(this,e),this.liquid=t,this.cache=this.liquid.options.cache,this.fs=this.liquid.options.fs,this.parseFile=this.cache?this._parseFileCached:this._parseFile,this.loader=new Ur(this.liquid.options),this.parseLimit=new wn("parse length",t.options.parseLimit)},[{key:"parse",value:function(e,t){e=String(e),this.parseLimit.use(e.length);var n=new dr(e,this.liquid.options.operators,t).readTopLevelTokens(this.liquid.options);return this.parseTokens(n)}},{key:"parseTokens",value:function(e){for(var t,n=[],r=[];t=e.shift();)try{n.push(this.parseToken(t,e))}catch(e){if(!this.liquid.options.catchAllErrors)throw e;r.push(e)}if(r.length)throw new Pt(r);return n}},{key:"parseToken",value:function(e,t){try{if(Wr(e)){var n=this.liquid.tags[e.name];return Mt(n,'tag "'.concat(e.name,'" not found')),new n(e,t,this.liquid,this)}return tu(e)===Vr.Output?new Cr(e,this.liquid):new Br(e)}catch(t){if(jt.is(t))throw t;throw new Tt(t,e)}}},{key:"parseStream",value:function(e){var t=this;return new mr(e,function(e,n){return t.parseToken(e,n)})}},{key:"_parseFileCached",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ir.Root,u=arguments.length>3?arguments[3]:void 0;return pe().m(function i(){var o,a,s,c,l,f,h;return pe().w(function(i){for(;;)switch(i.p=i.n){case 0:return o=n.cache,a=n.loader.shouldLoadRelative(e)?u+","+e:r+":"+e,i.n=1,o.read(a);case 1:if(!(s=i.v)){i.n=2;break}return i.a(2,s);case 2:if(c=n._parseFile(e,t,r,u),!t){i.n=4;break}return i.n=3,c;case 3:f=i.v,i.n=5;break;case 4:f=nn(c);case 5:return l=f,o.write(a,l),i.p=6,i.n=7,l;case 7:return i.a(2,i.v);case 8:throw i.p=8,h=i.v,o.remove(a),h;case 9:return i.a(2)}},i,null,[[6,8]])})()}},{key:"_parseFile",value:function(e,t){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Ir.Root,u=arguments.length>3?arguments[3]:void 0;return pe().m(function i(){var o,a,s,c,l;return pe().w(function(i){for(;;)switch(i.n){case 0:return i.n=1,n.loader.lookup(e,r,t,u);case 1:if(o=i.v,a=n,!t){i.n=2;break}s=n.fs.readFileSync(o),i.n=4;break;case 2:return i.n=3,n.fs.readFile(o);case 3:s=i.v;case 4:return c=s,l=o,i.a(2,a.parse.call(a,c,l))}},i)})()}}])}();function Jr(e){return!!(tu(e)&Vr.Delimited)}function Gr(e){return tu(e)===Vr.Operator}function $r(e){return tu(e)===Vr.HTML}function Wr(e){return tu(e)===Vr.Tag}function Yr(e){return tu(e)===Vr.Quoted}function Zr(e){return tu(e)===Vr.Number}function Qr(e){return tu(e)===Vr.PropertyAccess}function Xr(e){return tu(e)===Vr.Word}function Kr(e){return tu(e)===Vr.Range}function eu(e){return(1667&tu(e))>0}function tu(e){return e?e.kind:-1}!function(e){e[e.Number=1]="Number",e[e.Literal=2]="Literal",e[e.Tag=4]="Tag",e[e.Output=8]="Output",e[e.HTML=16]="HTML",e[e.Filter=32]="Filter",e[e.Hash=64]="Hash",e[e.PropertyAccess=128]="PropertyAccess",e[e.Word=256]="Word",e[e.Range=512]="Range",e[e.Quoted=1024]="Quoted",e[e.Operator=2048]="Operator",e[e.FilteredValue=4096]="FilteredValue",e[e.Delimited=12]="Delimited"}(Vr||(Vr={}));var nu,ru=function(){function e(){var t,n,r,u,i,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Dr,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},l=c.memoryLimit,f=c.renderLimit;We(this,e),this.scopes=[{}],this.registers={},this.breakCalled=!1,this.continueCalled=!1,this.sync=!!s.sync,this.opts=a,this.globals=null!==(t=s.globals)&&void 0!==t?t:a.globals,this.environments=gt(o)?o:Object(o),this.strictVariables=null!==(n=s.strictVariables)&&void 0!==n?n:this.opts.strictVariables,this.ownPropertyOnly=null!==(r=s.ownPropertyOnly)&&void 0!==r?r:a.ownPropertyOnly,this.memoryLimit=null!=l?l:new wn("memory alloc",null!==(u=s.memoryLimit)&&void 0!==u?u:a.memoryLimit),this.renderLimit=null!=f?f:new wn("template render",Jn().now()+(null!==(i=s.renderLimit)&&void 0!==i?i:a.renderLimit))}return Ze(e,[{key:"getRegister",value:function(e){return this.registers[e]=this.registers[e]||{}}},{key:"setRegister",value:function(e,t){return this.registers[e]=t}},{key:"saveRegister",value:function(){for(var e=this,t=arguments.length,n=new Array(t),r=0;r2&&void 0!==arguments[2]?arguments[2]:this.strictVariables;return pe().m(function u(){var i;return pe().w(function(u){for(;;)switch(u.n){case 0:rt(t)&&(t=t.split(".")),i=0;case 1:if(!(i0&&void 0!==arguments[0]?arguments[0]:{},this.opts,{sync:this.sync,globals:this.globals,strictVariables:this.strictVariables},{renderLimit:this.renderLimit,memoryLimit:this.memoryLimit})}},{key:"findScope",value:function(e){for(var t=this.scopes.length-1;t>=0;t--){var n=this.scopes[t];if(e in n)return n}return e in this.environments?this.environments:this.globals}}])}();function uu(e,t,n){if(e=pt(e),t=lt(t),Dt(e))return e;if(Ft(e)&&t<0)return e[e.length+ +t];var r=function(e,t,n){return!n||nt.call(e,t)||e instanceof Ke?e[t]:void 0}(e,t,n);return void 0===r&&e instanceof Ke?e.liquidMethodMissing(t):ut(r)?r.call(e):"size"===t?function(e){return nt.call(e,"size")||void 0!==e.size?e.size:Ft(e)||rt(e)?e.length:"object"===$e(e)?Object.keys(e).length:void 0}(e):"first"===t?function(e){return Ft(e)?e[0]:e.first}(e):"last"===t?function(e){return Ft(e)?e[e.length-1]:e.last}(e):r}!function(e){e[e.OUTPUT=0]="OUTPUT",e[e.STORE=1]="STORE"}(nu||(nu={}));var iu=Ct(Math.abs),ou=Ct(Math.max),au=Ct(Math.min),su=Ct(Math.ceil),cu=Ct(function(e,t){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?Math.floor(e/t):e/t}),lu=Ct(Math.floor),fu=Ct(function(e,t){return e-t}),hu=Ct(function(e,t){return e%t}),pu=Ct(function(e,t){return e*t}),Du=Object.freeze({__proto__:null,abs:iu,at_least:ou,at_most:au,ceil:su,divided_by:cu,floor:lu,minus:fu,modulo:hu,times:pu,round:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;e=lt(e),t=lt(t);var n=Math.pow(10,t);return Math.round(e*n)/n},plus:function(e,t){return e=lt(e),t=lt(t),Number(e)+Number(t)}}),vu=/(?:[\0-\/:-@\[-`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u086F\u0888\u088F-\u0896\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF4-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1716-\u171E\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C8B-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3007-\u3029\u3030\u3036-\u303A\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6E6-\uA6EF\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7CE\uA7CF\uA7D2\uA7D4\uA7DD-\uA7F1\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDBF\uDDF4-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDD3F\uDD66-\uDD68\uDD6E\uDD86-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEC1\uDEC5-\uDEFB\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDF6F\uDF86-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC76-\uDC7E\uDCBB-\uDCC1\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE42-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDF7F\uDF8A\uDF8C\uDF8D\uDF8F\uDFB6\uDFC1\uDFC3\uDFC4\uDFC6\uDFCB\uDFD4-\uDFE0\uDFE3-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDECF\uDEE4-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFBF\uDFE1-\uDFEF\uDFFA-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDEFF\uDF11\uDF3B-\uDF3D\uDF43-\uDF4F\uDF5B-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD812-\uD817\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83C\uD83D\uD83F\uD87C\uD87D\uD87F\uD889-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC3F\uDC56-\uDC5F]|\uD810[\uDFFB-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD818[\uDC00-\uDCFF\uDD3A-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6F\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDD3F\uDD6D-\uDD6F\uDD7A-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFE\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD833[\uDC00-\uDCEF\uDCFA-\uDEFF\uDF2E\uDF2F\uDF47-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDC2F\uDC6E-\uDC8E\uDC90-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCFA-\uDDCF\uDDFB-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,Fu={raw:/\s+/g,default:vu,pretty:/(?:[\0- "#%\*\x2D\/:<>\?\[-\^`\{-\}\x7F-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u086F\u0888\u088F-\u0896\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF4-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16F0\u16F9-\u16FF\u1716-\u171E\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C8B-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u2182\u2185-\u2BFF\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3007-\u3029\u3030\u3036-\u303A\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6E6-\uA6EF\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7CE\uA7CF\uA7D2\uA7D4\uA7DD-\uA7F1\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF41\uDF4A-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6F\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDBF\uDDF4-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDD3F\uDD66-\uDD68\uDD6E\uDD86-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEC1\uDEC5-\uDEFB\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDF6F\uDF86-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC76-\uDC7E\uDCBB-\uDCC1\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE42-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDF7F\uDF8A\uDF8C\uDF8D\uDF8F\uDFB6\uDFC1\uDFC3\uDFC4\uDFC6\uDFCB\uDFD4-\uDFE0\uDFE3-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDECF\uDEE4-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDF3F\uDF47-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEAF\uDEF9-\uDFBF\uDFE1-\uDFEF\uDFFA-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDEFF\uDF11\uDF3B-\uDF3D\uDF43-\uDF4F\uDF5B-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC00-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD812-\uD817\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83C\uD83D\uD83F\uD87C\uD87D\uD87F\uD889-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF1-\uDFFF]|\uD80D[\uDC30-\uDC3F\uDC56-\uDC5F]|\uD810[\uDFFB-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD818[\uDC00-\uDCFF\uDD3A-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6F\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDD3F\uDD6D-\uDD6F\uDD7A-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFE\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD31\uDD33-\uDD4F\uDD53\uDD54\uDD56-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD833[\uDC00-\uDCEF\uDCFA-\uDEFF\uDF2E\uDF2F\uDF47-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDF24\uDF2B-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDC2F\uDC6E-\uDC8E\uDC90-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDFFF]|\uD839[\uDC00-\uDCCF\uDCFA-\uDDCF\uDDFB-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF3A-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFEF]|\uD87B[\uDE5E-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDF4F]|\uD888[\uDFB0-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,ascii:/[^A-Za-z0-9]+/g,latin:vu,none:null},yu=Object.freeze({__proto__:null,url_decode:function(e){return decodeURIComponent(at(e)).replace(/\+/g," ")},url_encode:function(e){return encodeURIComponent(at(e)).replace(/%20/g,"+")},cgi_escape:function(e){return encodeURIComponent(at(e)).replace(/%20/g,"+").replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})},uri_escape:function(e){return encodeURI(at(e)).replace(/%5B/g,"[").replace(/%5D/g,"]")},slugify:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e=at(e);var r=Fu[t];return r&&("latin"===t&&(e=function(e){return e.replace(/[àáâãäå]/g,"a").replace(/[æ]/g,"ae").replace(/[ç]/g,"c").replace(/[èéêë]/g,"e").replace(/[ìíîï]/g,"i").replace(/[ð]/g,"d").replace(/[ñ]/g,"n").replace(/[òóôõöø]/g,"o").replace(/[ùúûü]/g,"u").replace(/[ýÿ]/g,"y").replace(/[ß]/g,"ss").replace(/[œ]/g,"oe").replace(/[þ]/g,"th").replace(/[ẞ]/g,"SS").replace(/[Œ]/g,"OE").replace(/[Þ]/g,"TH")}(e)),e=e.replace(r,"-").replace(/^-|-$/g,"")),n?e:e.toLowerCase()}}),du=Ct(function(e,t){var n=ct(e),r=Dt(t)?" ":at(t),u=n.length*(1+r.length);return this.context.memoryLimit.use(u),n.join(r)}),mu=Ct(function(e){return yt(e)?mt(e):""}),gu=Ct(function(e){return yt(e)?e[0]:""}),bu=Ct(function(e){var t=ct(e);return this.context.memoryLimit.use(t.length),He(t).reverse()});function wu(e,t){var n,r,u,i,o,a,s,c,l,f;return pe().w(function(h){for(;;)switch(h.p=h.n){case 0:n=[],r=ct(e),this.context.memoryLimit.use(r.length),u=Ue(r),h.p=1,u.s();case 2:if((i=u.n()).done){h.n=7;break}if(o=i.value,a=n,s=o,!t){h.n=4;break}return h.n=3,this.context._getFromScope(o,at(t).split("."),!1);case 3:c=h.v,h.n=5;break;case 4:c=o;case 5:l=[s,c],a.push.call(a,l);case 6:h.n=2;break;case 7:h.n=9;break;case 8:h.p=8,f=h.v,u.e(f);case 9:return h.p=9,u.f(),h.f(9);case 10:return h.a(2,n.sort(function(e,t){var n=e[1],r=t[1];return nr?1:0}).map(function(e){return e[0]}))}},Ee,this,[[1,8,9,10]])}function Eu(e,t){var n,r,u,i,o,a,s,c;return pe().w(function(l){for(;;)switch(l.p=l.n){case 0:n=[],r=ct(e),this.context.memoryLimit.use(r.length),u=Ue(r),l.p=1,u.s();case 2:if((i=u.n()).done){l.n=5;break}return o=i.value,a=n,l.n=3,this.context._getFromScope(o,at(t),!1);case 3:s=l.v,a.push.call(a,s);case 4:l.n=2;break;case 5:l.n=7;break;case 6:l.p=6,c=l.v,u.e(c);case 7:return l.p=7,u.f(),l.f(7);case 8:return l.a(2,n)}},ke,this,[[1,6,7,8]])}function ku(e,t){var n,r,u,i,o,a,s,c,l;return pe().w(function(f){for(;;)switch(f.p=f.n){case 0:n=0,r=ct(e),u=Ue(r),f.p=1,u.s();case 2:if((i=u.n()).done){f.n=7;break}if(o=i.value,s=Number,!t){f.n=4;break}return f.n=3,this.context._getFromScope(o,at(t),!1);case 3:c=f.v,f.n=5;break;case 4:c=o;case 5:a=s(c),n+=Number.isNaN(a)?0:a;case 6:f.n=2;break;case 7:f.n=9;break;case 8:f.p=8,l=f.v,u.e(l);case 9:return f.p=9,u.f(),f.f(9);case 10:return f.a(2,n)}},Ae,this,[[1,8,9,10]])}function Au(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=ct(e),r=ct(t);return this.context.memoryLimit.use(n.length+r.length),n.concat(r)}function Cu(e){var t=this;return this.context.opts.jekyllWhere?function(t){return Ut.is(e)?tr(t,e):Ft(t)?(n=e,t.some(function(e){return tr(e,n)})):tr(t,e);var n}:void 0===e?function(e){return Xn(e,t.context)}:function(t){return tr(t,e)}}function Bu(e,t,n,r){var u,i,o,a,s,c,l,f,h;return pe().w(function(p){for(;;)switch(p.p=p.n){case 0:u=[],t=ct(t),this.context.memoryLimit.use(t.length),i=new dr(at(n)).readScopeValue(),o=Ue(t),p.p=1,o.s();case 2:if((a=o.n()).done){p.n=5;break}return s=a.value,l=u,p.n=3,Wn(i,this.context.spawn(s));case 3:f=p.v,l.push.call(l,f);case 4:p.n=2;break;case 5:p.n=7;break;case 6:p.p=6,h=p.v,o.e(h);case 7:return p.p=7,o.f(),p.f(7);case 8:return c=Cu.call(this,r),p.a(2,t.filter(function(t,n){return c(u[n])===e}))}},Ce,this,[[1,6,7,8]])}function Su(e,t,n,r){var u,i,o,a,s,c,l,f;return pe().w(function(h){for(;;)switch(h.p=h.n){case 0:u=[],i=new Ar(at(r),this.liquid),o=ct(t),this.context.memoryLimit.use(o.length),a=Ue(o),h.p=1,a.s();case 2:if((s=a.n()).done){h.n=5;break}return c=s.value,this.context.push(te({},n,c)),h.n=3,i.value(this.context);case 3:l=h.v,this.context.pop(),l===e&&u.push(c);case 4:h.n=2;break;case 5:h.n=7;break;case 6:h.p=6,f=h.v,a.e(f);case 7:return h.p=7,a.f(),h.f(7);case 8:return h.a(2,u)}},Be,this,[[1,6,7,8]])}function Ou(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Bu.call(this,!0,e,t,n)),1);case 1:return r.a(2,r.v)}},Se,this)}function ju(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Bu.call(this,!1,e,t,n)),1);case 1:return r.a(2,r.v)}},Oe,this)}function xu(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Su.call(this,!0,e,t,n)),1);case 1:return r.a(2,r.v)}},je,this)}function Tu(e,t,n){return pe().w(function(r){for(;;)switch(r.n){case 0:return r.d(ne(Su.call(this,!1,e,t,n)),1);case 1:return r.a(2,r.v)}},xe,this)}function _u(e,t){var n,r,u,i,o,a,s;return pe().w(function(c){for(;;)switch(c.p=c.n){case 0:n=new Map,e=st(e),r=new dr(at(t)).readScopeValue(),this.context.memoryLimit.use(e.length),u=Ue(e),c.p=1,u.s();case 2:if((i=u.n()).done){c.n=5;break}return o=i.value,c.n=3,Wn(r,this.context.spawn(o));case 3:a=c.v,n.has(a)||n.set(a,[]),n.get(a).push(o);case 4:c.n=2;break;case 5:c.n=7;break;case 6:c.p=6,s=c.v,u.e(s);case 7:return c.p=7,u.f(),c.f(7);case 8:return c.a(2,He(n.entries()).map(function(e){var t=re(e,2);return{name:t[0],items:t[1]}}))}},Te,this,[[1,6,7,8]])}function Pu(e,t,n){var r,u,i,o,a,s,c;return pe().w(function(l){for(;;)switch(l.p=l.n){case 0:r=new Map,u=new Ar(at(n),this.liquid),e=st(e),this.context.memoryLimit.use(e.length),i=Ue(e),l.p=1,i.s();case 2:if((o=i.n()).done){l.n=5;break}return a=o.value,this.context.push(te({},t,a)),l.n=3,u.value(this.context);case 3:s=l.v,this.context.pop(),r.has(s)||r.set(s,[]),r.get(s).push(a);case 4:l.n=2;break;case 5:l.n=7;break;case 6:l.p=6,c=l.v,i.e(c);case 7:return l.p=7,i.f(),l.f(7);case 8:return l.a(2,He(r.entries()).map(function(e){var t=re(e,2);return{name:t[0],items:t[1]}}))}},_e,this,[[1,6,7,8]])}function Lu(e,t,n){var r,u,i,o,a;return pe().w(function(s){for(;;)switch(s.n){case 0:r=new dr(at(t)).readScopeValue(),u=ct(e),i=Cu.call(this,n),o=0;case 1:if(!(o2&&void 0!==arguments[2]?arguments[2]:1;return Dt(e=lt(e))?[]:(Ft(e)||(e=at(e)),t=t<0?e.length+t:t,this.context.memoryLimit.use(n),e.slice(t,t+n))},where:Ou,reject:ju,where_exp:xu,reject_exp:Tu,group_by:_u,group_by_exp:Pu,has:Ru,has_exp:qu,find_index:Iu,find_index_exp:Mu,find:zu,find_exp:Vu,uniq:function(e){return e=ct(e),this.context.memoryLimit.use(e.length),He(new Set(e))},sample:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(Dt(e=lt(e)))return[];Ft(e)||(e=at(e)),this.context.memoryLimit.use(t);var n=He(e).sort(function(){return Math.random()-.5});return 1===t?n[0]:n.slice(0,t)}});function Hu(e,t,n){var r,u,i,o=(null!==(r=null==e?void 0:e.length)&&void 0!==r?r:0)+(null!==(u=null==t?void 0:t.length)&&void 0!==u?u:0)+(null!==(i=null==n?void 0:n.length)&&void 0!==i?i:0);this.context.memoryLimit.use(o);var a=Gu(e,this.context.opts,n);return a?pn(a,t=Dt(t=lt(t))?this.context.opts.dateFormat:at(t)):e}function Ju(e,t,n,r){var u=Gu(e,this.context.opts);if(!u)return e;if("ordinal"===n){var i=u.getDate();return pn(u,"US"===r?"".concat(t," ").concat(i,"%q, %Y"):"".concat(i,"%q ").concat(t," %Y"))}return pn(u,"%d ".concat(t," %Y"))}function Gu(e,t,n){var r,u=null!=n?n:t.timezoneOffset,i=t.locale;return(r="now"===(e=lt(e))||"today"===e?new bn(Date.now(),i,u):ht(e)?new bn(1e3*e,i,u):rt(e)?/^\d+$/.test(e)?new bn(1e3*+e,i,u):t.preserveTimezones&&void 0===n?bn.createDateFixedToTimezone(e,i):new bn(e,i,u):new bn(e,i,u)).valid()?r:void 0}var $u=Object.freeze({__proto__:null,date:Hu,date_to_xmlschema:function(e){return Hu.call(this,e,"%Y-%m-%dT%H:%M:%S%:z")},date_to_rfc822:function(e){return Hu.call(this,e,"%a, %d %b %Y %H:%M:%S %z")},date_to_string:function(e,t,n){return Ju.call(this,e,"%b",t,n)},date_to_long_string:function(e,t,n){return Ju.call(this,e,"%B",t,n)}}),Wu=/[\u3040-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF]/g,Yu=/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\u303F\u3100-\u33FF\u4DC0-\u4DFF\uA000-\uABFF\uD7B0-\uD7FF\uE000-\uF8FF\uFB00-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/g,Zu=Object.freeze({__proto__:null,append:function(e,t){Mt(2===arguments.length,"append expect 2 arguments");var n=at(e),r=at(t);return this.context.memoryLimit.use(n.length+r.length),n+r},prepend:function(e,t){Mt(2===arguments.length,"prepend expect 2 arguments");var n=at(e),r=at(t);return this.context.memoryLimit.use(n.length+r.length),r+n},lstrip:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),t?(t=Bt(at(t)),n.replace(new RegExp("^[".concat(t,"]+"),"g"),"")):n.replace(/^\s+/,"")},downcase:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.toLowerCase()},upcase:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),at(t).toUpperCase()},remove:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),n.split(at(t)).join("")},remove_first:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),n.replace(at(t),"")},remove_last:function(e,t){var n=at(e);this.context.memoryLimit.use(n.length);var r=at(t),u=n.lastIndexOf(r);return-1===u?n:n.substring(0,u)+n.substring(u+r.length)},rstrip:function(e,t){return e=at(e),this.context.memoryLimit.use(e.length),t?(t=Bt(at(t)),e.replace(new RegExp("[".concat(t,"]+$"),"g"),"")):e.replace(/\s+$/,"")},split:function(e,t){var n=at(e);this.context.memoryLimit.use(n.length);for(var r=n.split(at(t));r.length&&""===r[r.length-1];)r.pop();return r},strip:function(e,t){var n=at(e);return this.context.memoryLimit.use(n.length),t?(t=Bt(at(t)),n.replace(new RegExp("^[".concat(t,"]+"),"g"),"").replace(new RegExp("[".concat(t,"]+$"),"g"),"")):n.trim()},strip_newlines:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/\r?\n/gm,"")},capitalize:function(e){return e=at(e),this.context.memoryLimit.use(e.length),e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},replace:function(e,t,n){var r=at(e);return this.context.memoryLimit.use(r.length),r.split(at(t)).join(n)},replace_first:function(e,t,n){var r=at(e);return this.context.memoryLimit.use(r.length),r.replace(at(t),n)},replace_last:function(e,t,n){var r=at(e);this.context.memoryLimit.use(r.length);var u=at(t),i=r.lastIndexOf(u);if(-1===i)return r;var o=at(n);return r.substring(0,i)+o+r.substring(i+u.length)},truncate:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"...",r=at(e);return this.context.memoryLimit.use(r.length),r.length<=t?e:r.substring(0,t-n.length)+n},truncatewords:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:15,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"...",r=at(e);this.context.memoryLimit.use(r.length);var u=r.split(/\s+/);t<=0&&(t=1);var i=u.slice(0,t).join(" ");return u.length>=t&&(i+=n),i},normalize_whitespace:function(e){var t=at(e);return this.context.memoryLimit.use(t.length),t.replace(/\s+/g," ")},number_of_words:function(e,t){var n=at(e);if(this.context.memoryLimit.use(n.length),!(e=n.trim()))return 0;switch(t){case"cjk":return(e.match(Wu)||[]).length+(e.match(Yu)||[]).length;case"auto":return Wu.test(e)?e.match(Wu).length+(e.match(Yu)||[]).length:e.split(/\s+/).length;default:return e.split(/\s+/).length}},array_to_sentence_string:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";switch(this.context.memoryLimit.use(e.length),e.length){case 0:return"";case 1:return e[0];case 2:return"".concat(e[0]," ").concat(t," ").concat(e[1]);default:return"".concat(e.slice(0,-1).join(", "),", ").concat(t," ").concat(e[e.length-1])}}}),Qu=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},hr),Du),yu),Uu),$u),Zu),ar),Xu=function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t,[e,n,r])).identifier=u.tokenizer.readIdentifier(),u.key=u.identifier.content,u.tokenizer.assert(u.key,"expected variable name"),u.tokenizer.skipBlank(),u.tokenizer.assert("="===u.tokenizer.peek(),'expected "="'),u.tokenizer.advance(),u.value=new Ar(u.tokenizer.readFilteredValue(),u.liquid),u}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value.value(t,this.liquid.options.lenientIf);case 1:t.bottom()[this.key]=e.v;case 2:return e.a(2)}},e,this)})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value;case 1:return e.a(2)}},e,this)})},{key:"localScope",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.identifier;case 1:return e.a(2)}},e,this)})}])}(br),Ku=["offset","limit","reversed"],ei=function(e){function t(e,n,r,u){var i;We(this,t);var o,a=(i=oe(this,t,[e,n,r])).tokenizer.readIdentifier(),s=i.tokenizer.readIdentifier(),c=i.tokenizer.readValue();if(!a.size()||"in"!==s.content||!c)throw new Error("illegal tag: ".concat(e.getText()));i.variable=a.content,i.collection=c,i.hash=new wr(i.tokenizer,r.options.keyValueSeparator),i.templates=[],i.elseTemplates=[];var l=u.parseStream(n).on("start",function(){return o=i.templates}).on("tag:else",function(e){zt(e.args),o=i.elseTemplates}).on("tag:endfor",function(e){zt(e.args),l.stop()}).on("template",function(e){return o.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))});return l.start(),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f,h,p,D;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=this.liquid.renderer,h=st,e.n=1,Wn(this.collection,t);case 1:if(p=e.v,(u=h(p)).length){e.n=3;break}return e.n=2,r.renderTemplates(this.elseTemplates,t,n);case 2:return e.a(2);case 3:return i="continue-"+this.variable+"-"+this.collection.getText(),t.push({continue:t.getRegister(i)}),e.n=4,this.hash.render(t);case 4:o=e.v,t.pop(),a=this.liquid.options.orderedFilterParameters?Object.keys(o).filter(function(e){return Ku.includes(e)}):Ku.filter(function(e){return void 0!==o[e]}),u=a.reduce(function(e,t){return"offset"===t?(n=e,r=o.offset,n.slice(r)):"limit"===t?ni(e,o.limit):ti(e);var n,r},u),t.setRegister(i,(o.offset||0)+u.length),s={forloop:new Jt(u.length,this.collection.getText(),this.variable)},t.push(s),c=Ue(u),e.p=5,c.s();case 6:if((l=c.n()).done){e.n=10;break}return f=l.value,s[this.variable]=f,t.continueCalled=t.breakCalled=!1,e.n=7,r.renderTemplates(this.templates,t,n);case 7:if(!t.breakCalled){e.n=8;break}return e.a(3,10);case 8:s.forloop.next();case 9:e.n=6;break;case 10:e.n=12;break;case 11:e.p=11,D=e.v,c.e(D);case 12:return e.p=12,c.f(),e.f(12);case 13:t.continueCalled=t.breakCalled=!1,t.pop();case 14:return e.a(2)}},e,this,[[5,11,12,13]])})},{key:"children",value:pe().m(function e(){var t;return pe().w(function(e){for(;;)if(0===e.n)return t=this.templates.slice(),this.elseTemplates&&t.push.apply(t,He(this.elseTemplates)),e.a(2,t)},e,this)})},{key:"arguments",value:pe().m(function e(){var t,n,r;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.collection;case 1:t=0,n=Object.values(this.hash.hash);case 2:if(!(t0)){o=[];for(var t=[];!e.tokenizer.end();)t.push(e.tokenizer.readValueOrThrow()),e.tokenizer.skipBlank(),","===e.tokenizer.peek()?e.tokenizer.readTo(","):e.tokenizer.readTo("or");i.branches.push({values:t,templates:o})}}).on("tag:else",function(){a++,o=i.elseTemplates}).on("tag:endcase",function(){return s.stop()}).on("template",function(e){o===i.elseTemplates&&1!==a||o.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))});return s.start(),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f,h,p,D,v,F;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=this.liquid.renderer,p=lt,e.n=1,this.value.value(t,t.opts.lenientIf);case 1:D=e.v,u=p(D),i=!1,o=Ue(this.branches),e.p=2,o.s();case 3:if((a=o.n()).done){e.n=13;break}s=a.value,c=Ue(s.values),e.p=4,c.s();case 5:if((l=c.n()).done){e.n=9;break}return f=l.value,e.n=6,Wn(f,t,t.opts.lenientIf);case 6:if(h=e.v,!tr(u,h)){e.n=8;break}return e.n=7,r.renderTemplates(s.templates,t,n);case 7:return i=!0,e.a(3,9);case 8:e.n=5;break;case 9:e.n=11;break;case 10:e.p=10,v=e.v,c.e(v);case 11:return e.p=11,c.f(),e.f(11);case 12:e.n=3;break;case 13:e.n=15;break;case 14:e.p=14,F=e.v,o.e(F);case 15:return e.p=15,o.f(),e.f(15);case 16:if(i){e.n=17;break}return e.n=17,r.renderTemplates(this.elseTemplates,t,n);case 17:return e.a(2)}},e,this,[[4,10,11,12],[2,14,15,16]])})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.value;case 1:return e.d(ne(this.branches.flatMap(function(e){return e.values})),2);case 2:return e.a(2)}},e,this)})},{key:"children",value:pe().m(function e(){var t;return pe().w(function(e){for(;;)if(0===e.n)return t=this.branches.flatMap(function(e){return e.templates}),this.elseTemplates&&t.push.apply(t,He(this.elseTemplates)),e.a(2,t)},e,this)})}])}(br),ii=function(e){function t(e,n,r){var u;for(We(this,t),u=oe(this,t,[e,n,r]);n.length;){var i=n.shift();if(Wr(i)&&"endcomment"===i.name)return ae(u)}throw new Error("tag ".concat(e.getText()," not closed"))}return se(t,e),Ze(t,[{key:"render",value:function(){}}])}(br),oi=function(e){function t(e,n,r,u){var i;We(this,t);var o=(i=oe(this,t,[e,n,r])).tokenizer;for(i.file=ai(o,i.liquid,u),i.currentFile=e.file;!o.end();){o.skipBlank();var a=o.p,s=o.readIdentifier();if(("with"===s.content||"for"===s.content)&&(o.skipBlank(),":"!==o.peek())){var c=o.readValue();if(c){var l=o.p,f=void 0;"as"===o.readIdentifier().content?f=o.readIdentifier():o.p=l,i[s.content]={value:c,alias:f&&f.content},o.skipBlank(),","===o.peek()&&o.advance();continue}}o.p=a;break}return i.hash=new wr(o,r.options.keyValueSeparator),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f,h,p,D,v,F,y,d,m,g,b,w,E,k,A;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:return r=this.liquid,u=this.hash,e.n=1,ci(this.file,t,r);case 1:return Mt(i=e.v,function(){return'illegal file path "'.concat(i,'"')}),o=t.spawn(),a=o.bottom(),g=en,b=a,e.n=2,u.render(t);case 2:if(w=e.v,g(b,w),!this.with){e.n=4;break}return s=this.with,c=s.value,l=s.alias,e.n=3,Wn(c,t);case 3:a[l||i]=e.v;case 4:if(!this.for){e.n=15;break}return f=this.for,h=f.value,p=f.alias,E=st,e.n=5,Wn(h,t);case 5:k=e.v,D=E(k),a.forloop=new Jt(D.length,h.getText(),p),v=Ue(D),e.p=6,v.s();case 7:if((F=v.n()).done){e.n=11;break}return y=F.value,a[p]=y,e.n=8,r._parsePartialFile(i,o.sync,this.currentFile);case 8:return d=e.v,e.n=9,r.renderer.renderTemplates(d,o,n);case 9:a.forloop.next();case 10:e.n=7;break;case 11:e.n=13;break;case 12:e.p=12,A=e.v,v.e(A);case 13:return e.p=13,v.f(),e.f(13);case 14:e.n=17;break;case 15:return e.n=16,r._parsePartialFile(i,o.sync,this.currentFile);case 16:return m=e.v,e.n=17,r.renderer.renderTemplates(m,o,n);case 17:return e.a(2)}},e,this,[[6,12,13,14]])})},{key:"children",value:pe().m(function e(t,n){return pe().w(function(e){for(;;)switch(e.n){case 0:if(!t||!rt(this.file)){e.n=2;break}return e.n=1,this.liquid._parsePartialFile(this.file,n,this.currentFile);case 1:return e.a(2,e.v);case 2:return e.a(2,[])}},e,this)})},{key:"partialScope",value:function(){if(rt(this.file)){var e=Object.keys(this.hash.hash);if(this.with){var t=this.with,n=t.value,r=t.alias;rt(r)?e.push([r,n]):rt(this.file)&&e.push([this.file,n])}if(this.for){var u=this.for,i=u.value,o=u.alias;rt(o)?e.push([o,i]):rt(this.file)&&e.push([this.file,i])}return{name:this.file,isolated:!0,scope:e}}}},{key:"arguments",value:pe().m(function e(){var t,n,r,u,i;return pe().w(function(e){for(;;)switch(e.n){case 0:t=0,n=Object.values(this.hash.hash);case 1:if(!(t"),n.write(''))),n.write('')),e.n=4,s.renderTemplates(this.templates,t,n);case 4:n.write("");case 5:f++,c.next(),e.n=3;break;case 6:r.length&&n.write(""),t.pop();case 7:return e.a(2)}},e,this)})},{key:"children",value:pe().m(function e(){return pe().w(function(e){for(;;)if(0===e.n)return e.a(2,this.templates)},e,this)})},{key:"arguments",value:pe().m(function e(){var t,n,r;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.collection;case 1:t=0,n=Object.values(this.args.hash);case 2:if(!(t0?o=[]:i.branches.push({value:new Ar(e.tokenizer.readFilteredValue(),i.liquid),test:Xn,templates:o=[]})}).on("tag:else",function(){a++,o=i.elseTemplates}).on("tag:endunless",function(){this.stop()}).on("template",function(e){o===i.elseTemplates&&1!==a||o.push(e)}).on("end",function(){throw new Error("tag ".concat(e.getText()," not closed"))}).start(),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r,u,i,o,a,s,c,l,f;return pe().w(function(e){for(;;)switch(e.p=e.n){case 0:r=this.liquid.renderer,u=Ue(this.branches),e.p=1,u.s();case 2:if((i=u.n()).done){e.n=6;break}return o=i.value,a=o.value,s=o.test,c=o.templates,e.n=3,a.value(t,t.opts.lenientIf);case 3:if(l=e.v,!s(l,t)){e.n=5;break}return e.n=4,r.renderTemplates(c,t,n);case 4:return e.a(2);case 5:e.n=2;break;case 6:e.n=8;break;case 7:e.p=7,f=e.v,u.e(f);case 8:return e.p=8,u.f(),e.f(8);case 9:return e.n=10,r.renderTemplates(this.elseTemplates,t,n);case 10:return e.a(2)}},e,this,[[1,7,8,9]])})},{key:"children",value:pe().m(function(){var e,t;return pe().w(function(n){for(;;)if(0===n.n)return e=this.branches.flatMap(function(e){return e.templates}),this.elseTemplates&&(t=e).push.apply(t,He(this.elseTemplates)),n.a(2,e)},e,this)})},{key:"arguments",value:function(){return this.branches.map(function(e){return e.value})}}])}(br),bi=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"render",value:function(e,t){e.breakCalled=!0}}])}(br),wi=function(e){function t(){return We(this,t),oe(this,t,arguments)}return se(t,e),Ze(t,[{key:"render",value:function(e,t){e.continueCalled=!0}}])}(br),Ei={assign:Xu,for:ei,capture:ri,case:ui,comment:ii,include:li,render:oi,decrement:fi,increment:Di,cycle:hi,if:pi,layout:vi,block:Fi,raw:yi,tablerow:mi,unless:gi,break:bi,continue:wi,echo:function(e){function t(e,n,r){var u;return We(this,t),(u=oe(this,t,[e,n,r])).tokenizer.skipBlank(),u.tokenizer.end()||(u.value=new Ar(u.tokenizer.readFilteredValue(),u.liquid)),u}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){var r;return pe().w(function(e){for(;;)switch(e.n){case 0:if(this.value){e.n=1;break}return e.a(2);case 1:return e.n=2,this.value.value(t,!1);case 2:r=e.v,n.write(r);case 3:return e.a(2)}},e,this)})},{key:"arguments",value:pe().m(function e(){return pe().w(function(e){for(;;)switch(e.n){case 0:if(!this.value){e.n=1;break}return e.n=1,this.value;case 1:return e.a(2)}},e,this)})}])}(br),liquid:function(e){function t(e,n,r,u){var i;We(this,t);var o=(i=oe(this,t,[e,n,r])).tokenizer.readLiquidTagTokens(i.liquid.options);return i.templates=u.parseTokens(o),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,n){return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.liquid.renderer.renderTemplates(this.templates,t,n);case 1:return e.a(2)}},e,this)})},{key:"children",value:pe().m(function e(){return pe().w(function(e){for(;;)if(0===e.n)return e.a(2,this.templates)},e,this)})}])}(br),"#":function(e){function t(e,n,r){var u;if(We(this,t),u=oe(this,t,[e,n,r]),-1!==e.args.search(/\n\s*[^#\s]/g))throw new Error("every line of an inline comment must start with a '#' character");return u}return se(t,e),Ze(t,[{key:"render",value:function(){}}])}(br)},ki=function(){function e(){var t,n,r,u,i,o=this,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};We(this,e),this.renderer=new Gn,this.filters={},this.tags={},this.options=((t=a).hasOwnProperty("root")&&(t.hasOwnProperty("partials")||(t.partials=t.root),t.hasOwnProperty("layouts")||(t.layouts=t.root)),t.hasOwnProperty("cache")&&(u="number"==typeof t.cache?t.cache>0?new rr(t.cache):void 0:"object"===$e(t.cache)?t.cache:t.cache?new rr(1024):void 0,t.cache=u),(t=Object.assign(Object.assign(Object.assign({},Dr),t.jekyllInclude?{dynamicPartials:!1}:{}),t)).fs.dirname&&t.fs.sep||!t.relativeReference||(console.warn("[LiquidJS] `fs.dirname` and `fs.sep` are required for relativeReference, set relativeReference to `false` to suppress this warning"),t.relativeReference=!1),t.root=vr(t.root),t.partials=vr(t.partials),t.layouts=vr(t.layouts),t.outputEscape=t.outputEscape&&("escape"===(i=t.outputEscape)?lr:"json"===i?ar.json:(Mt(ut(i),"`outputEscape` need to be of type string or function"),i)),t.locale||(t.locale=null!==(r=null===(n=vn())||void 0===n?void 0:n().resolvedOptions().locale)&&void 0!==r?r:"en-US"),t.templates&&(t.fs=new pr(t.templates),t.relativeReference=!0,t.root=t.partials=t.layouts="."),t),this.parser=new Hr(this),dt(Ei,function(e,t){return o.registerTag(t,e)}),dt(Qu,function(e,t){return o.registerFilter(t,e)})}return Ze(e,[{key:"parse",value:function(e,t){return new Hr(this).parse(e,t)}},{key:"_render",value:function(e,t,n){var r=t instanceof ru?t:new ru(t,this.options,n);return this.renderer.renderTemplates(e,r)}},{key:"render",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,nn(this._render(e,t,Object.assign(Object.assign({},n),{sync:!1}))))},r,this)}))}},{key:"renderSync",value:function(e,t,n){return rn(this._render(e,t,Object.assign(Object.assign({},n),{sync:!0})))}},{key:"renderToNodeStream",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=new ru(t,this.options,n);return this.renderer.renderTemplatesToNodeStream(e,r)}},{key:"_parseAndRender",value:function(e,t,n){var r=this.parse(e);return this._render(r,t,n)}},{key:"parseAndRender",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,nn(this._parseAndRender(e,t,Object.assign(Object.assign({},n),{sync:!1}))))},r,this)}))}},{key:"parseAndRenderSync",value:function(e,t,n){return rn(this._parseAndRender(e,t,Object.assign(Object.assign({},n),{sync:!0})))}},{key:"_parsePartialFile",value:function(e,t,n){return new Hr(this).parseFile(e,t,Ir.Partials,n)}},{key:"_parseLayoutFile",value:function(e,t,n){return new Hr(this).parseFile(e,t,Ir.Layouts,n)}},{key:"_parseFile",value:function(e,t,n,r){return new Hr(this).parseFile(e,t,n,r)}},{key:"parseFile",value:function(e,t){return tn(this,void 0,void 0,pe().m(function n(){return pe().w(function(n){for(;;)if(0===n.n)return n.a(2,nn(new Hr(this).parseFile(e,!1,t)))},n,this)}))}},{key:"parseFileSync",value:function(e,t){return rn(new Hr(this).parseFile(e,!0,t))}},{key:"_renderFile",value:pe().m(function e(t,n,r){var u;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this._parseFile(t,r.sync,r.lookupType);case 1:return u=e.v,e.n=2,this._render(u,n,r);case 2:return e.a(2,e.v)}},e,this)})},{key:"renderFile",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,nn(this._renderFile(e,t,Object.assign(Object.assign({},n),{sync:!1}))))},r,this)}))}},{key:"renderFileSync",value:function(e,t,n){return rn(this._renderFile(e,t,Object.assign(Object.assign({},n),{sync:!0})))}},{key:"renderFileToNodeStream",value:function(e,t,n){return tn(this,void 0,void 0,pe().m(function r(){var u;return pe().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,this.parseFile(e);case 1:return u=r.v,r.a(2,this.renderToNodeStream(u,t,n))}},r,this)}))}},{key:"_evalValue",value:function(e,t){var n=new Ar(e,this),r=t instanceof ru?t:new ru(t,this.options);return n.value(r)}},{key:"evalValue",value:function(e,t){return tn(this,void 0,void 0,pe().m(function n(){return pe().w(function(n){for(;;)if(0===n.n)return n.a(2,nn(this._evalValue(e,t)))},n,this)}))}},{key:"evalValueSync",value:function(e,t){return rn(this._evalValue(e,t))}},{key:"registerFilter",value:function(e,t){this.filters[e]=t}},{key:"registerTag",value:function(e,t){var n;this.tags[e]=ut(t)?t:(n=t,function(e){function t(e,r,u){var i;return We(this,t),i=oe(this,t,[e,r,u]),ut(n.parse)&&n.parse.call(i,e,r),i}return se(t,e),Ze(t,[{key:"render",value:pe().m(function e(t,r){var u;return pe().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,new wr(this.token.args,t.opts.keyValueSeparator).render(t);case 1:return u=e.v,e.n=2,n.render.call(this,t,r,u);case 2:return e.a(2,e.v)}},e,this)})}])}(br))}},{key:"plugin",value:function(t){return t.call(this,e)}},{key:"express",value:function(){var e=this,t=!0;return function(n,r,u){if(t){var i,o,a;t=!1;var s=vr(this.root);(i=e.options.root).unshift.apply(i,He(s)),(o=e.options.layouts).unshift.apply(o,He(s)),(a=e.options.partials).unshift.apply(a,He(s))}e.renderFile(n,r).then(function(e){return u(null,e)},u)}}},{key:"analyze",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){return pe().w(function(n){for(;;)if(0===n.n)return n.a(2,Tr(e,t))},n)}))}},{key:"analyzeSync",value:function(e){return _r(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}},{key:"parseAndAnalyze",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return tn(this,void 0,void 0,pe().m(function r(){return pe().w(function(r){for(;;)if(0===r.n)return r.a(2,Tr(this.parse(e,t),n))},r,this)}))}},{key:"parseAndAnalyzeSync",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return _r(this.parse(e,t),n)}},{key:"variables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Object.keys(r.variables))}},n,this)}))}},{key:"variablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Object.keys(n.variables)}},{key:"fullVariables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(new Set(Object.values(r.variables).flatMap(function(e){return e.map(function(e){return String(e)})}))))}},n,this)}))}},{key:"fullVariablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(new Set(Object.values(n.variables).flatMap(function(e){return e.map(function(e){return String(e)})})))}},{key:"variableSegments",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(St(Object.values(r.variables).flatMap(function(e){return e.map(function(e){return e.toArray()})}))))}},n,this)}))}},{key:"variableSegmentsSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(St(Object.values(n.variables).flatMap(function(e){return e.map(function(e){return e.toArray()})})))}},{key:"globalVariables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Object.keys(r.globals))}},n,this)}))}},{key:"globalVariablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Object.keys(n.globals)}},{key:"globalFullVariables",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(new Set(Object.values(r.globals).flatMap(function(e){return e.map(function(e){return String(e)})}))))}},n,this)}))}},{key:"globalFullVariablesSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(new Set(Object.values(n.globals).flatMap(function(e){return e.map(function(e){return String(e)})})))}},{key:"globalVariableSegments",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return tn(this,void 0,void 0,pe().m(function n(){var r;return pe().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Tr(rt(e)?this.parse(e):e,t);case 1:return r=n.v,n.a(2,Array.from(St(Object.values(r.globals).flatMap(function(e){return e.map(function(e){return e.toArray()})}))))}},n,this)}))}},{key:"globalVariableSegmentsSync",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=_r(rt(e)?this.parse(e):e,t);return Array.from(St(Object.values(n.globals).flatMap(function(e){return e.map(function(e){return e.toArray()})})))}}])}(),Ai=new ki({renderLimit:500,parseLimit:1e3,memoryLimit:1e8});function Ci(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Bi(e,t,n){return(t=function(e){var t=function(e){if("object"!=Si(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Si(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Si(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Si(e){return Si="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Si(e)}function Oi(e,t){if(e){if("string"==typeof e)return ji(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ji(e,t):void 0}}function ji(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);nNi)throw new Error('@replace requires a "pattern" less than '.concat(Ni," characters"));if(n.length>Ri)throw new Error('@replace requires a "replacement" less than '.concat(Ri," characters"));return t=t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),e.replace(new RegExp(t,r),n)}function Ii(e){if(v(e)){for(var t=Object.assign({},e),n=0,r=Object.keys(e);n1&&void 0!==arguments[1]?arguments[1]:{},n=D(t);if("object"!==n)throw new Error("data must be an object, got ".concat(n));var r=function(e){var t=function(e){for(var t=1;t1)throw new Error("The root mapping must only have a single directive object");var u=t[Object.keys(t)[0]];if(!u||"object"!==Si(u))throw new Error("The root directive must be an object");u.mapping=n}return t}(e);return W(r),d(Mi(r,t))}Pi("@replace",function(e,t){if(!v(e))throw new Error('@replace requires an object with a "pattern" key');if(!e.pattern)throw new Error('@replace requires a "pattern" key');null==e.replacement&&(e.replacement=""),e.pattern2&&null==e.replacement2&&(e.replacement2=""),null==e.ignorecase&&(e.ignorecase=!1),null==e.global&&(e.global=!0);var n=e.pattern,r=e.replacement,u=e.ignorecase,i=e.global;if(e.value){var o=Mi(e.value,t),a="";if("boolean"!=typeof o&&"number"!=typeof o||(o=String(o)),"string"==typeof o&&"string"==typeof n&&"string"==typeof r&&"boolean"==typeof u&&"boolean"==typeof i){var s="";i&&(s+="g"),u&&(s+="i"),a=qi(o,n,r,s),e.pattern2&&"string"==typeof e.pattern2&&"string"==typeof e.replacement2&&(a=qi(a,e.pattern2,e.replacement2,s))}return a}}),Pi("@arrayPath",function(e,t){if(!Array.isArray(e))throw new Error("@arrayPath expected array, got ".concat(D(e)));var n,r,u=(r=2,function(e){if(Array.isArray(e))return e}(n=e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(n,r)||Oi(n,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=u[0],o=u[1],a="string"==typeof i?p(t,i.replace("$.","")):Mi(i,t);return["object","array"].includes(D(a))&&"object"===D(o)&&Object.keys(o).length>0?function(e){return null==e?arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?e:[]:F(e)?e:[e]}(a).map(function(e){return Mi(o,e)}):a}),Li("@path",function(e,t){return p(t,e.replace("$.",""))}),Li("@template",function(e,t){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"!=typeof e)throw new TypeError('Invalid template! Template should be a "string" but '.concat(D(e)," was given."));function n(e){return function(n){n=n.slice(e,-e).trim();var r=p(t,n);return null!=r?r:""}}return e.replace(/\{\{\{([^}]+)\}\}\}/g,n(3)).replace(/\{\{([^}]+)\}\}/g,n(2))}(e,t)}),Pi("@literal",function(e,t){return Mi(e,t)}),Pi("@flatten",function(e,t){if(!v(e))throw new Error('@flatten requires an object with a "separator" key');if(!e.separator)throw new Error('@flatten requires a "separator" key');var n=Mi(e.separator,t);if("string"!=typeof n)throw new Error("@flatten requires a string separator");var r=Mi(e.value,t);return ee(r,"",n,Boolean(e.omitArrays))}),Pi("@json",function(e,t){if(!v(e))throw new Error('@json requires an object with a "value" key');if(!e.mode)throw new Error('@json requires a "mode" key');if(!e.value)throw new Error('@json requires a "value" key');var n=Mi(e.value,t);return"encode"===e.mode?JSON.stringify(n):"decode"===e.mode?"string"==typeof n?JSON.parse(n):n:void 0}),Pi("@merge",function(e,t){if(!v(e))throw new Error('@merge requires an object with an "objects" key and a "direction" key');if(!e.direction)throw new Error('@merge requires a "direction" key');var n=Mi(e.direction,t);if(!e.objects)throw new Error('@merge requires a "objects" key');if(!Array.isArray(e.objects))throw new Error("@merge: expected opts.array, got ".concat(Si(e.objects)));var r,u=e.objects.map(function(e){return Mi(e,t)});return"left"===n&&u.reverse(),Object.assign.apply(Object,[{}].concat(function(e){if(Array.isArray(e))return ji(e)}(r=u)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(r)||Oi(r)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))}),Pi("@transform",function(e,t){if(!v(e))throw new Error('@transform requires an object with an "apply" key and a "mapping" key');if(!e.mapping)throw new Error('@transform requires a "mapping" key');if(!e.apply)throw new Error('@transform requires a "apply" key');if(!v(e.apply))throw new Error('@transform "apply" key should be an object');var n=zi(e.apply,t);return Mi(e.mapping,n)}),Pi("@excludeWhenNull",function(e,t){var n=Mi(e,t);if(null!==n)return Ii(n)}),Pi("@liquid",function(e,t){return function(e,t){if("string"!=typeof e)throw new Error("liquid template value must be a string");if(0===e.length)return"";if(e.length>1e3)throw new Error("liquid template values are limited to 1000 characters");var n=Ai.parseAndRenderSync(e,t);return"string"!=typeof n?"error":n}(e,t)});var Vi=function(){function e(e){var t;this.callbacks={},this.warned=!1,this.maxListeners=null!==(t=null==e?void 0:e.maxListeners)&&void 0!==t?t:10}return e.prototype.warnIfPossibleMemoryLeak=function(e){this.warned||this.maxListeners&&this.callbacks[e].length>this.maxListeners&&(console.warn("Event Emitter: Possible memory leak detected; ".concat(String(e)," has exceeded ").concat(this.maxListeners," listeners.")),this.warned=!0)},e.prototype.on=function(e,t){return this.callbacks[e]?(this.callbacks[e].push(t),this.warnIfPossibleMemoryLeak(e)):this.callbacks[e]=[t],this},e.prototype.once=function(e,t){var n=this,r=function(){for(var u=[],i=0;i1?n-1:0),u=1;u=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:u}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(a)throw i}}}}function io(e,t){if(e){if("string"==typeof e)return oo(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?oo(e,t):void 0}}function oo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n2&&void 0!==arguments[2]?arguments[2]:{};null==u||null===(r=u.emitter)||void 0===r||r.emit(Gi.EvalRuleStart,{rule:e,signal:n.signalBuffer[0],signalBuffer:n.signalBuffer});var i=t.getSignalsByTriggers(n.signalBuffer,e.triggers,{emitter:null==u?void 0:u.emitter});return i?t.createMethodCallsFromMappingInput(e,i):[]}},{key:"getSignalsByTriggers",value:function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},u=function(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||io(e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e),i=u[0],o=u.slice(1),a={},s=uo(t);try{var c,l=function(){var t,u,s=n.value;if(u="current"===s.ref?po(s,i)?i:void 0:o.find(function(e){return po(s,e)}),null==r||null===(t=r.emitter)||void 0===t||t.emit(Gi.EvalTriggerMatchResult,{match:Boolean(u),trigger:s,signal:i,signalBuffer:e}),!u)return{v:void 0};a[s.ref]=u};for(s.s();!(n=s.n()).done;)if(c=l())return c.v}catch(e){s.e(e)}finally{s.f()}return a}},{key:"createMethodCallsFromMappingInput",value:function(e,t){var n,r=[],u=uo(e.actions);try{for(u.s();!(n=u.n()).done;){var i=n.value;if("send-event"===i.action){var o=ho(i.mappings,t);r.push([i.mappings.type,o])}else"reset"===i.action&&r.push(["reset"])}}catch(e){u.e(e)}finally{u.f()}return r}}],(r=[{key:"eval",value:function(e){var n=this;return this.rules.flatMap(function(r){return t.evalSingleRule(r,e,{emitter:n})})}}])&&ao(n.prototype,r),u&&ao(n,u),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,u}(Wi);function vo(e){return vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vo(e)}function Fo(e){return function(e){if(Array.isArray(e))return go(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||mo(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function yo(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,u,i,o,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,u=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(c)throw u}}return a}}(e,t)||mo(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function mo(e,t){if(e){if("string"==typeof e)return go(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?go(e,t):void 0}}function go(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u,i=!0,o=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){o=!0,u=e},f:function(){try{i||null==t.return||t.return()}finally{if(o)throw u}}}}(t.map(jo));try{for(r.s();!(n=r.n()).done;){var u=yo(n.value,2),i=u[0],o=u[1];try{e[i].apply(e,Fo(o))}catch(e){console.error("Error calling analytics.js method .".concat(i,"() with args ").concat(JSON.stringify(o),":"),e)}}}catch(e){r.e(e)}finally{r.f()}}(null!==(n=null==t?void 0:t.analytics)&&void 0!==n?n:function(){if(globalThis.analytics)return globalThis.analytics;if("undefined"!=typeof analytics)return analytics;throw new Error("No analytics instance found.")}(),r.eval(signals))}globalThis.SEGMENT_SIGNALS_RULES=[ + { + "actions": [ + { + "action": "send-event", + "mappings": { + "type": "screen", + "name": "Screen Viewed", + "context": {}, + "properties": { + "currentScreen": { + "@path": "$.current.data.currentScreen" + } + } + } + } + ], + "triggers": [ + { + "ref": "current", + "subscription": { + "data": { + "ir": [], + "contextualSignalType": { + "id": "navigation" + } + }, + "type": "fql" + } + } + ] + }, + { + "actions": [ + { + "action": "send-event", + "mappings": { + "type": "track", + "event": "Add to cart", + "context": {}, + "properties": { + "price": { + "@path": "$.trigger_2.data.body[0].price" + }, + "title": { + "@path": "$.current.data.target.title" + }, + "category ": { + "@path": "$.trigger_2.data.body[0].category" + } + } + } + } + ], + "triggers": [ + { + "ref": "current", + "subscription": { + "data": { + "ir": [ + "=", + "data.target.title", + { + "value": "Add to cart" + } + ], + "contextualSignalType": { + "id": "interaction" + } + }, + "type": "fql" + } + }, + { + "ref": "trigger_2", + "subscription": { + "data": { + "ir": [ + "contains", + "data.url", + { + "value": "/products" + } + ], + "contextualSignalType": { + "id": "network-response" + } + }, + "type": "fql" + } + } + ] + } +],null!==(xo=globalThis.signals)&&void 0!==xo||(globalThis.signals=new h),globalThis.SEGMENT_SIGNALS_RUNTIME_VERSION="2.2.0"}()}(); diff --git a/Tests/AnalyticsLiveTests/TestHelpers/testbundle.js b/Tests/AnalyticsLiveTests/TestHelpers/testbundle.js index 93d79fc..73ad6ef 100755 --- a/Tests/AnalyticsLiveTests/TestHelpers/testbundle.js +++ b/Tests/AnalyticsLiveTests/TestHelpers/testbundle.js @@ -2,31 +2,31 @@ console.log("starting example..."); class TestSuper extends LivePlugin { constructor(type, destination) { - console.log("js: TestSuper.constructor() called") + //console.log("js: TestSuper.constructor() called") super(type, destination); } update(settings, initialUpdate) { - console.log("js: TestSuper.update() called") + //console.log("js: TestSuper.update() called") if (initialUpdate == true) { console.log(settings) } } execute(event) { - console.log("js: TestSuper.execute() called"); + //console.log("js: TestSuper.execute() called"); return super.execute(event); } track(event) { - console.log("js: TestSuper.track() called"); - console.log("js: context = ", event.context); + //console.log("js: TestSuper.track() called"); + //console.log("js: context = ", event.context); event.context.livePluginMessage = "This came from a LivePlugin"; return event; } screen(event) { - console.log("js: TestSuper.screen() called"); + //console.log("js: TestSuper.screen() called"); analytics.track("trackScreen", null) return event; } @@ -43,7 +43,7 @@ const checkoutEventProps = { amount: "$1337.00" } -let a = new Analytics("lAtKCqFrmtnhIVV7LDPTrgoCbL0ujlBe"); +let a = new Analytics("another_write_key"); _ = a.track("userRegisteredEvent", userRegisteredEventProps); _ = a.track("checkoutEvent", checkoutEventProps); a.flush(); diff --git a/embedJS.sh b/embedJS.sh new file mode 100755 index 0000000..22adb84 --- /dev/null +++ b/embedJS.sh @@ -0,0 +1,139 @@ +#!/bin/bash + +# embedJS.sh - Extract JS from TypeScript wrapper and embed as base64 in Swift + +set -e # Exit on any error + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Check for QuickJS +if ! command -v qjs &> /dev/null; then + echo -e "${RED}Error: qjs (QuickJS) not found${NC}" + echo -e "${YELLOW}Install it with: brew install quickjs${NC}" + exit 1 +fi + +# Check for GitHub CLI +if ! command -v gh &> /dev/null; then + echo -e "${RED}Error: gh (GitHub CLI) not found${NC}" + echo -e "${YELLOW}Install it with: brew install gh${NC}" + echo -e "${YELLOW}Then authenticate with: gh auth login${NC}" + exit 1 +fi + +# Configuration +REPO="segment-integrations/signals-specs" +FILE_PATH="packages/signals-runtime/src/mobile/get-runtime-code.generated.ts" +OUTPUT_FILE="Sources/AnalyticsLive/Signals/Runtime/SignalsJS.swift" +TESTHELPER="Tests/AnalyticsLiveTests/TestHelpers/currentRuntime.js" +TEMP_FILE=$(mktemp) + +echo -e "${YELLOW}Fetching latest release info...${NC}" + +# Get the latest release tag using GitHub CLI +LATEST_TAG=$(gh release list --repo "$REPO" --limit 1 --json tagName --jq '.[0].tagName') + +if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ]; then + echo -e "${RED}Error: Could not fetch latest release tag${NC}" + echo -e "${YELLOW}Make sure you're authenticated with: gh auth login${NC}" + exit 1 +fi + +echo -e "${GREEN}Latest release: $LATEST_TAG${NC}" +# Extract just the version number (everything after the last @) +VERSION_NUMBER=$(echo "$LATEST_TAG" | sed 's/.*@//') +echo -e "${GREEN}Version number: $VERSION_NUMBER${NC}" +echo -e "${YELLOW}Downloading JS from GitHub API...${NC}" + +# Use GitHub API to get file content from the specific tag (properly escaped) +if ! gh api "repos/$REPO/contents/$FILE_PATH?ref=$LATEST_TAG" --jq '.content' | base64 -d > "$TEMP_FILE"; then + echo -e "${RED}Error: Failed to download from $REPO/$FILE_PATH at tag $LATEST_TAG${NC}" + echo -e "${YELLOW}Make sure you're authenticated with: gh auth login${NC}" + rm -f "$TEMP_FILE" + exit 1 +fi + +GITHUB_REPO_URL="https://github.com/$REPO/blob/$LATEST_TAG/$FILE_PATH" + +echo -e "${YELLOW}Extracting JavaScript content...${NC}" + +# Extract JS between backticks using awk +JS_CONTENT=$(awk '/export const getRuntimeCode.*`$/{flag=1; next} /^`$/{flag=0} flag' "$TEMP_FILE") + +# Check if we actually extracted something +if [ -z "$JS_CONTENT" ]; then + echo -e "${RED}Error: No JavaScript content found between backticks${NC}" + rm -f "$TEMP_FILE" + exit 1 +fi + +echo -e "${YELLOW}Validating JavaScript with QuickJS...${NC}" + +# Write JS to temp file for validation +JS_TEMP_FILE=$(mktemp -t "extracted_js.XXXXXX.js") +echo "$JS_CONTENT" > "$JS_TEMP_FILE" + +# Validate JS with QuickJS +if ! qjs "$JS_TEMP_FILE" &> /dev/null; then + echo -e "${RED}Error: JavaScript validation failed!${NC}" + echo -e "${RED}The extracted JS appears to be invalid or incomplete${NC}" + rm -f "$TEMP_FILE" "$JS_TEMP_FILE" + exit 1 +fi + +# Copy JS runtime to test helpers. +cp "$JS_TEMP_FILE" "$TESTHELPER" + +# Cleanup JS temp file +rm -f "$JS_TEMP_FILE" + +echo -e "${GREEN}✅ JavaScript validation passed${NC}" + +echo -e "${YELLOW}Base64 encoding and chunking JavaScript...${NC}" + +# Base64 encode it +BASE64_JS=$(echo -n "$JS_CONTENT" | base64) + +# Split base64 into chunks for IDE readability +echo "// GENERATED - DO NOT EDIT" > "$OUTPUT_FILE" +echo "// Source: $GITHUB_REPO_URL" >> "$OUTPUT_FILE" +echo "// Release: $LATEST_TAG" >> "$OUTPUT_FILE" +echo "// Generated: $(date)" >> "$OUTPUT_FILE" +echo "//" >> "$OUTPUT_FILE" +echo "// This JavaScript is stored as chunked base64 because:" >> "$OUTPUT_FILE" +echo "// 1. The original JS is minified into one very long line" >> "$OUTPUT_FILE" +echo "// 2. Xcode won't display extremely long strings in the editor" >> "$OUTPUT_FILE" +echo "// 3. Breaking the base64 into 80-character chunks makes it visible" >> "$OUTPUT_FILE" +echo "//" >> "$OUTPUT_FILE" +echo "// At runtime, the chunks are joined, decoded, and the JavaScript is ready to use." >> "$OUTPUT_FILE" +echo "" >> "$OUTPUT_FILE" +echo "import Foundation" >> "$OUTPUT_FILE" +echo "" >> "$OUTPUT_FILE" +echo "internal class SignalsRuntime {" >> "$OUTPUT_FILE" +echo " static let version: String = \"$VERSION_NUMBER\"" >> "$OUTPUT_FILE" +echo " static let embeddedJS: String = {" >> "$OUTPUT_FILE" +echo " let encodedChunks = [" >> "$OUTPUT_FILE" + +# Split base64 into 80-character chunks +echo "$BASE64_JS" | fold -w 80 | sed 's/.*/"&",/' >> "$OUTPUT_FILE" + +echo " ]" >> "$OUTPUT_FILE" +echo " let encoded = encodedChunks.joined()" >> "$OUTPUT_FILE" +echo " guard let data = Data(base64Encoded: encoded)," >> "$OUTPUT_FILE" +echo " let decoded = String(data: data, encoding: .utf8) else {" >> "$OUTPUT_FILE" +echo " fatalError(\"Failed to decode runtime JS\")" >> "$OUTPUT_FILE" +echo " }" >> "$OUTPUT_FILE" +echo " return decoded" >> "$OUTPUT_FILE" +echo " }()" >> "$OUTPUT_FILE" +echo "}" >> "$OUTPUT_FILE" + +# Cleanup +rm -f "$TEMP_FILE" + +echo -e "${GREEN}✅ Successfully generated $OUTPUT_FILE${NC}" +echo -e "${GREEN}📊 JS size: $(echo -n "$JS_CONTENT" | wc -c) bytes${NC}" +echo -e "${GREEN}📊 Base64 size: $(echo -n "$BASE64_JS" | wc -c) bytes${NC}"