@sumaris-net/ngx-components 18.3.29 → 18.3.30-alpha2

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.
Files changed (27) hide show
  1. package/esm2022/public_api.mjs +2 -1
  2. package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
  3. package/esm2022/src/app/shared/forms.mjs +2 -1
  4. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +42 -27
  5. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +359 -0
  6. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +110 -402
  7. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +6 -5
  8. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +1 -1
  9. package/esm2022/src/app/shared/material/material.module.mjs +2 -2
  10. package/esm2022/src/app/shared/material/material.testing.module.mjs +14 -3
  11. package/esm2022/src/app/shared/material/test/test-component.mjs +240 -0
  12. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +3 -3
  13. package/fesm2022/sumaris-net.ngx-components.mjs +990 -676
  14. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  15. package/package.json +1 -1
  16. package/public_api.d.ts +1 -0
  17. package/src/app/shared/inputs.d.ts +1 -1
  18. package/src/app/shared/material/latlong/latlong.utils.d.ts +33 -6
  19. package/src/app/shared/material/latlong/material.latlong-input.d.ts +80 -0
  20. package/src/app/shared/material/latlong/material.latlong.d.ts +21 -66
  21. package/src/app/shared/material/latlong/material.latlong.module.d.ts +15 -14
  22. package/src/app/shared/material/material.testing.module.d.ts +2 -1
  23. package/src/app/shared/material/test/test-component.d.ts +75 -0
  24. package/src/assets/i18n/en-US.json +12 -20
  25. package/src/assets/i18n/en.json +8 -16
  26. package/src/assets/i18n/fr.json +8 -16
  27. package/src/theme/_material.scss +3 -10
@@ -249,6 +249,7 @@ export function disableControl(control, opts) {
249
249
  }
250
250
  export function disableAndClearControl(control, opts) {
251
251
  const wasDisabled = control.disabled;
252
+ // Apply disable
252
253
  setControlEnabled(control, false, { required: false, ...opts });
253
254
  // Important, should not use reset() to mark the control as dirty.
254
255
  // Otherwise, optimization using dirty (.e.g MeasurementForm) will not be notified by this changed
@@ -504,4 +505,4 @@ export function filterFormErrors(errors, filter) {
504
505
  return res;
505
506
  }, undefined);
