@talrace/ngx-noder 0.0.12 → 0.0.13

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 (72) hide show
  1. package/README.md +374 -71
  2. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +1 -1
  3. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +2 -5
  4. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +3 -3
  5. package/esm2022/lib/editor/components/edges/edge-element.model.mjs +30 -1
  6. package/esm2022/lib/editor/components/edges/edge.component.mjs +23 -23
  7. package/esm2022/lib/editor/components/edges/edges.mjs +30 -15
  8. package/esm2022/lib/editor/components/image/components/image.component.mjs +2 -2
  9. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +2 -2
  10. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +5 -3
  11. package/esm2022/lib/editor/components/table/components/table.component.mjs +7 -5
  12. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +12 -5
  13. package/esm2022/lib/editor/content/display-data/display-data.mjs +4 -4
  14. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +1 -1
  15. package/esm2022/lib/editor/content/helpers/link.helper.mjs +39 -3
  16. package/esm2022/lib/editor/display/layers/text.layer.mjs +100 -75
  17. package/esm2022/lib/editor/display/print/print.helper.mjs +3 -3
  18. package/esm2022/lib/editor/display/print/print.renderer.mjs +5 -5
  19. package/esm2022/lib/editor/display/renderer.mjs +23 -25
  20. package/esm2022/lib/editor/display/virtual.renderer.mjs +10 -43
  21. package/esm2022/lib/editor/execution/edit.session.mjs +24 -14
  22. package/esm2022/lib/editor/execution/editor.mjs +77 -116
  23. package/esm2022/lib/editor/execution/regulator.service.mjs +44 -39
  24. package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +2 -3
  25. package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +2 -3
  26. package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +2 -2
  27. package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +1 -1
  28. package/esm2022/lib/editor/gadgets/history/operation-history.mjs +27 -24
  29. package/esm2022/lib/editor/interaction/editor.service.mjs +22 -22
  30. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -2
  31. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +2 -2
  32. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +59 -7
  33. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +19 -21
  34. package/esm2022/lib/editor/operations/save-commands.helper.mjs +3 -2
  35. package/esm2022/lib/editor/positioning/content.helper.mjs +10 -1
  36. package/esm2022/lib/editor/positioning/position.helper.mjs +49 -35
  37. package/esm2022/lib/editor/revision.helper.mjs +3 -1
  38. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +1 -1
  39. package/esm2022/lib/models/generated/target.model.mjs +1 -1
  40. package/fesm2022/talrace-ngx-noder.mjs +636 -508
  41. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  42. package/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.d.ts +1 -3
  43. package/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.d.ts +1 -1
  44. package/lib/editor/components/edges/edge-element.model.d.ts +9 -1
  45. package/lib/editor/components/edges/edge.component.d.ts +4 -4
  46. package/lib/editor/components/edges/edges.d.ts +8 -2
  47. package/lib/editor/components/table/components/table.component.d.ts +4 -2
  48. package/lib/editor/components/table/selection/table-selection.d.ts +5 -2
  49. package/lib/editor/content/display-data/display-data.d.ts +2 -1
  50. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -1
  51. package/lib/editor/content/helpers/link.helper.d.ts +4 -1
  52. package/lib/editor/display/layers/text.layer.d.ts +8 -10
  53. package/lib/editor/display/print/print.helper.d.ts +1 -2
  54. package/lib/editor/display/print/print.renderer.d.ts +1 -2
  55. package/lib/editor/display/renderer.d.ts +9 -9
  56. package/lib/editor/display/virtual.renderer.d.ts +3 -10
  57. package/lib/editor/execution/edit.session.d.ts +7 -2
  58. package/lib/editor/execution/editor.d.ts +9 -8
  59. package/lib/editor/execution/regulator.service.d.ts +6 -4
  60. package/lib/editor/execution/targeting/cell-session-source.model.d.ts +0 -1
  61. package/lib/editor/execution/targeting/edge-session-source.model.d.ts +0 -1
  62. package/lib/editor/execution/targeting/session-source.model.d.ts +0 -1
  63. package/lib/editor/gadgets/history/operation-history.d.ts +5 -1
  64. package/lib/editor/interaction/editor.service.d.ts +13 -12
  65. package/lib/editor/operations/helpers/link-operations.helper.d.ts +7 -2
  66. package/lib/editor/operations/operations-helper.helper.d.ts +2 -2
  67. package/lib/editor/positioning/content.helper.d.ts +2 -0
  68. package/lib/editor/positioning/position.helper.d.ts +21 -6
  69. package/lib/models/generated/restore-text-styles.model.d.ts +1 -0
  70. package/lib/models/generated/target.model.d.ts +0 -1
  71. package/package.json +1 -1
  72. package/src/scss/base-editor.scss +4 -0
@@ -75,4 +75,4 @@ export class ContentStyleHelper {
75
75
  });
76
76
  }
