obsidian-dev-utils 26.13.0 → 26.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 26.15.0
4
+
5
+ - Update libs
6
+ - requestAnimationFrameAsync only after some threshold
7
+
8
+ ## 26.14.0
9
+
10
+ - Ensure loop has animationFrame
11
+
3
12
  ## 26.13.0
4
13
 
5
14
  - Avoid unnecessary checks
@@ -35,6 +35,7 @@ __export(Async_exports, {
35
35
  invokeAsyncSafely: () => invokeAsyncSafely,
36
36
  invokeAsyncSafelyAfterDelay: () => invokeAsyncSafelyAfterDelay,
37
37
  marksAsTerminateRetry: () => marksAsTerminateRetry,
38
+ requestAnimationFrameAsync: () => requestAnimationFrameAsync,
38
39
  retryWithTimeout: () => retryWithTimeout,
39
40
  runWithTimeout: () => runWithTimeout,
40
41
  sleep: () => sleep,
@@ -88,6 +89,13 @@ function invokeAsyncSafelyAfterDelay(asyncFn, delayInMilliseconds = 0) {
88
89
  function marksAsTerminateRetry(error) {
89
90
  return Object.assign(error, { __terminateRetry: true });
90
91
  }
92
+ async function requestAnimationFrameAsync() {
93
+ return new Promise((resolve) => {
94
+ requestAnimationFrame(() => {
95
+ resolve();
96
+ });
97
+ });
98
+ }
91
99
  async function retryWithTimeout(fn, retryOptions, stackTrace) {
92
100
  const retryWithTimeoutDebugger = (0, import_Debug.getLibDebugger)("Async:retryWithTimeout");
93
101
  stackTrace ??= (0, import_Error.getStackTrace)(1);
@@ -211,6 +219,7 @@ async function toArray(iter) {
211
219
  invokeAsyncSafely,
212
220
  invokeAsyncSafelyAfterDelay,
213
221
  marksAsTerminateRetry,
222
+ requestAnimationFrameAsync,
214
223
  retryWithTimeout,
215
224
  runWithTimeout,
216
225
  sleep,
@@ -218,4 +227,4 @@ async function toArray(iter) {
218
227
  timeout,
219
228
  toArray
220
229
  });
221
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIFJldHJpZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgdHJ1ZSBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byByZXRyeS5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbmZpZ3VyZSB0aGUgcmV0cnkgYmVoYXZpb3IuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgcmVqZWN0cyB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeVdpdGhUaW1lb3V0KGZuOiAoKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+LCByZXRyeU9wdGlvbnM/OiBSZXRyeU9wdGlvbnMsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJldHJ5V2l0aFRpbWVvdXQnKTtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzOiAxMDAsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiBmYWxzZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNTAwMFxuICB9O1xuICBjb25zdCBmdWxsT3B0aW9ucyA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5yZXRyeU9wdGlvbnMgfTtcbiAgYXdhaXQgcnVuV2l0aFRpbWVvdXQoZnVsbE9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgYXR0ZW1wdCsrO1xuICAgICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzU3VjY2VzcyA9IGF3YWl0IGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCAoZXJyb3IgYXMgUGFydGlhbDxUZXJtaW5hdGVSZXRyeT4pLl9fdGVybWluYXRlUmV0cnkpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBwcmludEVycm9yKGVycm9yKTtcbiAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMSkge1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlcihgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke2F0dGVtcHQudG9TdHJpbmcoKX0gYXR0ZW1wdHNgKTtcbiAgICAgICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKFxuICAgICAgICBgUmV0cnkgYXR0ZW1wdCAke2F0dGVtcHQudG9TdHJpbmcoKX0gY29tcGxldGVkIHVuc3VjY2Vzc2Z1bGx5LiBUcnlpbmcgYWdhaW4gaW4gJHtmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMudG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCxcbiAgICAgICAge1xuICAgICAgICAgIGZuXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2UpO1xuICAgICAgYXdhaXQgc2xlZXAoZnVsbE9wdGlvbnMucmV0cnlEZWxheUluTWlsbGlzZWNvbmRzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIElmIGBERUJVRz1vYnNpZGlhbi1kZXYtdXRpbHM6QXN5bmM6cnVuV2l0aFRpbWVvdXRgIGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBhZnRlciB0aGUgdGltZW91dCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcnVuIGluZGVmaW5pdGVseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IGZyb20gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8Uj4odGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGZuOiAoKSA9PiBQcm9taXNhYmxlPFI+KTogUHJvbWlzZTxSPiB7XG4gIGxldCBpc1RpbWVkT3V0ID0gdHJ1ZTtcbiAgbGV0IHJlc3VsdDogUiA9IG51bGwgYXMgUjtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGF3YWl0IFByb21pc2UucmFjZShbcnVuKCksIGlubmVyVGltZW91dCgpXSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gIGlmIChpc1RpbWVkT3V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lZCBvdXQnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgIGlzVGltZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGdldExpYkRlYnVnZ2VyKCdBc3luYzpydW5XaXRoVGltZW91dCcpKGBFeGVjdXRpb24gdGltZTogJHtkdXJhdGlvbi50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLCB7IGZuIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5uZXJUaW1lb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNUaW1lZE91dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBzbGVlcCh0aW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgY29uc29sZS53YXJuKGBUaW1lZCBvdXQgaW4gJHtkdXJhdGlvbi50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLCB7IGZuIH0pO1xuICAgIGNvbnN0IF9kZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpydW5XaXRoVGltZW91dDp0aW1lb3V0Jyk7XG4gICAgaWYgKF9kZWJ1Z2dlci5lbmFibGVkKSB7XG4gICAgICBfZGVidWdnZXIoXG4gICAgICAgIGBUaGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGJlY2F1c2UgZGVidWdnZXIgJHtfZGVidWdnZXIubmFtZXNwYWNlfSBpcyBlbmFibGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWRldi11dGlscy9ibG9iL21haW4vZG9jcy9kZWJ1Z2dpbmcubWQgZm9yIG1vcmUgaW5mb3JtYXRpb25gXG4gICAgICApO1xuICAgICAgYXdhaXQgaW5uZXJUaW1lb3V0KCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChtaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgd2hlbiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gKlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgd2hlbiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd09uQWJvcnQoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmIChoYW5kbGVBYm9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgaGFuZGxlQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUFib3J0KCk6IGJvb2xlYW4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSBhcyBFcnJvcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgYWx3YXlzIHJlamVjdHMgd2l0aCBhIHRpbWVvdXQgZXJyb3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTxuZXZlcj4ge1xuICBhd2FpdCBzbGVlcCh0aW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCBpbiAke3RpbWVvdXRJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gYW4gYXJyYXkgYnkgY29uc3VtaW5nIGFsbCBpdHMgZWxlbWVudHMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgcHJvZHVjZWQgYnkgdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqIEBwYXJhbSBpdGVyIC0gVGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvQXJyYXk8VD4oaXRlcjogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+KTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgYXJyOiBUW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICBhcnIucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxtQkFBK0I7QUFDL0IsbUJBS087QUFtRFAsZUFBc0IsZ0JBQWdCLFNBQWdEO0FBQ3BGLFFBQU0sb0JBQW9CLElBQUksTUFBTSx3Q0FBMkI7QUFDL0QsTUFBSTtBQUNGLFVBQU0sUUFBUTtBQUFBLEVBQ2hCLFNBQVMsWUFBWTtBQUNuQixzQkFBa0IsUUFBUTtBQUMxQiwwQ0FBb0IsaUJBQWlCO0FBQUEsRUFDdkM7QUFDRjtBQVVBLGVBQXNCLFlBQWUsS0FBVSxXQUF1RjtBQUNwSSxRQUFNLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxTQUFTO0FBQ3RELFNBQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxVQUFVLGlCQUFpQixLQUFLLEtBQUssS0FBSztBQUNsRTtBQVdBLGVBQXNCLGFBQW1CLEtBQVUsVUFBa0Y7QUFDbkksVUFBUSxNQUFNLFNBQVMsS0FBSyxRQUFRLEdBQUcsS0FBSztBQUM5QztBQVdBLGVBQXNCLFNBQWUsS0FBVSxVQUFnRjtBQUM3SCxTQUFPLE1BQU0sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUM7QUFDNUM7QUFTTyxTQUFTLG1CQUEyQyxXQUF5RTtBQUNsSSxTQUFPLElBQUksU0FBcUI7QUFDOUIsc0JBQWtCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztBQUFBLEVBQzVDO0FBQ0Y7QUFVTyxTQUFTLG1CQUFtRCxRQUF1RTtBQUN4SSxTQUFPLElBQUksU0FBZ0MsUUFBUSxRQUFRLEVBQUUsS0FBSyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFD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
230
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmllcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdW50aWwgaXQgcmV0dXJucyB0cnVlIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQoZm46ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj4sIHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucywgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cmV0cnlXaXRoVGltZW91dCcpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IChlcnJvciBhcyBQYXJ0aWFsPFRlcm1pbmF0ZVJldHJ5PikuX190ZXJtaW5hdGVSZXRyeSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKGBSZXRyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7YXR0ZW1wdC50b1N0cmluZygpfSBhdHRlbXB0c2ApO1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIoXG4gICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgZm5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aXRoIGEgdGltZW91dC4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUsIGl0IGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aW1lZCBvdXQuXG4gKlxuICogSWYgYERFQlVHPW9ic2lkaWFuLWRldi11dGlsczpBc3luYzpydW5XaXRoVGltZW91dGAgaXMgc2V0LCB0aGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGFmdGVyIHRoZSB0aW1lb3V0IGFuZCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBydW4gaW5kZWZpbml0ZWx5LlxuICpcbiAqIEB0eXBlUGFyYW0gUiAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSPih0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlciwgZm46ICgpID0+IFByb21pc2FibGU8Uj4pOiBQcm9taXNlPFI+IHtcbiAgbGV0IGlzVGltZWRPdXQgPSB0cnVlO1xuICBsZXQgcmVzdWx0OiBSID0gbnVsbCBhcyBSO1xuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtydW4oKSwgaW5uZXJUaW1lb3V0KCldKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgaWYgKGlzVGltZWRPdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgaXNUaW1lZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0JykoYEV4ZWN1dGlvbiB0aW1lOiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbm5lclRpbWVvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBjb25zb2xlLndhcm4oYFRpbWVkIG91dCBpbiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gICAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0OnRpbWVvdXQnKTtcbiAgICBpZiAoX2RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgIF9kZWJ1Z2dlcihcbiAgICAgICAgYFRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYmVjYXVzZSBkZWJ1Z2dlciAke19kZWJ1Z2dlci5uYW1lc3BhY2V9IGlzIGVuYWJsZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXV0aWxzL2Jsb2IvbWFpbi9kb2NzL2RlYnVnZ2luZy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbmBcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbm5lclRpbWVvdXQoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxheXMgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93T25BYm9ydChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGhhbmRsZUFib3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoKTogYm9vbGVhbiB7XG4gICAgICB0cnkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlIGFzIEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgcGVyaW9kLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7dGltZW91dEluTWlsbGlzZWNvbmRzLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsbUJBQStCO0FBQy9CLG1CQUtPO0FBbURQLGVBQXNCLGdCQUFnQixTQUFnRDtBQUNwRixRQUFNLG9CQUFvQixJQUFJLE1BQU0sd0NBQTJCO0FBQy9ELE1BQUk7QUFDRixVQUFNLFFBQVE7QUFBQSxFQUNoQixTQUFTLFlBQVk7QUFDbkIsc0JBQWtCLFFBQVE7QUFDMUIsMENBQW9CLGlCQUFpQjtBQUFBLEVBQ3ZDO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLEtBQVUsV0FBdUY7QUFDcEksUUFBTSxtQkFBbUIsTUFBTSxTQUFTLEtBQUssU0FBUztBQUN0RCxTQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsVUFBVSxpQkFBaUIsS0FBSyxLQUFLLEtBQUs7QUFDbEU7QUFXQSxlQUFzQixhQUFt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aUJBQWE7QUFDYixVQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMscUNBQWUsc0JBQXNCLEVBQUUsbUJBQW1CLFNBQVMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQztBQUFBLEVBQ3RHO0FBRUEsaUJBQWUsZUFBOEI7QUFDM0MsUUFBSSxDQUFDLFlBQVk7QUFDZjtBQUFBLElBQ0Y7QUFDQSxVQUFNLE1BQU0scUJBQXFCO0FBRWpDLFFBQUksQ0FBQyxZQUFZO0FBQ2Y7QUFBQSxJQUNGO0FBQ0EsVUFBTSxXQUFXLFlBQVksSUFBSSxJQUFJO0FBQ3JDLFlBQVEsS0FBSyxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO0FBQ3ZFLFVBQU0sZ0JBQVksNkJBQWUsOEJBQThCO0FBQy9ELFFBQUksVUFBVSxTQUFTO0FBQ3JCO0FBQUEsUUFDRSxvREFBb0QsVUFBVSxTQUFTO0FBQUEsTUFDekU7QUFDQSxZQUFNLGFBQWE7QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLE1BQU0sY0FBcUM7QUFDL0QsUUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLGVBQVcsU0FBUyxZQUFZO0FBQUEsRUFDbEMsQ0FBQztBQUNIO0FBUU8sU0FBUyxhQUFhLGFBQXlDO0FBQ3BFLFNBQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxXQUFXO0FBQ3ZDLFFBQUksWUFBWSxHQUFHO0FBQ2pCO0FBQUEsSUFDRjtBQUNBLGdCQUFZLGlCQUFpQixTQUFTLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUVqRSxhQUFTLGNBQXVCO0FBQzlCLFVBQUk7QUFDRixvQkFBWSxlQUFlO0FBQzNCLGVBQU87QUFBQSxNQUNULFNBQVMsR0FBRztBQUNWLGVBQU8sQ0FBVTtBQUNqQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFBLGVBQXNCLFFBQVEsdUJBQStDO0FBQzNFLFFBQU0sTUFBTSxxQkFBcUI7QUFDakMsUUFBTSxJQUFJLE1BQU0sZ0JBQWdCLHNCQUFzQixTQUFTLENBQUMsZUFBZTtBQUNqRjtBQVNBLGVBQXNCLFFBQVcsTUFBOEM7QUFDN0UsUUFBTSxNQUFXLENBQUM7QUFDbEIsbUJBQWlCLFFBQVEsTUFBTTtBQUM3QixRQUFJLEtBQUssSUFBSTtBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -121,6 +121,12 @@ export declare function invokeAsyncSafelyAfterDelay(asyncFn: () => Promisable<un
121
121
  * @returns An error that should terminate retry logic.
122
122
  */
123
123
  export declare function marksAsTerminateRetry<TError extends Error>(error: TError): TerminateRetry & TError;
124
+ /**
125
+ * Gets the next request animation frame.
126
+ *
127
+ * @returns A promise that resolves when the next request animation frame is available.
128
+ */
129
+ export declare function requestAnimationFrameAsync(): Promise<void>;
124
130
  /**
125
131
  * Retries the provided function until it returns true or the timeout is reached.
126
132
  *
@@ -30,7 +30,7 @@ __export(Library_exports, {
30
30
  LIBRARY_VERSION: () => LIBRARY_VERSION
31
31
  });
32
32
  module.exports = __toCommonJS(Library_exports);
33
- const LIBRARY_VERSION = "26.13.0";
33
+ const LIBRARY_VERSION = "26.15.0";
34
34
  const LIBRARY_NAME = "obsidian-dev-utils";
35
35
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACnCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
36
36
  // Annotate the CommonJS export names for ESM import in node:
@@ -29,42 +29,67 @@ __export(Loop_exports, {
29
29
  });
30
30
  module.exports = __toCommonJS(Loop_exports);
31
31
  var import_obsidian = require('obsidian');
32
+ var import_Async = require('../Async.cjs');
32
33
  var import_Debug = require('../Debug.cjs');
33
34
  var import_Error = require('../Error.cjs');
35
+ var import_Function = require('../Function.cjs');
34
36
  async function loop(options) {
35
- const items = options.items;
37
+ const DEFAULT_OPTIONS = {
38
+ abortSignal: new AbortSignal(),
39
+ buildNoticeMessage() {
40
+ throw new Error("buildNoticeMessage is required");
41
+ },
42
+ items: [],
43
+ // eslint-disable-next-line no-magic-numbers
44
+ noticeMinTimeoutInMilliseconds: 2e3,
45
+ processItem: import_Function.noop,
46
+ progressBarTitle: "",
47
+ shouldContinueOnError: true,
48
+ shouldShowProgressBar: true,
49
+ // eslint-disable-next-line no-magic-numbers
50
+ uiUpdateThresholdInMilliseconds: 100
51
+ };
52
+ const fullOptions = {
53
+ ...DEFAULT_OPTIONS,
54
+ ...options
55
+ };
56
+ const items = fullOptions.items;
36
57
  let iterationCount = 0;
37
58
  const notice = new import_obsidian.Notice("", 0);
38
- const DEFAULT_NOTICE_MIN_TIMEOUT_IN_MILLISECONDS = 2e3;
39
- const noticeMinTimeoutPromise = sleep(options.noticeMinTimeoutInMilliseconds ?? DEFAULT_NOTICE_MIN_TIMEOUT_IN_MILLISECONDS);
59
+ const noticeMinTimeoutPromise = sleep(fullOptions.noticeMinTimeoutInMilliseconds);
40
60
  const progressBarEl = createEl("progress");
41
61
  progressBarEl.max = items.length;
42
- if (options.shouldShowProgressBar) {
62
+ if (fullOptions.shouldShowProgressBar) {
43
63
  const fragment = createFragment();
44
- if (options.progressBarTitle) {
45
- fragment.appendText(options.progressBarTitle);
64
+ if (fullOptions.progressBarTitle) {
65
+ fragment.appendText(fullOptions.progressBarTitle);
46
66
  }
47
67
  fragment.appendChild(progressBarEl);
48
68
  notice.setMessage(fragment);
49
69
  }
50
70
  for (const item of items) {
51
- if (options.abortSignal?.aborted) {
71
+ if (fullOptions.abortSignal.aborted) {
52
72
  notice.hide();
53
73
  return;
54
74
  }
55
75
  iterationCount++;
56
76
  const iterationStr = `# ${iterationCount.toString()} / ${items.length.toString()}`;
57
- const message = options.buildNoticeMessage(item, iterationStr);
58
- if (!options.shouldShowProgressBar) {
77
+ const message = fullOptions.buildNoticeMessage(item, iterationStr);
78
+ if (!fullOptions.shouldShowProgressBar) {
59
79
  notice.setMessage(message);
60
80
  }
61
81
  (0, import_Debug.getLibDebugger)("Loop")(message);
82
+ let lastUIUpdateTimestamp = performance.now();
62
83
  const asyncErrorWrapper = new Error(import_Error.ASYNC_ERROR_WRAPPER_MESSAGE);
63
84
  try {
64
- await options.processItem(item);
85
+ if (performance.now() - lastUIUpdateTimestamp > fullOptions.uiUpdateThresholdInMilliseconds) {
86
+ await (0, import_Async.requestAnimationFrameAsync)();
87
+ lastUIUpdateTimestamp = performance.now();
88
+ }
89
+ await fullOptions.processItem(item);
65
90
  } catch (error) {
66
91
  console.error("Error processing item", item);
67
- if (!options.shouldContinueOnError) {
92
+ if (!fullOptions.shouldContinueOnError) {
68
93
  notice.hide();
69
94
  throw error;
70
95
  }
@@ -80,4 +105,4 @@ async function loop(options) {
80
105
  0 && (module.exports = {
81
106
  loop
82
107
  });
83
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGxvb3BpbmcgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uL0RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX0VSUk9SX1dSQVBQRVJfTUVTU0FHRSxcbiAgZW1pdEFzeW5jRXJyb3JFdmVudFxufSBmcm9tICcuLi9FcnJvci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGxvb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgbG9vcC5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gYnVpbGQgdGhlIG5vdGljZSBtZXNzYWdlIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBidWlsZE5vdGljZU1lc3NhZ2UoaXRlbTogVCwgaXRlcmF0aW9uU3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdG8gbG9vcCBvdmVyLlxuICAgKi9cbiAgaXRlbXM6IFRbXTtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHRpbWVvdXQgZm9yIHRoZSBub3RpY2UuXG4gICAqL1xuICBub3RpY2VNaW5UaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyBlYWNoIGl0ZW0uXG4gICAqL1xuICBwcm9jZXNzSXRlbShpdGVtOiBUKTogUHJvbWlzYWJsZTx2b2lkPjtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgcHJvZ3Jlc3NCYXJUaXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udGludWUgdGhlIGxvb3Agb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRDb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGEgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBMb29wcyBvdmVyIGEgbGlzdCBvZiBpdGVtcyBhbmQgcHJvY2Vzc2VzIGVhY2ggaXRlbS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbG9vcC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvb3A8VD4ob3B0aW9uczogTG9vcE9wdGlvbnM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBvcHRpb25zLml0ZW1zO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICBjb25zdCBub3RpY2UgPSBuZXcgTm90aWNlKCcnLCAwKTtcbiAgY29uc3QgREVGQVVMVF9OT1RJQ0VfTUlOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbiAgY29uc3Qgbm90aWNlTWluVGltZW91dFByb21pc2UgPSBzbGVlcChvcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX05PVElDRV9NSU5fVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpO1xuICBjb25zdCBwcm9ncmVzc0JhckVsID0gY3JlYXRlRWwoJ3Byb2dyZXNzJyk7XG4gIHByb2dyZXNzQmFyRWwubWF4ID0gaXRlbXMubGVuZ3RoO1xuICBpZiAob3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgaWYgKG9wdGlvbnMucHJvZ3Jlc3NCYXJUaXRsZSkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dChvcHRpb25zLnByb2dyZXNzQmFyVGl0bGUpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChwcm9ncmVzc0JhckVsKTtcbiAgICBub3RpY2Uuc2V0TWVzc2FnZShmcmFnbWVudCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIG5vdGljZS5oaWRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gICAgY29uc3QgaXRlcmF0aW9uU3RyID0gYCMgJHtpdGVyYXRpb25Db3VudC50b1N0cmluZygpfSAvICR7aXRlbXMubGVuZ3RoLnRvU3RyaW5nKCl9YDtcbiAgICBjb25zdCBtZXNzYWdlID0gb3B0aW9ucy5idWlsZE5vdGljZU1lc3NhZ2UoaXRlbSwgaXRlcmF0aW9uU3RyKTtcbiAgICBpZiAoIW9wdGlvbnMuc2hvdWxkU2hvd1Byb2dyZXNzQmFyKSB7XG4gICAgICBub3RpY2Uuc2V0TWVzc2FnZShtZXNzYWdlKTtcbiAgICB9XG4gICAgZ2V0TGliRGVidWdnZXIoJ0xvb3AnKShtZXNzYWdlKTtcblxuICAgIGNvbnN0IGFzeW5jRXJyb3JXcmFwcGVyID0gbmV3IEVycm9yKEFTWU5DX0VSUk9SX1dSQVBQRVJfTUVTU0FHRSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG9wdGlvbnMucHJvY2Vzc0l0ZW0oaXRlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgaXRlbScsIGl0ZW0pO1xuICAgICAgaWYgKCFvcHRpb25zLnNob3VsZENvbnRpbnVlT25FcnJvcikge1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gZXJyb3I7XG4gICAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgICB9XG4gICAgcHJvZ3Jlc3NCYXJFbC52YWx1ZSsrO1xuICB9XG4gIGF3YWl0IG5vdGljZU1pblRpbWVvdXRQcm9taXNlO1xuICBub3RpY2UuaGlkZSgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxzQkFBdUI7QUFFdkIsbUJBQStCO0FBQy9CLG1CQUdPO0FBNkNQLGVBQXNCLEtBQVEsU0FBd0M7QUFDcEUsUUFBTSxRQUFRLFFBQVE7QUFDdEIsTUFBSSxpQkFBaUI7QUFDckIsUUFBTSxTQUFTLElBQUksdUJBQU8sSUFBSSxDQUFDO0FBQy9CLFFBQU0sNkNBQTZDO0FBQ25ELFFBQU0sMEJBQTBCLE1BQU0sUUFBUSxrQ0FBa0MsMENBQTBDO0FBQzFILFFBQU0sZ0JBQWdCLFNBQVMsVUFBVTtBQUN6QyxnQkFBYyxNQUFNLE1BQU07QUFDMUIsTUFBSSxRQUFRLHVCQUF1QjtBQUNqQyxVQUFNLFdBQVcsZUFBZTtBQUNoQyxRQUFJLFFBQVEsa0JBQWtCO0FBQzVCLGVBQVMsV0FBVyxRQUFRLGdCQUFnQjtBQUFBLElBQzlDO0FBQ0EsYUFBUyxZQUFZLGFBQWE7QUFDbEMsV0FBTyxXQUFXLFFBQVE7QUFBQSxFQUM1QjtBQUNBLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksUUFBUSxhQUFhLFNBQVM7QUFDaEMsYUFBTyxLQUFLO0FBQ1o7QUFBQSxJQUNGO0FBQ0E7QUFDQSxVQUFNLGVBQWUsS0FBSyxlQUFlLFNBQVMsQ0FBQyxNQUFNLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDaEYsVUFBTSxVQUFVLFFBQVEsbUJBQW1CLE1BQU0sWUFBWTtBQUM3RCxRQUFJLENBQUMsUUFBUSx1QkFBdUI7QUFDbEMsYUFBTyxXQUFXLE9BQU87QUFBQSxJQUMzQjtBQUNBLHFDQUFlLE1BQU0sRUFBRSxPQUFPO0FBRTlCLFVBQU0sb0JBQW9CLElBQUksTUFBTSx3Q0FBMkI7QUFDL0QsUUFBSTtBQUNGLFlBQU0sUUFBUSxZQUFZLElBQUk7QUFBQSxJQUNoQyxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0seUJBQXlCLElBQUk7QUFDM0MsVUFBSSxDQUFDLFFBQVEsdUJBQXVCO0FBQ2xDLGVBQU8sS0FBSztBQUNaLGNBQU07QUFBQSxNQUNSO0FBQ0Esd0JBQWtCLFFBQVE7QUFDMUIsNENBQW9CLGlCQUFpQjtBQUFBLElBQ3ZDO0FBQ0Esa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFFBQU07QUFDTixTQUFPLEtBQUs7QUFDZDsiLAogICJuYW1lcyI6IFtdCn0K
108
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGxvb3BpbmcgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYyB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50XG59IGZyb20gJy4uL0Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9GdW5jdGlvbi50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGxvb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgbG9vcC5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gYnVpbGQgdGhlIG5vdGljZSBtZXNzYWdlIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBidWlsZE5vdGljZU1lc3NhZ2UoaXRlbTogVCwgaXRlcmF0aW9uU3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdG8gbG9vcCBvdmVyLlxuICAgKi9cbiAgaXRlbXM6IFRbXTtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHRpbWVvdXQgZm9yIHRoZSBub3RpY2UuXG4gICAqL1xuICBub3RpY2VNaW5UaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyBlYWNoIGl0ZW0uXG4gICAqL1xuICBwcm9jZXNzSXRlbShpdGVtOiBUKTogUHJvbWlzYWJsZTx2b2lkPjtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgcHJvZ3Jlc3NCYXJUaXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udGludWUgdGhlIGxvb3Agb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRDb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGEgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSB0aHJlc2hvbGQgZm9yIHRoZSBVSSB1cGRhdGUuXG4gICAqL1xuICB1aVVwZGF0ZVRocmVzaG9sZEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvb3BzIG92ZXIgYSBsaXN0IG9mIGl0ZW1zIGFuZCBwcm9jZXNzZXMgZWFjaCBpdGVtLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb29wLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9vcDxUPihvcHRpb25zOiBMb29wT3B0aW9uczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPExvb3BPcHRpb25zPFQ+PiA9IHtcbiAgICBhYm9ydFNpZ25hbDogbmV3IEFib3J0U2lnbmFsKCksXG4gICAgYnVpbGROb3RpY2VNZXNzYWdlKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZE5vdGljZU1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICB9LFxuICAgIGl0ZW1zOiBbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIG5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kczogMjAwMCxcbiAgICBwcm9jZXNzSXRlbTogbm9vcCxcbiAgICBwcm9ncmVzc0JhclRpdGxlOiAnJyxcbiAgICBzaG91bGRDb250aW51ZU9uRXJyb3I6IHRydWUsXG4gICAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyOiB0cnVlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdWlVcGRhdGVUaHJlc2hvbGRJbk1pbGxpc2Vjb25kczogMTAwXG4gIH07XG5cbiAgY29uc3QgZnVsbE9wdGlvbnM6IFJlcXVpcmVkPExvb3BPcHRpb25zPFQ+PiA9IHtcbiAgICAuLi5ERUZBVUxUX09QVElPTlMsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGNvbnN0IGl0ZW1zID0gZnVsbE9wdGlvbnMuaXRlbXM7XG4gIGxldCBpdGVyYXRpb25Db3VudCA9IDA7XG4gIGNvbnN0IG5vdGljZSA9IG5ldyBOb3RpY2UoJycsIDApO1xuICBjb25zdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZSA9IHNsZWVwKGZ1bGxPcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIGNvbnN0IHByb2dyZXNzQmFyRWwgPSBjcmVhdGVFbCgncHJvZ3Jlc3MnKTtcbiAgcHJvZ3Jlc3NCYXJFbC5tYXggPSBpdGVtcy5sZW5ndGg7XG4gIGlmIChmdWxsT3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgaWYgKGZ1bGxPcHRpb25zLnByb2dyZXNzQmFyVGl0bGUpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQoZnVsbE9wdGlvbnMucHJvZ3Jlc3NCYXJUaXRsZSk7XG4gICAgfVxuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHByb2dyZXNzQmFyRWwpO1xuICAgIG5vdGljZS5zZXRNZXNzYWdlKGZyYWdtZW50KTtcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlcmF0aW9uQ291bnQrKztcbiAgICBjb25zdCBpdGVyYXRpb25TdHIgPSBgIyAke2l0ZXJhdGlvbkNvdW50LnRvU3RyaW5nKCl9IC8gJHtpdGVtcy5sZW5ndGgudG9TdHJpbmcoKX1gO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmdWxsT3B0aW9ucy5idWlsZE5vdGljZU1lc3NhZ2UoaXRlbSwgaXRlcmF0aW9uU3RyKTtcbiAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFNob3dQcm9ncmVzc0Jhcikge1xuICAgICAgbm90aWNlLnNldE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICAgIGdldExpYkRlYnVnZ2VyKCdMb29wJykobWVzc2FnZSk7XG5cbiAgICBsZXQgbGFzdFVJVXBkYXRlVGltZXN0YW1wID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSBsYXN0VUlVcGRhdGVUaW1lc3RhbXAgPiBmdWxsT3B0aW9ucy51aVVwZGF0ZVRocmVzaG9sZEluTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIGF3YWl0IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jKCk7XG4gICAgICAgIGxhc3RVSVVwZGF0ZVRpbWVzdGFtcCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnVsbE9wdGlvbnMucHJvY2Vzc0l0ZW0oaXRlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgaXRlbScsIGl0ZW0pO1xuICAgICAgaWYgKCFmdWxsT3B0aW9ucy5zaG91bGRDb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBhc3luY0Vycm9yV3JhcHBlci5jYXVzZSA9IGVycm9yO1xuICAgICAgZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yV3JhcHBlcik7XG4gICAgfVxuICAgIHByb2dyZXNzQmFyRWwudmFsdWUrKztcbiAgfVxuICBhd2FpdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZTtcbiAgbm90aWNlLmhpZGUoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsc0JBQXVCO0FBRXZCLG1CQUEyQztBQUMzQyxtQkFBK0I7QUFDL0IsbUJBR087QUFDUCxzQkFBcUI7QUFpRHJCLGVBQXNCLEtBQVEsU0FBd0M7QUFDcEUsUUFBTSxrQkFBNEM7QUFBQSxJQUNoRCxhQUFhLElBQUksWUFBWTtBQUFBLElBQzdCLHFCQUFxQjtBQUNuQixZQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFBQSxJQUNsRDtBQUFBLElBQ0EsT0FBTyxDQUFDO0FBQUE7QUFBQSxJQUVSLGdDQUFnQztBQUFBLElBQ2hDLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCLHVCQUF1QjtBQUFBLElBQ3ZCLHVCQUF1QjtBQUFBO0FBQUEsSUFFdkIsaUNBQWlDO0FBQUEsRUFDbkM7QUFFQSxRQUFNLGNBQXdDO0FBQUEsSUFDNUMsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLEVBQ0w7QUFFQSxRQUFNLFFBQVEsWUFBWTtBQUMxQixNQUFJLGlCQUFpQjtBQUNyQixRQUFNLFNBQVMsSUFBSSx1QkFBTyxJQUFJLENBQUM7QUFDL0IsUUFBTSwwQkFBMEIsTUFBTSxZQUFZLDhCQUE4QjtBQUNoRixRQUFNLGdCQUFnQixTQUFTLFVBQVU7QUFDekMsZ0JBQWMsTUFBTSxNQUFNO0FBQzFCLE1BQUksWUFBWSx1QkFBdUI7QUFDckMsVUFBTSxXQUFXLGVBQWU7QUFDaEMsUUFBSSxZQUFZLGtCQUFrQjtBQUNoQyxlQUFTLFdBQVcsWUFBWSxnQkFBZ0I7QUFBQSxJQUNsRDtBQUNBLGFBQVMsWUFBWSxhQUFhO0FBQ2xDLFdBQU8sV0FBVyxRQUFRO0FBQUEsRUFDNUI7QUFDQSxhQUFXLFFBQVEsT0FBTztBQUN4QixRQUFJLFlBQVksWUFBWSxTQUFTO0FBQ25DLGFBQU8sS0FBSztBQUNaO0FBQUEsSUFDRjtBQUNBO0FBQ0EsVUFBTSxlQUFlLEtBQUssZUFBZSxTQUFTLENBQUMsTUFBTSxNQUFNLE9BQU8sU0FBUyxDQUFDO0FBQ2hGLFVBQU0sVUFBVSxZQUFZLG1CQUFtQixNQUFNLFlBQVk7QUFDakUsUUFBSSxDQUFDLFlBQVksdUJBQXVCO0FBQ3RDLGFBQU8sV0FBVyxPQUFPO0FBQUEsSUFDM0I7QUFDQSxxQ0FBZSxNQUFNLEVBQUUsT0FBTztBQUU5QixRQUFJLHdCQUF3QixZQUFZLElBQUk7QUFFNUMsVUFBTSxvQkFBb0IsSUFBSSxNQUFNLHdDQUEyQjtBQUMvRCxRQUFJO0FBQ0YsVUFBSSxZQUFZLElBQUksSUFBSSx3QkFBd0IsWUFBWSxpQ0FBaUM7QUFDM0Ysa0JBQU0seUNBQTJCO0FBQ2pDLGdDQUF3QixZQUFZLElBQUk7QUFBQSxNQUMxQztBQUNBLFlBQU0sWUFBWSxZQUFZLElBQUk7QUFBQSxJQUNwQyxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0seUJBQXlCLElBQUk7QUFDM0MsVUFBSSxDQUFDLFlBQVksdUJBQXVCO0FBQ3RDLGVBQU8sS0FBSztBQUNaLGNBQU07QUFBQSxNQUNSO0FBQ0Esd0JBQWtCLFFBQVE7QUFDMUIsNENBQW9CLGlCQUFpQjtBQUFBLElBQ3ZDO0FBQ0Esa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFFBQU07QUFDTixTQUFPLEtBQUs7QUFDZDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -40,6 +40,10 @@ export interface LoopOptions<T> {
40
40
  * Whether to show a progress bar.
41
41
  */
42
42
  shouldShowProgressBar?: boolean;
43
+ /**
44
+ * The threshold for the UI update.
45
+ */
46
+ uiUpdateThresholdInMilliseconds?: number;
43
47
  }
44
48
  /**
45
49
  * Loops over a list of items and processes each item.
@@ -121,6 +121,12 @@ export declare function invokeAsyncSafelyAfterDelay(asyncFn: () => Promisable<un
121
121
  * @returns An error that should terminate retry logic.
122
122
  */
123
123
  export declare function marksAsTerminateRetry<TError extends Error>(error: TError): TerminateRetry & TError;
124
+ /**
125
+ * Gets the next request animation frame.
126
+ *
127
+ * @returns A promise that resolves when the next request animation frame is available.
128
+ */
129
+ export declare function requestAnimationFrameAsync(): Promise<void>;
124
130
  /**
125
131
  * Retries the provided function until it returns true or the timeout is reached.
126
132
  *
@@ -55,6 +55,13 @@ function invokeAsyncSafelyAfterDelay(asyncFn, delayInMilliseconds = 0) {
55
55
  function marksAsTerminateRetry(error) {
56
56
  return Object.assign(error, { __terminateRetry: true });
57
57
  }
58
+ async function requestAnimationFrameAsync() {
59
+ return new Promise((resolve) => {
60
+ requestAnimationFrame(() => {
61
+ resolve();
62
+ });
63
+ });
64
+ }
58
65
  async function retryWithTimeout(fn, retryOptions, stackTrace) {
59
66
  const retryWithTimeoutDebugger = getLibDebugger("Async:retryWithTimeout");
60
67
  stackTrace ??= getStackTrace(1);
@@ -177,6 +184,7 @@ export {
177
184
  invokeAsyncSafely,
178
185
  invokeAsyncSafelyAfterDelay,
179
186
  marksAsTerminateRetry,
187
+ requestAnimationFrameAsync,
180
188
  retryWithTimeout,
181
189
  runWithTimeout,
182
190
  sleep,
@@ -184,4 +192,4 @@ export {
184
192
  timeout,
185
193
  toArray
186
194
  };
187
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIFJldHJpZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgdHJ1ZSBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byByZXRyeS5cbiAqIEBwYXJhbSByZXRyeU9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGNvbmZpZ3VyZSB0aGUgcmV0cnkgYmVoYXZpb3IuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgcmVqZWN0cyB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeVdpdGhUaW1lb3V0KGZuOiAoKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+LCByZXRyeU9wdGlvbnM/OiBSZXRyeU9wdGlvbnMsIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJldHJ5V2l0aFRpbWVvdXQnKTtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzOiAxMDAsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiBmYWxzZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogNTAwMFxuICB9O1xuICBjb25zdCBmdWxsT3B0aW9ucyA9IHsgLi4uREVGQVVMVF9SRVRSWV9PUFRJT05TLCAuLi5yZXRyeU9wdGlvbnMgfTtcbiAgYXdhaXQgcnVuV2l0aFRpbWVvdXQoZnVsbE9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGF0dGVtcHQgPSAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgYXR0ZW1wdCsrO1xuICAgICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlzU3VjY2VzcyA9IGF3YWl0IGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCAoZXJyb3IgYXMgUGFydGlhbDxUZXJtaW5hdGVSZXRyeT4pLl9fdGVybWluYXRlUmV0cnkpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBwcmludEVycm9yKGVycm9yKTtcbiAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMSkge1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlcihgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke2F0dGVtcHQudG9TdHJpbmcoKX0gYXR0ZW1wdHNgKTtcbiAgICAgICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKFxuICAgICAgICBgUmV0cnkgYXR0ZW1wdCAke2F0dGVtcHQudG9TdHJpbmcoKX0gY29tcGxldGVkIHVuc3VjY2Vzc2Z1bGx5LiBUcnlpbmcgYWdhaW4gaW4gJHtmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMudG9TdHJpbmcoKX0gbWlsbGlzZWNvbmRzYCxcbiAgICAgICAge1xuICAgICAgICAgIGZuXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIucHJpbnRTdGFja1RyYWNlKHN0YWNrVHJhY2UpO1xuICAgICAgYXdhaXQgc2xlZXAoZnVsbE9wdGlvbnMucmV0cnlEZWxheUluTWlsbGlzZWNvbmRzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIElmIGBERUJVRz1vYnNpZGlhbi1kZXYtdXRpbHM6QXN5bmM6cnVuV2l0aFRpbWVvdXRgIGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBhZnRlciB0aGUgdGltZW91dCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcnVuIGluZGVmaW5pdGVseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IGZyb20gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8Uj4odGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGZuOiAoKSA9PiBQcm9taXNhYmxlPFI+KTogUHJvbWlzZTxSPiB7XG4gIGxldCBpc1RpbWVkT3V0ID0gdHJ1ZTtcbiAgbGV0IHJlc3VsdDogUiA9IG51bGwgYXMgUjtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGF3YWl0IFByb21pc2UucmFjZShbcnVuKCksIGlubmVyVGltZW91dCgpXSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gIGlmIChpc1RpbWVkT3V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lZCBvdXQnKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXN1bHQgPSBhd2FpdCBmbigpO1xuICAgIGlzVGltZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGdldExpYkRlYnVnZ2VyKCdBc3luYzpydW5XaXRoVGltZW91dCcpKGBFeGVjdXRpb24gdGltZTogJHtkdXJhdGlvbi50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLCB7IGZuIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5uZXJUaW1lb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghaXNUaW1lZE91dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBzbGVlcCh0aW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgY29uc29sZS53YXJuKGBUaW1lZCBvdXQgaW4gJHtkdXJhdGlvbi50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLCB7IGZuIH0pO1xuICAgIGNvbnN0IF9kZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpydW5XaXRoVGltZW91dDp0aW1lb3V0Jyk7XG4gICAgaWYgKF9kZWJ1Z2dlci5lbmFibGVkKSB7XG4gICAgICBfZGVidWdnZXIoXG4gICAgICAgIGBUaGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGJlY2F1c2UgZGVidWdnZXIgJHtfZGVidWdnZXIubmFtZXNwYWNlfSBpcyBlbmFibGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21uYW91bW92L29ic2lkaWFuLWRldi11dGlscy9ibG9iL21haW4vZG9jcy9kZWJ1Z2dpbmcubWQgZm9yIG1vcmUgaW5mb3JtYXRpb25gXG4gICAgICApO1xuICAgICAgYXdhaXQgaW5uZXJUaW1lb3V0KCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChtaWxsaXNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbWlsbGlzZWNvbmRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgd2hlbiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gKlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgd2hlbiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd09uQWJvcnQoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmIChoYW5kbGVBYm9ydCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgaGFuZGxlQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUFib3J0KCk6IGJvb2xlYW4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSBhcyBFcnJvcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgYWx3YXlzIHJlamVjdHMgd2l0aCBhIHRpbWVvdXQgZXJyb3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KHRpbWVvdXRJbk1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTxuZXZlcj4ge1xuICBhd2FpdCBzbGVlcCh0aW1lb3V0SW5NaWxsaXNlY29uZHMpO1xuICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCBpbiAke3RpbWVvdXRJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gYW4gYXJyYXkgYnkgY29uc3VtaW5nIGFsbCBpdHMgZWxlbWVudHMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgcHJvZHVjZWQgYnkgdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqIEBwYXJhbSBpdGVyIC0gVGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvQXJyYXk8VD4oaXRlcjogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+KTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgYXJyOiBUW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICBhcnIucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVFBLFNBQVMsc0JBQXNCO0FBQy9CO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFtRFAsZUFBc0IsZ0JBQWdCLFNBQWdEO0FBQ3BGLFFBQU0sb0JBQW9CLElBQUksTUFBTSwyQkFBMkI7QUFDL0QsTUFBSTtBQUNGLFVBQU0sUUFBUTtBQUFBLEVBQ2hCLFNBQVMsWUFBWTtBQUNuQixzQkFBa0IsUUFBUTtBQUMxQix3QkFBb0IsaUJBQWlCO0FBQUEsRUFDdkM7QUFDRjtBQVVBLGVBQXNCLFlBQWUsS0FBVSxXQUF1RjtBQUNwSSxRQUFNLG1CQUFtQixNQUFNLFNBQVMsS0FBSyxTQUFTO0FBQ3RELFNBQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxVQUFVLGlCQUFpQixLQUFLLEtBQUssS0FBSztBQUNsRTtBQVdBLGVBQXNCLGFBQW1CLEtBQVUsVUFBa0Y7QUFDbkksVUFBUSxNQUFNLFNBQVMsS0FBSyxRQUFRLEdBQUcsS0FBSztBQUM5QztBQVdBLGVBQXNCLFNBQWUsS0FBVSxVQUFnRjtBQUM3SCxTQUFPLE1BQU0sUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLENBQUM7QUFDNUM7QUFTTyxTQUFTLG1CQUEyQyxXQUF5RTtBQUNsSSxTQUFPLElBQUksU0FBcUI7QUFDOUIsc0JBQWtCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztBQUFBLEVBQzVDO0FBQ0Y7QUFVTyxTQUFTLG1CQUFtRCxRQUF1RTtBQUN4SSxTQUFPLElBQUksU0FBZ0MsUUFBUSxRQUFRLEVBQUUsS0FBSyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDekY7QUFtQkEsZUFBc0IsWUFBZSxTQUFxQixlQUE4QjtBQUN0RixNQUFJO0FBQ0YsV0FBTyxNQUFNO0FBQUEsRUFDZixR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
195
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL0FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yXG59IGZyb20gJy4vRXJyb3IudHMnO1xuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJldHJ5IGF0dGVtcHRzLlxuICAgKi9cbiAgcmV0cnlEZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHJ5IHRoZSBmdW5jdGlvbiBvbiBlcnJvci5cbiAgICovXG4gIHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXRyeWluZy5cbiAgICovXG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcmtlciBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhbiBlcnJvciBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmF0ZVJldHJ5IHtcbiAgLyoqXG4gICAqIEEgbWFya2VyIHByb3BlcnR5IHRvIGluZGljYXRlIHRoYXQgYW4gZXJyb3Igc2hvdWxkIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAgICovXG4gIF9fdGVybWluYXRlUmV0cnk6IHRydWU7XG59XG5cbi8qKlxuICogQWRkcyBhbiBlcnJvciBoYW5kbGVyIHRvIGEge0BsaW5rIFByb21pc2V9IHRoYXQgY2F0Y2hlcyBhbnkgZXJyb3JzIGFuZCBlbWl0cyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRm4oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gYXN5bmNFcnJvcjtcbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHByZWRpY2F0ZVJlc3VsdHMgPSBhd2FpdCBhc3luY01hcChhcnIsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBhcnIuZmlsdGVyKChfLCBpbmRleCkgPT4gcHJlZGljYXRlUmVzdWx0c1tpbmRleF0gPz8gZmFsc2UpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcnIubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuYyAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj4pOiAoLi4uYXJnczogQXJncykgPT4gdm9pZCB7XG4gIHJldHVybiAoLi4uYXJnczogQXJncyk6IHZvaWQgPT4ge1xuICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IGFzeW5jRnVuYyguLi5hcmdzKSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0ZuIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJncyBleHRlbmRzIHVua25vd25bXSwgUmVzdWx0PihzeW5jRm46ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQpOiAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gc3luY0ZuKC4uLmFyZ3MpKTtcbn1cblxuLyoqXG4gKiBJZ25vcmVzIGFuIGVycm9yIHRoYXQgaXMgdGhyb3duIGJ5IGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIEFsd2F5cyBgdW5kZWZpbmVkYC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBmYWlscy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlnbm9yZUVycm9yKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4sIGZhbGxiYWNrVmFsdWU/OiB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gIHZvaWQgYWRkRXJyb3JIYW5kbGVyKGFzeW5jRm4pO1xufVxuXG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFmdGVyIGEgZGVsYXkuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSBkZWxheUluTWlsbGlzZWNvbmRzIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShhc3luY0ZuOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBkZWxheUluTWlsbGlzZWNvbmRzID0gMCk6IHZvaWQge1xuICBzZXRUaW1lb3V0KGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiBhd2FpdCBhc3luY0ZuKCkpLCBkZWxheUluTWlsbGlzZWNvbmRzKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICogQHJldHVybnMgQW4gZXJyb3IgdGhhdCBzaG91bGQgdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5PFRFcnJvciBleHRlbmRzIEVycm9yPihlcnJvcjogVEVycm9yKTogVGVybWluYXRlUmV0cnkgJiBURXJyb3Ige1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlcnJvciwgeyBfX3Rlcm1pbmF0ZVJldHJ5OiB0cnVlIH0pIGFzIFRlcm1pbmF0ZVJldHJ5ICYgVEVycm9yO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUuXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmllcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gdW50aWwgaXQgcmV0dXJucyB0cnVlIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIHJldHJ5LlxuICogQHBhcmFtIHJldHJ5T3B0aW9ucyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29uZmlndXJlIHRoZSByZXRyeSBiZWhhdmlvci5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQoZm46ICgpID0+IFByb21pc2FibGU8Ym9vbGVhbj4sIHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucywgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cmV0cnlXaXRoVGltZW91dCcpO1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnJldHJ5T3B0aW9ucyB9O1xuICBhd2FpdCBydW5XaXRoVGltZW91dChmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHMsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBhdHRlbXB0Kys7XG4gICAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IChlcnJvciBhcyBQYXJ0aWFsPFRlcm1pbmF0ZVJldHJ5PikuX190ZXJtaW5hdGVSZXRyeSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHByaW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKGF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyKGBSZXRyeSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFmdGVyICR7YXR0ZW1wdC50b1N0cmluZygpfSBhdHRlbXB0c2ApO1xuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIoXG4gICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7YXR0ZW1wdC50b1N0cmluZygpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke2Z1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcy50b1N0cmluZygpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICB7XG4gICAgICAgICAgZm5cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlci5wcmludFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7XG4gICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aXRoIGEgdGltZW91dC4gSWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUsIGl0IGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aW1lZCBvdXQuXG4gKlxuICogSWYgYERFQlVHPW9ic2lkaWFuLWRldi11dGlsczpBc3luYzpydW5XaXRoVGltZW91dGAgaXMgc2V0LCB0aGUgZXhlY3V0aW9uIGlzIG5vdCB0ZXJtaW5hdGVkIGFmdGVyIHRoZSB0aW1lb3V0IGFuZCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBydW4gaW5kZWZpbml0ZWx5LlxuICpcbiAqIEB0eXBlUGFyYW0gUiAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSPih0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlciwgZm46ICgpID0+IFByb21pc2FibGU8Uj4pOiBQcm9taXNlPFI+IHtcbiAgbGV0IGlzVGltZWRPdXQgPSB0cnVlO1xuICBsZXQgcmVzdWx0OiBSID0gbnVsbCBhcyBSO1xuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtydW4oKSwgaW5uZXJUaW1lb3V0KCldKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgaWYgKGlzVGltZWRPdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgaXNUaW1lZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG4gICAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0JykoYEV4ZWN1dGlvbiB0aW1lOiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbm5lclRpbWVvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFpc1RpbWVkT3V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICBpZiAoIWlzVGltZWRPdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBjb25zb2xlLndhcm4oYFRpbWVkIG91dCBpbiAke2R1cmF0aW9uLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2AsIHsgZm4gfSk7XG4gICAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0OnRpbWVvdXQnKTtcbiAgICBpZiAoX2RlYnVnZ2VyLmVuYWJsZWQpIHtcbiAgICAgIF9kZWJ1Z2dlcihcbiAgICAgICAgYFRoZSBleGVjdXRpb24gaXMgbm90IHRlcm1pbmF0ZWQgYmVjYXVzZSBkZWJ1Z2dlciAke19kZWJ1Z2dlci5uYW1lc3BhY2V9IGlzIGVuYWJsZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXV0aWxzL2Jsb2IvbWFpbi9kb2NzL2RlYnVnZ2luZy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbmBcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbm5lclRpbWVvdXQoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZWxheXMgZXhlY3V0aW9uIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtaWxsaXNlY29uZHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyB3aGVuIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93T25BYm9ydChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGhhbmRsZUFib3J0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBoYW5kbGVBYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlQWJvcnQoKTogYm9vbGVhbiB7XG4gICAgICB0cnkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlIGFzIEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgcGVyaW9kLlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7dGltZW91dEluTWlsbGlzZWNvbmRzLnRvU3RyaW5nKCl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBUUEsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQW1EUCxlQUFzQixnQkFBZ0IsU0FBZ0Q7QUFDcEYsUUFBTSxvQkFBb0IsSUFBSSxNQUFNLDJCQUEyQjtBQUMvRCxNQUFJO0FBQ0YsVUFBTSxRQUFRO0FBQUEsRUFDaEIsU0FBUyxZQUFZO0FBQ25CLHNCQUFrQixRQUFRO0FBQzFCLHdCQUFvQixpQkFBaUI7QUFBQSxFQUN2QztBQUNGO0FBVUEsZUFBc0IsWUFBZSxLQUFVLFdBQXVGO0FBQ3BJLFFBQU0sbUJBQW1CLE1BQU0sU0FBUyxLQUFLLFNBQVM7QUFDdEQsU0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsaUJBQWlCLEtBQUssS0FBSyxLQUFLO0FBQ2xFO0FBV0EsZUFBc0IsYUFBbUIsS0FBVSxVQUFrRjtBQUNuSSxVQUFRLE1BQU0sU0FBUyxLQUFLLFFBQVEsR0FBRyxLQUFLO0FBQzlDO0FBV0EsZUFBc0IsU0FB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
@@ -5,7 +5,7 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})();
7
7
 
8
- const LIBRARY_VERSION = "26.13.0";
8
+ const LIBRARY_VERSION = "26.15.0";
9
9
  const LIBRARY_NAME = "obsidian-dev-utils";
10
10
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACnCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;AChDF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
11
11
  export {
@@ -40,6 +40,10 @@ export interface LoopOptions<T> {
40
40
  * Whether to show a progress bar.
41
41
  */
42
42
  shouldShowProgressBar?: boolean;
43
+ /**
44
+ * The threshold for the UI update.
45
+ */
46
+ uiUpdateThresholdInMilliseconds?: number;
43
47
  }
44
48
  /**
45
49
  * Loops over a list of items and processes each item.
@@ -6,45 +6,70 @@ if you want to view the source, please visit the github repository of this plugi
6
6
  (function initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})();
7
7
 
8
8
  import { Notice } from "obsidian";
9
+ import { requestAnimationFrameAsync } from "../Async.mjs";
9
10
  import { getLibDebugger } from "../Debug.mjs";
10
11
  import {
11
12
  ASYNC_ERROR_WRAPPER_MESSAGE,
12
13
  emitAsyncErrorEvent
13
14
  } from "../Error.mjs";
15
+ import { noop } from "../Function.mjs";
14
16
  async function loop(options) {
15
- const items = options.items;
17
+ const DEFAULT_OPTIONS = {
18
+ abortSignal: new AbortSignal(),
19
+ buildNoticeMessage() {
20
+ throw new Error("buildNoticeMessage is required");
21
+ },
22
+ items: [],
23
+ // eslint-disable-next-line no-magic-numbers
24
+ noticeMinTimeoutInMilliseconds: 2e3,
25
+ processItem: noop,
26
+ progressBarTitle: "",
27
+ shouldContinueOnError: true,
28
+ shouldShowProgressBar: true,
29
+ // eslint-disable-next-line no-magic-numbers
30
+ uiUpdateThresholdInMilliseconds: 100
31
+ };
32
+ const fullOptions = {
33
+ ...DEFAULT_OPTIONS,
34
+ ...options
35
+ };
36
+ const items = fullOptions.items;
16
37
  let iterationCount = 0;
17
38
  const notice = new Notice("", 0);
18
- const DEFAULT_NOTICE_MIN_TIMEOUT_IN_MILLISECONDS = 2e3;
19
- const noticeMinTimeoutPromise = sleep(options.noticeMinTimeoutInMilliseconds ?? DEFAULT_NOTICE_MIN_TIMEOUT_IN_MILLISECONDS);
39
+ const noticeMinTimeoutPromise = sleep(fullOptions.noticeMinTimeoutInMilliseconds);
20
40
  const progressBarEl = createEl("progress");
21
41
  progressBarEl.max = items.length;
22
- if (options.shouldShowProgressBar) {
42
+ if (fullOptions.shouldShowProgressBar) {
23
43
  const fragment = createFragment();
24
- if (options.progressBarTitle) {
25
- fragment.appendText(options.progressBarTitle);
44
+ if (fullOptions.progressBarTitle) {
45
+ fragment.appendText(fullOptions.progressBarTitle);
26
46
  }
27
47
  fragment.appendChild(progressBarEl);
28
48
  notice.setMessage(fragment);
29
49
  }
30
50
  for (const item of items) {
31
- if (options.abortSignal?.aborted) {
51
+ if (fullOptions.abortSignal.aborted) {
32
52
  notice.hide();
33
53
  return;
34
54
  }
35
55
  iterationCount++;
36
56
  const iterationStr = `# ${iterationCount.toString()} / ${items.length.toString()}`;
37
- const message = options.buildNoticeMessage(item, iterationStr);
38
- if (!options.shouldShowProgressBar) {
57
+ const message = fullOptions.buildNoticeMessage(item, iterationStr);
58
+ if (!fullOptions.shouldShowProgressBar) {
39
59
  notice.setMessage(message);
40
60
  }
41
61
  getLibDebugger("Loop")(message);
62
+ let lastUIUpdateTimestamp = performance.now();
42
63
  const asyncErrorWrapper = new Error(ASYNC_ERROR_WRAPPER_MESSAGE);
43
64
  try {
44
- await options.processItem(item);
65
+ if (performance.now() - lastUIUpdateTimestamp > fullOptions.uiUpdateThresholdInMilliseconds) {
66
+ await requestAnimationFrameAsync();
67
+ lastUIUpdateTimestamp = performance.now();
68
+ }
69
+ await fullOptions.processItem(item);
45
70
  } catch (error) {
46
71
  console.error("Error processing item", item);
47
- if (!options.shouldContinueOnError) {
72
+ if (!fullOptions.shouldContinueOnError) {
48
73
  notice.hide();
49
74
  throw error;
50
75
  }
@@ -59,4 +84,4 @@ async function loop(options) {
59
84
  export {
60
85
  loop
61
86
  };
62
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGxvb3BpbmcgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJy4uL0RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX0VSUk9SX1dSQVBQRVJfTUVTU0FHRSxcbiAgZW1pdEFzeW5jRXJyb3JFdmVudFxufSBmcm9tICcuLi9FcnJvci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGxvb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgbG9vcC5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gYnVpbGQgdGhlIG5vdGljZSBtZXNzYWdlIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBidWlsZE5vdGljZU1lc3NhZ2UoaXRlbTogVCwgaXRlcmF0aW9uU3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdG8gbG9vcCBvdmVyLlxuICAgKi9cbiAgaXRlbXM6IFRbXTtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHRpbWVvdXQgZm9yIHRoZSBub3RpY2UuXG4gICAqL1xuICBub3RpY2VNaW5UaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyBlYWNoIGl0ZW0uXG4gICAqL1xuICBwcm9jZXNzSXRlbShpdGVtOiBUKTogUHJvbWlzYWJsZTx2b2lkPjtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgcHJvZ3Jlc3NCYXJUaXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udGludWUgdGhlIGxvb3Agb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRDb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGEgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBMb29wcyBvdmVyIGEgbGlzdCBvZiBpdGVtcyBhbmQgcHJvY2Vzc2VzIGVhY2ggaXRlbS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbG9vcC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvb3A8VD4ob3B0aW9uczogTG9vcE9wdGlvbnM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaXRlbXMgPSBvcHRpb25zLml0ZW1zO1xuICBsZXQgaXRlcmF0aW9uQ291bnQgPSAwO1xuICBjb25zdCBub3RpY2UgPSBuZXcgTm90aWNlKCcnLCAwKTtcbiAgY29uc3QgREVGQVVMVF9OT1RJQ0VfTUlOX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gMjAwMDtcbiAgY29uc3Qgbm90aWNlTWluVGltZW91dFByb21pc2UgPSBzbGVlcChvcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/PyBERUZBVUxUX05PVElDRV9NSU5fVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpO1xuICBjb25zdCBwcm9ncmVzc0JhckVsID0gY3JlYXRlRWwoJ3Byb2dyZXNzJyk7XG4gIHByb2dyZXNzQmFyRWwubWF4ID0gaXRlbXMubGVuZ3RoO1xuICBpZiAob3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgaWYgKG9wdGlvbnMucHJvZ3Jlc3NCYXJUaXRsZSkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dChvcHRpb25zLnByb2dyZXNzQmFyVGl0bGUpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChwcm9ncmVzc0JhckVsKTtcbiAgICBub3RpY2Uuc2V0TWVzc2FnZShmcmFnbWVudCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKG9wdGlvbnMuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgIG5vdGljZS5oaWRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZXJhdGlvbkNvdW50Kys7XG4gICAgY29uc3QgaXRlcmF0aW9uU3RyID0gYCMgJHtpdGVyYXRpb25Db3VudC50b1N0cmluZygpfSAvICR7aXRlbXMubGVuZ3RoLnRvU3RyaW5nKCl9YDtcbiAgICBjb25zdCBtZXNzYWdlID0gb3B0aW9ucy5idWlsZE5vdGljZU1lc3NhZ2UoaXRlbSwgaXRlcmF0aW9uU3RyKTtcbiAgICBpZiAoIW9wdGlvbnMuc2hvdWxkU2hvd1Byb2dyZXNzQmFyKSB7XG4gICAgICBub3RpY2Uuc2V0TWVzc2FnZShtZXNzYWdlKTtcbiAgICB9XG4gICAgZ2V0TGliRGVidWdnZXIoJ0xvb3AnKShtZXNzYWdlKTtcblxuICAgIGNvbnN0IGFzeW5jRXJyb3JXcmFwcGVyID0gbmV3IEVycm9yKEFTWU5DX0VSUk9SX1dSQVBQRVJfTUVTU0FHRSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG9wdGlvbnMucHJvY2Vzc0l0ZW0oaXRlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgaXRlbScsIGl0ZW0pO1xuICAgICAgaWYgKCFvcHRpb25zLnNob3VsZENvbnRpbnVlT25FcnJvcikge1xuICAgICAgICBub3RpY2UuaGlkZSgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGFzeW5jRXJyb3JXcmFwcGVyLmNhdXNlID0gZXJyb3I7XG4gICAgICBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3JXcmFwcGVyKTtcbiAgICB9XG4gICAgcHJvZ3Jlc3NCYXJFbC52YWx1ZSsrO1xuICB9XG4gIGF3YWl0IG5vdGljZU1pblRpbWVvdXRQcm9taXNlO1xuICBub3RpY2UuaGlkZSgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVFBLFNBQVMsY0FBYztBQUV2QixTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTZDUCxlQUFzQixLQUFRLFNBQXdDO0FBQ3BFLFFBQU0sUUFBUSxRQUFRO0FBQ3RCLE1BQUksaUJBQWlCO0FBQ3JCLFFBQU0sU0FBUyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQy9CLFFBQU0sNkNBQTZDO0FBQ25ELFFBQU0sMEJBQTBCLE1BQU0sUUFBUSxrQ0FBa0MsMENBQTBDO0FBQzFILFFBQU0sZ0JBQWdCLFNBQVMsVUFBVTtBQUN6QyxnQkFBYyxNQUFNLE1BQU07QUFDMUIsTUFBSSxRQUFRLHVCQUF1QjtBQUNqQyxVQUFNLFdBQVcsZUFBZTtBQUNoQyxRQUFJLFFBQVEsa0JBQWtCO0FBQzVCLGVBQVMsV0FBVyxRQUFRLGdCQUFnQjtBQUFBLElBQzlDO0FBQ0EsYUFBUyxZQUFZLGFBQWE7QUFDbEMsV0FBTyxXQUFXLFFBQVE7QUFBQSxFQUM1QjtBQUNBLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksUUFBUSxhQUFhLFNBQVM7QUFDaEMsYUFBTyxLQUFLO0FBQ1o7QUFBQSxJQUNGO0FBQ0E7QUFDQSxVQUFNLGVBQWUsS0FBSyxlQUFlLFNBQVMsQ0FBQyxNQUFNLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDaEYsVUFBTSxVQUFVLFFBQVEsbUJBQW1CLE1BQU0sWUFBWTtBQUM3RCxRQUFJLENBQUMsUUFBUSx1QkFBdUI7QUFDbEMsYUFBTyxXQUFXLE9BQU87QUFBQSxJQUMzQjtBQUNBLG1CQUFlLE1BQU0sRUFBRSxPQUFPO0FBRTlCLFVBQU0sb0JBQW9CLElBQUksTUFBTSwyQkFBMkI7QUFDL0QsUUFBSTtBQUNGLFlBQU0sUUFBUSxZQUFZLElBQUk7QUFBQSxJQUNoQyxTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0seUJBQXlCLElBQUk7QUFDM0MsVUFBSSxDQUFDLFFBQVEsdUJBQXVCO0FBQ2xDLGVBQU8sS0FBSztBQUNaLGNBQU07QUFBQSxNQUNSO0FBQ0Esd0JBQWtCLFFBQVE7QUFDMUIsMEJBQW9CLGlCQUFpQjtBQUFBLElBQ3ZDO0FBQ0Esa0JBQWM7QUFBQSxFQUNoQjtBQUNBLFFBQU07QUFDTixTQUFPLEtBQUs7QUFDZDsiLAogICJuYW1lcyI6IFtdCn0K
87
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0xvb3AudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGxvb3BpbmcgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyByZXF1ZXN0QW5pbWF0aW9uRnJhbWVBc3luYyB9IGZyb20gJy4uL0FzeW5jLnRzJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vRGVidWcudHMnO1xuaW1wb3J0IHtcbiAgQVNZTkNfRVJST1JfV1JBUFBFUl9NRVNTQUdFLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50XG59IGZyb20gJy4uL0Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi9GdW5jdGlvbi50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGxvb3AgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgbG9vcC5cbiAgICovXG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gYnVpbGQgdGhlIG5vdGljZSBtZXNzYWdlIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBidWlsZE5vdGljZU1lc3NhZ2UoaXRlbTogVCwgaXRlcmF0aW9uU3RyOiBzdHJpbmcpOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdG8gbG9vcCBvdmVyLlxuICAgKi9cbiAgaXRlbXM6IFRbXTtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHRpbWVvdXQgZm9yIHRoZSBub3RpY2UuXG4gICAqL1xuICBub3RpY2VNaW5UaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyBlYWNoIGl0ZW0uXG4gICAqL1xuICBwcm9jZXNzSXRlbShpdGVtOiBUKTogUHJvbWlzYWJsZTx2b2lkPjtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgcHJvZ3Jlc3NCYXJUaXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udGludWUgdGhlIGxvb3Agb24gZXJyb3IuXG4gICAqL1xuICBzaG91bGRDb250aW51ZU9uRXJyb3I/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBzaG93IGEgcHJvZ3Jlc3MgYmFyLlxuICAgKi9cbiAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSB0aHJlc2hvbGQgZm9yIHRoZSBVSSB1cGRhdGUuXG4gICAqL1xuICB1aVVwZGF0ZVRocmVzaG9sZEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvb3BzIG92ZXIgYSBsaXN0IG9mIGl0ZW1zIGFuZCBwcm9jZXNzZXMgZWFjaCBpdGVtLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBsb29wLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9vcDxUPihvcHRpb25zOiBMb29wT3B0aW9uczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlcXVpcmVkPExvb3BPcHRpb25zPFQ+PiA9IHtcbiAgICBhYm9ydFNpZ25hbDogbmV3IEFib3J0U2lnbmFsKCksXG4gICAgYnVpbGROb3RpY2VNZXNzYWdlKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZE5vdGljZU1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICB9LFxuICAgIGl0ZW1zOiBbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIG5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kczogMjAwMCxcbiAgICBwcm9jZXNzSXRlbTogbm9vcCxcbiAgICBwcm9ncmVzc0JhclRpdGxlOiAnJyxcbiAgICBzaG91bGRDb250aW51ZU9uRXJyb3I6IHRydWUsXG4gICAgc2hvdWxkU2hvd1Byb2dyZXNzQmFyOiB0cnVlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgdWlVcGRhdGVUaHJlc2hvbGRJbk1pbGxpc2Vjb25kczogMTAwXG4gIH07XG5cbiAgY29uc3QgZnVsbE9wdGlvbnM6IFJlcXVpcmVkPExvb3BPcHRpb25zPFQ+PiA9IHtcbiAgICAuLi5ERUZBVUxUX09QVElPTlMsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGNvbnN0IGl0ZW1zID0gZnVsbE9wdGlvbnMuaXRlbXM7XG4gIGxldCBpdGVyYXRpb25Db3VudCA9IDA7XG4gIGNvbnN0IG5vdGljZSA9IG5ldyBOb3RpY2UoJycsIDApO1xuICBjb25zdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZSA9IHNsZWVwKGZ1bGxPcHRpb25zLm5vdGljZU1pblRpbWVvdXRJbk1pbGxpc2Vjb25kcyk7XG4gIGNvbnN0IHByb2dyZXNzQmFyRWwgPSBjcmVhdGVFbCgncHJvZ3Jlc3MnKTtcbiAgcHJvZ3Jlc3NCYXJFbC5tYXggPSBpdGVtcy5sZW5ndGg7XG4gIGlmIChmdWxsT3B0aW9ucy5zaG91bGRTaG93UHJvZ3Jlc3NCYXIpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50KCk7XG4gICAgaWYgKGZ1bGxPcHRpb25zLnByb2dyZXNzQmFyVGl0bGUpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQoZnVsbE9wdGlvbnMucHJvZ3Jlc3NCYXJUaXRsZSk7XG4gICAgfVxuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHByb2dyZXNzQmFyRWwpO1xuICAgIG5vdGljZS5zZXRNZXNzYWdlKGZyYWdtZW50KTtcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlcmF0aW9uQ291bnQrKztcbiAgICBjb25zdCBpdGVyYXRpb25TdHIgPSBgIyAke2l0ZXJhdGlvbkNvdW50LnRvU3RyaW5nKCl9IC8gJHtpdGVtcy5sZW5ndGgudG9TdHJpbmcoKX1gO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBmdWxsT3B0aW9ucy5idWlsZE5vdGljZU1lc3NhZ2UoaXRlbSwgaXRlcmF0aW9uU3RyKTtcbiAgICBpZiAoIWZ1bGxPcHRpb25zLnNob3VsZFNob3dQcm9ncmVzc0Jhcikge1xuICAgICAgbm90aWNlLnNldE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgfVxuICAgIGdldExpYkRlYnVnZ2VyKCdMb29wJykobWVzc2FnZSk7XG5cbiAgICBsZXQgbGFzdFVJVXBkYXRlVGltZXN0YW1wID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICBjb25zdCBhc3luY0Vycm9yV3JhcHBlciA9IG5ldyBFcnJvcihBU1lOQ19FUlJPUl9XUkFQUEVSX01FU1NBR0UpO1xuICAgIHRyeSB7XG4gICAgICBpZiAocGVyZm9ybWFuY2Uubm93KCkgLSBsYXN0VUlVcGRhdGVUaW1lc3RhbXAgPiBmdWxsT3B0aW9ucy51aVVwZGF0ZVRocmVzaG9sZEluTWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIGF3YWl0IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jKCk7XG4gICAgICAgIGxhc3RVSVVwZGF0ZVRpbWVzdGFtcCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnVsbE9wdGlvbnMucHJvY2Vzc0l0ZW0oaXRlbSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgaXRlbScsIGl0ZW0pO1xuICAgICAgaWYgKCFmdWxsT3B0aW9ucy5zaG91bGRDb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgbm90aWNlLmhpZGUoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBhc3luY0Vycm9yV3JhcHBlci5jYXVzZSA9IGVycm9yO1xuICAgICAgZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yV3JhcHBlcik7XG4gICAgfVxuICAgIHByb2dyZXNzQmFyRWwudmFsdWUrKztcbiAgfVxuICBhd2FpdCBub3RpY2VNaW5UaW1lb3V0UHJvbWlzZTtcbiAgbm90aWNlLmhpZGUoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFRQSxTQUFTLGNBQWM7QUFFdkIsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyxzQkFBc0I7QUFDL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFpRHJCLGVBQXNCLEtBQVEsU0FBd0M7QUFDcEUsUUFBTSxrQkFBNEM7QUFBQSxJQUNoRCxhQUFhLElBQUksWUFBWTtBQUFBLElBQzdCLHFCQUFxQjtBQUNuQixZQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFBQSxJQUNsRDtBQUFBLElBQ0EsT0FBTyxDQUFDO0FBQUE7QUFBQSxJQUVSLGdDQUFnQztBQUFBLElBQ2hDLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCLHVCQUF1QjtBQUFBLElBQ3ZCLHVCQUF1QjtBQUFBO0FBQUEsSUFFdkIsaUNBQWlDO0FBQUEsRUFDbkM7QUFFQSxRQUFNLGNBQXdDO0FBQUEsSUFDNUMsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLEVBQ0w7QUFFQSxRQUFNLFFBQVEsWUFBWTtBQUMxQixNQUFJLGlCQUFpQjtBQUNyQixRQUFNLFNBQVMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUMvQixRQUFNLDBCQUEwQixNQUFNLFlBQVksOEJBQThCO0FBQ2hGLFFBQU0sZ0JBQWdCLFNBQVMsVUFBVTtBQUN6QyxnQkFBYyxNQUFNLE1BQU07QUFDMUIsTUFBSSxZQUFZLHVCQUF1QjtBQUNyQyxVQUFNLFdBQVcsZUFBZTtBQUNoQyxRQUFJLFlBQVksa0JBQWtCO0FBQ2hDLGVBQVMsV0FBVyxZQUFZLGdCQUFnQjtBQUFBLElBQ2xEO0FBQ0EsYUFBUyxZQUFZLGFBQWE7QUFDbEMsV0FBTyxXQUFXLFFBQVE7QUFBQSxFQUM1QjtBQUNBLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksWUFBWSxZQUFZLFNBQVM7QUFDbkMsYUFBTyxLQUFLO0FBQ1o7QUFBQSxJQUNGO0FBQ0E7QUFDQSxVQUFNLGVBQWUsS0FBSyxlQUFlLFNBQVMsQ0FBQyxNQUFNLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDaEYsVUFBTSxVQUFVLFlBQVksbUJBQW1CLE1BQU0sWUFBWTtBQUNqRSxRQUFJLENBQUMsWUFBWSx1QkFBdUI7QUFDdEMsYUFBTyxXQUFXLE9BQU87QUFBQSxJQUMzQjtBQUNBLG1CQUFlLE1BQU0sRUFBRSxPQUFPO0FBRTlCLFFBQUksd0JBQXdCLFlBQVksSUFBSTtBQUU1QyxVQUFNLG9CQUFvQixJQUFJLE1BQU0sMkJBQTJCO0FBQy9ELFFBQUk7QUFDRixVQUFJLFlBQVksSUFBSSxJQUFJLHdCQUF3QixZQUFZLGlDQUFpQztBQUMzRixjQUFNLDJCQUEyQjtBQUNqQyxnQ0FBd0IsWUFBWSxJQUFJO0FBQUEsTUFDMUM7QUFDQSxZQUFNLFlBQVksWUFBWSxJQUFJO0FBQUEsSUFDcEMsU0FBUyxPQUFPO0FBQ2QsY0FBUSxNQUFNLHlCQUF5QixJQUFJO0FBQzNDLFVBQUksQ0FBQyxZQUFZLHVCQUF1QjtBQUN0QyxlQUFPLEtBQUs7QUFDWixjQUFNO0FBQUEsTUFDUjtBQUNBLHdCQUFrQixRQUFRO0FBQzFCLDBCQUFvQixpQkFBaUI7QUFBQSxJQUN2QztBQUNBLGtCQUFjO0FBQUEsRUFDaEI7QUFDQSxRQUFNO0FBQ04sU0FBTyxLQUFLO0FBQ2Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-utils",
3
- "version": "26.13.0",
3
+ "version": "26.15.0",
4
4
  "description": "This is the collection of useful functions that you can use for your Obsidian plugin development",
5
5
  "keywords": [
6
6
  "obsidian"
@@ -477,7 +477,7 @@
477
477
  "eslint-plugin-import-x": "^4.10.6",
478
478
  "eslint-plugin-jsdoc": "^50.6.10",
479
479
  "eslint-plugin-modules-newlines": "^0.0.7",
480
- "eslint-plugin-perfectionist": "^4.12.2",
480
+ "eslint-plugin-perfectionist": "^4.12.3",
481
481
  "eslint-plugin-tsdoc": "^0.4.0",
482
482
  "glob": "^11.0.2",
483
483
  "jiti": "^2.4.2",
@@ -487,7 +487,7 @@
487
487
  "monkey-around": "^3.0.0",
488
488
  "npm-run-all": "^4.1.5",
489
489
  "obsidian": "^1.8.7",
490
- "obsidian-typings": "^3.2.0",
490
+ "obsidian-typings": "^3.2.1",
491
491
  "path-browserify": "^1.0.1",
492
492
  "postcss": "^8.5.3",
493
493
  "postcss-modules": "^6.0.1",