506
507
  }
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFvQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2SSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBTTdEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBVyxFQUFFLE1BQXdCLEVBQUUsSUFBa0Q7SUFDdkgsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBdUIsRUFBRSxJQUFzQjtJQUNwRixPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQTJCLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUF1QixFQUFFLE9BQXdCLEVBQUUsSUFBYTtJQUNsRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUUxQyxh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TSxVQUFVLGdCQUFnQixDQUFDLE1BQWtCLEVBQUUsTUFBZ0M7SUFDbkYsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDaEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2QsTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDckIsaUJBQWlCO1FBQ2pCLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2hCLG9CQUFvQjtRQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNXLFNBQVMsQ0FDdEIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPck5hTiwgbnVsbElmVW5kZWZpbmVkIH0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi9kYXRlcyc7XG5pbXBvcnQgeyB3YWl0Rm9yLCBXYWl0Rm9yT3B0aW9ucyB9IGZyb20gJy4vb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgUHJlZGljYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcEZvcm1BcnJheSB9IGZyb20gJy4uL2NvcmUvZm9ybS9hcnJheS9mb3JtLWFycmF5JztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtRXJyb3JzIHtcbiAgW2tleTogc3RyaW5nXTogVmFsaWRhdGlvbkVycm9ycztcbn1cblxuLyoqXG4gKiBGaWxsIGEgZm9ybSB1c2luZyBhIHNvdXJjZSBlbnRpdHlcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gb3B0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUVudGl0eTJGb3JtKGVudGl0eTogYW55LCB0YXJnZXQ6IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IG9ubHlTZWxmPzogYm9vbGVhbiB9KSB7XG4gIGNvbnN0IGpzb24gPSBnZXRGb3JtVmFsdWVGcm9tRW50aXR5KGVudGl0eSwgdGFyZ2V0KTtcbiAgdGFyZ2V0LnBhdGNoVmFsdWUoanNvbiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtVmFsdWVGcm9tRW50aXR5KGVudGl0eTogYW55IHwgdW5kZWZpbmVkLCBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIHJldHVybiBhZGFwdFZhbHVlVG9Db250cm9sKGVudGl0eSwgZm9ybSkgYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gZW50aXR5IGludG8gYSBzaW1wbGUgb2JqZWN0LCBjb21wYXRpYmxlIHdpdGggdGhlIGdpdmVuIGZvcm1cbiAqXG4gKiBAcGFyYW0gc291cmNlIGFuIGVudGl0eSAob3Igc3ViZW50aXR5KVxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdFZhbHVlVG9Db250cm9sKHNvdXJjZTogYW55IHwgdW5kZWZpbmVkLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg/OiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBwYXRoUHJlZml4ID0gcGF0aCA/IHBhdGggKyAnLicgOiAnJztcblxuICAvLyBGb3JtIGdyb3VwXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cm9sLmNvbnRyb2xzKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGFkYXB0VmFsdWVUb0NvbnRyb2woc291cmNlICYmIHNvdXJjZVtrZXldLCBjb250cm9sLmNvbnRyb2xzW2tleV0sIHBhdGhQcmVmaXggKyBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gQXJyYXlcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgLy8gU3BsaXQsIGlmIG1hbnkgdmFsdWVzIGluIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzb3VyY2UgPSBzb3VyY2Uuc3BsaXQoJ3wnKTtcbiAgICB9XG4gICAgLy8gU2tpcCBpZiB2YWx1ZSBpcyBub3QgYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIFJlc2l6YWJsZSBhcnJheVxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXBwRm9ybUFycmF5KSB7XG4gICAgICBjb25zdCBleGFtcGxlQ29udHJvbCA9IGNvbnRyb2wuY3JlYXRlQ29udHJvbCgpO1xuICAgICAgcmV0dXJuIHNvdXJjZS5tYXAoKGl0ZW0sIGluZGV4KSA9PiBhZGFwdFZhbHVlVG9Db250cm9sKGl0ZW0sIGV4YW1wbGVDb250cm9sLCBwYXRoUHJlZml4ICsgJyMnICsgaW5kZXgpKSBhcyBhbnlbXTtcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYXJyYXlcbiAgICBlbHNlIGlmIChjb250cm9sLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0Q29udHJvbCA9IGNvbnRyb2wuYXQoMCk7XG4gICAgICAvLyBVc2UgdGhlIGZpcnN0IGZvcm0gZ3JvdXAsIGFzIG1vZGVsXG4gICAgICBsZXQgcmVzdWx0ID0gc291cmNlLm1hcCgoaXRlbSwgaW5kZXgpID0+IGFkYXB0VmFsdWVUb0NvbnRyb2woaXRlbSwgZmlyc3RDb250cm9sLCBwYXRoUHJlZml4ICsgJyMnICsgaW5kZXgpKSBhcyBhbnlbXTtcblxuICAgICAgLy8gVHJ1bmNhdGUgaWYgdG9vIG1hbnkgdmFsdWVzXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIGlmIChmaXJzdENvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gY29udHJvbC5sZW5ndGg7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRyb2wucHVzaChuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwsIGZpcnN0Q29udHJvbC52YWxpZGF0b3IpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBXQVJOOiBwbGVhc2UgcmVzaXplIHRoZSBGb3JtQXJyYXkgJyR7cGF0aCB8fCAnJ30nIHRvIHRoZSBzYW1lIGxlbmd0aCBvZiB0aGUgaW5wdXQgYXJyYXlgKTtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgY29udHJvbC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB2YWx1ZXMgaWYgbm90IGVub3VnaHRcbiAgICAgIGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPCBjb250cm9sLmxlbmd0aCkge1xuICAgICAgICAvL2NvbnNvbGUud2FybihgV0FSTjogQWRkaW5nIG51bGwgdmFsdWUgdG8gYXJyYXkgdmFsdWVzYCk7XG4gICAgICAgIGZvciAobGV0IGkgPSByZXN1bHQubGVuZ3RoOyBpIDwgY29udHJvbC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBTa2lwIGlmIHVuYWJsZSB0byBmaW5kIGEgY29udHJvbCBpbiB0aGUgYXJyYXlcbiAgICBlbHNlIHtcbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkoc291cmNlKSkgY29uc29sZS53YXJuKGBXQVJOOiBwbGVhc2UgcmVzaXplIHRoZSBGb3JtQXJyYXkgJyR7cGF0aH0nIHRvIHRoZSBzYW1lIGxlbmd0aCBvZiB0aGUgaW5wdXQgYXJyYXlgKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvLyBGb3JtIGNvbnRyb2xcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUNvbnRyb2wpIHtcbiAgICAvLyBEYXRlXG4gICAgaWYgKGlzTW9tZW50KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0b0RhdGVJU09TdHJpbmcoc291cmNlKTtcbiAgICB9XG4gICAgLy8gQW55IG90aGVyIGNvbnRyb2w6IHJlcGxhY2UgdW5kZWZpbmVkIGJ5IG51bGwgdmFsdWVcbiAgICAvLyBiZWNhdXNlIFVuZGVmaW5lZCBpcyBub3QgYXV0aG9yaXplZCBhcyBjb250cm9sIHZhbHVlXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbElmVW5kZWZpbmVkKHNvdXJjZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dGb3JtRXJyb3JzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgbG9nUHJlZml4Pzogc3RyaW5nLCBwYXRoPzogc3RyaW5nKSB7XG4gIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbGlkKSByZXR1cm47XG4gIGxvZ1ByZWZpeCA9IGxvZ1ByZWZpeCB8fCAnJztcbiAgLy8gRm9ybSBncm91cFxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICBpZiAoIXBhdGgpIGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IEZvcm0gZXJyb3JzOmApO1xuICAgIGlmIChjb250cm9sLmVycm9ycykge1xuICAgICAgT2JqZWN0LmtleXMoY29udHJvbC5lcnJvcnMpLmZvckVhY2goKGVycm9yKSA9PiBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4fSAtPiAke3BhdGggfHwgJyd9ICgke2Vycm9yfSlgKSk7XG4gICAgfVxuICAgIGlmIChjb250cm9sLmNvbnRyb2xzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKFxuICAgICAgICAoY2hpbGQpID0+IGxvZ0Zvcm1FcnJvcnMoY29udHJvbC5jb250cm9sc1tjaGlsZF0sIGxvZ1ByZWZpeCwgcGF0aCA/IGAke3BhdGh9LiR7Y2hpbGR9YCA6IGNoaWxkKSAvLyBSZWN1cnNpdmUgY2FsbFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLy8gRm9ybSBhcnJheVxuICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIGlmIChjb250cm9sLmVycm9ycykge1xuICAgICAgT2JqZWN0LmtleXMoY29udHJvbC5lcnJvcnMpLmZvckVhY2goKGVycm9yKSA9PiBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4fSAtPiAke3BhdGggfHwgJyd9ICgke2Vycm9yfSlgKSk7XG4gICAgfVxuICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBsb2dGb3JtRXJyb3JzKGNoaWxkLCBsb2dQcmVmaXgsIHBhdGggPyBgJHtwYXRofS4ke2luZGV4fWAgOiBgJHtpbmRleH1gKTsgLy8gUmVjdXJzaXZlIGNhbGxcbiAgICB9KTtcbiAgfVxuICAvLyBPdGhlciBjb250cm9sJ3MgZXJyb3JzXG4gIGVsc2UgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgT2JqZWN0LmtleXMoY29udHJvbC5lcnJvcnMpLmZvckVhY2goKGVycm9yKSA9PiBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4fSAtPiAke3BhdGggfHwgJyd9ICgke2Vycm9yfSlgKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1FcnJvcnMoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgb3B0cz86IHtcbiAgICBjb250cm9sTmFtZT86IHN0cmluZztcbiAgICByZXN1bHQ/OiBGb3JtRXJyb3JzO1xuICAgIHJlY3Vyc2l2ZT86IGJvb2xlYW47XG4gIH1cbik6IEZvcm1FcnJvcnMge1xuICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbC52YWxpZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgb3B0cy5yZXN1bHQgPSBvcHRzLnJlc3VsdCB8fCB7fTtcblxuICAvLyBGb3JtIGdyb3VwXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIC8vIENvcHkgZXJyb3JzXG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBpZiAob3B0cy5jb250cm9sTmFtZSkge1xuICAgICAgICBvcHRzLnJlc3VsdFtvcHRzLmNvbnRyb2xOYW1lXSA9IHtcbiAgICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdHMucmVzdWx0ID0ge1xuICAgICAgICAgIC4uLm9wdHMucmVzdWx0LFxuICAgICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlY3Vyc2l2ZSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIExvb3Agb24gY2hpbGRyZW4gY29udHJvbHNcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBjb250cm9sLmNvbnRyb2xzW2tleV07XG4gICAgICAgIGlmIChjaGlsZD8uZW5hYmxlZCkge1xuICAgICAgICAgIGdldEZvcm1FcnJvcnMoY2hpbGQsIHtcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBjb250cm9sTmFtZTogb3B0cy5jb250cm9sTmFtZSA/IFtvcHRzLmNvbnRyb2xOYW1lLCBrZXldLmpvaW4oJy4nKSA6IGtleSxcbiAgICAgICAgICAgIHJlc3VsdDogb3B0cy5yZXN1bHQsIC8vIE1ha2Ugc3VyZSB0byBrZWVwIHRoZSBzYW1lIHJlc3VsdCBvYmplY3RcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gYXJyYXlcbiAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICAvLyBDb3B5IGVycm9yc1xuICAgIGlmIChjb250cm9sLmVycm9ycykge1xuICAgICAgaWYgKG9wdHMuY29udHJvbE5hbWUpIHtcbiAgICAgICAgb3B0cy5yZXN1bHRbb3B0cy5jb250cm9sTmFtZV0gPSB7XG4gICAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRzLnJlc3VsdCA9IHtcbiAgICAgICAgICAuLi5vcHRzLnJlc3VsdCxcbiAgICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgZ2V0Rm9ybUVycm9ycyhjaGlsZCwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBjb250cm9sTmFtZTogKG9wdHMuY29udHJvbE5hbWUgfHwgJycpICsgJy4nICsgaW5kZXgsXG4gICAgICAgIHJlc3VsdDogb3B0cy5yZXN1bHQsIC8vIE1ha2Ugc3VyZSB0byBrZWVwIHRoZSBzYW1lIHJlc3VsdCBvYmplY3RcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gT3RoZXIgdHlwZSBvZiBjb250cm9sIChlLmcgc2ltcGxlIGNvbnRyb2wpXG4gIGVsc2UgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgaWYgKG9wdHMuY29udHJvbE5hbWUpIHtcbiAgICAgIG9wdHMucmVzdWx0W29wdHMuY29udHJvbE5hbWVdID0ge1xuICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdHMucmVzdWx0ID0ge1xuICAgICAgICAuLi5vcHRzLnJlc3VsdCxcbiAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0cy5yZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sRnJvbVBhdGgoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgcGF0aDogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHtcbiAgY29uc3QgaSA9IHBhdGguaW5kZXhPZignLicpO1xuICBpZiAoaSA9PT0gLTEpIHtcbiAgICByZXR1cm4gZm9ybS5jb250cm9sc1twYXRoXTtcbiAgfVxuICBjb25zdCBrZXkgPSBwYXRoLnN1YnN0cmluZygwLCBpKTtcbiAgaWYgKGZvcm0uY29udHJvbHNba2V5XSBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICByZXR1cm4gZ2V0Q29udHJvbEZyb21QYXRoKGZvcm0uY29udHJvbHNba2V5XSBhcyBVbnR5cGVkRm9ybUdyb3VwLCBwYXRoLnN1YnN0cmluZyhpICsgMSkpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHBhdGg6ICcke2tleX0nIHNob3VsZCBiZSBhIGZvcm0gZ3JvdXAuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlQ29udHJvbHMoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgcGF0aHM6IHN0cmluZ1tdLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47IHJlcXVpcmVkPzogYm9vbGVhbiB9KSB7XG4gIChwYXRocyB8fCBbXSkuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgoZm9ybSwgcGF0aCk7XG4gICAgaWYgKGNvbnRyb2wpIGRpc2FibGVDb250cm9sKGNvbnRyb2wsIG9wdHMpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlQW5kQ2xlYXJDb250cm9scyhcbiAgZm9ybTogVW50eXBlZEZvcm1Hcm91cCxcbiAgcGF0aHM6IHN0cmluZ1tdLFxuICBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47IHJlcXVpcmVkPzogYm9vbGVhbiB9XG4pIHtcbiAgKHBhdGhzIHx8IFtdKS5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IGdldENvbnRyb2xGcm9tUGF0aChmb3JtLCBwYXRoKTtcbiAgICBpZiAoY29udHJvbCkgZGlzYWJsZUFuZENsZWFyQ29udHJvbChjb250cm9sLCBvcHRzKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQ29udHJvbHMoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgcGF0aHM6IHN0cmluZ1tdLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47IHJlcXVpcmVkPzogYm9vbGVhbiB9KSB7XG4gIChwYXRocyB8fCBbXSkuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgoZm9ybSwgcGF0aCk7XG4gICAgaWYgKGNvbnRyb2wpIGVuYWJsZUNvbnRyb2woY29udHJvbCwgb3B0cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udHJvbHNFbmFibGVkKFxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLFxuICBlbmFibGVkOiBib29sZWFuLFxuICBwYXRoczogc3RyaW5nW10sXG4gIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVxdWlyZWQ/OiBib29sZWFuIH1cbikge1xuICAocGF0aHMgfHwgW10pLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gZ2V0Q29udHJvbEZyb21QYXRoKGZvcm0sIHBhdGgpO1xuICAgIGlmIChjb250cm9sKSBzZXRDb250cm9sRW5hYmxlZChjb250cm9sLCBlbmFibGVkLCBvcHRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfSkge1xuICBzZXRDb250cm9sRW5hYmxlZChjb250cm9sLCB0cnVlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfSkge1xuICBzZXRDb250cm9sRW5hYmxlZChjb250cm9sLCBmYWxzZSwgeyByZXF1aXJlZDogZmFsc2UsIC4uLm9wdHMgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlQW5kQ2xlYXJDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfSkge1xuICBjb25zdCB3YXNEaXNhYmxlZCA9IGNvbnRyb2wuZGlzYWJsZWQ7XG4gIHNldENvbnRyb2xFbmFibGVkKGNvbnRyb2wsIGZhbHNlLCB7IHJlcXVpcmVkOiBmYWxzZSwgLi4ub3B0cyB9KTtcblxuICAvLyBJbXBvcnRhbnQsIHNob3VsZCBub3QgdXNlIHJlc2V0KCkgdG8gbWFyayB0aGUgY29udHJvbCBhcyBkaXJ0eS5cbiAgLy8gT3RoZXJ3aXNlLCBvcHRpbWl6YXRpb24gdXNpbmcgZGlydHkgKC5lLmcgTWVhc3VyZW1lbnRGb3JtKSB3aWxsIG5vdCBiZSBub3RpZmllZCBieSB0aGlzIGNoYW5nZWRcbiAgaWYgKGlzTm90TmlsKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgaWYgKHdhc0Rpc2FibGVkKSB7XG4gICAgICBjb250cm9sLnJlc2V0KG51bGwsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIG9wdHMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udHJvbEVuYWJsZWQoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgZW5hYmxlZDogYm9vbGVhbixcbiAgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfVxuKSB7XG4gIGlmIChlbmFibGVkKSB7XG4gICAgaWYgKGlzTm90TmlsKG9wdHM/LnJlcXVpcmVkKSAmJiBvcHRzLnJlcXVpcmVkICYmICFjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSkge1xuICAgICAgY29udHJvbC5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICBjb250cm9sLmVuYWJsZShvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sLmRpc2FibGUob3B0cyk7XG4gICAgaWYgKGlzTm90TmlsKG9wdHM/LnJlcXVpcmVkKSAmJiAhb3B0cy5yZXF1aXJlZCAmJiBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSkge1xuICAgICAgY29udHJvbC5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkVmFsdWVJbkFycmF5KFxuICBhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksXG4gIGNyZWF0ZUNvbnRyb2w6ICh2YWx1ZT86IGFueSkgPT4gQWJzdHJhY3RDb250cm9sLFxuICBlcXVhbHM6ICh2MTogYW55LCB2MjogYW55KSA9PiBib29sZWFuLFxuICBpc0VtcHR5OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbixcbiAgdmFsdWU6IGFueSxcbiAgb3B0aW9ucz86IHsgZW1pdEV2ZW50OiBib29sZWFuOyBpbnNlcnRBdD86IG51bWJlcjsgYWxsb3dNYW55TnVsbFZhbHVlcz86IGJvb2xlYW47IGFsbG93RHVwbGljYXRlVmFsdWU/OiBib29sZWFuIH1cbik6IGJvb2xlYW4ge1xuICBjb25zdCBkaXNhYmxlZCA9IGFycmF5Q29udHJvbC5kaXNhYmxlZDtcblxuICBsZXQgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICBsZXQgaW5kZXggPSAtMTtcbiAgbGV0IGlzRW1wdHlWYWx1ZSA9IGlzRW1wdHkodmFsdWUpO1xuXG4gIC8vIFNlYXJjaCBpZiB2YWx1ZSBhbHJlYWR5IGV4aXN0c1xuICBpZiAoIWlzRW1wdHlWYWx1ZSAmJiBvcHRpb25zPy5hbGxvd0R1cGxpY2F0ZVZhbHVlICE9PSB0cnVlKSB7XG4gICAgaW5kZXggPSAoYXJyYXlDb250cm9sLnZhbHVlIHx8IFtdKS5maW5kSW5kZXgoKHYpID0+IGVxdWFscyh2YWx1ZSwgdikpO1xuICB9XG5cbiAgLy8gSWYgdmFsdWUgbm90IGV4aXN0cywgYnV0IGxhc3QgdmFsdWUgaXMgZW1wdHk6IHJldXNlIGxhc3QgdmFsdWVcbiAgaWYgKGluZGV4ID09PSAtMSAmJiBvcHRpb25zPy5hbGxvd01hbnlOdWxsVmFsdWVzICE9PSB0cnVlICYmIGFycmF5Q29udHJvbC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGFzdFZhbHVlID0gYXJyYXlDb250cm9sLmF0KGFycmF5Q29udHJvbC5sZW5ndGggLSAxKS52YWx1ZTtcbiAgICBpZiAoaXNFbXB0eShsYXN0VmFsdWUpKSB7XG4gICAgICBpbmRleCA9IGFycmF5Q29udHJvbC5sZW5ndGggLSAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlcGxhY2UgdGhlIGV4aXN0aW5nIHZhbHVlXG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBpZiAoIWlzRW1wdHlWYWx1ZSkge1xuICAgICAgYXJyYXlDb250cm9sLmF0KGluZGV4KS5wYXRjaFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWRcbiAgICBpZiAoZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBpZiAoaXNOb3ROaWxPck5hTihvcHRpb25zPy5pbnNlcnRBdCkpIHtcbiAgICAgIGFycmF5Q29udHJvbC5pbnNlcnQob3B0aW9ucy5pbnNlcnRBdCwgY29udHJvbCwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFycmF5Q29udHJvbC5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgLy8gTWFyayBhcnJheSBjb250cm9sIGRpcnR5XG4gICAgICBpZiAoIWlzRW1wdHlWYWx1ZSkge1xuICAgICAgICBhcnJheUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGFzQ2hhbmdlZDtcbn1cblxuLyoqXG4gKiBTZXQgYW4gYXJyYXkgdXNpbmcgZ2l2ZW4gZGVmYXVsdCB2YWx1ZXMuIEVhY2ggZGVmYXVsdCB2YWx1ZSB3aWxsIGJlIHBhc3MgdG8gdGhlICdjcmVhdGVDb250cm9sKCknIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIGFycmF5Q29udHJvbFxuICogQHBhcmFtIGNyZWF0ZUNvbnRyb2xcbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWVzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdEFycmF5Q29udHJvbHNGcm9tVmFsdWVzKFxuICBhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksXG4gIGNyZWF0ZUNvbnRyb2w6ICh2YWx1ZT86IGFueSkgPT4gQWJzdHJhY3RDb250cm9sLFxuICBkZWZhdWx0VmFsdWVzOiBhbnlbXSxcbiAgb3B0aW9ucz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9XG4pOiBib29sZWFuIHtcbiAgaWYgKGFycmF5Q29udHJvbC5sZW5ndGggPT09IDAgJiYgKCFkZWZhdWx0VmFsdWVzIHx8IGRlZmF1bHRWYWx1ZXMubGVuZ3RoID09PSAwKSkgcmV0dXJuIGZhbHNlOyAvLyBObyBjaGFuZ2VzIG5lZWRcblxuICBjb25zdCBkaXNhYmxlZCA9IGFycmF5Q29udHJvbC5kaXNhYmxlZDtcblxuICB3aGlsZSAoYXJyYXlDb250cm9sLmxlbmd0aCA+IDApIHtcbiAgICBhcnJheUNvbnRyb2wucmVtb3ZlQXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEsIG9wdGlvbnMpO1xuICB9XG5cbiAgKGRlZmF1bHRWYWx1ZXMgfHwgW10pLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IGNyZWF0ZUNvbnRyb2wodmFsdWUpO1xuXG4gICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgIC8vIFRoaXMgaXMgbmVlZCB0byBhdm9pZCBwYXJlbnQgZm9ybSB0byBiZSBlbmFibGVkXG4gICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBlbHNlIGlmICghZGlzYWJsZWQgJiYgY29udHJvbC5kaXNhYmxlZCkgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXG4gICAgYXJyYXlDb250cm9sLnB1c2goY29udHJvbCwgb3B0aW9ucyk7XG4gIH0pO1xuXG4gIHJldHVybiB0cnVlOyAvLyBIYXMgc29tZSBjaGFuZ2VzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVBcnJheShcbiAgYXJyYXlDb250cm9sOiBVbnR5cGVkRm9ybUFycmF5LFxuICBjcmVhdGVDb250cm9sOiAoKSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGxlbmd0aDogbnVtYmVyLFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cbik6IGJvb2xlYW4ge1xuICBpZiAoYXJyYXlDb250cm9sLmxlbmd0aCA9PT0gbGVuZ3RoKSByZXR1cm4gZmFsc2U7IC8vIE5vIGNoYW5nZXMgbmVlZFxuXG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIC8vIFJlZHVjZSBzaXplXG4gIHdoaWxlIChhcnJheUNvbnRyb2wubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgYXJyYXlDb250cm9sLnJlbW92ZUF0KGFycmF5Q29udHJvbC5sZW5ndGggLSAxLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEluY3JlYXNlIHNpemVcbiAgd2hpbGUgKGFycmF5Q29udHJvbC5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQ29udHJvbCgpO1xuXG4gICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgIC8vIFRoaXMgaXMgbmVlZCB0byBhdm9pZCBwYXJlbnQgZm9ybSB0byBiZSBlbmFibGVkLCBhZnRlciBjYWxsaW5nIHJlc2l6ZUFycmF5KClcbiAgICBpZiAoZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBhcnJheUNvbnRyb2wucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlOyAvLyBIYXMgc29tZSBjaGFuZ2VzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVWYWx1ZUluQXJyYXkoYXJyYXlDb250cm9sOiBVbnR5cGVkRm9ybUFycmF5LCBpc0VtcHR5OiAodmFsdWU6IGFueSkgPT4gYm9vbGVhbiwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICBhcnJheUNvbnRyb2wucmVtb3ZlQXQoaW5kZXgpO1xuICBhcnJheUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclZhbHVlSW5BcnJheShhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnRyb2wgPSBhcnJheUNvbnRyb2wuYXQoaW5kZXgpO1xuICBpZiAoaXNFbXB0eShjb250cm9sLnZhbHVlKSkgcmV0dXJuIGZhbHNlOyAvLyBza2lwIChub3QgbmVlZCB0byBjbGVhcilcblxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICBjb3B5RW50aXR5MkZvcm0oe30sIGNvbnRyb2wpO1xuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgY29udHJvbC5zZXRWYWx1ZShbXSk7XG4gIH0gZWxzZSB7XG4gICAgY29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgfVxuICBhcnJheUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQWxsQXNUb3VjaGVkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgaWYgKCFjb250cm9sKSByZXR1cm47XG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIG1hcmtGb3JtR3JvdXBBc1RvdWNoZWQoY29udHJvbCwgeyAuLi5vcHRzLCBvbmx5U2VsZjogdHJ1ZSB9KTsgLy8gcmVjdXJzaXZlIGNhbGxcbiAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIChjb250cm9sLmNvbnRyb2xzIHx8IFtdKS5mb3JFYWNoKChjKSA9PiBtYXJrQ29udHJvbEFzVG91Y2hlZChjLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pKTsgLy8gcmVjdXJzaXZlIGNhbGxcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyAuLi5vcHRzLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0Zvcm1Hcm91cEFzVG91Y2hlZChmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWZvcm0pIHJldHVybjtcbiAgZm9ybS5tYXJrQXNUb3VjaGVkKG9wdHMpO1xuICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKVxuICAgIC5tYXAoKGtleSkgPT4gZm9ybS5jb250cm9sc1trZXldKVxuICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IGNvbnRyb2wuZW5hYmxlZClcbiAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4gbWFya0NvbnRyb2xBc1RvdWNoZWQoY29udHJvbCwgb3B0cykpO1xuICBmb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyAuLi5vcHRzLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtDb250cm9sQXNUb3VjaGVkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgaWYgKCFjb250cm9sKSByZXR1cm47XG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIG1hcmtBbGxBc1RvdWNoZWQoY29udHJvbCwgeyAuLi5vcHRzLCBvbmx5U2VsZjogdHJ1ZSB9KTsgLy8gcmVjdXJzaXZlIGNhbGxcbiAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIChjb250cm9sLmNvbnRyb2xzIHx8IFtdKS5mb3JFYWNoKChjKSA9PiBtYXJrQ29udHJvbEFzVG91Y2hlZChjLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pKTsgLy8gcmVjdXJzaXZlIGNhbGxcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyAuLi5vcHRzLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eShmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWZvcm0pIHJldHVybjtcbiAgZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdHMpO1xuICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKVxuICAgIC5tYXAoKGtleSkgPT4gZm9ybS5jb250cm9sc1trZXldKVxuICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IGNvbnRyb2wuZW5hYmxlZClcbiAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgICAgIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoY29udHJvbCwgeyAuLi5vcHRzLCBvbmx5U2VsZjogdHJ1ZSB9KTsgLy8gcmVjdXJzaXZlIGNhbGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0FzVW50b3VjaGVkKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IGZvcm0uZ2V0KGtleSk7XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgICBtYXJrQXNVbnRvdWNoZWQoY29udHJvbCwgeyBvbmx5U2VsZjogdHJ1ZSB9KTsgLy8gcmVjdXJzaXZlIGNhbGxcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogV2FpdCBlbmQgb2YgYXN5bmMgdmFsaWRhdGlvbiAobm90IHBlbmRpbmcpLiBUaGlzIG5lZWQgdG8gaW1wbGVtZW50IHtwZW5kaW5nOiBib29sZWFufVxuICogcmV0dXJuIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0V2hpbGVQZW5kaW5nPFQgZXh0ZW5kcyB7IHBlbmRpbmc6IGJvb2xlYW4gfT4oZm9ybTogVCwgb3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByZWRpY2F0ZTogUHJlZGljYXRlPHZvaWQ+ID0gKCkgPT4gZm9ybS5wZW5kaW5nICE9PSB0cnVlO1xuICByZXR1cm4gd2FpdEZvcihwcmVkaWNhdGUsIG9wdHMpO1xufVxuXG4vKipcbiAqIFdhaXQgZm9ybSBpcyBpZGxlIChub3QgbG9hZGluZykuIFRoaXMgbmVlZCB0byBpbXBsZW1lbnQge2xvYWRpbmc6IGJvb2xlYW59XG4gKlxuICogQHBhcmFtIGZvcm1cbiAqIEBwYXJhbSBvcHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0SWRsZTxUIGV4dGVuZHMgeyBsb2FkaW5nOiBib29sZWFuIH0+KGZvcm06IFQsIG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcmVkaWNhdGU6IFByZWRpY2F0ZTx2b2lkPiA9ICgpID0+IGZvcm0ubG9hZGluZyAhPT0gdHJ1ZTtcbiAgcmV0dXJuIHdhaXRGb3IocHJlZGljYXRlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckZvcm1FcnJvcnNCeVByZWZpeChlcnJvcnM6IEZvcm1FcnJvcnMsIC4uLnByZWZpeGVzOiBzdHJpbmdbXSk6IEZvcm1FcnJvcnMge1xuICBpZiAoaXNFbXB0eUFycmF5KHByZWZpeGVzKSkgcmV0dXJuIGVycm9ycztcbiAgcmV0dXJuIGZpbHRlckZvcm1FcnJvcnNCeVBhdGgoZXJyb3JzLCAocGF0aCkgPT4gcHJlZml4ZXM/LnNvbWUoKHByZWZpeCkgPT4gcGF0aC5zdGFydHNXaXRoKHByZWZpeCkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckZvcm1FcnJvcnNCeVBhdGgoZXJyb3JzOiBGb3JtRXJyb3JzLCBmaWx0ZXI6IFByZWRpY2F0ZTxzdHJpbmc+KTogRm9ybUVycm9ycyB7XG4gIGlmICh0eXBlb2YgZmlsdGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZXJyb3JzO1xuICByZXR1cm4gZmlsdGVyRm9ybUVycm9ycyhlcnJvcnMsIChbcGF0aCwgX10pID0+IGZpbHRlcihwYXRoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJGb3JtRXJyb3JzKGVycm9yczogRm9ybUVycm9ycywgZmlsdGVyOiBQcmVkaWNhdGU8W3N0cmluZywgYW55XT4pOiBGb3JtRXJyb3JzIHtcbiAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBlcnJvcnM7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlcnJvcnMpXG4gICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgLnJlZHVjZShcbiAgICAgIChyZXMsIFtwYXRoLCBlcnJvcl0pID0+IHtcbiAgICAgICAgLy8gSW5pdCBlcnJvciBtYXBcbiAgICAgICAgcmVzID0gcmVzIHx8IHt9O1xuICAgICAgICAvLyBBZGQgY3VycmVudCBlcnJvclxuICAgICAgICByZXNbcGF0aF0gPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sXG4gICAgICA8Rm9ybUVycm9ycz51bmRlZmluZWRcbiAgICApO1xufVxuIl19
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFvQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2SSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBTTdEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBVyxFQUFFLE1BQXdCLEVBQUUsSUFBa0Q7SUFDdkgsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBdUIsRUFBRSxJQUFzQjtJQUNwRixPQUFPLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQTJCLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUF1QixFQUFFLE9BQXdCLEVBQUUsSUFBYTtJQUNsRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUUxQyxh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Q0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFrQixFQUFFLE1BQWdDO0lBQ25GLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2hELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNkLE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ3JCLGlCQUFpQjtRQUNqQixHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNoQixvQkFBb0I7UUFDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFDVyxTQUFTLENBQ3RCLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc01vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JOYU4sIG51bGxJZlVuZGVmaW5lZCB9IGZyb20gJy4vZnVuY3Rpb25zJztcbmltcG9ydCB7IHRvRGF0ZUlTT1N0cmluZyB9IGZyb20gJy4vZGF0ZXMnO1xuaW1wb3J0IHsgd2FpdEZvciwgV2FpdEZvck9wdGlvbnMgfSBmcm9tICcuL29ic2VydmFibGVzJztcbmltcG9ydCB7IFByZWRpY2F0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcHBGb3JtQXJyYXkgfSBmcm9tICcuLi9jb3JlL2Zvcm0vYXJyYXkvZm9ybS1hcnJheSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUVycm9ycyB7XG4gIFtrZXk6IHN0cmluZ106IFZhbGlkYXRpb25FcnJvcnM7XG59XG5cbi8qKlxuICogRmlsbCBhIGZvcm0gdXNpbmcgYSBzb3VyY2UgZW50aXR5XG4gKlxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGVudGl0eVxuICogQHBhcmFtIG9wdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlFbnRpdHkyRm9ybShlbnRpdHk6IGFueSwgdGFyZ2V0OiBVbnR5cGVkRm9ybUdyb3VwLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBvbmx5U2VsZj86IGJvb2xlYW4gfSkge1xuICBjb25zdCBqc29uID0gZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eShlbnRpdHksIHRhcmdldCk7XG4gIHRhcmdldC5wYXRjaFZhbHVlKGpzb24sIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eShlbnRpdHk6IGFueSB8IHVuZGVmaW5lZCwgZm9ybTogVW50eXBlZEZvcm1Hcm91cCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICByZXR1cm4gYWRhcHRWYWx1ZVRvQ29udHJvbChlbnRpdHksIGZvcm0pIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGVudGl0eSBpbnRvIGEgc2ltcGxlIG9iamVjdCwgY29tcGF0aWJsZSB3aXRoIHRoZSBnaXZlbiBmb3JtXG4gKlxuICogQHBhcmFtIHNvdXJjZSBhbiBlbnRpdHkgKG9yIHN1YmVudGl0eSlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRWYWx1ZVRvQ29udHJvbChzb3VyY2U6IGFueSB8IHVuZGVmaW5lZCwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoPzogc3RyaW5nKTogYW55IHtcbiAgY29uc3QgcGF0aFByZWZpeCA9IHBhdGggPyBwYXRoICsgJy4nIDogJyc7XG5cbiAgLy8gRm9ybSBncm91cFxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbC5jb250cm9scykge1xuICAgICAgcmVzdWx0W2tleV0gPSBhZGFwdFZhbHVlVG9Db250cm9sKHNvdXJjZSAmJiBzb3VyY2Vba2V5XSwgY29udHJvbC5jb250cm9sc1trZXldLCBwYXRoUHJlZml4ICsga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIEFycmF5XG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIC8vIFNwbGl0LCBpZiBtYW55IHZhbHVlcyBpbiBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCd8Jyk7XG4gICAgfVxuICAgIC8vIFNraXAgaWYgdmFsdWUgaXMgbm90IGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBSZXNpemFibGUgYXJyYXlcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFwcEZvcm1BcnJheSkge1xuICAgICAgY29uc3QgZXhhbXBsZUNvbnRyb2wgPSBjb250cm9sLmNyZWF0ZUNvbnRyb2woKTtcbiAgICAgIHJldHVybiBzb3VyY2UubWFwKChpdGVtLCBpbmRleCkgPT4gYWRhcHRWYWx1ZVRvQ29udHJvbChpdGVtLCBleGFtcGxlQ29udHJvbCwgcGF0aFByZWZpeCArICcjJyArIGluZGV4KSkgYXMgYW55W107XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGFycmF5XG4gICAgZWxzZSBpZiAoY29udHJvbC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdENvbnRyb2wgPSBjb250cm9sLmF0KDApO1xuICAgICAgLy8gVXNlIHRoZSBmaXJzdCBmb3JtIGdyb3VwLCBhcyBtb2RlbFxuICAgICAgbGV0IHJlc3VsdCA9IHNvdXJjZS5tYXAoKGl0ZW0sIGluZGV4KSA9PiBhZGFwdFZhbHVlVG9Db250cm9sKGl0ZW0sIGZpcnN0Q29udHJvbCwgcGF0aFByZWZpeCArICcjJyArIGluZGV4KSkgYXMgYW55W107XG5cbiAgICAgIC8vIFRydW5jYXRlIGlmIHRvbyBtYW55IHZhbHVlc1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiBjb250cm9sLmxlbmd0aCkge1xuICAgICAgICBpZiAoZmlyc3RDb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IGNvbnRyb2wubGVuZ3RoOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb250cm9sLnB1c2gobmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBmaXJzdENvbnRyb2wudmFsaWRhdG9yKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgV0FSTjogcGxlYXNlIHJlc2l6ZSB0aGUgRm9ybUFycmF5ICcke3BhdGggfHwgJyd9JyB0byB0aGUgc2FtZSBsZW5ndGggb2YgdGhlIGlucHV0IGFycmF5YCk7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGNvbnRyb2wubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdmFsdWVzIGlmIG5vdCBlbm91Z2h0XG4gICAgICBlbHNlIGlmIChyZXN1bHQubGVuZ3RoIDwgY29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgLy9jb25zb2xlLndhcm4oYFdBUk46IEFkZGluZyBudWxsIHZhbHVlIHRvIGFycmF5IHZhbHVlc2ApO1xuICAgICAgICBmb3IgKGxldCBpID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGNvbnRyb2wubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gU2tpcCBpZiB1bmFibGUgdG8gZmluZCBhIGNvbnRyb2wgaW4gdGhlIGFycmF5XG4gICAgZWxzZSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHNvdXJjZSkpIGNvbnNvbGUud2FybihgV0FSTjogcGxlYXNlIHJlc2l6ZSB0aGUgRm9ybUFycmF5ICcke3BhdGh9JyB0byB0aGUgc2FtZSBsZW5ndGggb2YgdGhlIGlucHV0IGFycmF5YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLy8gRm9ybSBjb250cm9sXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sKSB7XG4gICAgLy8gRGF0ZVxuICAgIGlmIChpc01vbWVudChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdG9EYXRlSVNPU3RyaW5nKHNvdXJjZSk7XG4gICAgfVxuICAgIC8vIEFueSBvdGhlciBjb250cm9sOiByZXBsYWNlIHVuZGVmaW5lZCBieSBudWxsIHZhbHVlXG4gICAgLy8gYmVjYXVzZSBVbmRlZmluZWQgaXMgbm90IGF1dGhvcml6ZWQgYXMgY29udHJvbCB2YWx1ZVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxJZlVuZGVmaW5lZChzb3VyY2UpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRm9ybUVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGxvZ1ByZWZpeD86IHN0cmluZywgcGF0aD86IHN0cmluZykge1xuICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbC52YWxpZCkgcmV0dXJuO1xuICBsb2dQcmVmaXggPSBsb2dQcmVmaXggfHwgJyc7XG4gIC8vIEZvcm0gZ3JvdXBcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgaWYgKCFwYXRoKSBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4fSBGb3JtIGVycm9yczpgKTtcbiAgICBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzKS5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeH0gLT4gJHtwYXRoIHx8ICcnfSAoJHtlcnJvcn0pYCkpO1xuICAgIH1cbiAgICBpZiAoY29udHJvbC5jb250cm9scykge1xuICAgICAgT2JqZWN0LmtleXMoY29udHJvbC5jb250cm9scykuZm9yRWFjaChcbiAgICAgICAgKGNoaWxkKSA9PiBsb2dGb3JtRXJyb3JzKGNvbnRyb2wuY29udHJvbHNbY2hpbGRdLCBsb2dQcmVmaXgsIHBhdGggPyBgJHtwYXRofS4ke2NoaWxkfWAgOiBjaGlsZCkgLy8gUmVjdXJzaXZlIGNhbGxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIEZvcm0gYXJyYXlcbiAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzKS5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeH0gLT4gJHtwYXRoIHx8ICcnfSAoJHtlcnJvcn0pYCkpO1xuICAgIH1cbiAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgbG9nRm9ybUVycm9ycyhjaGlsZCwgbG9nUHJlZml4LCBwYXRoID8gYCR7cGF0aH0uJHtpbmRleH1gIDogYCR7aW5kZXh9YCk7IC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgfSk7XG4gIH1cbiAgLy8gT3RoZXIgY29udHJvbCdzIGVycm9yc1xuICBlbHNlIGlmIChjb250cm9sLmVycm9ycykge1xuICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuZXJyb3JzKS5mb3JFYWNoKChlcnJvcikgPT4gY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeH0gLT4gJHtwYXRoIHx8ICcnfSAoJHtlcnJvcn0pYCkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRXJyb3JzKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIG9wdHM/OiB7XG4gICAgY29udHJvbE5hbWU/OiBzdHJpbmc7XG4gICAgcmVzdWx0PzogRm9ybUVycm9ycztcbiAgICByZWN1cnNpdmU/OiBib29sZWFuO1xuICB9XG4pOiBGb3JtRXJyb3JzIHtcbiAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIG9wdHMucmVzdWx0ID0gb3B0cy5yZXN1bHQgfHwge307XG5cbiAgLy8gRm9ybSBncm91cFxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAvLyBDb3B5IGVycm9yc1xuICAgIGlmIChjb250cm9sLmVycm9ycykge1xuICAgICAgaWYgKG9wdHMuY29udHJvbE5hbWUpIHtcbiAgICAgICAgb3B0cy5yZXN1bHRbb3B0cy5jb250cm9sTmFtZV0gPSB7XG4gICAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRzLnJlc3VsdCA9IHtcbiAgICAgICAgICAuLi5vcHRzLnJlc3VsdCxcbiAgICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZWN1cnNpdmUgIT09IGZhbHNlKSB7XG4gICAgICAvLyBMb29wIG9uIGNoaWxkcmVuIGNvbnRyb2xzXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb250cm9sLmNvbnRyb2xzKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5jb250cm9sc1trZXldO1xuICAgICAgICBpZiAoY2hpbGQ/LmVuYWJsZWQpIHtcbiAgICAgICAgICBnZXRGb3JtRXJyb3JzKGNoaWxkLCB7XG4gICAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICAgICAgY29udHJvbE5hbWU6IG9wdHMuY29udHJvbE5hbWUgPyBbb3B0cy5jb250cm9sTmFtZSwga2V5XS5qb2luKCcuJykgOiBrZXksXG4gICAgICAgICAgICByZXN1bHQ6IG9wdHMucmVzdWx0LCAvLyBNYWtlIHN1cmUgdG8ga2VlcCB0aGUgc2FtZSByZXN1bHQgb2JqZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGb3JtIGFycmF5XG4gIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgLy8gQ29weSBlcnJvcnNcbiAgICBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIGlmIChvcHRzLmNvbnRyb2xOYW1lKSB7XG4gICAgICAgIG9wdHMucmVzdWx0W29wdHMuY29udHJvbE5hbWVdID0ge1xuICAgICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0cy5yZXN1bHQgPSB7XG4gICAgICAgICAgLi4ub3B0cy5yZXN1bHQsXG4gICAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgIGdldEZvcm1FcnJvcnMoY2hpbGQsIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgY29udHJvbE5hbWU6IChvcHRzLmNvbnRyb2xOYW1lIHx8ICcnKSArICcuJyArIGluZGV4LFxuICAgICAgICByZXN1bHQ6IG9wdHMucmVzdWx0LCAvLyBNYWtlIHN1cmUgdG8ga2VlcCB0aGUgc2FtZSByZXN1bHQgb2JqZWN0XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE90aGVyIHR5cGUgb2YgY29udHJvbCAoZS5nIHNpbXBsZSBjb250cm9sKVxuICBlbHNlIGlmIChjb250cm9sLmVycm9ycykge1xuICAgIGlmIChvcHRzLmNvbnRyb2xOYW1lKSB7XG4gICAgICBvcHRzLnJlc3VsdFtvcHRzLmNvbnRyb2xOYW1lXSA9IHtcbiAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnJlc3VsdCA9IHtcbiAgICAgICAgLi4ub3B0cy5yZXN1bHQsXG4gICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdHMucmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbEZyb21QYXRoKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIHBhdGg6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoJy4nKTtcbiAgaWYgKGkgPT09IC0xKSB7XG4gICAgcmV0dXJuIGZvcm0uY29udHJvbHNbcGF0aF07XG4gIH1cbiAgY29uc3Qga2V5ID0gcGF0aC5zdWJzdHJpbmcoMCwgaSk7XG4gIGlmIChmb3JtLmNvbnRyb2xzW2tleV0gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgcmV0dXJuIGdldENvbnRyb2xGcm9tUGF0aChmb3JtLmNvbnRyb2xzW2tleV0gYXMgVW50eXBlZEZvcm1Hcm91cCwgcGF0aC5zdWJzdHJpbmcoaSArIDEpKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBwYXRoOiAnJHtrZXl9JyBzaG91bGQgYmUgYSBmb3JtIGdyb3VwLmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUNvbnRyb2xzKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIHBhdGhzOiBzdHJpbmdbXSwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfSkge1xuICAocGF0aHMgfHwgW10pLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gZ2V0Q29udHJvbEZyb21QYXRoKGZvcm0sIHBhdGgpO1xuICAgIGlmIChjb250cm9sKSBkaXNhYmxlQ29udHJvbChjb250cm9sLCBvcHRzKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUFuZENsZWFyQ29udHJvbHMoXG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXAsXG4gIHBhdGhzOiBzdHJpbmdbXSxcbiAgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfVxuKSB7XG4gIChwYXRocyB8fCBbXSkuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgoZm9ybSwgcGF0aCk7XG4gICAgaWYgKGNvbnRyb2wpIGRpc2FibGVBbmRDbGVhckNvbnRyb2woY29udHJvbCwgb3B0cyk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUNvbnRyb2xzKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIHBhdGhzOiBzdHJpbmdbXSwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuOyByZXF1aXJlZD86IGJvb2xlYW4gfSkge1xuICAocGF0aHMgfHwgW10pLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gZ2V0Q29udHJvbEZyb21QYXRoKGZvcm0sIHBhdGgpO1xuICAgIGlmIChjb250cm9sKSBlbmFibGVDb250cm9sKGNvbnRyb2wsIG9wdHMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRyb2xzRW5hYmxlZChcbiAgZm9ybTogVW50eXBlZEZvcm1Hcm91cCxcbiAgZW5hYmxlZDogYm9vbGVhbixcbiAgcGF0aHM6IHN0cmluZ1tdLFxuICBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47IHJlcXVpcmVkPzogYm9vbGVhbiB9XG4pIHtcbiAgKHBhdGhzIHx8IFtdKS5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgY29uc3QgY29udHJvbCA9IGdldENvbnRyb2xGcm9tUGF0aChmb3JtLCBwYXRoKTtcbiAgICBpZiAoY29udHJvbCkgc2V0Q29udHJvbEVuYWJsZWQoY29udHJvbCwgZW5hYmxlZCwgb3B0cyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVxdWlyZWQ/OiBib29sZWFuIH0pIHtcbiAgc2V0Q29udHJvbEVuYWJsZWQoY29udHJvbCwgdHJ1ZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVxdWlyZWQ/OiBib29sZWFuIH0pIHtcbiAgc2V0Q29udHJvbEVuYWJsZWQoY29udHJvbCwgZmFsc2UsIHsgcmVxdWlyZWQ6IGZhbHNlLCAuLi5vcHRzIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUFuZENsZWFyQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcmVxdWlyZWQ/OiBib29sZWFuIH0pIHtcbiAgY29uc3Qgd2FzRGlzYWJsZWQgPSBjb250cm9sLmRpc2FibGVkO1xuXG4gIC8vIEFwcGx5IGRpc2FibGVcbiAgc2V0Q29udHJvbEVuYWJsZWQoY29udHJvbCwgZmFsc2UsIHsgcmVxdWlyZWQ6IGZhbHNlLCAuLi5vcHRzIH0pO1xuXG4gIC8vIEltcG9ydGFudCwgc2hvdWxkIG5vdCB1c2UgcmVzZXQoKSB0byBtYXJrIHRoZSBjb250cm9sIGFzIGRpcnR5LlxuICAvLyBPdGhlcndpc2UsIG9wdGltaXphdGlvbiB1c2luZyBkaXJ0eSAoLmUuZyBNZWFzdXJlbWVudEZvcm0pIHdpbGwgbm90IGJlIG5vdGlmaWVkIGJ5IHRoaXMgY2hhbmdlZFxuICBpZiAoaXNOb3ROaWwoY29udHJvbC52YWx1ZSkpIHtcbiAgICBpZiAod2FzRGlzYWJsZWQpIHtcbiAgICAgIGNvbnRyb2wucmVzZXQobnVsbCwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUobnVsbCwgb3B0cyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb250cm9sRW5hYmxlZChcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICBlbmFibGVkOiBib29sZWFuLFxuICBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47IHJlcXVpcmVkPzogYm9vbGVhbiB9XG4pIHtcbiAgaWYgKGVuYWJsZWQpIHtcbiAgICBpZiAoaXNOb3ROaWwob3B0cz8ucmVxdWlyZWQpICYmIG9wdHMucmVxdWlyZWQgJiYgIWNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XG4gICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIGNvbnRyb2wuZW5hYmxlKG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wuZGlzYWJsZShvcHRzKTtcbiAgICBpZiAoaXNOb3ROaWwob3B0cz8ucmVxdWlyZWQpICYmICFvcHRzLnJlcXVpcmVkICYmIGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpKSB7XG4gICAgICBjb250cm9sLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRWYWx1ZUluQXJyYXkoXG4gIGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSxcbiAgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogYW55KSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGVxdWFsczogKHYxOiBhbnksIHYyOiBhbnkpID0+IGJvb2xlYW4sXG4gIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLFxuICB2YWx1ZTogYW55LFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW47IGluc2VydEF0PzogbnVtYmVyOyBhbGxvd01hbnlOdWxsVmFsdWVzPzogYm9vbGVhbjsgYWxsb3dEdXBsaWNhdGVWYWx1ZT86IGJvb2xlYW4gfVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgaXNFbXB0eVZhbHVlID0gaXNFbXB0eSh2YWx1ZSk7XG5cbiAgLy8gU2VhcmNoIGlmIHZhbHVlIGFscmVhZHkgZXhpc3RzXG4gIGlmICghaXNFbXB0eVZhbHVlICYmIG9wdGlvbnM/LmFsbG93RHVwbGljYXRlVmFsdWUgIT09IHRydWUpIHtcbiAgICBpbmRleCA9IChhcnJheUNvbnRyb2wudmFsdWUgfHwgW10pLmZpbmRJbmRleCgodikgPT4gZXF1YWxzKHZhbHVlLCB2KSk7XG4gIH1cblxuICAvLyBJZiB2YWx1ZSBub3QgZXhpc3RzLCBidXQgbGFzdCB2YWx1ZSBpcyBlbXB0eTogcmV1c2UgbGFzdCB2YWx1ZVxuICBpZiAoaW5kZXggPT09IC0xICYmIG9wdGlvbnM/LmFsbG93TWFueU51bGxWYWx1ZXMgIT09IHRydWUgJiYgYXJyYXlDb250cm9sLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0VmFsdWUgPSBhcnJheUNvbnRyb2wuYXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEpLnZhbHVlO1xuICAgIGlmIChpc0VtcHR5KGxhc3RWYWx1ZSkpIHtcbiAgICAgIGluZGV4ID0gYXJyYXlDb250cm9sLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgdmFsdWVcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIGlmICghaXNFbXB0eVZhbHVlKSB7XG4gICAgICBhcnJheUNvbnRyb2wuYXQoaW5kZXgpLnBhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKHZhbHVlKTtcblxuICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZFxuICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSBpZiAoIWRpc2FibGVkICYmIGNvbnRyb2wuZGlzYWJsZWQpIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGlmIChpc05vdE5pbE9yTmFOKG9wdGlvbnM/Lmluc2VydEF0KSkge1xuICAgICAgYXJyYXlDb250cm9sLmluc2VydChvcHRpb25zLmluc2VydEF0LCBjb250cm9sLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlDb250cm9sLnB1c2goY29udHJvbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAvLyBNYXJrIGFycmF5IGNvbnRyb2wgZGlydHlcbiAgICAgIGlmICghaXNFbXB0eVZhbHVlKSB7XG4gICAgICAgIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoYXNDaGFuZ2VkO1xufVxuXG4vKipcbiAqIFNldCBhbiBhcnJheSB1c2luZyBnaXZlbiBkZWZhdWx0IHZhbHVlcy4gRWFjaCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgcGFzcyB0byB0aGUgJ2NyZWF0ZUNvbnRyb2woKScgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gYXJyYXlDb250cm9sXG4gKiBAcGFyYW0gY3JlYXRlQ29udHJvbFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZXNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0QXJyYXlDb250cm9sc0Zyb21WYWx1ZXMoXG4gIGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSxcbiAgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogYW55KSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGRlZmF1bHRWYWx1ZXM6IGFueVtdLFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cbik6IGJvb2xlYW4ge1xuICBpZiAoYXJyYXlDb250cm9sLmxlbmd0aCA9PT0gMCAmJiAoIWRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlcy5sZW5ndGggPT09IDApKSByZXR1cm4gZmFsc2U7IC8vIE5vIGNoYW5nZXMgbmVlZFxuXG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIHdoaWxlIChhcnJheUNvbnRyb2wubGVuZ3RoID4gMCkge1xuICAgIGFycmF5Q29udHJvbC5yZW1vdmVBdChhcnJheUNvbnRyb2wubGVuZ3RoIC0gMSwgb3B0aW9ucyk7XG4gIH1cblxuICAoZGVmYXVsdFZhbHVlcyB8fCBbXSkuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWRcbiAgICBpZiAoZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBhcnJheUNvbnRyb2wucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7IC8vIEhhcyBzb21lIGNoYW5nZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUFycmF5KFxuICBhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksXG4gIGNyZWF0ZUNvbnRyb2w6ICgpID0+IEFic3RyYWN0Q29udHJvbCxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIG9wdGlvbnM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfVxuKTogYm9vbGVhbiB7XG4gIGlmIChhcnJheUNvbnRyb2wubGVuZ3RoID09PSBsZW5ndGgpIHJldHVybiBmYWxzZTsgLy8gTm8gY2hhbmdlcyBuZWVkXG5cbiAgY29uc3QgZGlzYWJsZWQgPSBhcnJheUNvbnRyb2wuZGlzYWJsZWQ7XG5cbiAgLy8gUmVkdWNlIHNpemVcbiAgd2hpbGUgKGFycmF5Q29udHJvbC5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICBhcnJheUNvbnRyb2wucmVtb3ZlQXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gSW5jcmVhc2Ugc2l6ZVxuICB3aGlsZSAoYXJyYXlDb250cm9sLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKCk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgcmVzaXplQXJyYXkoKVxuICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSBpZiAoIWRpc2FibGVkICYmIGNvbnRyb2wuZGlzYWJsZWQpIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGFycmF5Q29udHJvbC5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7IC8vIEhhcyBzb21lIGNoYW5nZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVZhbHVlSW5BcnJheShhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGFycmF5Q29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyVmFsdWVJbkFycmF5KGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSwgaXNFbXB0eTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgY29udHJvbCA9IGFycmF5Q29udHJvbC5hdChpbmRleCk7XG4gIGlmIChpc0VtcHR5KGNvbnRyb2wudmFsdWUpKSByZXR1cm4gZmFsc2U7IC8vIHNraXAgKG5vdCBuZWVkIHRvIGNsZWFyKVxuXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGNvcHlFbnRpdHkyRm9ybSh7fSwgY29udHJvbCk7XG4gIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICBjb250cm9sLnNldFZhbHVlKFtdKTtcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sLnNldFZhbHVlKG51bGwpO1xuICB9XG4gIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtBbGxBc1RvdWNoZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgbWFya0Zvcm1Hcm91cEFzVG91Y2hlZChjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgKGNvbnRyb2wuY29udHJvbHMgfHwgW10pLmZvckVhY2goKGMpID0+IG1hcmtDb250cm9sQXNUb3VjaGVkKGMsIHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrRm9ybUdyb3VwQXNUb3VjaGVkKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpXG4gICAgLm1hcCgoa2V5KSA9PiBmb3JtLmNvbnRyb2xzW2tleV0pXG4gICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiBtYXJrQ29udHJvbEFzVG91Y2hlZChjb250cm9sLCBvcHRzKSk7XG4gIGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NvbnRyb2xBc1RvdWNoZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgbWFya0FsbEFzVG91Y2hlZChjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgKGNvbnRyb2wuY29udHJvbHMgfHwgW10pLmZvckVhY2goKGMpID0+IG1hcmtDb250cm9sQXNUb3VjaGVkKGMsIHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0cyk7XG4gIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpXG4gICAgLm1hcCgoa2V5KSA9PiBmb3JtLmNvbnRyb2xzW2tleV0pXG4gICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgICAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eShjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQXNVbnRvdWNoZWQoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgaWYgKCFmb3JtKSByZXR1cm47XG4gIGZvcm0ubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgIG1hcmtBc1VudG91Y2hlZChjb250cm9sLCB7IG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBXYWl0IGVuZCBvZiBhc3luYyB2YWxpZGF0aW9uIChub3QgcGVuZGluZykuIFRoaXMgbmVlZCB0byBpbXBsZW1lbnQge3BlbmRpbmc6IGJvb2xlYW59XG4gKiByZXR1cm4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRXaGlsZVBlbmRpbmc8VCBleHRlbmRzIHsgcGVuZGluZzogYm9vbGVhbiB9Pihmb3JtOiBULCBvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZGljYXRlOiBQcmVkaWNhdGU8dm9pZD4gPSAoKSA9PiBmb3JtLnBlbmRpbmcgIT09IHRydWU7XG4gIHJldHVybiB3YWl0Rm9yKHByZWRpY2F0ZSwgb3B0cyk7XG59XG5cbi8qKlxuICogV2FpdCBmb3JtIGlzIGlkbGUgKG5vdCBsb2FkaW5nKS4gVGhpcyBuZWVkIHRvIGltcGxlbWVudCB7bG9hZGluZzogYm9vbGVhbn1cbiAqXG4gKiBAcGFyYW0gZm9ybVxuICogQHBhcmFtIG9wdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRJZGxlPFQgZXh0ZW5kcyB7IGxvYWRpbmc6IGJvb2xlYW4gfT4oZm9ybTogVCwgb3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByZWRpY2F0ZTogUHJlZGljYXRlPHZvaWQ+ID0gKCkgPT4gZm9ybS5sb2FkaW5nICE9PSB0cnVlO1xuICByZXR1cm4gd2FpdEZvcihwcmVkaWNhdGUsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4KGVycm9yczogRm9ybUVycm9ycywgLi4ucHJlZml4ZXM6IHN0cmluZ1tdKTogRm9ybUVycm9ycyB7XG4gIGlmIChpc0VtcHR5QXJyYXkocHJlZml4ZXMpKSByZXR1cm4gZXJyb3JzO1xuICByZXR1cm4gZmlsdGVyRm9ybUVycm9yc0J5UGF0aChlcnJvcnMsIChwYXRoKSA9PiBwcmVmaXhlcz8uc29tZSgocHJlZml4KSA9PiBwYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRm9ybUVycm9yc0J5UGF0aChlcnJvcnM6IEZvcm1FcnJvcnMsIGZpbHRlcjogUHJlZGljYXRlPHN0cmluZz4pOiBGb3JtRXJyb3JzIHtcbiAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBlcnJvcnM7XG4gIHJldHVybiBmaWx0ZXJGb3JtRXJyb3JzKGVycm9ycywgKFtwYXRoLCBfXSkgPT4gZmlsdGVyKHBhdGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckZvcm1FcnJvcnMoZXJyb3JzOiBGb3JtRXJyb3JzLCBmaWx0ZXI6IFByZWRpY2F0ZTxbc3RyaW5nLCBhbnldPik6IEZvcm1FcnJvcnMge1xuICBpZiAodHlwZW9mIGZpbHRlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVycm9ycztcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGVycm9ycylcbiAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAucmVkdWNlKFxuICAgICAgKHJlcywgW3BhdGgsIGVycm9yXSkgPT4ge1xuICAgICAgICAvLyBJbml0IGVycm9yIG1hcFxuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgIC8vIEFkZCBjdXJyZW50IGVycm9yXG4gICAgICAgIHJlc1twYXRoXSA9IGVycm9yO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICAgIDxGb3JtRXJyb3JzPnVuZGVmaW5lZFxuICAgICk7XG59XG4iXX0=
@@ -21,6 +21,18 @@ export const MASKS = {
21
21
  DD: [SIGN, D, D, D, '.', D, D, D, D, D, D, D, '°'],
22
22
  },