77
77
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHlsZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU1RSxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUF5QjtRQUNoRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxhQUFhLFNBQVMsQ0FBQyxRQUFRLEtBQUssQ0FBQztTQUNsRDtRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN0QixNQUFNLElBQUksZUFBZSxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUM7U0FDcEQ7UUFFRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxvQkFBb0IsU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQztTQUNqQztRQUVELElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNsQixNQUFNLElBQUksb0JBQW9CLENBQUM7U0FDbEM7UUFFRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDckIsTUFBTSxJQUFJLDRCQUE0QixDQUFDO1NBQzFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQXlCO1FBQ2hELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osT0FBTyxVQUFVLENBQUM7U0FDckI7UUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDbEIsVUFBVSxJQUFJLFNBQVMsQ0FBQztTQUMzQjtRQUVELElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtZQUNoQixVQUFVLElBQUksT0FBTyxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFVBQVUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEtBQUssQ0FBQztTQUM1QztRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN0QixVQUFVLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQztTQUN0QztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBcUIsRUFBRSxNQUFzQjtRQUNsRSxPQUFPLENBQ0gsS0FBSyxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsY0FBYztZQUM5QyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJO1lBQzFCLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDcEMsS0FBSyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsVUFBVTtZQUN0QyxLQUFLLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxRQUFRO1lBQ2xDLEtBQUssQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLFdBQVc7WUFDeEMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtZQUM5QixLQUFLLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxhQUFhO1lBQzVDLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDcEMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDdkQsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBOEIsRUFBRSxNQUFzQjtRQUMzRSxPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3RCLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxJQUFJLE1BQU0sQ0FBQyxjQUFjO1lBQ2hFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQ2xDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTO1lBQ2pELFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVO1lBQ3BELFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRO1lBQzlDLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxJQUFJLE1BQU0sQ0FBQyxjQUFjO1lBQ2hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXO1lBQ3ZELE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNO1lBQ3hDLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxhQUFhO1lBQzdELFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTO1lBQ2pELGlCQUFpQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsaUJBQWlCO1NBQzVFLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTdHlsZUhlbHBlciB7XG4gICAgc3RhdGljIGdldFRleHRTdHlsZXNTdHJpbmcodGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKHRleHRTdHlsZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGBmb250LXNpemU6JHt0ZXh0U3R5bGUuZm9udFNpemV9cHQ7YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuZm9udEZhbWlseSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGBmb250LWZhbWlseToke3RleHRTdHlsZS5mb250RmFtaWx5fTtgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5mb250Q29sb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBgY29sb3I6JHt0ZXh0U3R5bGUuZm9udENvbG9yfTtgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5oaWdobGlnaHRDb2xvcikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGBiYWNrZ3JvdW5kLWNvbG9yOiR7dGV4dFN0eWxlLmhpZ2hsaWdodENvbG9yfTtgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5ib2xkKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ2ZvbnQtd2VpZ2h0OmJvbGQ7JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuaXRhbGljKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ2ZvbnQtc3R5bGU6aXRhbGljOyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFN0eWxlLnVuZGVybGluZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICd0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZm9udCBzdHlsZXMgc3RyaW5nIGZyb20gbW9kaWZpZXIgdXNlZCBmb3IgY2FudmFzIGNhbGN1bGF0aW9uXG4gICAgICovXG4gICAgc3RhdGljIGdldEZvbnRTdHlsZXNTdHJpbmcodGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBmb250U3RyaW5nID0gJyc7XG4gICAgICAgIGlmICghdGV4dFN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9udFN0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuaXRhbGljKSB7XG4gICAgICAgICAgICBmb250U3RyaW5nICs9ICdpdGFsaWMgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuYm9sZCkge1xuICAgICAgICAgICAgZm9udFN0cmluZyArPSAnYm9sZCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgZm9udFN0cmluZyArPSBgJHt0ZXh0U3R5bGUuZm9udFNpemV9cHQgYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuZm9udEZhbWlseSkge1xuICAgICAgICAgICAgZm9udFN0cmluZyArPSB0ZXh0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb250U3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBhcmVTYW1lVGV4dFN0eWxlcyhmaXJzdDogVGV4dFN0eWxlTW9kZWwsIHNlY29uZDogVGV4dFN0eWxlTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGZpcnN0LmhpZ2hsaWdodENvbG9yID09PSBzZWNvbmQuaGlnaGxpZ2h0Q29sb3IgJiZcbiAgICAgICAgICAgIGZpcnN0LmJvbGQgPT09IHNlY29uZC5ib2xkICYmXG4gICAgICAgICAgICBmaXJzdC5mb250Q29sb3IgPT09IHNlY29uZC5mb250Q29sb3IgJiZcbiAgICAgICAgICAgIGZpcnN0LmZvbnRGYW1pbHkgPT09IHNlY29uZC5mb250RmFtaWx5ICYmXG4gICAgICAgICAgICBmaXJzdC5mb250U2l6ZSA9PT0gc2Vjb25kLmZvbnRTaXplICYmXG4gICAgICAgICAgICBmaXJzdC5pc1NtYWxsQ2FwcyA9PT0gc2Vjb25kLmlzU21hbGxDYXBzICYmXG4gICAgICAgICAgICBmaXJzdC5pdGFsaWMgPT09IHNlY29uZC5pdGFsaWMgJiZcbiAgICAgICAgICAgIGZpcnN0LnN0cmlrZXRocm91Z2ggPT09IHNlY29uZC5zdHJpa2V0aHJvdWdoICYmXG4gICAgICAgICAgICBmaXJzdC51bmRlcmxpbmUgPT09IHNlY29uZC51bmRlcmxpbmUgJiZcbiAgICAgICAgICAgIGZpcnN0LnZlcnRpY2FsQWxpZ25tZW50ID09PSBzZWNvbmQudmVydGljYWxBbGlnbm1lbnRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29tYmluZVRleHRTdHlsZXMoY3VycmVudDogVGV4dFN0eWxlTW9kZWwgfCBudWxsLCBwYXJlbnQ6IFRleHRTdHlsZU1vZGVsKTogVGV4dFN0eWxlTW9kZWwge1xuICAgICAgICByZXR1cm4gbmV3IFRleHRTdHlsZU1vZGVsKHtcbiAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yOiBjdXJyZW50Py5oaWdobGlnaHRDb2xvciA/PyBwYXJlbnQuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICBib2xkOiBjdXJyZW50Py5ib2xkID8/IHBhcmVudC5ib2xkLFxuICAgICAgICAgICAgZm9udENvbG9yOiBjdXJyZW50Py5mb250Q29sb3IgPz8gcGFyZW50LmZvbnRDb2xvcixcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGN1cnJlbnQ/LmZvbnRGYW1pbHkgPz8gcGFyZW50LmZvbnRGYW1pbHksXG4gICAgICAgICAgICBmb250U2l6ZTogY3VycmVudD8uZm9udFNpemUgPz8gcGFyZW50LmZvbnRTaXplLFxuICAgICAgICAgICAgaGVhZGluZ1N0eWxlSWQ6IGN1cnJlbnQ/LmhlYWRpbmdTdHlsZUlkID8/IHBhcmVudC5oZWFkaW5nU3R5bGVJZCxcbiAgICAgICAgICAgIGlzU21hbGxDYXBzOiBjdXJyZW50Py5pc1NtYWxsQ2FwcyA/PyBwYXJlbnQuaXNTbWFsbENhcHMsXG4gICAgICAgICAgICBpdGFsaWM6IGN1cnJlbnQ/Lml0YWxpYyA/PyBwYXJlbnQuaXRhbGljLFxuICAgICAgICAgICAgc3RyaWtldGhyb3VnaDogY3VycmVudD8uc3RyaWtldGhyb3VnaCA/PyBwYXJlbnQuc3RyaWtldGhyb3VnaCxcbiAgICAgICAgICAgIHVuZGVybGluZTogY3VycmVudD8udW5kZXJsaW5lID8/IHBhcmVudC51bmRlcmxpbmUsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogY3VycmVudD8udmVydGljYWxBbGlnbm1lbnQgPz8gcGFyZW50LnZlcnRpY2FsQWxpZ25tZW50XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHlsZS5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUU1RSxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUF5QjtRQUNoRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxhQUFhLFNBQVMsQ0FBQyxRQUFRLEtBQUssQ0FBQztTQUNsRDtRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN0QixNQUFNLElBQUksZUFBZSxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUM7U0FDcEQ7UUFFRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDckIsTUFBTSxJQUFJLFNBQVMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxvQkFBb0IsU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDO1NBQzdEO1FBRUQsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQztTQUNqQztRQUVELElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNsQixNQUFNLElBQUksb0JBQW9CLENBQUM7U0FDbEM7UUFFRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDckIsTUFBTSxJQUFJLDRCQUE0QixDQUFDO1NBQzFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQXlCO1FBQ2hELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osT0FBTyxVQUFVLENBQUM7U0FDckI7UUFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDbEIsVUFBVSxJQUFJLFNBQVMsQ0FBQztTQUMzQjtRQUVELElBQUksU0FBUyxDQUFDLElBQUksRUFBRTtZQUNoQixVQUFVLElBQUksT0FBTyxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFVBQVUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEtBQUssQ0FBQztTQUM1QztRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN0QixVQUFVLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQztTQUN0QztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBcUIsRUFBRSxNQUFzQjtRQUNsRSxPQUFPLENBQ0gsS0FBSyxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsY0FBYztZQUM5QyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJO1lBQzFCLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDcEMsS0FBSyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsVUFBVTtZQUN0QyxLQUFLLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxRQUFRO1lBQ2xDLEtBQUssQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLFdBQVc7WUFDeEMsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtZQUM5QixLQUFLLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxhQUFhO1lBQzVDLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDcEMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDdkQsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBdUMsRUFBRSxNQUFzQjtRQUNwRixPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3RCLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxJQUFJLE1BQU0sQ0FBQyxjQUFjO1lBQ2hFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQ2xDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTO1lBQ2pELFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVO1lBQ3BELFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRO1lBQzlDLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxJQUFJLE1BQU0sQ0FBQyxjQUFjO1lBQ2hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXO1lBQ3ZELE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNO1lBQ3hDLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLE1BQU0sQ0FBQyxhQUFhO1lBQzdELFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTO1lBQ2pELGlCQUFpQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsaUJBQWlCO1NBQzVFLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRTdHlsZUhlbHBlciB7XG4gICAgc3RhdGljIGdldFRleHRTdHlsZXNTdHJpbmcodGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKHRleHRTdHlsZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGBmb250LXNpemU6JHt0ZXh0U3R5bGUuZm9udFNpemV9cHQ7YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuZm9udEZhbWlseSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGBmb250LWZhbWlseToke3RleHRTdHlsZS5mb250RmFtaWx5fTtgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5mb250Q29sb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBgY29sb3I6JHt0ZXh0U3R5bGUuZm9udENvbG9yfTtgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5oaWdobGlnaHRDb2xvcikge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGBiYWNrZ3JvdW5kLWNvbG9yOiR7dGV4dFN0eWxlLmhpZ2hsaWdodENvbG9yfTtgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5ib2xkKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ2ZvbnQtd2VpZ2h0OmJvbGQ7JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuaXRhbGljKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJ2ZvbnQtc3R5bGU6aXRhbGljOyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFN0eWxlLnVuZGVybGluZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICd0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZm9udCBzdHlsZXMgc3RyaW5nIGZyb20gbW9kaWZpZXIgdXNlZCBmb3IgY2FudmFzIGNhbGN1bGF0aW9uXG4gICAgICovXG4gICAgc3RhdGljIGdldEZvbnRTdHlsZXNTdHJpbmcodGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBmb250U3RyaW5nID0gJyc7XG4gICAgICAgIGlmICghdGV4dFN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9udFN0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuaXRhbGljKSB7XG4gICAgICAgICAgICBmb250U3RyaW5nICs9ICdpdGFsaWMgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuYm9sZCkge1xuICAgICAgICAgICAgZm9udFN0cmluZyArPSAnYm9sZCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRTdHlsZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgZm9udFN0cmluZyArPSBgJHt0ZXh0U3R5bGUuZm9udFNpemV9cHQgYDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0ZXh0U3R5bGUuZm9udEZhbWlseSkge1xuICAgICAgICAgICAgZm9udFN0cmluZyArPSB0ZXh0U3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb250U3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBhcmVTYW1lVGV4dFN0eWxlcyhmaXJzdDogVGV4dFN0eWxlTW9kZWwsIHNlY29uZDogVGV4dFN0eWxlTW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGZpcnN0LmhpZ2hsaWdodENvbG9yID09PSBzZWNvbmQuaGlnaGxpZ2h0Q29sb3IgJiZcbiAgICAgICAgICAgIGZpcnN0LmJvbGQgPT09IHNlY29uZC5ib2xkICYmXG4gICAgICAgICAgICBmaXJzdC5mb250Q29sb3IgPT09IHNlY29uZC5mb250Q29sb3IgJiZcbiAgICAgICAgICAgIGZpcnN0LmZvbnRGYW1pbHkgPT09IHNlY29uZC5mb250RmFtaWx5ICYmXG4gICAgICAgICAgICBmaXJzdC5mb250U2l6ZSA9PT0gc2Vjb25kLmZvbnRTaXplICYmXG4gICAgICAgICAgICBmaXJzdC5pc1NtYWxsQ2FwcyA9PT0gc2Vjb25kLmlzU21hbGxDYXBzICYmXG4gICAgICAgICAgICBmaXJzdC5pdGFsaWMgPT09IHNlY29uZC5pdGFsaWMgJiZcbiAgICAgICAgICAgIGZpcnN0LnN0cmlrZXRocm91Z2ggPT09IHNlY29uZC5zdHJpa2V0aHJvdWdoICYmXG4gICAgICAgICAgICBmaXJzdC51bmRlcmxpbmUgPT09IHNlY29uZC51bmRlcmxpbmUgJiZcbiAgICAgICAgICAgIGZpcnN0LnZlcnRpY2FsQWxpZ25tZW50ID09PSBzZWNvbmQudmVydGljYWxBbGlnbm1lbnRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29tYmluZVRleHRTdHlsZXMoY3VycmVudDogUGFydGlhbDxUZXh0U3R5bGVNb2RlbD4gfCBudWxsLCBwYXJlbnQ6IFRleHRTdHlsZU1vZGVsKTogVGV4dFN0eWxlTW9kZWwge1xuICAgICAgICByZXR1cm4gbmV3IFRleHRTdHlsZU1vZGVsKHtcbiAgICAgICAgICAgIGhpZ2hsaWdodENvbG9yOiBjdXJyZW50Py5oaWdobGlnaHRDb2xvciA/PyBwYXJlbnQuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICBib2xkOiBjdXJyZW50Py5ib2xkID8/IHBhcmVudC5ib2xkLFxuICAgICAgICAgICAgZm9udENvbG9yOiBjdXJyZW50Py5mb250Q29sb3IgPz8gcGFyZW50LmZvbnRDb2xvcixcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGN1cnJlbnQ/LmZvbnRGYW1pbHkgPz8gcGFyZW50LmZvbnRGYW1pbHksXG4gICAgICAgICAgICBmb250U2l6ZTogY3VycmVudD8uZm9udFNpemUgPz8gcGFyZW50LmZvbnRTaXplLFxuICAgICAgICAgICAgaGVhZGluZ1N0eWxlSWQ6IGN1cnJlbnQ/LmhlYWRpbmdTdHlsZUlkID8/IHBhcmVudC5oZWFkaW5nU3R5bGVJZCxcbiAgICAgICAgICAgIGlzU21hbGxDYXBzOiBjdXJyZW50Py5pc1NtYWxsQ2FwcyA/PyBwYXJlbnQuaXNTbWFsbENhcHMsXG4gICAgICAgICAgICBpdGFsaWM6IGN1cnJlbnQ/Lml0YWxpYyA/PyBwYXJlbnQuaXRhbGljLFxuICAgICAgICAgICAgc3RyaWtldGhyb3VnaDogY3VycmVudD8uc3RyaWtldGhyb3VnaCA/PyBwYXJlbnQuc3RyaWtldGhyb3VnaCxcbiAgICAgICAgICAgIHVuZGVybGluZTogY3VycmVudD8udW5kZXJsaW5lID8/IHBhcmVudC51bmRlcmxpbmUsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogY3VycmVudD8udmVydGljYWxBbGlnbm1lbnQgPz8gcGFyZW50LnZlcnRpY2FsQWxpZ25tZW50XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,6 +1,42 @@
1
+ import { FormatModel } from './../../../models/generated/format.model';
2
+ import { FormatHelper } from './format.helper';
3
+ import { LinkModel } from '../../../models/generated/link.model';
1
4
  export class LinkHelper {
2
- static sliceSection(links, startIndex, endIndex) {
3
- return links.filter(x => x.startIndex >= startIndex && x.endIndex <= endIndex);
5
+ static sliceSection(links, start, end) {
6
+ return links.map(link => LinkHelper.getPartialLink(link, start, end)).filter((link) => link !== null);
7
+ }
8
+ static sliceFormats(links, startIndex, endIndex) {
9
+ const result = [];
10
+ for (const link of links) {
11
+ const absoluteFormats = link.formats.map(x => ({
12
+ ...x,
13
+ startIndex: x.startIndex + link.startIndex,
14
+ endIndex: x.endIndex + link.startIndex
15
+ }));
16
+ const slicedLinkFormats = FormatHelper.sliceSection(absoluteFormats, startIndex, endIndex);
17
+ result.push(...slicedLinkFormats);
18
+ }
19
+ return result;
20
+ }
21
+ static getPartialLink(link, selectionStart, selectionEnd) {
22
+ if (link.endIndex < selectionStart || link.startIndex > selectionEnd) {
23
+ return null;
24
+ }
25
+ const newStart = Math.max(link.startIndex, selectionStart);
26
+ const newEnd = Math.min(link.endIndex, selectionEnd);
27
+ const newFormats = link.formats
28
+ .map(format => {
29
+ const formatStart = link.startIndex + format.startIndex;
30
+ const formatEnd = link.startIndex + format.endIndex;
31
+ if (formatEnd < newStart || formatStart > newEnd) {
32
+ return null;
33
+ }
34
+ const newFormatStart = Math.max(formatStart, newStart) - newStart;
35
+ const newFormatEnd = Math.min(formatEnd, newEnd) - newStart;
36
+ return new FormatModel({ ...format, startIndex: newFormatStart, endIndex: newFormatEnd });
37
+ })
38
+ .filter((format) => format !== null);
39
+ return new LinkModel({ ...link, startIndex: newStart, endIndex: newEnd, formats: newFormats });
4
40
  }
5
41
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvY29udGVudC9oZWxwZXJzL2xpbmsuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxVQUFVO0lBQ25CLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBa0IsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQ3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLENBQUM7SUFDbkYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlua01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExpbmtIZWxwZXIge1xuICAgIHN0YXRpYyBzbGljZVNlY3Rpb24obGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiBMaW5rTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiBsaW5rcy5maWx0ZXIoeCA9PiB4LnN0YXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiB4LmVuZEluZGV4IDw9IGVuZEluZGV4KTtcbiAgICB9XG59XG4iXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvY29udGVudC9oZWxwZXJzL2xpbmsuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRWpFLE1BQU0sT0FBTyxVQUFVO0lBQ25CLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBa0IsRUFBRSxLQUFhLEVBQUUsR0FBVztRQUM5RCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQXFCLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBa0IsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQ3hFLE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDdEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxHQUFHLENBQUM7Z0JBQ0osVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7Z0JBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVO2FBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBRUosTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFlLEVBQUUsY0FBc0IsRUFBRSxZQUFvQjtRQUN2RixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxFQUFFO1lBQ2xFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPO2FBQzFCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNWLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDcEQsSUFBSSxTQUFTLEdBQUcsUUFBUSxJQUFJLFdBQVcsR0FBRyxNQUFNLEVBQUU7Z0JBQzlDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQzVELE9BQU8sSUFBSSxXQUFXLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBeUIsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVoRSxPQUFPLElBQUksU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2Zvcm1hdC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtYXRIZWxwZXIgfSBmcm9tICcuL2Zvcm1hdC5oZWxwZXInO1xuaW1wb3J0IHsgTGlua01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIExpbmtIZWxwZXIge1xuICAgIHN0YXRpYyBzbGljZVNlY3Rpb24obGlua3M6IExpbmtNb2RlbFtdLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IExpbmtNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIGxpbmtzLm1hcChsaW5rID0+IExpbmtIZWxwZXIuZ2V0UGFydGlhbExpbmsobGluaywgc3RhcnQsIGVuZCkpLmZpbHRlcigobGluayk6IGxpbmsgaXMgTGlua01vZGVsID0+IGxpbmsgIT09IG51bGwpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzbGljZUZvcm1hdHMobGlua3M6IExpbmtNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiBGb3JtYXRNb2RlbFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBGb3JtYXRNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVGb3JtYXRzID0gbGluay5mb3JtYXRzLm1hcCh4ID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB4LnN0YXJ0SW5kZXggKyBsaW5rLnN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IHguZW5kSW5kZXggKyBsaW5rLnN0YXJ0SW5kZXhcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgY29uc3Qgc2xpY2VkTGlua0Zvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKGFic29sdXRlRm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2xpY2VkTGlua0Zvcm1hdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYXJ0aWFsTGluayhsaW5rOiBMaW5rTW9kZWwsIHNlbGVjdGlvblN0YXJ0OiBudW1iZXIsIHNlbGVjdGlvbkVuZDogbnVtYmVyKTogTGlua01vZGVsIHwgbnVsbCB7XG4gICAgICAgIGlmIChsaW5rLmVuZEluZGV4IDwgc2VsZWN0aW9uU3RhcnQgfHwgbGluay5zdGFydEluZGV4ID4gc2VsZWN0aW9uRW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gTWF0aC5tYXgobGluay5zdGFydEluZGV4LCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICAgIGNvbnN0IG5ld0VuZCA9IE1hdGgubWluKGxpbmsuZW5kSW5kZXgsIHNlbGVjdGlvbkVuZCk7XG4gICAgICAgIGNvbnN0IG5ld0Zvcm1hdHMgPSBsaW5rLmZvcm1hdHNcbiAgICAgICAgICAgIC5tYXAoZm9ybWF0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRTdGFydCA9IGxpbmsuc3RhcnRJbmRleCArIGZvcm1hdC5zdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdEVuZCA9IGxpbmsuc3RhcnRJbmRleCArIGZvcm1hdC5lbmRJbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0RW5kIDwgbmV3U3RhcnQgfHwgZm9ybWF0U3RhcnQgPiBuZXdFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Rm9ybWF0U3RhcnQgPSBNYXRoLm1heChmb3JtYXRTdGFydCwgbmV3U3RhcnQpIC0gbmV3U3RhcnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Rm9ybWF0RW5kID0gTWF0aC5taW4oZm9ybWF0RW5kLCBuZXdFbmQpIC0gbmV3U3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtYXRNb2RlbCh7IC4uLmZvcm1hdCwgc3RhcnRJbmRleDogbmV3Rm9ybWF0U3RhcnQsIGVuZEluZGV4OiBuZXdGb3JtYXRFbmQgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoZm9ybWF0KTogZm9ybWF0IGlzIEZvcm1hdE1vZGVsID0+IGZvcm1hdCAhPT0gbnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMaW5rTW9kZWwoeyAuLi5saW5rLCBzdGFydEluZGV4OiBuZXdTdGFydCwgZW5kSW5kZXg6IG5ld0VuZCwgZm9ybWF0czogbmV3Rm9ybWF0cyB9KTtcbiAgICB9XG59XG4iXX0=
@@ -8,18 +8,17 @@ import { Lines } from '../../content/display-data/lines';
8
8
  import { ParagraphHelper } from '../../execution/helpers/paragraph.helper';
9
9
  import { RenderingHelper } from '../rendering.helper';
10
10
  export class TextLayer {
11
- constructor(parentElement, session, editorService, renderingHelper = RenderingHelper) {
11
+ constructor(parentElement, session, renderingHelper = RenderingHelper) {
12
+ this.parentElement = parentElement;
12
13
  this.session = session;
13
- this.editorService = editorService;
14
14
  this.renderingHelper = renderingHelper;
15
15
  this.edgeElements = [];
16
- this.edgeEditingPage = null;
17
16
  this.pagesCountChangedHandler = (event) => {
18
17
  this.lines.setSizes(event.pagesCount, event.pageHeight);
19
18
  };
20
19
  this.element = document.createElement('div');
21
20
  this.element.className = 'noder-layer noder-text-layer';
22
- parentElement.appendChild(this.element);
21
+ this.parentElement.appendChild(this.element);
23
22
  this.lines = new Lines(this.element);
24
23
  this.session.displayData.addEventListener('pagesCountChanged', this.pagesCountChangedHandler);
25
24
  this.element.style.width = `${this.session.displayData.pageWidth}px`;
@@ -27,31 +26,73 @@ export class TextLayer {
27
26
  destroy() {
28
27
  this.session.displayData.removeEventListener('pagesCountChanged', this.pagesCountChangedHandler);
29
28
  }
29
+ updateEdge(type, pageType) {
30
+ const pages = [];
31
+ let index = this.edgeElements.findIndex(x => x.isCopy(type, pageType));
32
+ while (index !== -1) {
33
+ pages.push(this.edgeElements[index].page);
34
+ DomHelper.removeElement(this.edgeElements[index].container);
35
+ this.edgeElements.splice(index, 1);
36
+ index = this.edgeElements.findIndex(x => x.isCopy(type, pageType));
37
+ }
38
+ const start = -this.element.offsetTop;
39
+ const end = start + this.parentElement.clientHeight;
40
+ for (let page of pages) {
41
+ if (type === EdgeType.Header) {
42
+ this.renderPageHeaderComponent(page, start, end);
43
+ }
44
+ else {
45
+ this.renderPageFooterComponent(page, start, end);
46
+ }
47
+ }
48
+ let origin = this.edgeElements.find(x => x.isNotCopy(type, pageType));
49
+ if (origin) {
50
+ const edge = this.session.customComponents.edges.getComponentByPageType(pageType, type);
51
+ const height = this.session.customComponents.edges.getComponentHeight(edge.instance);
52
+ const topOffset = type === EdgeType.Footer ? this.session.displayData.pageHeight - height : 0;
53
+ const edgeTop = this.getEdgeTop(topOffset, origin.page);
54
+ DomHelper.setStyle(origin.container.style, 'height', `${height}px`);
55
+ DomHelper.setStyle(origin.container.style, 'top', `${edgeTop}px`);
56
+ }
57
+ }
30
58
  updateEdges(config) {
31
59
  DomHelper.translate(this.element, 0, -config.scrollTop);
32
60
  while (this.edgeElements.length) {
33
- const removedEl = this.edgeElements.pop();
34
- DomHelper.removeElement(removedEl.element);
61
+ const removed = this.edgeElements.pop();
62
+ DomHelper.removeElement(removed.container);
63
+ }
64
+ const start = -this.element.offsetTop;
65
+ const end = start + this.parentElement.clientHeight;
66
+ for (let page of config.pages) {
67
+ this.renderPageHeaderComponent(page, start, end);
68
+ this.renderPageFooterComponent(page, start, end);
35
69
  }
36
- this.renderPagesEdgeComponents(config.pages);
37
- }
38
- edgeEditingPageUpdated(page) {
39
- const oldEditingPage = this.edgeEditingPage;
40
- this.edgeEditingPage = page;
41
- this.removeEdgeComponents([page ?? oldEditingPage]);
42
- this.renderPagesEdgeComponents([page ?? oldEditingPage]);
43
70
  }
44
- updateEdgeByLocation(updatedPageType) {
45
- DomHelper.translate(this.element, 0, -this.config.scrollTop);
46
- let pagesToRender = [];
47
- for (let edgeElement of this.edgeElements) {
48
- if (edgeElement.pageType !== updatedPageType || pagesToRender.includes(edgeElement.page)) {
49
- continue;
71
+ scrollEdges(config) {
72
+ DomHelper.translate(this.element, 0, -config.scrollTop);
73
+ const start = -this.element.offsetTop;
74
+ const end = start + this.parentElement.clientHeight;
75
+ let removeIndex = this.edgeElements.findIndex(x => !x.isWithin(start, end));
76
+ while (removeIndex !== -1) {
77
+ const element = this.edgeElements[removeIndex];
78
+ if (element.isOrigin) {
79
+ const copy = this.edgeElements.find(x => x.isCopy(element.edgeType, element.pageType));
80
+ if (copy) {
81
+ copy.substitute(element);
82
+ }
83
+ }
84
+ DomHelper.removeElement(this.edgeElements[removeIndex].container);
85
+ this.edgeElements.splice(removeIndex, 1);
86
+ removeIndex = this.edgeElements.findIndex(x => !x.isWithin(start, end));
87
+ }
88
+ for (let page of config.pages) {
89
+ if (!this.edgeElements.some(x => x.page === page && x.edgeType === EdgeType.Header)) {
90
+ this.renderPageHeaderComponent(page, start, end);
91
+ }
92
+ if (!this.edgeElements.some(x => x.page === page && x.edgeType === EdgeType.Footer)) {
93
+ this.renderPageFooterComponent(page, start, end);
50
94
  }
51
- pagesToRender.push(edgeElement.page);
52
95
  }
53
- this.removeEdgeComponents(pagesToRender);
54
- this.renderPagesEdgeComponents(pagesToRender);
55
96
  }
56
97
  updateLines(config) {
57
98
  DomHelper.translate(this.element, 0, -config.scrollTop);
@@ -61,13 +102,6 @@ export class TextLayer {
61
102
  }
62
103
  this.lines.push(this.renderTextParagraph(config.contentRange));
63
104
  }
64
- scrollPages(config) {
65
- DomHelper.translate(this.element, 0, -config.scrollTop);
66
- const removedPages = this.config.pages.filter(x => !config.pages.includes(x));
67
- this.removeEdgeComponents(removedPages);
68
- const newPages = config.pages.filter(x => !this.config.pages.includes(x));
69
- this.renderPagesEdgeComponents(newPages);
70
- }
71
105
  scrollLines(config) {
72
106
  const oldConfig = this.config;
73
107
  this.config = config;
@@ -95,56 +129,50 @@ export class TextLayer {
95
129
  this.lines.push(lines);
96
130
  }
97
131
  }
98
- getEdgeParagraphTop(topOffset, page) {
99
- const paragraphTop = this.session.displayData.pagesSpace + topOffset;
100
- return paragraphTop + (page - 1) * (this.session.displayData.pageHeight + this.session.displayData.pagesSpace);
101
- }
102
132
  getParagraphTop(row) {
103
133
  return this.session.displayData.getDistanceFromTop(row);
104
134
  }
105
- renderPagesEdgeComponents(pages) {
106
- const displayData = this.session.displayData;
107
- for (let page of pages) {
108
- const header = this.session.customComponents.edges.getComponentByPage(page, EdgeType.Header);
109
- const headerHeight = this.session.customComponents.edges.getComponentHeight(page, EdgeType.Header);
110
- if (header) {
111
- this.renderEdgeComponent(header, headerHeight, page);
135
+ getEdgeTop(topOffset, page) {
136
+ const paragraphTop = this.session.displayData.pagesSpace + topOffset;
137
+ return paragraphTop + (page - 1) * (this.session.displayData.pageHeight + this.session.displayData.pagesSpace);
138
+ }
139
+ renderPageHeaderComponent(page, start, end) {
140
+ const header = this.session.customComponents.edges.getComponentByPage(page, EdgeType.Header);
141
+ if (header) {
142
+ const height = this.session.customComponents.edges.getComponentHeight(header.instance);
143
+ const edgeTop = this.getEdgeTop(0, page);
144
+ if (edgeTop > end || edgeTop + height < start) {
145
+ return;
112
146
  }
113
- const footer = this.session.customComponents.edges.getComponentByPage(page, EdgeType.Footer);
114
- const footerHeight = this.session.customComponents.edges.getComponentHeight(page, EdgeType.Footer);
115
- if (footer) {
116
- const topOffset = displayData.pageHeight - footerHeight;
117
- this.renderEdgeComponent(footer, footerHeight, page, topOffset);
147
+ this.renderEdgeComponent(header, height, page, edgeTop);
148
+ }
149
+ }
150
+ renderPageFooterComponent(page, start, end) {
151
+ const footer = this.session.customComponents.edges.getComponentByPage(page, EdgeType.Footer);
152
+ if (footer) {
153
+ const height = this.session.customComponents.edges.getComponentHeight(footer.instance);
154
+ const topOffset = this.session.displayData.pageHeight - height;
155
+ const edgeTop = this.getEdgeTop(topOffset, page);
156
+ if (edgeTop > end || edgeTop + height < start) {
157
+ return;
118
158
  }
159
+ this.renderEdgeComponent(footer, height, page, edgeTop);
119
160
  }
120
161
  }
121
- renderEdgeComponent(edgeComponent, edgeHeight, page, topOffset = 0) {
162
+ renderEdgeComponent(component, edgeHeight, page, edgeTop) {
122
163
  const container = RenderingHelper.createDivContainer('noder-edge-group');
123
- let paragraphTop = this.getEdgeParagraphTop(topOffset, page);
124
164
  DomHelper.setStyle(container.style, 'height', `${edgeHeight}px`);
125
- DomHelper.setStyle(container.style, 'top', `${paragraphTop}px`);
126
- const componentElement = edgeComponent.hostView.rootNodes[0];
127
- if (this.edgeEditingPage === page) {
128
- componentElement.setAttribute('data-session-id', `${edgeComponent.instance.sessionId}`);
129
- container.appendChild(componentElement);
130
- this.element.appendChild(container);
131
- this.edgeElements.push(new EdgeElementModel({ page, element: container, pageType: edgeComponent.instance.model.pageType }));
132
- return;
133
- }
134
- const componentCopy = componentElement.cloneNode(true);
135
- componentCopy.setAttribute('data-session-id', `${edgeComponent.instance.sessionId}`);
136
- container.appendChild(componentCopy);
165
+ DomHelper.setStyle(container.style, 'top', `${edgeTop}px`);
166
+ const componentElement = component.hostView.rootNodes[0];
167
+ const edge = component.instance;
168
+ const isOrigin = !this.edgeElements.some(x => x.isNotCopy(edge.type, edge.model.pageType));
169
+ const element = isOrigin ? componentElement : componentElement.cloneNode(true);
170
+ container.appendChild(element);
137
171
  this.element.appendChild(container);
138
- this.edgeElements.push(new EdgeElementModel({ page, element: container, pageType: edgeComponent.instance.model.pageType }));
139
- this.editorService.edgeElementCopyUpdated(componentCopy, page);
140
- }
141
- removeEdgeComponents(removedPages) {
142
- let removeIndex = this.edgeElements.findIndex(x => removedPages.includes(x.page));
143
- while (removeIndex !== -1) {
144
- const removedElement = this.edgeElements[removeIndex];
145
- DomHelper.removeElement(removedElement.element);
146
- this.edgeElements.splice(removeIndex, 1);
147
- removeIndex = this.edgeElements.findIndex(x => removedPages.includes(x.page));
172
+ const model = new EdgeElementModel({ page, container, pageType: edge.model.pageType, edgeType: edge.type, isOrigin });
173
+ this.edgeElements.push(model);
174
+ if (!isOrigin) {
175
+ element.onmouseenter = () => model.replace(this.edgeElements.find(x => x.isNotCopy(model.edgeType, model.pageType)));
148
176
  }
149
177
  }
150
178
  renderTextParagraph(rowsDistance) {
@@ -160,7 +188,7 @@ export class TextLayer {
160
188
  DomHelper.setStyle(paragraphCell.element.style, 'padding-left', `${this.session.displayData.pageMargin.left}px`);
161
189
  DomHelper.setStyle(paragraphCell.element.style, 'padding-right', `${this.session.displayData.pageMargin.right}px`);
162
190
  const paragraphSettings = this.session.displayData.getParagraphSettings(row);
163
- if (paragraphSettings?.numberingData.numberingId !== null) {
191
+ if (paragraphSettings.numberingData.numberingId !== null) {
164
192
  const numberingElement = this.renderingHelper.renderNumberingMarker(paragraphSettings, this.element, this.session.generalProperties.scalingRatio);
165
193
  numberingElement.className = 'numberingMarker';
166
194
  paragraphCell.element.appendChild(numberingElement);
@@ -178,10 +206,7 @@ export class TextLayer {
178
206
  parent.appendChild(linesContainerElement);
179
207
  const startIndex = this.session.displayData.positionToIndex({ row, column: 0 });
180
208
  const endIndex = this.session.displayData.positionToIndex({ row: row + 1, column: 0 }) - 1;
181
- const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, startIndex, endIndex).map(x => new FormatExtModel({
182
- ...x,
183
- content: this.session.model.content.substring(x.startIndex, x.endIndex + 1)
184
- }));
209
+ const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, startIndex, endIndex).map(x => new FormatExtModel({ ...x, content: this.session.model.content.substring(x.startIndex, x.endIndex + 1) }));
185
210
  const splits = this.session.displayData.paragraphs[row].nextLineIndexes;
186
211
  if (splits?.length) {
187
212
  const distance = new DistanceModel({ start: startIndex, end: endIndex });
@@ -198,4 +223,4 @@ export class TextLayer {
198
223
  }
199
224
  }
200
225
  }
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L2xheWVycy90ZXh0LmxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sU0FBUztJQVdsQixZQUNJLGFBQTBCLEVBQ2hCLE9BQW9CLEVBQ3RCLGFBQTRCLEVBQzVCLGtCQUFrQixlQUFlO1FBRi9CLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBUjdDLGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQUV0QyxvQkFBZSxHQUFrQixJQUFJLENBQUM7UUFtUTlCLDZCQUF3QixHQUFHLENBQUMsS0FBaUQsRUFBRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQztRQTdQRSxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsOEJBQThCLENBQUM7UUFDeEQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQW9CO1FBQzVCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBbUI7UUFDdEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsZUFBeUI7UUFDMUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxhQUFhLEdBQWEsRUFBRSxDQUFDO1FBQ2pDLEtBQUssSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssZUFBZSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0RixTQUFTO2FBQ1o7WUFFRCxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFvQjtRQUM1QixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQW9CO1FBQzVCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBb0I7UUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQ2hILE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDMUQsS0FBSyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNyRixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3RCO1NBQ0o7UUFFRCxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ3RELEtBQUssSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNwQjtTQUNKO1FBRUQsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQ2xDLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUNqRyxDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFFRCxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDbEMsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQzdGLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLElBQVk7UUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNyRSxPQUFPLFlBQVksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRVMsZUFBZSxDQUFDLEdBQVc7UUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBZTtRQUM3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUM3QyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtZQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkcsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDeEQ7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkcsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNuRTtTQUNKO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGFBQStDLEVBQUUsVUFBa0IsRUFBRSxJQUFZLEVBQUUsU0FBUyxHQUFHLENBQUM7UUFDeEgsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RCxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUNqRSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUVoRSxNQUFNLGdCQUFnQixHQUFJLGFBQWEsQ0FBQyxRQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDdEcsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRTtZQUMvQixnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDeEYsU0FBUyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVILE9BQU87U0FDVjtRQUVELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWdCLENBQUM7UUFDdEUsYUFBYSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRixTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVILElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxZQUFzQjtRQUMvQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEYsT0FBTyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RCxTQUFTLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNqRjtJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUEyQjtRQUNuRCxNQUFNLFFBQVEsR0FBVyxFQUFFLENBQUM7UUFDNUIsS0FBSyxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELGFBQWEsQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFDO1lBQ3JELFNBQVMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFlLElBQUksQ0FBQyxDQUFDO1lBQ2xGLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUM1RSxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQ2pILFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RSxJQUFJLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO2dCQUN2RCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQy9ELGlCQUFpQixFQUNqQixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUM5QyxDQUFDO2dCQUNGLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztnQkFDL0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUN2RDtZQUVELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFZLEVBQUUsR0FBVztRQUM3QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RixTQUFTLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFlLElBQUksQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUUxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLGNBQWMsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQ3hCLFVBQVUsRUFDVixRQUFRLENBQ1gsQ0FBQyxHQUFHLENBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FDQSxJQUFJLGNBQWMsQ0FBQztZQUNmLEdBQUcsQ0FBQztZQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDOUUsQ0FBQyxDQUNULENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ3hFLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FDekMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsRUFDbkUsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsUUFBUSxFQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQzVCLENBQUM7U0FDTDthQUFNO1lBQ0gsTUFBTSxtQkFBbUIsR0FDckIsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxJQUFJO2dCQUNoRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxDQUFDLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQzlGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQ3JELGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFDbEMsbUJBQW1CLEVBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUM5QyxDQUFDO1lBQ0YscUJBQXFCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sV0FBVyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUN4QyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFDeEQsZUFBZSxFQUNmLFdBQVcsRUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQzVCLENBQUM7U0FDTDtJQUNMLENBQUM7Q0FLSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgRW1iZWRkZWRWaWV3UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi9jZWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEaXN0YW5jZU1vZGVsIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2Rpc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7IERvbUhlbHBlciB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9oZWxwZXJzL2RvbS5oZWxwZXInO1xuaW1wb3J0IHsgRWRnZUVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS1lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEVkZ2VUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lZGdlcy9lZGdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEZvcm1hdEV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZm9ybWF0LWV4dC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtYXRTdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9oZWxwZXJzL2Zvcm1hdC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllci5jb25maWcnO1xuaW1wb3J0IHsgTGluZXMgfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9saW5lcyc7XG5pbXBvcnQgeyBOb2RlckVkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lZGdlcy9wYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhIZWxwZXIgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vaGVscGVycy9wYXJhZ3JhcGguaGVscGVyJztcbmltcG9ydCB7IFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4uL3JlbmRlcmluZy5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgVGV4dExheWVyIHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIGxpbmVzOiBMaW5lcztcblxuICAgIGNvbmZpZzogSUxheWVyQ29uZmlnO1xuXG4gICAgZWRnZUVsZW1lbnRzOiBFZGdlRWxlbWVudE1vZGVsW10gPSBbXTtcblxuICAgIGVkZ2VFZGl0aW5nUGFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHByb3RlY3RlZCBzZXNzaW9uOiBFZGl0U2Vzc2lvbixcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmluZ0hlbHBlciA9IFJlbmRlcmluZ0hlbHBlclxuICAgICkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICdub2Rlci1sYXllciBub2Rlci10ZXh0LWxheWVyJztcbiAgICAgICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMubGluZXMgPSBuZXcgTGluZXModGhpcy5lbGVtZW50KTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuYWRkRXZlbnRMaXN0ZW5lcigncGFnZXNDb3VudENoYW5nZWQnLCB0aGlzLnBhZ2VzQ291bnRDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlV2lkdGh9cHhgO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlcyhjb25maWc6IElMYXllckNvbmZpZyk6IHZvaWQge1xuICAgICAgICBEb21IZWxwZXIudHJhbnNsYXRlKHRoaXMuZWxlbWVudCwgMCwgLWNvbmZpZy5zY3JvbGxUb3ApO1xuICAgICAgICB3aGlsZSAodGhpcy5lZGdlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRWwgPSB0aGlzLmVkZ2VFbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5yZW1vdmVFbGVtZW50KHJlbW92ZWRFbC5lbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyUGFnZXNFZGdlQ29tcG9uZW50cyhjb25maWcucGFnZXMpO1xuICAgIH1cblxuICAgIGVkZ2VFZGl0aW5nUGFnZVVwZGF0ZWQocGFnZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRFZGl0aW5nUGFnZSA9IHRoaXMuZWRnZUVkaXRpbmdQYWdlO1xuICAgICAgICB0aGlzLmVkZ2VFZGl0aW5nUGFnZSA9IHBhZ2U7XG4gICAgICAgIHRoaXMucmVtb3ZlRWRnZUNvbXBvbmVudHMoW3BhZ2UgPz8gb2xkRWRpdGluZ1BhZ2VdKTtcbiAgICAgICAgdGhpcy5yZW5kZXJQYWdlc0VkZ2VDb21wb25lbnRzKFtwYWdlID8/IG9sZEVkaXRpbmdQYWdlXSk7XG4gICAgfVxuXG4gICAgdXBkYXRlRWRnZUJ5TG9jYXRpb24odXBkYXRlZFBhZ2VUeXBlOiBQYWdlVHlwZSk6IHZvaWQge1xuICAgICAgICBEb21IZWxwZXIudHJhbnNsYXRlKHRoaXMuZWxlbWVudCwgMCwgLXRoaXMuY29uZmlnLnNjcm9sbFRvcCk7XG4gICAgICAgIGxldCBwYWdlc1RvUmVuZGVyOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBlZGdlRWxlbWVudCBvZiB0aGlzLmVkZ2VFbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKGVkZ2VFbGVtZW50LnBhZ2VUeXBlICE9PSB1cGRhdGVkUGFnZVR5cGUgfHwgcGFnZXNUb1JlbmRlci5pbmNsdWRlcyhlZGdlRWxlbWVudC5wYWdlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYWdlc1RvUmVuZGVyLnB1c2goZWRnZUVsZW1lbnQucGFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVFZGdlQ29tcG9uZW50cyhwYWdlc1RvUmVuZGVyKTtcbiAgICAgICAgdGhpcy5yZW5kZXJQYWdlc0VkZ2VDb21wb25lbnRzKHBhZ2VzVG9SZW5kZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZUxpbmVzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICB3aGlsZSAodGhpcy5saW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubGluZXMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpbmVzLnB1c2godGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKGNvbmZpZy5jb250ZW50UmFuZ2UpKTtcbiAgICB9XG5cbiAgICBzY3JvbGxQYWdlcyhjb25maWc6IElMYXllckNvbmZpZyk6IHZvaWQge1xuICAgICAgICBEb21IZWxwZXIudHJhbnNsYXRlKHRoaXMuZWxlbWVudCwgMCwgLWNvbmZpZy5zY3JvbGxUb3ApO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWdlcyA9IHRoaXMuY29uZmlnLnBhZ2VzLmZpbHRlcih4ID0+ICFjb25maWcucGFnZXMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnJlbW92ZUVkZ2VDb21wb25lbnRzKHJlbW92ZWRQYWdlcyk7XG5cbiAgICAgICAgY29uc3QgbmV3UGFnZXMgPSBjb25maWcucGFnZXMuZmlsdGVyKHggPT4gIXRoaXMuY29uZmlnLnBhZ2VzLmluY2x1ZGVzKHgpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJQYWdlc0VkZ2VDb21wb25lbnRzKG5ld1BhZ2VzKTtcbiAgICB9XG5cbiAgICBzY3JvbGxMaW5lcyhjb25maWc6IElMYXllckNvbmZpZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRDb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG5cbiAgICAgICAgY29uc3Qgb2xkTGFzdFJvdyA9IG9sZENvbmZpZyA/IG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kIDogLTE7XG5cbiAgICAgICAgaWYgKCFvbGRDb25maWcgfHwgb2xkTGFzdFJvdyA8IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgfHwgY29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgPCBvbGRDb25maWcuY29udGVudFJhbmdlLnN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVMaW5lcyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgPCBjb25maWcuY29udGVudFJhbmdlLnN0YXJ0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgPSBjb25maWcuY29udGVudFJhbmdlLnN0YXJ0IC0gb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydDsgcm93ID4gMDsgcm93LS0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgPiBjb25maWcuY29udGVudFJhbmdlLmVuZCkge1xuICAgICAgICAgICAgZm9yIChsZXQgcm93ID0gb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgLSBjb25maWcuY29udGVudFJhbmdlLmVuZDsgcm93ID4gMDsgcm93LS0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgPiBjb25maWcuY29udGVudFJhbmdlLnN0YXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IHRoaXMucmVuZGVyVGV4dFBhcmFncmFwaChcbiAgICAgICAgICAgICAgICBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBjb25maWcuY29udGVudFJhbmdlLnN0YXJ0LCBlbmQ6IG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgLSAxIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KGxpbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCA8IGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IHRoaXMucmVuZGVyVGV4dFBhcmFncmFwaChcbiAgICAgICAgICAgICAgICBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCArIDEsIGVuZDogY29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnB1c2gobGluZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEVkZ2VQYXJhZ3JhcGhUb3AodG9wT2Zmc2V0OiBudW1iZXIsIHBhZ2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFRvcCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlICsgdG9wT2Zmc2V0O1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoVG9wICsgKHBhZ2UgLSAxKSAqICh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFnZUhlaWdodCArIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGFyYWdyYXBoVG9wKHJvdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXREaXN0YW5jZUZyb21Ub3Aocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclBhZ2VzRWRnZUNvbXBvbmVudHMocGFnZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlEYXRhID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhO1xuICAgICAgICBmb3IgKGxldCBwYWdlIG9mIHBhZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRCeVBhZ2UocGFnZSwgRWRnZVR5cGUuSGVhZGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckhlaWdodCA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodChwYWdlLCBFZGdlVHlwZS5IZWFkZXIpO1xuICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRWRnZUNvbXBvbmVudChoZWFkZXIsIGhlYWRlckhlaWdodCwgcGFnZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShwYWdlLCBFZGdlVHlwZS5Gb290ZXIpO1xuICAgICAgICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KHBhZ2UsIEVkZ2VUeXBlLkZvb3Rlcik7XG4gICAgICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wT2Zmc2V0ID0gZGlzcGxheURhdGEucGFnZUhlaWdodCAtIGZvb3RlckhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckVkZ2VDb21wb25lbnQoZm9vdGVyLCBmb290ZXJIZWlnaHQsIHBhZ2UsIHRvcE9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckVkZ2VDb21wb25lbnQoZWRnZUNvbXBvbmVudDogQ29tcG9uZW50UmVmPE5vZGVyRWRnZUNvbXBvbmVudD4sIGVkZ2VIZWlnaHQ6IG51bWJlciwgcGFnZTogbnVtYmVyLCB0b3BPZmZzZXQgPSAwKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVEaXZDb250YWluZXIoJ25vZGVyLWVkZ2UtZ3JvdXAnKTtcbiAgICAgICAgbGV0IHBhcmFncmFwaFRvcCA9IHRoaXMuZ2V0RWRnZVBhcmFncmFwaFRvcCh0b3BPZmZzZXQsIHBhZ2UpO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUoY29udGFpbmVyLnN0eWxlLCAnaGVpZ2h0JywgYCR7ZWRnZUhlaWdodH1weGApO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUoY29udGFpbmVyLnN0eWxlLCAndG9wJywgYCR7cGFyYWdyYXBoVG9wfXB4YCk7XG5cbiAgICAgICAgY29uc3QgY29tcG9uZW50RWxlbWVudCA9IChlZGdlQ29tcG9uZW50Lmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmVkZ2VFZGl0aW5nUGFnZSA9PT0gcGFnZSkge1xuICAgICAgICAgICAgY29tcG9uZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2Vzc2lvbi1pZCcsIGAke2VkZ2VDb21wb25lbnQuaW5zdGFuY2Uuc2Vzc2lvbklkfWApO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbXBvbmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5wdXNoKG5ldyBFZGdlRWxlbWVudE1vZGVsKHsgcGFnZSwgZWxlbWVudDogY29udGFpbmVyLCBwYWdlVHlwZTogZWRnZUNvbXBvbmVudC5pbnN0YW5jZS5tb2RlbC5wYWdlVHlwZSB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnRDb3B5ID0gY29tcG9uZW50RWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbXBvbmVudENvcHkuc2V0QXR0cmlidXRlKCdkYXRhLXNlc3Npb24taWQnLCBgJHtlZGdlQ29tcG9uZW50Lmluc3RhbmNlLnNlc3Npb25JZH1gKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbXBvbmVudENvcHkpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5lZGdlRWxlbWVudHMucHVzaChuZXcgRWRnZUVsZW1lbnRNb2RlbCh7IHBhZ2UsIGVsZW1lbnQ6IGNvbnRhaW5lciwgcGFnZVR5cGU6IGVkZ2VDb21wb25lbnQuaW5zdGFuY2UubW9kZWwucGFnZVR5cGUgfSkpO1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZWRnZUVsZW1lbnRDb3B5VXBkYXRlZChjb21wb25lbnRDb3B5LCBwYWdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUVkZ2VDb21wb25lbnRzKHJlbW92ZWRQYWdlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IHJlbW92ZUluZGV4ID0gdGhpcy5lZGdlRWxlbWVudHMuZmluZEluZGV4KHggPT4gcmVtb3ZlZFBhZ2VzLmluY2x1ZGVzKHgucGFnZSkpO1xuICAgICAgICB3aGlsZSAocmVtb3ZlSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRWxlbWVudCA9IHRoaXMuZWRnZUVsZW1lbnRzW3JlbW92ZUluZGV4XTtcbiAgICAgICAgICAgIERvbUhlbHBlci5yZW1vdmVFbGVtZW50KHJlbW92ZWRFbGVtZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lZGdlRWxlbWVudHMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgICAgIHJlbW92ZUluZGV4ID0gdGhpcy5lZGdlRWxlbWVudHMuZmluZEluZGV4KHggPT4gcmVtb3ZlZFBhZ2VzLmluY2x1ZGVzKHgucGFnZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUZXh0UGFyYWdyYXBoKHJvd3NEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCk6IENlbGxbXSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50OiBDZWxsW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcm93ID0gcm93c0Rpc3RhbmNlLnN0YXJ0OyByb3cgPD0gcm93c0Rpc3RhbmNlLmVuZDsgcm93KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaENlbGwgPSB0aGlzLmxpbmVzLmNyZWF0ZUNlbGwocm93KTtcbiAgICAgICAgICAgIHBhcmFncmFwaENlbGwuZWxlbWVudC5jbGFzc05hbWUgPSAnbm9kZXItbGluZS1ncm91cCc7XG4gICAgICAgICAgICBEb21IZWxwZXIucmVtb3ZlQ2hpbGRyZW4ocGFyYWdyYXBoQ2VsbC5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaEhlaWdodCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhIZWlnaHQocm93KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaFRvcCA9IHRoaXMuZ2V0UGFyYWdyYXBoVG9wKHJvdyk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUocGFyYWdyYXBoQ2VsbC5lbGVtZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7cGFyYWdyYXBoSGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUocGFyYWdyYXBoQ2VsbC5lbGVtZW50LnN0eWxlLCAndG9wJywgYCR7cGFyYWdyYXBoVG9wfXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUocGFyYWdyYXBoQ2VsbC5lbGVtZW50LnN0eWxlLCAncGFkZGluZy1sZWZ0JywgYCR7dGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VNYXJnaW4ubGVmdH1weGApO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ3BhZGRpbmctcmlnaHQnLCBgJHt0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFnZU1hcmdpbi5yaWdodH1weGApO1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoU2V0dGluZ3MgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoU2V0dGluZ3Mocm93KTtcbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhTZXR0aW5ncz8ubnVtYmVyaW5nRGF0YS5udW1iZXJpbmdJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlcmluZ0VsZW1lbnQgPSB0aGlzLnJlbmRlcmluZ0hlbHBlci5yZW5kZXJOdW1iZXJpbmdNYXJrZXIoXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5nZW5lcmFsUHJvcGVydGllcy5zY2FsaW5nUmF0aW9cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG51bWJlcmluZ0VsZW1lbnQuY2xhc3NOYW1lID0gJ251bWJlcmluZ01hcmtlcic7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2VsbC5lbGVtZW50LmFwcGVuZENoaWxkKG51bWJlcmluZ0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRMaW5lcyhwYXJhZ3JhcGhDZWxsLmVsZW1lbnQsIHJvdyk7XG4gICAgICAgICAgICBmcmFnbWVudC5wdXNoKHBhcmFncmFwaENlbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVGV4dExpbmVzKHBhcmVudDogTm9kZSwgcm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGluZXNDb250YWluZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJpbmdIZWxwZXIuY3JlYXRlRGl2Q29udGFpbmVyKCdsaW5lcy1jb250YWluZXInKTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU2V0dGluZ3MgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoU2V0dGluZ3Mocm93KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoSGVpZ2h0ID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaEhlaWdodChwYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGxpbmVzQ29udGFpbmVyRWxlbWVudC5zdHlsZSwgJ2hlaWdodCcsIGAke3BhcmFncmFwaEhlaWdodH1weGApO1xuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQobGluZXNDb250YWluZXJFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh7IHJvdywgY29sdW1uOiAwIH0pO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wb3NpdGlvblRvSW5kZXgoeyByb3c6IHJvdyArIDEsIGNvbHVtbjogMCB9KSAtIDE7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkRm9ybWF0cyA9IEZvcm1hdFN0eWxlSGVscGVyLmNvbWJpbmVTZWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm1vZGVsLmZvcm1hdHMsXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwubGlua3MsXG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXhcbiAgICAgICAgKS5tYXAoXG4gICAgICAgICAgICB4ID0+XG4gICAgICAgICAgICAgICAgbmV3IEZvcm1hdEV4dE1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5zZXNzaW9uLm1vZGVsLmNvbnRlbnQuc3Vic3RyaW5nKHguc3RhcnRJbmRleCwgeC5lbmRJbmRleCArIDEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3BsaXRzID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcm93XS5uZXh0TGluZUluZGV4ZXM7XG4gICAgICAgIGlmIChzcGxpdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdIZWxwZXIucmVuZGVyQ29udGVudFdyYXBwZWRMaW5lKFxuICAgICAgICAgICAgICAgIHsgY3VycmVudEVsZW1lbnQ6IHRoaXMuZWxlbWVudCwgcGFyZW50Tm9kZTogbGluZXNDb250YWluZXJFbGVtZW50IH0sXG4gICAgICAgICAgICAgICAgc3BsaXRzLFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLFxuICAgICAgICAgICAgICAgIGNvbWJpbmVkRm9ybWF0cyxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpbyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyaW5nT2Zmc2V0TGVmdCA9XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoU2V0dGluZ3MubnVtYmVyaW5nRGF0YS5udW1iZXJpbmdJZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLndpZHRoICsgcGFyYWdyYXBoU2V0dGluZ3MubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RMaW5lRWwgPSB0aGlzLnJlbmRlcmluZ0hlbHBlci5jcmVhdGVMaW5lRWxlbWVudChcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvWzBdLFxuICAgICAgICAgICAgICAgIG51bWJlcmluZ09mZnNldExlZnQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdlbmVyYWxQcm9wZXJ0aWVzLnNjYWxpbmdSYXRpb1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxpbmVzQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChsYXN0TGluZUVsKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0Rpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogc3RhcnRJbmRleCwgZW5kOiBlbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyaW5nSGVscGVyLnJlbmRlckNvbnRlbnRTaW1wbGVMaW5lKFxuICAgICAgICAgICAgICAgIHsgY3VycmVudEVsZW1lbnQ6IHRoaXMuZWxlbWVudCwgcGFyZW50Tm9kZTogbGFzdExpbmVFbCB9LFxuICAgICAgICAgICAgICAgIGNvbWJpbmVkRm9ybWF0cyxcbiAgICAgICAgICAgICAgICByb3dEaXN0YW5jZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGFnZXNDb3VudENoYW5nZWRIYW5kbGVyID0gKGV2ZW50OiB7IHBhZ2VzQ291bnQ6IG51bWJlcjsgcGFnZUhlaWdodDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgdGhpcy5saW5lcy5zZXRTaXplcyhldmVudC5wYWdlc0NvdW50LCBldmVudC5wYWdlSGVpZ2h0KTtcbiAgICB9O1xufVxuIl19
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L2xheWVycy90ZXh0LmxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sU0FBUztJQVNsQixZQUFvQixhQUEwQixFQUFZLE9BQW9CLEVBQVUsa0JBQWtCLGVBQWU7UUFBckcsa0JBQWEsR0FBYixhQUFhLENBQWE7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBRnpILGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQWdSOUIsNkJBQXdCLEdBQUcsQ0FBQyxLQUFpRCxFQUFFLEVBQUU7WUFDckYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO1FBL1FFLElBQUksQ0FBQyxPQUFPLEdBQUcs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QUMsZUFBZSxDQUFDLGlCQUFpQixDQUNyRCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2xDLG1CQUFtQixFQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FDOUMsQ0FBQztZQUNGLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDeEMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQ3hELGVBQWUsRUFDZixXQUFXLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM1QixDQUFDO1NBQ0w7SUFDTCxDQUFDO0NBS0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDZWxsIH0gZnJvbSAnLi4vY2VsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBEb21IZWxwZXIgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vaGVscGVycy9kb20uaGVscGVyJztcbmltcG9ydCB7IEVkZ2VFbGVtZW50TW9kZWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtZWxlbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEZvcm1hdEV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZm9ybWF0LWV4dC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtYXRTdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9oZWxwZXJzL2Zvcm1hdC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllci5jb25maWcnO1xuaW1wb3J0IHsgTGluZXMgfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9saW5lcyc7XG5pbXBvcnQgeyBOb2RlckVkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lZGdlcy9wYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhIZWxwZXIgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vaGVscGVycy9wYXJhZ3JhcGguaGVscGVyJztcbmltcG9ydCB7IFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4uL3JlbmRlcmluZy5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgVGV4dExheWVyIHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIGxpbmVzOiBMaW5lcztcblxuICAgIGNvbmZpZzogSUxheWVyQ29uZmlnO1xuXG4gICAgZWRnZUVsZW1lbnRzOiBFZGdlRWxlbWVudE1vZGVsW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3RlY3RlZCBzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcHJpdmF0ZSByZW5kZXJpbmdIZWxwZXIgPSBSZW5kZXJpbmdIZWxwZXIpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAnbm9kZXItbGF5ZXIgbm9kZXItdGV4dC1sYXllcic7XG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMubGluZXMgPSBuZXcgTGluZXModGhpcy5lbGVtZW50KTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuYWRkRXZlbnRMaXN0ZW5lcigncGFnZXNDb3VudENoYW5nZWQnLCB0aGlzLnBhZ2VzQ291bnRDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlV2lkdGh9cHhgO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlKHR5cGU6IEVkZ2VUeXBlLCBwYWdlVHlwZTogUGFnZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZWRnZUVsZW1lbnRzLmZpbmRJbmRleCh4ID0+IHguaXNDb3B5KHR5cGUsIHBhZ2VUeXBlKSk7XG4gICAgICAgIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBhZ2VzLnB1c2godGhpcy5lZGdlRWxlbWVudHNbaW5kZXhdLnBhZ2UpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQodGhpcy5lZGdlRWxlbWVudHNbaW5kZXhdLmNvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiB4LmlzQ29weSh0eXBlLCBwYWdlVHlwZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gLXRoaXMuZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgZm9yIChsZXQgcGFnZSBvZiBwYWdlcykge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IEVkZ2VUeXBlLkhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUhlYWRlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJQYWdlRm9vdGVyQ29tcG9uZW50KHBhZ2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBvcmlnaW4gPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kKHggPT4geC5pc05vdENvcHkodHlwZSwgcGFnZVR5cGUpKTtcbiAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZVR5cGUocGFnZVR5cGUsIHR5cGUpO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KGVkZ2UuaW5zdGFuY2UpO1xuICAgICAgICAgICAgY29uc3QgdG9wT2Zmc2V0ID0gdHlwZSA9PT0gRWRnZVR5cGUuRm9vdGVyID8gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VIZWlnaHQgLSBoZWlnaHQgOiAwO1xuICAgICAgICAgICAgY29uc3QgZWRnZVRvcCA9IHRoaXMuZ2V0RWRnZVRvcCh0b3BPZmZzZXQsIG9yaWdpbi5wYWdlKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShvcmlnaW4uY29udGFpbmVyLnN0eWxlLCAnaGVpZ2h0JywgYCR7aGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUob3JpZ2luLmNvbnRhaW5lci5zdHlsZSwgJ3RvcCcsIGAke2VkZ2VUb3B9cHhgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUVkZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG4gICAgICAgIHdoaWxlICh0aGlzLmVkZ2VFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmVkZ2VFbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5yZW1vdmVFbGVtZW50KHJlbW92ZWQuY29udGFpbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gLXRoaXMuZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgZm9yIChsZXQgcGFnZSBvZiBjb25maWcucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUhlYWRlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUZvb3RlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbEVkZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSAtdGhpcy5lbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBsZXQgcmVtb3ZlSW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiAheC5pc1dpdGhpbihzdGFydCwgZW5kKSk7XG4gICAgICAgIHdoaWxlIChyZW1vdmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkZ2VFbGVtZW50c1tyZW1vdmVJbmRleF07XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc09yaWdpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kKHggPT4geC5pc0NvcHkoZWxlbWVudC5lZGdlVHlwZSwgZWxlbWVudC5wYWdlVHlwZSkpO1xuICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHkuc3Vic3RpdHV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBEb21IZWxwZXIucmVtb3ZlRWxlbWVudCh0aGlzLmVkZ2VFbGVtZW50c1tyZW1vdmVJbmRleF0uY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZUVsZW1lbnRzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XG4gICAgICAgICAgICByZW1vdmVJbmRleCA9IHRoaXMuZWRnZUVsZW1lbnRzLmZpbmRJbmRleCh4ID0+ICF4LmlzV2l0aGluKHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHBhZ2Ugb2YgY29uZmlnLnBhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZWRnZUVsZW1lbnRzLnNvbWUoeCA9PiB4LnBhZ2UgPT09IHBhZ2UgJiYgeC5lZGdlVHlwZSA9PT0gRWRnZVR5cGUuSGVhZGVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUhlYWRlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lZGdlRWxlbWVudHMuc29tZSh4ID0+IHgucGFnZSA9PT0gcGFnZSAmJiB4LmVkZ2VUeXBlID09PSBFZGdlVHlwZS5Gb290ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJQYWdlRm9vdGVyQ29tcG9uZW50KHBhZ2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZXMoY29uZmlnOiBJTGF5ZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHdoaWxlICh0aGlzLmxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5lcy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMucHVzaCh0aGlzLnJlbmRlclRleHRQYXJhZ3JhcGgoY29uZmlnLmNvbnRlbnRSYW5nZSkpO1xuICAgIH1cblxuICAgIHNjcm9sbExpbmVzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcblxuICAgICAgICBjb25zdCBvbGRMYXN0Um93ID0gb2xkQ29uZmlnID8gb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgOiAtMTtcblxuICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRMYXN0Um93IDwgY29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCB8fCBjb25maWcuY29udGVudFJhbmdlLmVuZCA8IG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxpbmVzKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA8IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyA9IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgLSBvbGRDb25maWcuY29udGVudFJhbmdlLnN0YXJ0OyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCA+IGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgPSBvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCAtIGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kOyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA+IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQsIGVuZDogb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCAtIDEgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kIDwgY29uZmlnLmNvbnRlbnRSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kICsgMSwgZW5kOiBjb25maWcuY29udGVudFJhbmdlLmVuZCB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaChsaW5lcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGFyYWdyYXBoVG9wKHJvdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXREaXN0YW5jZUZyb21Ub3Aocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVkZ2VUb3AodG9wT2Zmc2V0OiBudW1iZXIsIHBhZ2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFRvcCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlICsgdG9wT2Zmc2V0O1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoVG9wICsgKHBhZ2UgLSAxKSAqICh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFnZUhlaWdodCArIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclBhZ2VIZWFkZXJDb21wb25lbnQocGFnZTogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRCeVBhZ2UocGFnZSwgRWRnZVR5cGUuSGVhZGVyKTtcbiAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KGhlYWRlci5pbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBlZGdlVG9wID0gdGhpcy5nZXRFZGdlVG9wKDAsIHBhZ2UpO1xuICAgICAgICAgICAgaWYgKGVkZ2VUb3AgPiBlbmQgfHwgZWRnZVRvcCArIGhlaWdodCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJFZGdlQ29tcG9uZW50KGhlYWRlciwgaGVpZ2h0LCBwYWdlLCBlZGdlVG9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyUGFnZUZvb3RlckNvbXBvbmVudChwYWdlOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShwYWdlLCBFZGdlVHlwZS5Gb290ZXIpO1xuICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRIZWlnaHQoZm9vdGVyLmluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IHRvcE9mZnNldCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlSGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgZWRnZVRvcCA9IHRoaXMuZ2V0RWRnZVRvcCh0b3BPZmZzZXQsIHBhZ2UpO1xuICAgICAgICAgICAgaWYgKGVkZ2VUb3AgPiBlbmQgfHwgZWRnZVRvcCArIGhlaWdodCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJFZGdlQ29tcG9uZW50KGZvb3RlciwgaGVpZ2h0LCBwYWdlLCBlZGdlVG9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRWRnZUNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFJlZjxOb2RlckVkZ2VDb21wb25lbnQ+LCBlZGdlSGVpZ2h0OiBudW1iZXIsIHBhZ2U6IG51bWJlciwgZWRnZVRvcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVEaXZDb250YWluZXIoJ25vZGVyLWVkZ2UtZ3JvdXAnKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGNvbnRhaW5lci5zdHlsZSwgJ2hlaWdodCcsIGAke2VkZ2VIZWlnaHR9cHhgKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGNvbnRhaW5lci5zdHlsZSwgJ3RvcCcsIGAke2VkZ2VUb3B9cHhgKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50ID0gKGNvbXBvbmVudC5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBlZGdlID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICBjb25zdCBpc09yaWdpbiA9ICF0aGlzLmVkZ2VFbGVtZW50cy5zb21lKHggPT4geC5pc05vdENvcHkoZWRnZS50eXBlLCBlZGdlLm1vZGVsLnBhZ2VUeXBlIGFzIFBhZ2VUeXBlKSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpc09yaWdpbiA/IGNvbXBvbmVudEVsZW1lbnQgOiAoY29tcG9uZW50RWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBFZGdlRWxlbWVudE1vZGVsKHsgcGFnZSwgY29udGFpbmVyLCBwYWdlVHlwZTogZWRnZS5tb2RlbC5wYWdlVHlwZSwgZWRnZVR5cGU6IGVkZ2UudHlwZSwgaXNPcmlnaW4gfSk7XG4gICAgICAgIHRoaXMuZWRnZUVsZW1lbnRzLnB1c2gobW9kZWwpO1xuICAgICAgICBpZiAoIWlzT3JpZ2luKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm9ubW91c2VlbnRlciA9ICgpID0+IG1vZGVsLnJlcGxhY2UodGhpcy5lZGdlRWxlbWVudHMuZmluZCh4ID0+IHguaXNOb3RDb3B5KG1vZGVsLmVkZ2VUeXBlLCBtb2RlbC5wYWdlVHlwZSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVGV4dFBhcmFncmFwaChyb3dzRGlzdGFuY2U6IERpc3RhbmNlTW9kZWwpOiBDZWxsW10ge1xuICAgICAgICBjb25zdCBmcmFnbWVudDogQ2VsbFtdID0gW107XG4gICAgICAgIGZvciAobGV0IHJvdyA9IHJvd3NEaXN0YW5jZS5zdGFydDsgcm93IDw9IHJvd3NEaXN0YW5jZS5lbmQ7IHJvdysrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhDZWxsID0gdGhpcy5saW5lcy5jcmVhdGVDZWxsKHJvdyk7XG4gICAgICAgICAgICBwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuY2xhc3NOYW1lID0gJ25vZGVyLWxpbmUtZ3JvdXAnO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUNoaWxkcmVuKHBhcmFncmFwaENlbGwuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhIZWlnaHQgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoSGVpZ2h0KHJvdyk7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhUb3AgPSB0aGlzLmdldFBhcmFncmFwaFRvcChyb3cpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ2hlaWdodCcsIGAke3BhcmFncmFwaEhlaWdodH1weGApO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ3RvcCcsIGAke3BhcmFncmFwaFRvcH1weGApO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ3BhZGRpbmctbGVmdCcsIGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlTWFyZ2luLmxlZnR9cHhgKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICdwYWRkaW5nLXJpZ2h0JywgYCR7dGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VNYXJnaW4ucmlnaHR9cHhgKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaFNldHRpbmdzID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaFNldHRpbmdzKHJvdyk7XG4gICAgICAgICAgICBpZiAocGFyYWdyYXBoU2V0dGluZ3MubnVtYmVyaW5nRGF0YS5udW1iZXJpbmdJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlcmluZ0VsZW1lbnQgPSB0aGlzLnJlbmRlcmluZ0hlbHBlci5yZW5kZXJOdW1iZXJpbmdNYXJrZXIoXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5nZW5lcmFsUHJvcGVydGllcy5zY2FsaW5nUmF0aW9cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG51bWJlcmluZ0VsZW1lbnQuY2xhc3NOYW1lID0gJ251bWJlcmluZ01hcmtlcic7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2VsbC5lbGVtZW50LmFwcGVuZENoaWxkKG51bWJlcmluZ0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRMaW5lcyhwYXJhZ3JhcGhDZWxsLmVsZW1lbnQsIHJvdyk7XG4gICAgICAgICAgICBmcmFnbWVudC5wdXNoKHBhcmFncmFwaENlbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVGV4dExpbmVzKHBhcmVudDogTm9kZSwgcm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGluZXNDb250YWluZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJpbmdIZWxwZXIuY3JlYXRlRGl2Q29udGFpbmVyKCdsaW5lcy1jb250YWluZXInKTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU2V0dGluZ3MgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoU2V0dGluZ3Mocm93KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoSGVpZ2h0ID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaEhlaWdodChwYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGxpbmVzQ29udGFpbmVyRWxlbWVudC5zdHlsZSwgJ2hlaWdodCcsIGAke3BhcmFncmFwaEhlaWdodH1weGApO1xuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQobGluZXNDb250YWluZXJFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh7IHJvdywgY29sdW1uOiAwIH0pO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wb3NpdGlvblRvSW5kZXgoeyByb3c6IHJvdyArIDEsIGNvbHVtbjogMCB9KSAtIDE7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkRm9ybWF0cyA9IEZvcm1hdFN0eWxlSGVscGVyLmNvbWJpbmVTZWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm1vZGVsLmZvcm1hdHMsXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwubGlua3MsXG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXhcbiAgICAgICAgKS5tYXAoeCA9PiBuZXcgRm9ybWF0RXh0TW9kZWwoeyAuLi54LCBjb250ZW50OiB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudC5zdWJzdHJpbmcoeC5zdGFydEluZGV4LCB4LmVuZEluZGV4ICsgMSkgfSkpO1xuICAgICAgICBjb25zdCBzcGxpdHMgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1tyb3ddLm5leHRMaW5lSW5kZXhlcztcbiAgICAgICAgaWYgKHNwbGl0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IHN0YXJ0SW5kZXgsIGVuZDogZW5kSW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmluZ0hlbHBlci5yZW5kZXJDb250ZW50V3JhcHBlZExpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsaW5lc0NvbnRhaW5lckVsZW1lbnQgfSxcbiAgICAgICAgICAgICAgICBzcGxpdHMsXG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgY29tYmluZWRGb3JtYXRzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJpbmdPZmZzZXRMZWZ0ID1cbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IHBhcmFncmFwaFNldHRpbmdzLm51bWJlcmluZ0RhdGEud2lkdGggKyBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLnBhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgY29uc3QgbGFzdExpbmVFbCA9IHRoaXMucmVuZGVyaW5nSGVscGVyLmNyZWF0ZUxpbmVFbGVtZW50KFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm9bMF0sXG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nT2Zmc2V0TGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGxhc3RMaW5lRWwpO1xuICAgICAgICAgICAgY29uc3Qgcm93RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdIZWxwZXIucmVuZGVyQ29udGVudFNpbXBsZUxpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsYXN0TGluZUVsIH0sXG4gICAgICAgICAgICAgICAgY29tYmluZWRGb3JtYXRzLFxuICAgICAgICAgICAgICAgIHJvd0Rpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYWdlc0NvdW50Q2hhbmdlZEhhbmRsZXIgPSAoZXZlbnQ6IHsgcGFnZXNDb3VudDogbnVtYmVyOyBwYWdlSGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmxpbmVzLnNldFNpemVzKGV2ZW50LnBhZ2VzQ291bnQsIGV2ZW50LnBhZ2VIZWlnaHQpO1xuICAgIH07XG59XG4iXX0=
@@ -1,9 +1,9 @@
1
1
  import { PrintRenderer } from './print.renderer';
2
2
  import { RenderingHelper } from '../rendering.helper';
3
3
  export class PrintHelper extends RenderingHelper {
4
- static printDocument(session, editorService) {
4
+ static printDocument(session) {
5
5
  this.removePrintContainers();
6
- const renderer = new PrintRenderer(session, editorService);
6
+ const renderer = new PrintRenderer(session);
7
7
  renderer.renderPrintDocument();
8
8
  this.printDocumentHtml(renderer.documentHtml);
9
9
  }
@@ -37,4 +37,4 @@ export class PrintHelper extends RenderingHelper {
37
37
  }
38
38
  }
39
39
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2Rpc3BsYXkvcHJpbnQvcHJpbnQuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsTUFBTSxPQUFPLFdBQVksU0FBUSxlQUFlO0lBQzVDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBb0IsRUFBRSxhQUE0QjtRQUNuRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0QsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQVksRUFBRSxZQUFZLEdBQUcsS0FBSztRQUMvRCxJQUFJLFlBQVksRUFBRTtZQUNkLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNuQixVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYTtRQUN4QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzdELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFzQixDQUFDO1FBQy9FLElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBQcmludFJlbmRlcmVyIH0gZnJvbSAnLi9wcmludC5yZW5kZXJlcic7XG5pbXBvcnQgeyBSZW5kZXJpbmdIZWxwZXIgfSBmcm9tICcuLi9yZW5kZXJpbmcuaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIFByaW50SGVscGVyIGV4dGVuZHMgUmVuZGVyaW5nSGVscGVyIHtcbiAgICBzdGF0aWMgcHJpbnREb2N1bWVudChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVByaW50Q29udGFpbmVycygpO1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBQcmludFJlbmRlcmVyKHNlc3Npb24sIGVkaXRvclNlcnZpY2UpO1xuICAgICAgICByZW5kZXJlci5yZW5kZXJQcmludERvY3VtZW50KCk7XG4gICAgICAgIHRoaXMucHJpbnREb2N1bWVudEh0bWwocmVuZGVyZXIuZG9jdW1lbnRIdG1sKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwcmludERvY3VtZW50SHRtbChodG1sOiBzdHJpbmcsIG9wZW5Jbk5ld1RhYiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuSW5OZXdUYWIpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpblVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2h0bWxdLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pKTtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHdpblVybCwgJ19ibGFuaycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbnRGcmFtZSA9IHRoaXMuZ2V0UHJpbnRGcmFtZSgpO1xuXG4gICAgICAgIHByaW50RnJhbWUub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHByaW50RnJhbWUuY29udGVudFdpbmRvdy5wcmludCgpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJpbnRGcmFtZS5zcmNkb2MgPSBodG1sO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFByaW50RnJhbWUoKTogSFRNTElGcmFtZUVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcmludEZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocHJpbnRGcmFtZSk7XG4gICAgICAgIHByaW50RnJhbWUuY29udGVudFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdhZnRlcnByaW50JywgX2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHByaW50RnJhbWUucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwcmludEZyYW1lLmlkID0gJ3ByaW50LWZyYW1lJztcbiAgICAgICAgcmV0dXJuIHByaW50RnJhbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlUHJpbnRDb250YWluZXJzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmludEZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByaW50LWZyYW1lJykgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XG4gICAgICAgIGlmIChwcmludEZyYW1lKSB7XG4gICAgICAgICAgICBwcmludEZyYW1lLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2Rpc3BsYXkvcHJpbnQvcHJpbnQuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsTUFBTSxPQUFPLFdBQVksU0FBUSxlQUFlO0lBQzVDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBb0I7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQVksRUFBRSxZQUFZLEdBQUcsS0FBSztRQUMvRCxJQUFJLFlBQVksRUFBRTtZQUNkLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNuQixVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYTtRQUN4QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzdELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFzQixDQUFDO1FBQy9FLElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IFByaW50UmVuZGVyZXIgfSBmcm9tICcuL3ByaW50LnJlbmRlcmVyJztcbmltcG9ydCB7IFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4uL3JlbmRlcmluZy5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgUHJpbnRIZWxwZXIgZXh0ZW5kcyBSZW5kZXJpbmdIZWxwZXIge1xuICAgIHN0YXRpYyBwcmludERvY3VtZW50KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJpbnRDb250YWluZXJzKCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFByaW50UmVuZGVyZXIoc2Vzc2lvbik7XG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclByaW50RG9jdW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcmludERvY3VtZW50SHRtbChyZW5kZXJlci5kb2N1bWVudEh0bWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHByaW50RG9jdW1lbnRIdG1sKGh0bWw6IHN0cmluZywgb3BlbkluTmV3VGFiID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wZW5Jbk5ld1RhYikge1xuICAgICAgICAgICAgY29uc3Qgd2luVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbaHRtbF0sIHsgdHlwZTogJ3RleHQvaHRtbCcgfSkpO1xuICAgICAgICAgICAgd2luZG93Lm9wZW4od2luVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmludEZyYW1lID0gdGhpcy5nZXRQcmludEZyYW1lKCk7XG5cbiAgICAgICAgcHJpbnRGcmFtZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJpbnRGcmFtZS5jb250ZW50V2luZG93LnByaW50KCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9O1xuICAgICAgICBwcmludEZyYW1lLnNyY2RvYyA9IGh0bWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UHJpbnRGcmFtZSgpOiBIVE1MSUZyYW1lRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByaW50RnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcmludEZyYW1lKTtcbiAgICAgICAgcHJpbnRGcmFtZS5jb250ZW50V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FmdGVycHJpbnQnLCBfZXZlbnQgPT4ge1xuICAgICAgICAgICAgcHJpbnRGcmFtZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByaW50RnJhbWUuaWQgPSAncHJpbnQtZnJhbWUnO1xuICAgICAgICByZXR1cm4gcHJpbnRGcmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVQcmludENvbnRhaW5lcnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByaW50RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpbnQtZnJhbWUnKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcbiAgICAgICAgaWYgKHByaW50RnJhbWUpIHtcbiAgICAgICAgICAgIHByaW50RnJhbWUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -3,11 +3,11 @@ import { PrintPagesLayer } from '../layers/print.pages.layer';
3
3
  import { PrintRenderingHelper } from './print.rendering.helper';
4
4
  import { PrintTextLayer } from '../layers/print.text.layer';
5
5
  export class PrintRenderer {
6
- constructor(mainSession, editorService) {
6
+ constructor(mainSession) {
7
7
  this.mainSession = mainSession;
8
8
  this.pagesCount = Math.round((mainSession.displayData.pagesSpace * 2 + mainSession.displayData.allPagesHeight) / mainSession.displayData.minHeight);
9
9
  this.createContent();
10
- this.createLayers(editorService);
10
+ this.createLayers();
11
11
  }
12
12
  renderPrintDocument() {
13
13
  const layerConfig = this.computeLayerConfig();
@@ -36,8 +36,8 @@ export class PrintRenderer {
36
36
  this.content = document.createElement('div');
37
37
  this.content.className = 'noder-content print';
38
38
  }
39
- createLayers(editorService) {
40
- this.textLayer = new PrintTextLayer(this.content, this.mainSession, editorService, PrintRenderingHelper);
39
+ createLayers() {
40
+ this.textLayer = new PrintTextLayer(this.content, this.mainSession, PrintRenderingHelper);
41
41
  this.pagesLayer = new PrintPagesLayer(this.content, this.mainSession);
42
42
  }
43
43
  createDocumentHtml(layerConfig) {
@@ -64,4 +64,4 @@ export class PrintRenderer {
64
64
  return `<style>${pageStyle} ${contentStyle}</style>`;
65
65
  }
66
66
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQucmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9wcmludC9wcmludC5yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxNQUFNLE9BQU8sYUFBYTtJQWF0QixZQUFvQixXQUF3QixFQUFFLGFBQTRCO1FBQXRELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDeEIsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDeEgsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxtQkFBbUI7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4QyxJQUFJLENB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QVUsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFFRCxPQUFPLDZCQUE2QixNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztJQUNuRixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLDREQUE0RCxDQUFDO1FBQ2xGLE9BQU8sVUFBVSxTQUFTLElBQUksWUFBWSxVQUFVLENBQUM7SUFDekQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IElMYXllckNvbmZpZyB9IGZyb20gJy4uL2xheWVycy9sYXllci5jb25maWcnO1xuaW1wb3J0IHsgUGFnZXNMYXllciB9IGZyb20gJy4uL2xheWVycy9wYWdlcy5sYXllcic7XG5pbXBvcnQgeyBQcmludFBhZ2VzTGF5ZXIgfSBmcm9tICcuLi9sYXllcnMvcHJpbnQucGFnZXMubGF5ZXInO1xuaW1wb3J0IHsgUHJpbnRSZW5kZXJpbmdIZWxwZXIgfSBmcm9tICcuL3ByaW50LnJlbmRlcmluZy5oZWxwZXInO1xuaW1wb3J0IHsgUHJpbnRUZXh0TGF5ZXIgfSBmcm9tICcuLi9sYXllcnMvcHJpbnQudGV4dC5sYXllcic7XG5cbmV4cG9ydCBjbGFzcyBQcmludFJlbmRlcmVyIHtcbiAgICBjb250ZW50OiBIVE1MRWxlbWVudDtcblxuICAgIHRleHRMYXllcjogUHJpbnRUZXh0TGF5ZXI7XG5cbiAgICBwYWdlc0xheWVyOiBQYWdlc0xheWVyO1xuXG4gICAgZG9jdW1lbnRIdG1sOiBzdHJpbmc7XG5cbiAgICBoZWFkSHRtbDogc3RyaW5nO1xuXG4gICAgcGFnZXNDb3VudDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtYWluU2Vzc2lvbjogRWRpdFNlc3Npb24sIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5wYWdlc0NvdW50ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgIChtYWluU2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlICogMiArIG1haW5TZXNzaW9uLmRpc3BsYXlEYXRhLmFsbFBhZ2VzSGVpZ2h0KSAvIG1haW5TZXNzaW9uLmRpc3BsYXlEYXRhLm1pbkhlaWdodFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVMYXllcnMoZWRpdG9yU2VydmljZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyUHJpbnREb2N1bWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGF5ZXJDb25maWcgPSB0aGlzLmNvbXB1dGVMYXllckNvbmZpZygpO1xuXG4gICAgICAgIHRoaXMucGFnZXNMYXllci51cGRhdGUobGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGVMaW5lcyhsYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMudGV4dExheWVyLnVwZGF0ZUVkZ2VzKGxheWVyQ29uZmlnKTtcblxuICAgICAgICB0aGlzLmNyZWF0ZURvY3VtZW50SHRtbChsYXllckNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTGF5ZXJDb25maWcoKTogSUxheWVyQ29uZmlnIHtcbiAgICAgICAgY29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKEFycmF5KHRoaXMucGFnZXNDb3VudCkua2V5cygpKS5tYXAoeCA9PiB4ICsgMSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlEYXRhID0gdGhpcy5tYWluU2Vzc2lvbi5kaXNwbGF5RGF0YTtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gZGlzcGxheURhdGEucGFnZUhlaWdodCAqIHRoaXMucGFnZXNDb3VudDtcbiAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gZGlzcGxheURhdGEucGFnZUhlaWdodDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMudGV4dExheWVyLmVsZW1lbnQuY2xpZW50V2lkdGggKyBkaXNwbGF5RGF0YS5wYWdlTWFyZ2luLmxlZnQgKyBkaXNwbGF5RGF0YS5wYWdlTWFyZ2luLnJpZ2h0LFxuICAgICAgICAgICAgaGVpZ2h0OiBkaXNwbGF5RGF0YS5kZWZhdWx0VmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQsXG4gICAgICAgICAgICBjb250ZW50UmFuZ2U6IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IDAsIGVuZDogZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxIH0pLFxuICAgICAgICAgICAgbWluSGVpZ2h0LFxuICAgICAgICAgICAgbWF4SGVpZ2h0LFxuICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgcGFnZXMsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbnRlbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gJ25vZGVyLWNvbnRlbnQgcHJpbnQnO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTGF5ZXJzKGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIgPSBuZXcgUHJpbnRUZXh0TGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLm1haW5TZXNzaW9uLCBlZGl0b3JTZXJ2aWNlLCBQcmludFJlbmRlcmluZ0hlbHBlcik7XG4gICAgICAgIHRoaXMucGFnZXNMYXllciA9IG5ldyBQcmludFBhZ2VzTGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURvY3VtZW50SHRtbChsYXllckNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLmNyZWF0ZUhlYWRXaXRoU3R5bGVzKCk7XG4gICAgICAgIGxldCBib2R5ID0gYDxkaXYgY2xhc3M9XCJub2Rlci1zY3JvbGxlciBwcmludFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+JHt0aGlzLmNvbnRlbnQuaW5uZXJIVE1MfTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cImVkaXQtY29udGFpbmVyIG5vZGVyLWVkaXRvciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHJpbnRcIiBzdHlsZT1cImhlaWdodDogJHtsYXllckNvbmZpZy5tYXhIZWlnaHR9cHg7XCI+JHtib2R5fTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cIm1hdC1kcmF3ZXItY29udGVudCBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJtYXQtZHJhd2VyLWNvbnRhaW5lciBzaWRlbmF2LWNvbnRhaW5lciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJiYXNlLWVkaXRvciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRIdG1sID0gYDwhRE9DVFlQRSBodG1sPjxodG1sPiR7aGVhZH0ke2JvZHl9PC9odG1sPmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVIZWFkV2l0aFN0eWxlcygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3R5bGVzID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNzc1J1bGVzID0gQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5jc3NSdWxlcyk7XG4gICAgICAgICAgICBjc3NSdWxlcy5mb3JFYWNoKHJ1bGUgPT4gKHN0eWxlcyArPSBgPHN0eWxlPiR7cnVsZS5jc3NUZXh0fTwvc3R5bGU+YCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGA8aGVhZD48dGl0bGU+UHJpbnQ8L3RpdGxlPiR7c3R5bGVzfSR7dGhpcy5nZXRQcmludFBhZ2VTdHlsZSgpfTwvaGVhZD5gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJpbnRQYWdlU3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFnZVN0eWxlID0gJ0BwYWdlIHsgbWFyZ2luOiAwOyB9JztcbiAgICAgICAgY29uc3QgY29udGVudFN0eWxlID0gYEBtZWRpYSBwcmludCB7IGh0bWwsIGJvZHkgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9IH1gO1xuICAgICAgICByZXR1cm4gYDxzdHlsZT4ke3BhZ2VTdHlsZX0gJHtjb250ZW50U3R5bGV9PC9zdHlsZT5gO1xuICAgIH1cbn1cbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQucmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9wcmludC9wcmludC5yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxNQUFNLE9BQU8sYUFBYTtJQWF0QixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3hCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxtQkFBbUI7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxD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QUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztJQUNuRixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLDREQUE0RCxDQUFDO1FBQ2xGLE9BQU8sVUFBVSxTQUFTLElBQUksWUFBWSxVQUFVLENBQUM7SUFDekQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi4vbGF5ZXJzL2xheWVyLmNvbmZpZyc7XG5pbXBvcnQgeyBQYWdlc0xheWVyIH0gZnJvbSAnLi4vbGF5ZXJzL3BhZ2VzLmxheWVyJztcbmltcG9ydCB7IFByaW50UGFnZXNMYXllciB9IGZyb20gJy4uL2xheWVycy9wcmludC5wYWdlcy5sYXllcic7XG5pbXBvcnQgeyBQcmludFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4vcHJpbnQucmVuZGVyaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBQcmludFRleHRMYXllciB9IGZyb20gJy4uL2xheWVycy9wcmludC50ZXh0LmxheWVyJztcblxuZXhwb3J0IGNsYXNzIFByaW50UmVuZGVyZXIge1xuICAgIGNvbnRlbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgdGV4dExheWVyOiBQcmludFRleHRMYXllcjtcblxuICAgIHBhZ2VzTGF5ZXI6IFBhZ2VzTGF5ZXI7XG5cbiAgICBkb2N1bWVudEh0bWw6IHN0cmluZztcblxuICAgIGhlYWRIdG1sOiBzdHJpbmc7XG5cbiAgICBwYWdlc0NvdW50OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1haW5TZXNzaW9uOiBFZGl0U2Vzc2lvbikge1xuICAgICAgICB0aGlzLnBhZ2VzQ291bnQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgKG1haW5TZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VzU3BhY2UgKiAyICsgbWFpblNlc3Npb24uZGlzcGxheURhdGEuYWxsUGFnZXNIZWlnaHQpIC8gbWFpblNlc3Npb24uZGlzcGxheURhdGEubWluSGVpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ29udGVudCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUxheWVycygpO1xuICAgIH1cblxuICAgIHJlbmRlclByaW50RG9jdW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxheWVyQ29uZmlnID0gdGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKTtcblxuICAgICAgICB0aGlzLnBhZ2VzTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIudXBkYXRlTGluZXMobGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGVFZGdlcyhsYXllckNvbmZpZyk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVEb2N1bWVudEh0bWwobGF5ZXJDb25maWcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZUxheWVyQ29uZmlnKCk6IElMYXllckNvbmZpZyB7XG4gICAgICAgIGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbShBcnJheSh0aGlzLnBhZ2VzQ291bnQpLmtleXMoKSkubWFwKHggPT4geCArIDEpO1xuICAgICAgICBjb25zdCBkaXNwbGF5RGF0YSA9IHRoaXMubWFpblNlc3Npb24uZGlzcGxheURhdGE7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGRpc3BsYXlEYXRhLnBhZ2VIZWlnaHQgKiB0aGlzLnBhZ2VzQ291bnQ7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRpc3BsYXlEYXRhLnBhZ2VIZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnRleHRMYXllci5lbGVtZW50LmNsaWVudFdpZHRoICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0ICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogZGlzcGxheURhdGEuZGVmYXVsdFZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IGRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMSB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jb250ZW50LmNsYXNzTmFtZSA9ICdub2Rlci1jb250ZW50IHByaW50JztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxheWVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIgPSBuZXcgUHJpbnRUZXh0TGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLm1haW5TZXNzaW9uLCBQcmludFJlbmRlcmluZ0hlbHBlcik7XG4gICAgICAgIHRoaXMucGFnZXNMYXllciA9IG5ldyBQcmludFBhZ2VzTGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURvY3VtZW50SHRtbChsYXllckNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLmNyZWF0ZUhlYWRXaXRoU3R5bGVzKCk7XG4gICAgICAgIGxldCBib2R5ID0gYDxkaXYgY2xhc3M9XCJub2Rlci1zY3JvbGxlciBwcmludFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+JHt0aGlzLmNvbnRlbnQuaW5uZXJIVE1MfTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cImVkaXQtY29udGFpbmVyIG5vZGVyLWVkaXRvciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHJpbnRcIiBzdHlsZT1cImhlaWdodDogJHtsYXllckNvbmZpZy5tYXhIZWlnaHR9cHg7XCI+JHtib2R5fTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cIm1hdC1kcmF3ZXItY29udGVudCBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJtYXQtZHJhd2VyLWNvbnRhaW5lciBzaWRlbmF2LWNvbnRhaW5lciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJiYXNlLWVkaXRvciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRIdG1sID0gYDwhRE9DVFlQRSBodG1sPjxodG1sPiR7aGVhZH0ke2JvZHl9PC9odG1sPmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVIZWFkV2l0aFN0eWxlcygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3R5bGVzID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNzc1J1bGVzID0gQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5jc3NSdWxlcyk7XG4gICAgICAgICAgICBjc3NSdWxlcy5mb3JFYWNoKHJ1bGUgPT4gKHN0eWxlcyArPSBgPHN0eWxlPiR7cnVsZS5jc3NUZXh0fTwvc3R5bGU+YCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGA8aGVhZD48dGl0bGU+UHJpbnQ8L3RpdGxlPiR7c3R5bGVzfSR7dGhpcy5nZXRQcmludFBhZ2VTdHlsZSgpfTwvaGVhZD5gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJpbnRQYWdlU3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFnZVN0eWxlID0gJ0BwYWdlIHsgbWFyZ2luOiAwOyB9JztcbiAgICAgICAgY29uc3QgY29udGVudFN0eWxlID0gYEBtZWRpYSBwcmludCB7IGh0bWwsIGJvZHkgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9IH1gO1xuICAgICAgICByZXR1cm4gYDxzdHlsZT4ke3BhZ2VTdHlsZX0gJHtjb250ZW50U3R5bGV9PC9zdHlsZT5gO1xuICAgIH1cbn1cbiJdfQ==