23
23
  };
24
+ export const MASK_RANGES = {
25
+ latitude: {
26
+ DDMMSS: getInputSelectionRangesFromMask(MASKS.latitude.DDMMSS),
27
+ DDMM: getInputSelectionRangesFromMask(MASKS.latitude.DDMM),
28
+ DD: getInputSelectionRangesFromMask(MASKS.latitude.DD),
29
+ },
30
+ longitude: {
31
+ DDMMSS: getInputSelectionRangesFromMask(MASKS.longitude.DDMMSS),
32
+ DDMM: getInputSelectionRangesFromMask(MASKS.longitude.DDMM),
33
+ DD: getInputSelectionRangesFromMask(MASKS.longitude.DD),
34
+ },
35
+ };
24
36
  export const LAT_LONG_PATTERN_MAX_DECIMALS = 3;
25
37
  export const LAT_LONG_VALUE_MAX_DECIMALS = 7;
26
38
  const DEFAULT_OPTIONS = {
@@ -36,6 +48,9 @@ const DEFAULT_LONGITUDE_OPTIONS = {
36
48
  ...DEFAULT_OPTIONS,
37
49
  longitude: true,
38
50
  };
51
+ export function computeDecimalPart(value, nbOfDecimals) {
52
+ return value * 10 ** (nbOfDecimals * -1);
53
+ }
39
54
  export function formatLatLong(value, type, opts) {
40
55
  switch (type) {
41
56
  case 'latitude':
@@ -47,48 +62,46 @@ export function formatLatLong(value, type, opts) {
47
62
  export function formatLatitude(value, opts) {
48
63
  if (value === undefined || value === null)
49
64
  return null;
50
- opts.pattern = opts?.pattern ?? 'DD';
51
- const mask = MASKS['latitude'][opts.pattern];
52
- opts.inputSelectionRanges = opts?.inputSelectionRanges ?? getInputSelectionRangesFromMask(mask);
53
- opts.placeholderChar = opts?.placeholderChar ?? DEFAULT_PLACEHOLDER_CHAR;
54
- opts.fixLatLong = opts?.fixLatLong ?? true;
55
- const finalOpts = { ...DEFAULT_LATITUDE_OPTIONS, ...opts };
65
+ const finalOpts = {
66
+ ...DEFAULT_LATITUDE_OPTIONS,
67
+ fixLatLong: true,
68
+ ...opts,
69
+ };
56
70
  let fieldsValues;
57
71
  switch (opts.pattern) {
58
72
  case 'DDMMSS':
59
- fieldsValues = splitNumberToFieldsDDMMSS(value, finalOpts);
73
+ fieldsValues = splitDegreesToDDMMSSArray(value, finalOpts);
60
74
  break;
61
75
  case 'DDMM':
62
- fieldsValues = splitNumberToFieldsDDMM(value, finalOpts);
76
+ fieldsValues = splitDegreesToDDMMArray(value, finalOpts);
63
77
  break;
64
78
  default: // DD is the default
65
- fieldsValues = splitNumberToFieldsDD(value, finalOpts);
79
+ fieldsValues = splitDegreesToDDArray(value, finalOpts);
66
80
  }
67
- return fieldsValues.length > 0 ? formatFieldsArrayToString(fieldsValues, mask, finalOpts) : '';
81
+ return fieldsValues.length > 0 ? formatFieldsArrayToString(fieldsValues, finalOpts) : '';
68
82
  }
69
83
  export function formatLongitude(value, opts) {
70
84
  if (value === undefined || value === null)
71
85
  return null;
72
- opts.pattern = opts?.pattern ?? 'DD';
73
- const mask = MASKS['longitude'][opts.pattern];
74
- opts.inputSelectionRanges = opts?.inputSelectionRanges ?? getInputSelectionRangesFromMask(mask);
75
- opts.placeholderChar = opts?.placeholderChar ?? DEFAULT_PLACEHOLDER_CHAR;
76
- opts.fixLatLong = opts?.fixLatLong ?? true;
77
- const finalOpts = { ...DEFAULT_LONGITUDE_OPTIONS, ...opts };
78
- let fieldsValues;
86
+ const finalOpts = {
87
+ ...DEFAULT_LONGITUDE_OPTIONS,
88
+ fixLatLong: true,
89
+ ...opts,
90
+ };
91
+ let parts;
79
92
  switch (opts.pattern) {
80
93
  case 'DDMMSS':
81
- fieldsValues = splitNumberToFieldsDDMMSS(value, finalOpts);
94
+ parts = splitDegreesToDDMMSSArray(value, finalOpts);
82
95
  break;
83
96
  case 'DDMM':
84
- fieldsValues = splitNumberToFieldsDDMM(value, finalOpts);
97
+ parts = splitDegreesToDDMMArray(value, finalOpts);
85
98
  break;
86
99
  default: // DD is the default
87
- fieldsValues = splitNumberToFieldsDD(value, finalOpts);
100
+ parts = splitDegreesToDDArray(value, finalOpts);
88
101
  }
89
- return fieldsValues.length > 0 ? formatFieldsArrayToString(fieldsValues, mask, finalOpts) : '';
102
+ return parts.length > 0 ? formatFieldsArrayToString(parts, finalOpts) : '';
90
103
  }
91
- export function splitNumberToFieldsDD(value, opts) {
104
+ export function splitDegreesToDDArray(value, opts) {
92
105
  const negative = value < 0;
93
106
  if (negative)
94
107
  value *= -1;
@@ -111,7 +124,7 @@ export function splitNumberToFieldsDD(value, opts) {
111
124
  }
112
125
  }
113
126
  }
114
- export function splitNumberToFieldsDDMM(value, opts) {
127
+ export function splitDegreesToDDMMArray(value, opts) {
115
128
  const negative = value < 0;
116
129
  value = Math.abs(value);
117
130
  if (opts.fixLatLong) {
@@ -151,7 +164,7 @@ export function splitNumberToFieldsDDMM(value, opts) {
151
164
  result[0] = -1 * result[0];
152
165
  return result;
153
166
  }
154
- export function splitNumberToFieldsDDMMSS(value, opts) {
167
+ export function splitDegreesToDDMMSSArray(value, opts) {
155
168
  const negative = value < 0;
156
169
  value = Math.abs(value);
157
170
  if (opts.fixLatLong) {
@@ -197,14 +210,16 @@ function fixValue(value, longitude) {
197
210
  }
198
211
  return value;
199
212
  }
200
- function formatFieldsArrayToString(values, mask, opts) {
213
+ function formatFieldsArrayToString(values, opts) {
214
+ const pattern = opts.pattern || 'DD';
215
+ const mask = MASKS[opts.longitude ? 'longitude' : 'latitude'][pattern];
216
+ const inputSelectionRanges = MASK_RANGES[opts.longitude ? 'longitude' : 'latitude'][pattern];
201
217
  const negative = values[0].toString().slice(0, 1) === '-';
202
218
  if (typeof values[0] === 'number') {
203
219
  // Normalize degrees to be OK when convert to string
204
220
  values[0] = Math.abs(values[0]);
205
221
  }
206
222
  let result = '';
207
- const inputSelectionRanges = opts.inputSelectionRanges;
208
223
  const placeholderChar = opts.placeholderChar;
209
224
  inputSelectionRanges.forEach((range, idx) => {
210
225
  // "start" and "end" are used to get symbol chars from mask placeholder
@@ -301,4 +316,4 @@ function roundFloat(input, maxDecimals) {
301
316
  }
302
317
  return input;
303
318
  }
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0bG9uZy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixvQ0FBb0MsRUFDcEMsbUNBQW1DLEVBQ25DLG9DQUFvQyxHQUNyQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUU1RSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUVwQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBSWQ7SUFDRixRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ2hFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxF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QUM7UUFDbEQsK0RBQStEO1FBQy9ELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUixcbiAgRU1QVFlfUExBQ0VIT0xERVJfQ0hBUixcbiAgRU1QVFlfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMLFxuICBQTFVTX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCxcbiAgU1BBQ0VfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMLFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgTGF0TG9uZ1R5cGUgPSAnbGF0aXR1ZGUnIHwgJ2xvbmdpdHVkZSc7XG5leHBvcnQgZGVjbGFyZSB0eXBlIExhdExvbmdQYXR0ZXJuID0gJ0RETU1TUycgfCAnRERNTScgfCAnREQnO1xuZXhwb3J0IGNvbnN0IExBVF9MT05HX1BBVFRFUk5TOiBMYXRMb25nUGF0dGVybltdID0gWydERE1NU1MnLCAnRERNTScsICdERCddO1xuXG5jb25zdCBEID0gL1xcZHxcXHMvO1xuY29uc3QgRDUgPSAvWzAtNV18XFxzLztcbmNvbnN0IE0gPSBEO1xuY29uc3QgTTUgPSBENTtcbmNvbnN0IFMgPSBEO1xuY29uc3QgUzUgPSBENTtcbmNvbnN0IFNJR04gPSAvWystXS87XG5cbmV4cG9ydCBjb25zdCBNQVNLUzoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW3BhdHRlcm46IHN0cmluZ106IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIH07XG59ID0ge1xuICBsYXRpdHVkZToge1xuICAgIERETU1TUzogW0QsIEQsICfCsCcsICcgJywgTTUsIE0sIFwiJ1wiLCAnICcsIFM1LCBTLCAnLicsIFMsIFMsICdcIiddLFxuICAgIERETU06IFtELCBELCAnwrAnLCAnICcsIE01LCBNLCAnLicsIE0sIE0sIE0sIFwiJ1wiXSxcbiAgICBERDogW1NJR04sICcgJywgRCwgRCwgJy4nLCBELCBELCBELCBELCBELCBELCBELCAnwrAnXSxcbiAgfSxcbiAgbG9uZ2l0dWRlOiB7XG4gICAgRERNTVNTOiBbRCwgRCwgRCwgJ8KwJywgJyAnLCBNNSwgTSwgXCInXCIsICcgJywgUzUsIFMsICcuJywgUywgUywgJ1wiJ10sXG4gICAgRERNTTogW0QsIEQsIEQsICfCsCcsICcgJywgTTUsIE0sICcuJywgTSwgTSwgTSwgXCInXCJdLFxuICAgIEREOiBbU0lHTiwgRCwgRCwgRCwgJy4nLCBELCBELCBELCBELCBELCBELCBELCAnwrAnXSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIExhdExvbmdGb3JtYXRPcHRpb25zIHtcbiAgcGF0dGVybjogTGF0TG9uZ1BhdHRlcm47XG4gIG1heERlY2ltYWxzPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlckNoYXI/OiBzdHJpbmc7XG4gIGhpZGVTaWduPzogYm9vbGVhbjtcbiAgaW5wdXRTZWxlY3Rpb25SYW5nZXM/OiBudW1iZXJbXVtdO1xuICBmaXhMYXRMb25nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IExBVF9MT05HX1BBVFRFUk5fTUFYX0RFQ0lNQUxTID0gMztcbmV4cG9ydCBjb25zdCBMQVRfTE9OR19WQUxVRV9NQVhfREVDSU1BTFMgPSA3O1xuXG5jb25zdCBERUZBVUxUX09QVElPTlMgPSA8TGF0TG9uZ0Zvcm1hdE9wdGlvbnM+e1xuICBwYXR0ZXJuOiAnRERNTScsXG4gIG1heERlY2ltYWxzOiBMQVRfTE9OR19QQVRURVJOX01BWF9ERUNJTUFMUyxcbiAgcGxhY2Vob2xkZXJDaGFyOiBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVIsXG59O1xuY29uc3QgREVGQVVMVF9MQVRJVFVERV9PUFRJT05TOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHsgbG9uZ2l0dWRlOiBib29sZWFuIH0gPSB7XG4gIC4uLkRFRkFVTFRfT1BUSU9OUyxcbiAgbG9uZ2l0dWRlOiBmYWxzZSxcbn07XG5jb25zdCBERUZBVUxUX0xPTkdJVFVERV9PUFRJT05TOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHsgbG9uZ2l0dWRlOiBib29sZWFuIH0gPSB7XG4gIC4uLkRFRkFVTFRfT1BUSU9OUyxcbiAgbG9uZ2l0dWRlOiB0cnVlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExhdExvbmcodmFsdWU6IG51bWJlciwgdHlwZTogTGF0TG9uZ1R5cGUsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPikge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdsYXRpdHVkZSc6XG4gICAgICByZXR1cm4gZm9ybWF0TGF0aXR1ZGUodmFsdWUsIG9wdHMpO1xuICAgIGNhc2UgJ2xvbmdpdHVkZSc6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZ2l0dWRlKHZhbHVlLCBvcHRzKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TGF0aXR1ZGUodmFsdWU6IG51bWJlciB8IG51bGwsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBvcHRzLnBhdHRlcm4gPSBvcHRzPy5wYXR0ZXJuID8/ICdERCc7XG4gIGNvbnN0IG1hc2sgPSBNQVNLU1snbGF0aXR1ZGUnXVtvcHRzLnBhdHRlcm5dO1xuICBvcHRzLmlucHV0U2VsZWN0aW9uUmFuZ2VzID0gb3B0cz8uaW5wdXRTZWxlY3Rpb25SYW5nZXMgPz8gZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhtYXNrKTtcbiAgb3B0cy5wbGFjZWhvbGRlckNoYXIgPSBvcHRzPy5wbGFjZWhvbGRlckNoYXIgPz8gREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSO1xuICBvcHRzLmZpeExhdExvbmcgPSBvcHRzPy5maXhMYXRMb25nID8/IHRydWU7XG4gIGNvbnN0IGZpbmFsT3B0czogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0geyAuLi5ERUZBVUxUX0xBVElUVURFX09QVElPTlMsIC4uLm9wdHMgfTtcblxuICBsZXQgZmllbGRzVmFsdWVzOiBhbnlbXTtcbiAgc3dpdGNoIChvcHRzLnBhdHRlcm4pIHtcbiAgICBjYXNlICdERE1NU1MnOlxuICAgICAgZmllbGRzVmFsdWVzID0gc3BsaXROdW1iZXJUb0ZpZWxkc0RETU1TUyh2YWx1ZSwgZmluYWxPcHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RETU0nOlxuICAgICAgZmllbGRzVmFsdWVzID0gc3BsaXROdW1iZXJUb0ZpZWxkc0RETU0odmFsdWUsIGZpbmFsT3B0cyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OiAvLyBERCBpcyB0aGUgZGVmYXVsdFxuICAgICAgZmllbGRzVmFsdWVzID0gc3BsaXROdW1iZXJUb0ZpZWxkc0REKHZhbHVlLCBmaW5hbE9wdHMpO1xuICB9XG5cbiAgcmV0dXJuIGZpZWxkc1ZhbHVlcy5sZW5ndGggPiAwID8gZm9ybWF0RmllbGRzQXJyYXlUb1N0cmluZyhmaWVsZHNWYWx1ZXMsIG1hc2ssIGZpbmFsT3B0cykgOiAnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExvbmdpdHVkZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCwgb3B0cz86IFBhcnRpYWw8TGF0TG9uZ0Zvcm1hdE9wdGlvbnM+KTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIG9wdHMucGF0dGVybiA9IG9wdHM/LnBhdHRlcm4gPz8gJ0REJztcbiAgY29uc3QgbWFzayA9IE1BU0tTWydsb25naXR1ZGUnXVtvcHRzLnBhdHRlcm5dO1xuICBvcHRzLmlucHV0U2VsZWN0aW9uUmFuZ2VzID0gb3B0cz8uaW5wdXRTZWxlY3Rpb25SYW5nZXMgPz8gZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhtYXNrKTtcbiAgb3B0cy5wbGFjZWhvbGRlckNoYXIgPSBvcHRzPy5wbGFjZWhvbGRlckNoYXIgPz8gREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSO1xuICBvcHRzLmZpeExhdExvbmcgPSBvcHRzPy5maXhMYXRMb25nID8/IHRydWU7XG4gIGNvbnN0IGZpbmFsT3B0czogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0geyAuLi5ERUZBVUxUX0xPTkdJVFVERV9PUFRJT05TLCAuLi5vcHRzIH07XG5cbiAgbGV0IGZpZWxkc1ZhbHVlczogYW55W107XG4gIHN3aXRjaCAob3B0cy5wYXR0ZXJuKSB7XG4gICAgY2FzZSAnRERNTVNTJzpcbiAgICAgIGZpZWxkc1ZhbHVlcyA9IHNwbGl0TnVtYmVyVG9GaWVsZHNERE1NU1ModmFsdWUsIGZpbmFsT3B0cyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdERE1NJzpcbiAgICAgIGZpZWxkc1ZhbHVlcyA9IHNwbGl0TnVtYmVyVG9GaWVsZHNERE1NKHZhbHVlLCBmaW5hbE9wdHMpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDogLy8gREQgaXMgdGhlIGRlZmF1bHRcbiAgICAgIGZpZWxkc1ZhbHVlcyA9IHNwbGl0TnVtYmVyVG9GaWVsZHNERCh2YWx1ZSwgZmluYWxPcHRzKTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHNWYWx1ZXMubGVuZ3RoID4gMCA/IGZvcm1hdEZpZWxkc0FycmF5VG9TdHJpbmcoZmllbGRzVmFsdWVzLCBtYXNrLCBmaW5hbE9wdHMpIDogJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdE51bWJlclRvRmllbGRzREQodmFsdWU6IG51bWJlciwgb3B0czogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9KTogKG51bWJlciB8IHN0cmluZylbXSB7XG4gIGNvbnN0IG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICBpZiAobmVnYXRpdmUpIHZhbHVlICo9IC0xO1xuXG4gIGlmIChvcHRzLmZpeExhdExvbmcpIHtcbiAgICB2YWx1ZSA9IGZpeFZhbHVlKHZhbHVlLCBvcHRzLmxvbmdpdHVkZSk7XG4gIH1cblxuICBjb25zdCBzaWduID0gbmVnYXRpdmUgPyAnLScgOiAnKyc7XG4gIGNvbnN0IGRlZ3JlZXNGaWVsZHMgPSByb3VuZEZsb2F0KHZhbHVlLCBvcHRzLm1heERlY2ltYWxzKS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gIGNvbnN0IGRlZ3JlZXMgPSBwYXJzZUludChkZWdyZWVzRmllbGRzWzBdKTtcbiAgaWYgKGRlZ3JlZXNGaWVsZHMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGRlZ3JlZXNUZWVucyA9IHBhcnNlSW50KGRlZ3JlZXNGaWVsZHNbMV0pICogMTAgKiogKG9wdHMubWF4RGVjaW1hbHMgLSBkZWdyZWVzRmllbGRzWzFdLmxlbmd0aCk7XG4gICAgcmV0dXJuIFtzaWduLCBkZWdyZWVzLCBkZWdyZWVzVGVlbnNdO1xuICB9IGVsc2Uge1xuICAgIGlmIChkZWdyZWVzRmllbGRzWzBdID09PSBgMWUtJHtvcHRzLm1heERlY2ltYWxzfWApIHtcbiAgICAgIHJldHVybiBbc2lnbiwgMCwgMSAvIChwYXJzZUZsb2F0KGRlZ3JlZXNGaWVsZHNbMF0pICogMTAgKiogb3B0cy5tYXhEZWNpbWFscyldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3NpZ24sIGRlZ3JlZXNdO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROdW1iZXJUb0ZpZWxkc0RETU0odmFsdWU6IG51bWJlciwgb3B0czogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9KTogbnVtYmVyW10ge1xuICBjb25zdCBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XG5cbiAgaWYgKG9wdHMuZml4TGF0TG9uZykge1xuICAgIHZhbHVlID0gZml4VmFsdWUodmFsdWUsIG9wdHMubG9uZ2l0dWRlKTtcbiAgfVxuXG4gIGxldCBkZWdyZWVzOiBudW1iZXIgPSAobmVnYXRpdmUgPyAtMSA6IDEpICogTWF0aC50cnVuYyh2YWx1ZSk7XG4gIGNvbnN0IG1pbnV0ZXNGaWVsZHMgPSByb3VuZEZsb2F0KCh2YWx1ZSAtIGRlZ3JlZXMpICogNjAsIG9wdHMubWF4RGVjaW1hbHMpXG4gICAgLnRvU3RyaW5nKClcbiAgICAuc3BsaXQoJy4nKTtcblxuICBsZXQgbWludXRlcyA9IHBhcnNlSW50KG1pbnV0ZXNGaWVsZHNbMF0pO1xuICBsZXQgbWludXRlc1RlZW5zOiBudW1iZXI7XG4gIGlmIChtaW51dGVzRmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICBtaW51dGVzVGVlbnMgPSBwYXJzZUludChtaW51dGVzRmllbGRzWzFdKTtcbiAgICBpZiAobWludXRlc0ZpZWxkc1sxXS5sZW5ndGggPT09IDEpIG1pbnV0ZXNUZWVucyAqPSAxMDA7XG4gICAgZWxzZSBpZiAobWludXRlc0ZpZWxkc1sxXS5sZW5ndGggPT09IDIpIG1pbnV0ZXNUZWVucyAqPSAxMDtcbiAgfSBlbHNlIHtcbiAgICBtaW51dGVzVGVlbnMgPSAwO1xuICB9XG5cbiAgd2hpbGUgKG1pbnV0ZXMgPj0gNjApIHtcbiAgICBtaW51dGVzIC09IDYwO1xuICAgIGRlZ3JlZXMgKz0gMTtcbiAgfVxuXG4gIC8vIFRoZSByZWR1Y2UgcmVtb3ZlIGFsbCByaWdodCB6ZXJvc1xuICBjb25zdCByZXN1bHQgPSBbbWludXRlc1RlZW5zLCBtaW51dGVzLCBkZWdyZWVzXVxuICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgICBpZiAoYWNjLmxlbmd0aCA+IDAgfHwgdmFsID4gMCkge1xuICAgICAgICBhY2MucHVzaCh2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAucmV2ZXJzZSgpO1xuXG4gIC8vIFJlLWFkZCBzaWduIG9uIGRlZ3JlZXNcbiAgaWYgKG5lZ2F0aXZlKSByZXN1bHRbMF0gPSAtMSAqIHJlc3VsdFswXTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXROdW1iZXJUb0ZpZWxkc0RETU1TUyh2YWx1ZTogbnVtYmVyLCBvcHRzOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHsgbG9uZ2l0dWRlOiBib29sZWFuIH0pOiBudW1iZXJbXSB7XG4gIGNvbnN0IG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKTtcblxuICBpZiAob3B0cy5maXhMYXRMb25nKSB7XG4gICAgdmFsdWUgPSBmaXhWYWx1ZSh2YWx1ZSwgb3B0cy5sb25naXR1ZGUpO1xuICB9XG5cbiAgbGV0IGRlZ3JlZXM6IG51bWJlciA9IE1hdGgudHJ1bmModmFsdWUpO1xuICBsZXQgbWludXRlczogbnVtYmVyIHwgc3RyaW5nID0gTWF0aC50cnVuYygodmFsdWUgLSBkZWdyZWVzKSAqIDYwKTtcbiAgY29uc3Qgc2Vjb25kRmllbGRzOiBzdHJpbmdbXSA9IHJvdW5kRmxvYXQoKCh2YWx1ZSAtIGRlZ3JlZXMpICogNjAgLSBtaW51dGVzKSAqIDYwLCBvcHRzLm1heERlY2ltYWxzKVxuICAgIC50b1N0cmluZygpXG4gICAgLnNwbGl0KCcuJyk7XG4gIGxldCBzZWNvbmRzOiBudW1iZXIgPSBwYXJzZUludChzZWNvbmRGaWVsZHNbMF0pO1xuICBjb25zdCBtaWxpc2Vjb25kczogbnVtYmVyID0gc2Vjb25kRmllbGRzLmxlbmd0aCA+IDEgPyBwYXJzZUludChzZWNvbmRGaWVsZHNbMV0pICogKHNlY29uZEZpZWxkc1sxXS5sZW5ndGggPT09IDEgPyAxMCA6IDEpIDogMDtcblxuICB3aGlsZSAoc2Vjb25kcyA+PSA2MCkge1xuICAgIHNlY29uZHMgLT0gNjA7XG4gICAgbWludXRlcyArPSAxO1xuICB9XG4gIHdoaWxlIChtaW51dGVzID49IDYwKSB7XG4gICAgbWludXRlcyAtPSA2MDtcbiAgICBkZWdyZWVzICs9IDE7XG4gIH1cblxuICAvLyBUaGUgcmVkdWNlIHJlbW92ZSBhbGwgcmlnaHQgemVyb3NcbiAgY29uc3QgcmVzdWx0ID0gW21pbGlzZWNvbmRzLCBzZWNvbmRzLCBtaW51dGVzLCBkZWdyZWVzXVxuICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgICBpZiAoYWNjLmxlbmd0aCA+IDAgfHwgdmFsID4gMCkge1xuICAgICAgICBhY2MucHVzaCh2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAucmV2ZXJzZSgpO1xuXG4gIC8vIFJlLWFkZCBzaWduIG9uIGRlZ3JlZXNcbiAgaWYgKG5lZ2F0aXZlKSByZXN1bHRbMF0gPSAtMSAqIHJlc3VsdFswXTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmaXhWYWx1ZSh2YWx1ZTogbnVtYmVyLCBsb25naXR1ZGU6IGJvb2xlYW4pIHtcbiAgLy8gRml4IGxvbmdpdHVkZSB3aGVuIG91dHNpZGUgWy0xODAsIDE4MF1cbiAgaWYgKGxvbmdpdHVkZSAmJiAodmFsdWUgPiAxODAgfHwgdmFsdWUgPCAtMTgwKSkge1xuICAgIHZhbHVlICU9IDE4MDtcbiAgfVxuICAvLyBGaXggbGF0aXR1ZGUgd2hlbiBvdXRzaWRlIFstOTAsIDkwXVxuICBlbHNlIGlmICghbG9uZ2l0dWRlICYmICh2YWx1ZSA+IDkwIHx8IHZhbHVlIDwgLTkwKSkge1xuICAgIHZhbHVlICU9IDkwO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmllbGRzQXJyYXlUb1N0cmluZyhcbiAgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICBtYXNrOiAoc3RyaW5nIHwgUmVnRXhwKVtdLFxuICBvcHRzOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHsgbG9uZ2l0dWRlOiBib29sZWFuIH1cbik6IHN0cmluZyB7XG4gIGNvbnN0IG5lZ2F0aXZlID0gdmFsdWVzWzBdLnRvU3RyaW5nKCkuc2xpY2UoMCwgMSkgPT09ICctJztcbiAgaWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09ICdudW1iZXInKSB7XG4gICAgLy8gTm9ybWFsaXplIGRlZ3JlZXMgdG8gYmUgT0sgd2hlbiBjb252ZXJ0IHRvIHN0cmluZ1xuICAgIHZhbHVlc1swXSA9IE1hdGguYWJzKHZhbHVlc1swXSk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGNvbnN0IGlucHV0U2VsZWN0aW9uUmFuZ2VzID0gb3B0cy5pbnB1dFNlbGVjdGlvblJhbmdlcztcbiAgY29uc3QgcGxhY2Vob2xkZXJDaGFyID0gb3B0cy5wbGFjZWhvbGRlckNoYXI7XG4gIGlucHV0U2VsZWN0aW9uUmFuZ2VzLmZvckVhY2goKHJhbmdlLCBpZHgpID0+IHtcbiAgICAvLyBcInN0YXJ0XCIgYW5kIFwiZW5kXCIgYXJlIHVzZWQgdG8gZ2V0IHN5bWJvbCBjaGFycyBmcm9tIG1hc2sgcGxhY2Vob2xkZXJcbiAgICAvLyAoYmV0d2VlbiB2YWx1YWJsZXMgY2hhcmFjdGVycylcbiAgICBjb25zdCBsYXN0ID0gaWR4ID09PSBpbnB1dFNlbGVjdGlvblJhbmdlcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHN0YXJ0ID0gcmFuZ2VbMV0gKyAxO1xuICAgIGNvbnN0IGVuZCA9IGxhc3QgPyBtYXNrLmxlbmd0aCA6IGlucHV0U2VsZWN0aW9uUmFuZ2VzW2lkeCArIDFdWzBdO1xuICAgIGNvbnN0IHNpemUgPSByYW5nZVsxXSAtIHJhbmdlWzBdICsgMTtcbiAgICBjb25zdCBzeW1ib2wgPSBtYXNrLnNsaWNlKHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xuICAgIGlmIChpZHggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaWR4XS50b1N0cmluZygpO1xuICAgICAgdmFsdWUgPSB2YWx1ZS5wYWRTdGFydChzaXplLCBsYXN0ID8gJzAnIDogcGxhY2Vob2xkZXJDaGFyKTtcbiAgICAgIGlmIChsYXN0ICYmIHBsYWNlaG9sZGVyQ2hhciA9PT0gJycpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8wKiQvLCBwbGFjZWhvbGRlckNoYXIpO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHZhbHVlICsgc3ltYm9sO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAnJyBhcyBmaWxsQ2hhciA9IGRvbid0IGZpbGxcbiAgICAgIGlmIChwbGFjZWhvbGRlckNoYXIgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJycudG9TdHJpbmcoKS5wYWRTdGFydChzaXplLCBwbGFjZWhvbGRlckNoYXIpO1xuICAgICAgICByZXN1bHQgKz0gdmFsdWUgKyBzeW1ib2w7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBsYXN0IGNoYXIgZG90LCByZXBsYWNlIGl0IHdpdGggcmVhbCBsYXN0IHN5bWJvbFxuICAgICAgLy8gMDEuMDBcIiAtPlxuICAgICAgLy8gICAgICBPSzogIDFcIlxuICAgICAgLy8gICAgICBLTzogIDEuXG4gICAgICBpZiAobGFzdCAmJiByZXN1bHQuc2xpY2UoLTEpID09PSAnLicpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIC0xKTtcbiAgICAgICAgaWYgKHN5bWJvbCkge1xuICAgICAgICAgIHJlc3VsdCArPSBzeW1ib2w7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGxldCBzaWduID0gJyc7XG4gIGlmICghb3B0cz8uaGlkZVNpZ24gJiYgb3B0cy5wYXR0ZXJuICE9PSAnREQnKSB7XG4gICAgaWYgKG9wdHMubG9uZ2l0dWRlKSB7XG4gICAgICBzaWduID0gbmVnYXRpdmUgPyAnIFcnIDogJyBFJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnbiA9IG5lZ2F0aXZlID8gJyBTJyA6ICcgTic7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdHMuaGlkZVNpZ24gJiYgb3B0cy5wYXR0ZXJuID09PSAnREQnKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15cXCsvLCAnICcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCArIHNpZ247XG59XG5cbi8vIDM2wrA1Nyc5XCIgTiAgPSAzNi45NTI1MDAwXG4vLyAxMMKwNCcyMVwiIFcgPSAtMTAuMDcyNTAwMFxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF0aXR1ZGVPckxvbmdpdHVkZShpbnB1dDogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcsIG1heERlY2ltYWxzPzogbnVtYmVyLCBwbGFjZWhvbGRlckNoYXI/OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgcGxhY2Vob2xkZXJDaGFyID0gcGxhY2Vob2xkZXJDaGFyIHx8IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUjtcbiAgbGV0IGlucHV0Rml4ID0gaW5wdXQudHJpbSgpO1xuICBpZiAocGxhY2Vob2xkZXJDaGFyID09PSBFTVBUWV9QTEFDRUhPTERFUl9DSEFSKSB7XG4gICAgaW5wdXRGaXggPSBpbnB1dEZpeFxuICAgICAgLy8gUmVwbGFjZSBlbXB0eSBjaGFyIHBsYWNlaG9sZGVyXG4gICAgICAucmVwbGFjZShFTVBUWV9QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwsICcnKVxuICAgICAgLy8gUmVtb3ZlIHNwYWNlIGFuZCAnKycgKD0gdHJpbSBvbiBlYWNoIHBhcnRzKVxuICAgICAgLnJlcGxhY2UoU1BBQ0VfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMLCAnJylcbiAgICAgIC5yZXBsYWNlKFBMVVNfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMLCAnJyk7XG4gIH1cbiAgLy8gUmVtb3ZlIGFsbCBwbGFjZWhvbGRlciAoPSB0cmltIG9uIGVhY2ggcGFydHMpXG4gIGVsc2Uge1xuICAgIGlucHV0Rml4ID0gaW5wdXRGaXgucmVwbGFjZShuZXcgUmVnRXhwKGBbICske3BsYWNlaG9sZGVyQ2hhcn1dK2AsICdnJyksICcnKTtcbiAgfVxuXG4gIC8vREVCVUcgY29uc29sZS5kZWJ1ZyhcIlBhcnNpbmcgbGF0PSBcIiArIGlucHV0Rml4KTtcbiAgY29uc3QgcGFydHMgPSBpbnB1dEZpeC5zcGxpdCgvW14tXFxkXFx3LixdKy8pO1xuICBsZXQgZGVncmVlcyA9IHBhcnNlRmxvYXQocGFydHNbMF0ucmVwbGFjZSgvLC9nLCAnLicpKTtcbiAgaWYgKGlzTmFOKGRlZ3JlZXMpKSB7XG4gICAgY29uc29sZS5kZWJ1ZygncGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlICcgKyBpbnB1dCArICcgLT4gSW52YWxpZCBkZWdyZWVzIChOYU4pLiBQYXJ0cyBmb3VuZDonLCBwYXJ0cyk7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIGlmIChwYXR0ZXJuID09PSAnREQnKSB7XG4gICAgcmV0dXJuIHJvdW5kRmxvYXQoZGVncmVlcywgbWF4RGVjaW1hbHMpO1xuICB9XG5cbiAgY29uc3QgbWludXRlcyA9ICgocGF0dGVybiA9PT0gJ0RETU1TUycgfHwgcGF0dGVybiA9PT0gJ0RETU0nKSAmJiBwYXJ0c1sxXSAmJiBwYXJzZUZsb2F0KHBhcnRzWzFdLnJlcGxhY2UoLywvZywgJy4nKSkpIHx8IDA7XG4gIGNvbnN0IHNlY29uZHMgPSAocGF0dGVybiA9PT0gJ0RETU1TUycgJiYgcGFydHNbMl0gJiYgcGFyc2VGbG9hdChwYXJ0c1syXS5yZXBsYWNlKC8sL2csICcuJykpKSB8fCAwO1xuICBjb25zdCBkaXJlY3Rpb24gPSAocGF0dGVybiA9PT0gJ0RETU1TUycgJiYgcGFydHNbM10pIHx8IChwYXR0ZXJuID09PSAnRERNTScgJiYgcGFydHNbMl0pIHx8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2lnbiA9IGRpcmVjdGlvbiAmJiAoZGlyZWN0aW9uID09PSAncycgfHwgZGlyZWN0aW9uID09PSAnUycgfHwgZGlyZWN0aW9uID09PSAndycgfHwgZGlyZWN0aW9uID09PSAnVycpID8gLTEgOiAxO1xuXG4gIHJldHVybiBjb21wdXRlRGVjaW1hbERlZ3JlZXMoZGVncmVlcywgbWludXRlcywgc2Vjb25kcywgc2lnbiwgbWF4RGVjaW1hbHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2ltYWxEZWdyZWVzKGRlZ3JlZXM6IG51bWJlciwgbWludXRlczogbnVtYmVyLCBzZWNvbmRzOiBudW1iZXIsIHNpZ246IC0xIHwgMSwgbWF4RGVjaW1hbHM/OiBudW1iZXIpIHtcbiAgaWYgKGlzTmlsKGRlZ3JlZXMpKSByZXR1cm4gbnVsbDtcbiAgZGVncmVlcyA9IChzaWduIHx8IDEpICogKGRlZ3JlZXMgKyAobWludXRlcyB8fCAwKSAvIDYwICsgKHNlY29uZHMgfHwgMCkgLyAoNjAgKiA2MCkpO1xuICByZXR1cm4gcm91bmRGbG9hdChkZWdyZWVzLCBtYXhEZWNpbWFscyk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kRmxvYXQoaW5wdXQ6IG51bWJlciwgbWF4RGVjaW1hbHM/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAobWF4RGVjaW1hbHMgIT09IHVuZGVmaW5lZCAmJiBtYXhEZWNpbWFscyA+PSAwKSB7XG4gICAgLy8gVXRpbGlzYXRpb24gZGUgdG9GaXhlZCBwb3VyIGfDqXJlciBsZXMgcHJvYmzDqG1lcyBkZSBwcsOpY2lzaW9uXG4gICAgY29uc3Qgc3RyID0gaW5wdXQudG9GaXhlZChtYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyKTtcbiAgfVxuICByZXR1cm4gaW5wdXQ7XG59XG4iXX0=
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0bG9uZy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixvQ0FBb0MsRUFDcEMsbUNBQW1DLEVBQ25DLG9DQUFvQyxHQUNyQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXFCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUU1RSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQVlwQixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFDbkIsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNoRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUs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Q0FBQztJQUNyRixPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWEsRUFBRSxXQUFvQjtJQUNyRCxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xELCtEQUErRDtRQUMvRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVIsXG4gIEVNUFRZX1BMQUNFSE9MREVSX0NIQVIsXG4gIEVNUFRZX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCxcbiAgUExVU19QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwsXG4gIFNQQUNFX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2sgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIExhdExvbmdUeXBlID0gJ2xhdGl0dWRlJyB8ICdsb25naXR1ZGUnO1xuZXhwb3J0IGRlY2xhcmUgdHlwZSBMYXRMb25nUGF0dGVybiA9ICdERE1NU1MnIHwgJ0RETU0nIHwgJ0REJztcbmV4cG9ydCBjb25zdCBMQVRfTE9OR19QQVRURVJOUzogTGF0TG9uZ1BhdHRlcm5bXSA9IFsnRERNTVNTJywgJ0RETU0nLCAnREQnXTtcblxuY29uc3QgRCA9IC9cXGR8XFxzLztcbmNvbnN0IEQ1ID0gL1swLTVdfFxccy87XG5jb25zdCBNID0gRDtcbmNvbnN0IE01ID0gRDU7XG5jb25zdCBTID0gRDtcbmNvbnN0IFM1ID0gRDU7XG5jb25zdCBTSUdOID0gL1srLV0vO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIExhdExvbmdTaWduID0gJysnIHwgJy0nO1xuZXhwb3J0IGRlY2xhcmUgdHlwZSBMYXRMb25nU2lnblZhbHVlID0gMSB8IC0xO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMYXRMb25nRGF0YSB7XG4gIGRlZ3JlZXM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIHNpZ246IExhdExvbmdTaWduVmFsdWU7XG59XG5cbmV4cG9ydCBjb25zdCBNQVNLUyA9IHtcbiAgbGF0aXR1ZGU6IHtcbiAgICBERE1NU1M6IFtELCBELCAnwrAnLCAnICcsIE01LCBNLCBcIidcIiwgJyAnLCBTNSwgUywgJy4nLCBTLCBTLCAnXCInXSxcbiAgICBERE1NOiBbRCwgRCwgJ8KwJywgJyAnLCBNNSwgTSwgJy4nLCBNLCBNLCBNLCBcIidcIl0sXG4gICAgREQ6IFtTSUdOLCAnICcsIEQsIEQsICcuJywgRCwgRCwgRCwgRCwgRCwgRCwgRCwgJ8KwJ10sXG4gIH0sXG4gIGxvbmdpdHVkZToge1xuICAgIERETU1TUzogW0QsIEQsIEQsICfCsCcsICcgJywgTTUsIE0sIFwiJ1wiLCAnICcsIFM1LCBTLCAnLicsIFMsIFMsICdcIiddLFxuICAgIERETU06IFtELCBELCBELCAnwrAnLCAnICcsIE01LCBNLCAnLicsIE0sIE0sIE0sIFwiJ1wiXSxcbiAgICBERDogW1NJR04sIEQsIEQsIEQsICcuJywgRCwgRCwgRCwgRCwgRCwgRCwgRCwgJ8KwJ10sXG4gIH0sXG59O1xuZXhwb3J0IGNvbnN0IE1BU0tfUkFOR0VTID0ge1xuICBsYXRpdHVkZToge1xuICAgIERETU1TUzogZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhNQVNLUy5sYXRpdHVkZS5ERE1NU1MpLFxuICAgIERETU06IGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2soTUFTS1MubGF0aXR1ZGUuRERNTSksXG4gICAgREQ6IGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2soTUFTS1MubGF0aXR1ZGUuREQpLFxuICB9LFxuICBsb25naXR1ZGU6IHtcbiAgICBERE1NU1M6IGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2soTUFTS1MubG9uZ2l0dWRlLkRETU1TUyksXG4gICAgRERNTTogZ2V0SW5wdXRTZWxlY3Rpb25SYW5nZXNGcm9tTWFzayhNQVNLUy5sb25naXR1ZGUuRERNTSksXG4gICAgREQ6IGdldElucHV0U2VsZWN0aW9uUmFuZ2VzRnJvbU1hc2soTUFTS1MubG9uZ2l0dWRlLkREKSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIExhdExvbmdGb3JtYXRPcHRpb25zIHtcbiAgcGF0dGVybjogTGF0TG9uZ1BhdHRlcm47XG4gIG1heERlY2ltYWxzPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlckNoYXI/OiBzdHJpbmc7XG4gIGhpZGVTaWduPzogYm9vbGVhbjtcbiAgZml4TGF0TG9uZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBMQVRfTE9OR19QQVRURVJOX01BWF9ERUNJTUFMUyA9IDM7XG5leHBvcnQgY29uc3QgTEFUX0xPTkdfVkFMVUVfTUFYX0RFQ0lNQUxTID0gNztcblxuY29uc3QgREVGQVVMVF9PUFRJT05TID0gPExhdExvbmdGb3JtYXRPcHRpb25zPntcbiAgcGF0dGVybjogJ0RETU0nLFxuICBtYXhEZWNpbWFsczogTEFUX0xPTkdfUEFUVEVSTl9NQVhfREVDSU1BTFMsXG4gIHBsYWNlaG9sZGVyQ2hhcjogREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSLFxufTtcbmNvbnN0IERFRkFVTFRfTEFUSVRVREVfT1BUSU9OUzogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0ge1xuICAuLi5ERUZBVUxUX09QVElPTlMsXG4gIGxvbmdpdHVkZTogZmFsc2UsXG59O1xuY29uc3QgREVGQVVMVF9MT05HSVRVREVfT1BUSU9OUzogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0ge1xuICAuLi5ERUZBVUxUX09QVElPTlMsXG4gIGxvbmdpdHVkZTogdHJ1ZSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVjaW1hbFBhcnQodmFsdWU6IG51bWJlciwgbmJPZkRlY2ltYWxzOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdmFsdWUgKiAxMCAqKiAobmJPZkRlY2ltYWxzICogLTEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TGF0TG9uZyh2YWx1ZTogbnVtYmVyLCB0eXBlOiBMYXRMb25nVHlwZSwgb3B0cz86IFBhcnRpYWw8TGF0TG9uZ0Zvcm1hdE9wdGlvbnM+KSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2xhdGl0dWRlJzpcbiAgICAgIHJldHVybiBmb3JtYXRMYXRpdHVkZSh2YWx1ZSwgb3B0cyk7XG4gICAgY2FzZSAnbG9uZ2l0dWRlJzpcbiAgICAgIHJldHVybiBmb3JtYXRMb25naXR1ZGUodmFsdWUsIG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRMYXRpdHVkZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCwgb3B0cz86IFBhcnRpYWw8TGF0TG9uZ0Zvcm1hdE9wdGlvbnM+KTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGZpbmFsT3B0cyA9IHtcbiAgICAuLi5ERUZBVUxUX0xBVElUVURFX09QVElPTlMsXG4gICAgZml4TGF0TG9uZzogdHJ1ZSxcbiAgICAuLi5vcHRzLFxuICB9O1xuXG4gIGxldCBmaWVsZHNWYWx1ZXM6IGFueVtdO1xuICBzd2l0Y2ggKG9wdHMucGF0dGVybikge1xuICAgIGNhc2UgJ0RETU1TUyc6XG4gICAgICBmaWVsZHNWYWx1ZXMgPSBzcGxpdERlZ3JlZXNUb0RETU1TU0FycmF5KHZhbHVlLCBmaW5hbE9wdHMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRERNTSc6XG4gICAgICBmaWVsZHNWYWx1ZXMgPSBzcGxpdERlZ3JlZXNUb0RETU1BcnJheSh2YWx1ZSwgZmluYWxPcHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6IC8vIEREIGlzIHRoZSBkZWZhdWx0XG4gICAgICBmaWVsZHNWYWx1ZXMgPSBzcGxpdERlZ3JlZXNUb0REQXJyYXkodmFsdWUsIGZpbmFsT3B0cyk7XG4gIH1cblxuICByZXR1cm4gZmllbGRzVmFsdWVzLmxlbmd0aCA+IDAgPyBmb3JtYXRGaWVsZHNBcnJheVRvU3RyaW5nKGZpZWxkc1ZhbHVlcywgZmluYWxPcHRzKSA6ICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TG9uZ2l0dWRlKHZhbHVlOiBudW1iZXIgfCBudWxsLCBvcHRzPzogUGFydGlhbDxMYXRMb25nRm9ybWF0T3B0aW9ucz4pOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgZmluYWxPcHRzID0ge1xuICAgIC4uLkRFRkFVTFRfTE9OR0lUVURFX09QVElPTlMsXG4gICAgZml4TGF0TG9uZzogdHJ1ZSxcbiAgICAuLi5vcHRzLFxuICB9O1xuXG4gIGxldCBwYXJ0czogYW55W107XG4gIHN3aXRjaCAob3B0cy5wYXR0ZXJuKSB7XG4gICAgY2FzZSAnRERNTVNTJzpcbiAgICAgIHBhcnRzID0gc3BsaXREZWdyZWVzVG9ERE1NU1NBcnJheSh2YWx1ZSwgZmluYWxPcHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RETU0nOlxuICAgICAgcGFydHMgPSBzcGxpdERlZ3JlZXNUb0RETU1BcnJheSh2YWx1ZSwgZmluYWxPcHRzKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6IC8vIEREIGlzIHRoZSBkZWZhdWx0XG4gICAgICBwYXJ0cyA9IHNwbGl0RGVncmVlc1RvRERBcnJheSh2YWx1ZSwgZmluYWxPcHRzKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPiAwID8gZm9ybWF0RmllbGRzQXJyYXlUb1N0cmluZyhwYXJ0cywgZmluYWxPcHRzKSA6ICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXREZWdyZWVzVG9EREFycmF5KHZhbHVlOiBudW1iZXIsIG9wdHM6IExhdExvbmdGb3JtYXRPcHRpb25zICYgeyBsb25naXR1ZGU6IGJvb2xlYW4gfSk6IChudW1iZXIgfCBzdHJpbmcpW10ge1xuICBjb25zdCBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcblxuICBpZiAob3B0cy5maXhMYXRMb25nKSB7XG4gICAgdmFsdWUgPSBmaXhWYWx1ZSh2YWx1ZSwgb3B0cy5sb25naXR1ZGUpO1xuICB9XG5cbiAgY29uc3Qgc2lnbiA9IG5lZ2F0aXZlID8gJy0nIDogJysnO1xuICBjb25zdCBkZWdyZWVzRmllbGRzID0gcm91bmRGbG9hdCh2YWx1ZSwgb3B0cy5tYXhEZWNpbWFscykudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICBjb25zdCBkZWdyZWVzID0gcGFyc2VJbnQoZGVncmVlc0ZpZWxkc1swXSk7XG4gIGlmIChkZWdyZWVzRmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBkZWdyZWVzVGVlbnMgPSBwYXJzZUludChkZWdyZWVzRmllbGRzWzFdKSAqIDEwICoqIChvcHRzLm1heERlY2ltYWxzIC0gZGVncmVlc0ZpZWxkc1sxXS5sZW5ndGgpO1xuICAgIHJldHVybiBbc2lnbiwgZGVncmVlcywgZGVncmVlc1RlZW5zXTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVncmVlc0ZpZWxkc1swXSA9PT0gYDFlLSR7b3B0cy5tYXhEZWNpbWFsc31gKSB7XG4gICAgICByZXR1cm4gW3NpZ24sIDAsIDEgLyAocGFyc2VGbG9hdChkZWdyZWVzRmllbGRzWzBdKSAqIDEwICoqIG9wdHMubWF4RGVjaW1hbHMpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtzaWduLCBkZWdyZWVzXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0RGVncmVlc1RvRERNTUFycmF5KHZhbHVlOiBudW1iZXIsIG9wdHM6IExhdExvbmdGb3JtYXRPcHRpb25zICYgeyBsb25naXR1ZGU6IGJvb2xlYW4gfSk6IG51bWJlcltdIHtcbiAgY29uc3QgbmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpO1xuXG4gIGlmIChvcHRzLmZpeExhdExvbmcpIHtcbiAgICB2YWx1ZSA9IGZpeFZhbHVlKHZhbHVlLCBvcHRzLmxvbmdpdHVkZSk7XG4gIH1cblxuICBsZXQgZGVncmVlczogbnVtYmVyID0gKG5lZ2F0aXZlID8gLTEgOiAxKSAqIE1hdGgudHJ1bmModmFsdWUpO1xuICBjb25zdCBtaW51dGVzRmllbGRzID0gcm91bmRGbG9hdCgodmFsdWUgLSBkZWdyZWVzKSAqIDYwLCBvcHRzLm1heERlY2ltYWxzKVxuICAgIC50b1N0cmluZygpXG4gICAgLnNwbGl0KCcuJyk7XG5cbiAgbGV0IG1pbnV0ZXMgPSBwYXJzZUludChtaW51dGVzRmllbGRzWzBdKTtcbiAgbGV0IG1pbnV0ZXNUZWVuczogbnVtYmVyO1xuICBpZiAobWludXRlc0ZpZWxkcy5sZW5ndGggPiAxKSB7XG4gICAgbWludXRlc1RlZW5zID0gcGFyc2VJbnQobWludXRlc0ZpZWxkc1sxXSk7XG4gICAgaWYgKG1pbnV0ZXNGaWVsZHNbMV0ubGVuZ3RoID09PSAxKSBtaW51dGVzVGVlbnMgKj0gMTAwO1xuICAgIGVsc2UgaWYgKG1pbnV0ZXNGaWVsZHNbMV0ubGVuZ3RoID09PSAyKSBtaW51dGVzVGVlbnMgKj0gMTA7XG4gIH0gZWxzZSB7XG4gICAgbWludXRlc1RlZW5zID0gMDtcbiAgfVxuXG4gIHdoaWxlIChtaW51dGVzID49IDYwKSB7XG4gICAgbWludXRlcyAtPSA2MDtcbiAgICBkZWdyZWVzICs9IDE7XG4gIH1cblxuICAvLyBUaGUgcmVkdWNlIHJlbW92ZSBhbGwgcmlnaHQgemVyb3NcbiAgY29uc3QgcmVzdWx0ID0gW21pbnV0ZXNUZWVucywgbWludXRlcywgZGVncmVlc11cbiAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgaWYgKGFjYy5sZW5ndGggPiAwIHx8IHZhbCA+IDApIHtcbiAgICAgICAgYWNjLnB1c2godmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pXG4gICAgLnJldmVyc2UoKTtcblxuICAvLyBSZS1hZGQgc2lnbiBvbiBkZWdyZWVzXG4gIGlmIChuZWdhdGl2ZSkgcmVzdWx0WzBdID0gLTEgKiByZXN1bHRbMF07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0RGVncmVlc1RvRERNTVNTQXJyYXkodmFsdWU6IG51bWJlciwgb3B0czogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9KTogbnVtYmVyW10ge1xuICBjb25zdCBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XG5cbiAgaWYgKG9wdHMuZml4TGF0TG9uZykge1xuICAgIHZhbHVlID0gZml4VmFsdWUodmFsdWUsIG9wdHMubG9uZ2l0dWRlKTtcbiAgfVxuXG4gIGxldCBkZWdyZWVzOiBudW1iZXIgPSBNYXRoLnRydW5jKHZhbHVlKTtcbiAgbGV0IG1pbnV0ZXM6IG51bWJlciB8IHN0cmluZyA9IE1hdGgudHJ1bmMoKHZhbHVlIC0gZGVncmVlcykgKiA2MCk7XG4gIGNvbnN0IHNlY29uZEZpZWxkczogc3RyaW5nW10gPSByb3VuZEZsb2F0KCgodmFsdWUgLSBkZWdyZWVzKSAqIDYwIC0gbWludXRlcykgKiA2MCwgb3B0cy5tYXhEZWNpbWFscylcbiAgICAudG9TdHJpbmcoKVxuICAgIC5zcGxpdCgnLicpO1xuICBsZXQgc2Vjb25kczogbnVtYmVyID0gcGFyc2VJbnQoc2Vjb25kRmllbGRzWzBdKTtcbiAgY29uc3QgbWlsaXNlY29uZHM6IG51bWJlciA9IHNlY29uZEZpZWxkcy5sZW5ndGggPiAxID8gcGFyc2VJbnQoc2Vjb25kRmllbGRzWzFdKSAqIChzZWNvbmRGaWVsZHNbMV0ubGVuZ3RoID09PSAxID8gMTAgOiAxKSA6IDA7XG5cbiAgd2hpbGUgKHNlY29uZHMgPj0gNjApIHtcbiAgICBzZWNvbmRzIC09IDYwO1xuICAgIG1pbnV0ZXMgKz0gMTtcbiAgfVxuICB3aGlsZSAobWludXRlcyA+PSA2MCkge1xuICAgIG1pbnV0ZXMgLT0gNjA7XG4gICAgZGVncmVlcyArPSAxO1xuICB9XG5cbiAgLy8gVGhlIHJlZHVjZSByZW1vdmUgYWxsIHJpZ2h0IHplcm9zXG4gIGNvbnN0IHJlc3VsdCA9IFttaWxpc2Vjb25kcywgc2Vjb25kcywgbWludXRlcywgZGVncmVlc11cbiAgICAucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgaWYgKGFjYy5sZW5ndGggPiAwIHx8IHZhbCA+IDApIHtcbiAgICAgICAgYWNjLnB1c2godmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pXG4gICAgLnJldmVyc2UoKTtcblxuICAvLyBSZS1hZGQgc2lnbiBvbiBkZWdyZWVzXG4gIGlmIChuZWdhdGl2ZSkgcmVzdWx0WzBdID0gLTEgKiByZXN1bHRbMF07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZml4VmFsdWUodmFsdWU6IG51bWJlciwgbG9uZ2l0dWRlOiBib29sZWFuKSB7XG4gIC8vIEZpeCBsb25naXR1ZGUgd2hlbiBvdXRzaWRlIFstMTgwLCAxODBdXG4gIGlmIChsb25naXR1ZGUgJiYgKHZhbHVlID4gMTgwIHx8IHZhbHVlIDwgLTE4MCkpIHtcbiAgICB2YWx1ZSAlPSAxODA7XG4gIH1cbiAgLy8gRml4IGxhdGl0dWRlIHdoZW4gb3V0c2lkZSBbLTkwLCA5MF1cbiAgZWxzZSBpZiAoIWxvbmdpdHVkZSAmJiAodmFsdWUgPiA5MCB8fCB2YWx1ZSA8IC05MCkpIHtcbiAgICB2YWx1ZSAlPSA5MDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpZWxkc0FycmF5VG9TdHJpbmcodmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBvcHRzOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHsgbG9uZ2l0dWRlOiBib29sZWFuIH0pOiBzdHJpbmcge1xuICBjb25zdCBwYXR0ZXJuID0gb3B0cy5wYXR0ZXJuIHx8ICdERCc7XG4gIGNvbnN0IG1hc2sgPSBNQVNLU1tvcHRzLmxvbmdpdHVkZSA/ICdsb25naXR1ZGUnIDogJ2xhdGl0dWRlJ11bcGF0dGVybl07XG4gIGNvbnN0IGlucHV0U2VsZWN0aW9uUmFuZ2VzID0gTUFTS19SQU5HRVNbb3B0cy5sb25naXR1ZGUgPyAnbG9uZ2l0dWRlJyA6ICdsYXRpdHVkZSddW3BhdHRlcm5dO1xuXG4gIGNvbnN0IG5lZ2F0aXZlID0gdmFsdWVzWzBdLnRvU3RyaW5nKCkuc2xpY2UoMCwgMSkgPT09ICctJztcbiAgaWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09ICdudW1iZXInKSB7XG4gICAgLy8gTm9ybWFsaXplIGRlZ3JlZXMgdG8gYmUgT0sgd2hlbiBjb252ZXJ0IHRvIHN0cmluZ1xuICAgIHZhbHVlc1swXSA9IE1hdGguYWJzKHZhbHVlc1swXSk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyQ2hhciA9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICBpbnB1dFNlbGVjdGlvblJhbmdlcy5mb3JFYWNoKChyYW5nZSwgaWR4KSA9PiB7XG4gICAgLy8gXCJzdGFydFwiIGFuZCBcImVuZFwiIGFyZSB1c2VkIHRvIGdldCBzeW1ib2wgY2hhcnMgZnJvbSBtYXNrIHBsYWNlaG9sZGVyXG4gICAgLy8gKGJldHdlZW4gdmFsdWFibGVzIGNoYXJhY3RlcnMpXG4gICAgY29uc3QgbGFzdCA9IGlkeCA9PT0gaW5wdXRTZWxlY3Rpb25SYW5nZXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBzdGFydCA9IHJhbmdlWzFdICsgMTtcbiAgICBjb25zdCBlbmQgPSBsYXN0ID8gbWFzay5sZW5ndGggOiBpbnB1dFNlbGVjdGlvblJhbmdlc1tpZHggKyAxXVswXTtcbiAgICBjb25zdCBzaXplID0gcmFuZ2VbMV0gLSByYW5nZVswXSArIDE7XG4gICAgY29uc3Qgc3ltYm9sID0gbWFzay5zbGljZShzdGFydCwgZW5kKS5qb2luKCcnKTtcbiAgICBpZiAoaWR4IDwgdmFsdWVzLmxlbmd0aCkge1xuICAgICAgbGV0IHZhbHVlID0gdmFsdWVzW2lkeF0udG9TdHJpbmcoKTtcbiAgICAgIHZhbHVlID0gdmFsdWUucGFkU3RhcnQoc2l6ZSwgbGFzdCA/ICcwJyA6IHBsYWNlaG9sZGVyQ2hhcik7XG4gICAgICBpZiAobGFzdCAmJiBwbGFjZWhvbGRlckNoYXIgPT09ICcnKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvMCokLywgcGxhY2Vob2xkZXJDaGFyKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSB2YWx1ZSArIHN5bWJvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gJycgYXMgZmlsbENoYXIgPSBkb24ndCBmaWxsXG4gICAgICBpZiAocGxhY2Vob2xkZXJDaGFyICE9PSAnJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9ICcnLnRvU3RyaW5nKCkucGFkU3RhcnQoc2l6ZSwgcGxhY2Vob2xkZXJDaGFyKTtcbiAgICAgICAgcmVzdWx0ICs9IHZhbHVlICsgc3ltYm9sO1xuICAgICAgfVxuICAgICAgLy8gQXZvaWQgbGFzdCBjaGFyIGRvdCwgcmVwbGFjZSBpdCB3aXRoIHJlYWwgbGFzdCBzeW1ib2xcbiAgICAgIC8vIDAxLjAwXCIgLT5cbiAgICAgIC8vICAgICAgT0s6ICAxXCJcbiAgICAgIC8vICAgICAgS086ICAxLlxuICAgICAgaWYgKGxhc3QgJiYgcmVzdWx0LnNsaWNlKC0xKSA9PT0gJy4nKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gICAgICAgIGlmIChzeW1ib2wpIHtcbiAgICAgICAgICByZXN1bHQgKz0gc3ltYm9sO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBsZXQgc2lnbiA9ICcnO1xuICBpZiAoIW9wdHM/LmhpZGVTaWduICYmIG9wdHMucGF0dGVybiAhPT0gJ0REJykge1xuICAgIGlmIChvcHRzLmxvbmdpdHVkZSkge1xuICAgICAgc2lnbiA9IG5lZ2F0aXZlID8gJyBXJyA6ICcgRSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNpZ24gPSBuZWdhdGl2ZSA/ICcgUycgOiAnIE4nO1xuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRzLmhpZGVTaWduICYmIG9wdHMucGF0dGVybiA9PT0gJ0REJykge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eXFwrLywgJyAnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgKyBzaWduO1xufVxuXG4vLyAzNsKwNTcnOVwiIE4gID0gMzYuOTUyNTAwMFxuLy8gMTDCsDQnMjFcIiBXID0gLTEwLjA3MjUwMDBcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUoaW5wdXQ6IHN0cmluZywgcGF0dGVybjogc3RyaW5nLCBtYXhEZWNpbWFscz86IG51bWJlciwgcGxhY2Vob2xkZXJDaGFyPzogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gIHBsYWNlaG9sZGVyQ2hhciA9IHBsYWNlaG9sZGVyQ2hhciB8fCBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG4gIGxldCBpbnB1dEZpeCA9IGlucHV0LnRyaW0oKTtcbiAgaWYgKHBsYWNlaG9sZGVyQ2hhciA9PT0gRU1QVFlfUExBQ0VIT0xERVJfQ0hBUikge1xuICAgIGlucHV0Rml4ID0gaW5wdXRGaXhcbiAgICAgIC8vIFJlcGxhY2UgZW1wdHkgY2hhciBwbGFjZWhvbGRlclxuICAgICAgLnJlcGxhY2UoRU1QVFlfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMLCAnJylcbiAgICAgIC8vIFJlbW92ZSBzcGFjZSBhbmQgJysnICg9IHRyaW0gb24gZWFjaCBwYXJ0cylcbiAgICAgIC5yZXBsYWNlKFNQQUNFX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCwgJycpXG4gICAgICAucmVwbGFjZShQTFVTX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCwgJycpO1xuICB9XG4gIC8vIFJlbW92ZSBhbGwgcGxhY2Vob2xkZXIgKD0gdHJpbSBvbiBlYWNoIHBhcnRzKVxuICBlbHNlIHtcbiAgICBpbnB1dEZpeCA9IGlucHV0Rml4LnJlcGxhY2UobmV3IFJlZ0V4cChgWyArJHtwbGFjZWhvbGRlckNoYXJ9XStgLCAnZycpLCAnJyk7XG4gIH1cblxuICAvL0RFQlVHIGNvbnNvbGUuZGVidWcoXCJQYXJzaW5nIGxhdD0gXCIgKyBpbnB1dEZpeCk7XG4gIGNvbnN0IHBhcnRzID0gaW5wdXRGaXguc3BsaXQoL1teLVxcZFxcdy4sXSsvKTtcbiAgbGV0IGRlZ3JlZXMgPSBwYXJzZUZsb2F0KHBhcnRzWzBdLnJlcGxhY2UoLywvZywgJy4nKSk7XG4gIGlmIChpc05hTihkZWdyZWVzKSkge1xuICAgIGNvbnNvbGUuZGVidWcoJ3BhcnNlTGF0aXR1ZGVPckxvbmdpdHVkZSAnICsgaW5wdXQgKyAnIC0+IEludmFsaWQgZGVncmVlcyAoTmFOKS4gUGFydHMgZm91bmQ6JywgcGFydHMpO1xuICAgIHJldHVybiBOYU47XG4gIH1cblxuICBpZiAocGF0dGVybiA9PT0gJ0REJykge1xuICAgIHJldHVybiByb3VuZEZsb2F0KGRlZ3JlZXMsIG1heERlY2ltYWxzKTtcbiAgfVxuXG4gIGNvbnN0IG1pbnV0ZXMgPSAoKHBhdHRlcm4gPT09ICdERE1NU1MnIHx8IHBhdHRlcm4gPT09ICdERE1NJykgJiYgcGFydHNbMV0gJiYgcGFyc2VGbG9hdChwYXJ0c1sxXS5yZXBsYWNlKC8sL2csICcuJykpKSB8fCAwO1xuICBjb25zdCBzZWNvbmRzID0gKHBhdHRlcm4gPT09ICdERE1NU1MnICYmIHBhcnRzWzJdICYmIHBhcnNlRmxvYXQocGFydHNbMl0ucmVwbGFjZSgvLC9nLCAnLicpKSkgfHwgMDtcbiAgY29uc3QgZGlyZWN0aW9uID0gKHBhdHRlcm4gPT09ICdERE1NU1MnICYmIHBhcnRzWzNdKSB8fCAocGF0dGVybiA9PT0gJ0RETU0nICYmIHBhcnRzWzJdKSB8fCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNpZ24gPSBkaXJlY3Rpb24gJiYgKGRpcmVjdGlvbiA9PT0gJ3MnIHx8IGRpcmVjdGlvbiA9PT0gJ1MnIHx8IGRpcmVjdGlvbiA9PT0gJ3cnIHx8IGRpcmVjdGlvbiA9PT0gJ1cnKSA/IC0xIDogMTtcblxuICByZXR1cm4gY29tcHV0ZURlY2ltYWxEZWdyZWVzKGRlZ3JlZXMsIG1pbnV0ZXMsIHNlY29uZHMsIHNpZ24sIG1heERlY2ltYWxzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVEZWNpbWFsRGVncmVlcyhkZWdyZWVzOiBudW1iZXIsIG1pbnV0ZXM6IG51bWJlciwgc2Vjb25kczogbnVtYmVyLCBzaWduOiAtMSB8IDEsIG1heERlY2ltYWxzPzogbnVtYmVyKSB7XG4gIGlmIChpc05pbChkZWdyZWVzKSkgcmV0dXJuIG51bGw7XG4gIGRlZ3JlZXMgPSAoc2lnbiB8fCAxKSAqIChkZWdyZWVzICsgKG1pbnV0ZXMgfHwgMCkgLyA2MCArIChzZWNvbmRzIHx8IDApIC8gKDYwICogNjApKTtcbiAgcmV0dXJuIHJvdW5kRmxvYXQoZGVncmVlcywgbWF4RGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiByb3VuZEZsb2F0KGlucHV0OiBudW1iZXIsIG1heERlY2ltYWxzPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKG1heERlY2ltYWxzICE9PSB1bmRlZmluZWQgJiYgbWF4RGVjaW1hbHMgPj0gMCkge1xuICAgIC8vIFV0aWxpc2F0aW9uIGRlIHRvRml4ZWQgcG91ciBnw6lyZXIgbGVzIHByb2Jsw6htZXMgZGUgcHLDqWNpc2lvblxuICAgIGNvbnN0IHN0ciA9IGlucHV0LnRvRml4ZWQobWF4RGVjaW1hbHMpO1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cik7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuIl19