@plumile/router 0.1.109 → 0.1.113

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 (40) hide show
  1. package/lib/esm/instrumentation/Instrumentation.d.ts +1 -1
  2. package/lib/esm/instrumentation/Instrumentation.d.ts.map +1 -1
  3. package/lib/esm/instrumentation/Instrumentation.js +1 -1
  4. package/lib/esm/routing/RouterPrimitives.stories.d.ts +18 -0
  5. package/lib/esm/routing/RouterPrimitives.stories.d.ts.map +1 -0
  6. package/lib/esm/routing/RouterPrimitives.stories.js +96 -0
  7. package/lib/esm/routing/RoutingContext.d.ts +1 -1
  8. package/lib/esm/routing/RoutingContext.d.ts.map +1 -1
  9. package/lib/esm/routing/createRouter.d.ts +1 -1
  10. package/lib/esm/routing/createRouter.d.ts.map +1 -1
  11. package/lib/esm/routing/createRouter.js +3 -2
  12. package/lib/esm/routing/createStaticRouter.d.ts +1 -1
  13. package/lib/esm/routing/createStaticRouter.d.ts.map +1 -1
  14. package/lib/esm/routing/createStaticRouter.js +2 -2
  15. package/lib/esm/routing/useFilters.js +2 -2
  16. package/lib/esm/tools/buildCombinedSearch.d.ts +1 -1
  17. package/lib/esm/tools/buildCombinedSearch.d.ts.map +1 -1
  18. package/lib/esm/tools/buildCombinedSearch.js +2 -2
  19. package/lib/esm/type-tests/useFilters-typed.test-d.d.ts.map +1 -1
  20. package/lib/esm/type-tests/useFilters-typed.test-d.js +2 -2
  21. package/lib/esm/types.d.ts +2 -1
  22. package/lib/esm/types.d.ts.map +1 -1
  23. package/lib/esm/types.js +1 -1
  24. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  25. package/lib/types/instrumentation/Instrumentation.d.ts +1 -1
  26. package/lib/types/instrumentation/Instrumentation.d.ts.map +1 -1
  27. package/lib/types/routing/RouterPrimitives.stories.d.ts +18 -0
  28. package/lib/types/routing/RouterPrimitives.stories.d.ts.map +1 -0
  29. package/lib/types/routing/RoutingContext.d.ts +1 -1
  30. package/lib/types/routing/RoutingContext.d.ts.map +1 -1
  31. package/lib/types/routing/createRouter.d.ts +1 -1
  32. package/lib/types/routing/createRouter.d.ts.map +1 -1
  33. package/lib/types/routing/createStaticRouter.d.ts +1 -1
  34. package/lib/types/routing/createStaticRouter.d.ts.map +1 -1
  35. package/lib/types/tools/buildCombinedSearch.d.ts +1 -1
  36. package/lib/types/tools/buildCombinedSearch.d.ts.map +1 -1
  37. package/lib/types/type-tests/useFilters-typed.test-d.d.ts.map +1 -1
  38. package/lib/types/types.d.ts +2 -1
  39. package/lib/types/types.d.ts.map +1 -1
  40. package/package.json +78 -2
@@ -1,5 +1,5 @@
1
1
  import type { AsyncResourceStatus, PreparedValueResource, UnknownFilters } from '../types.js';
2
- import type { Schema as FilterSchema } from '@plumile/filter-query';
2
+ import type { Schema as FilterSchema } from '@plumile/filter-query/types.js';
3
3
  import type { RouterHistoryActionValue, RouterNavigationSourceValue, RouterPopstateDirectionValue, RouterPreloadModeValue, RouterPrepareStatusValue } from '../values.js';
4
4
  export type RouterNavigationSource = RouterNavigationSourceValue;
5
5
  export type RouterLocationSnapshot = {
@@ -1 +1 @@
1
- {"version":3,"file":"Instrumentation.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/Instrumentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Instrumentation.d.ts","sourceRoot":"","sources":["../../../src/instrumentation/Instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAOtB,MAAM,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAKjE,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,6BAA6B,EAAE,CAAC;IAC1C,MAAM,EAAE,6BAA6B,EAAE,CAAC;CACzC,CAAC;AAMF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,YAAY,CAAC;CAClC,CAAC;AAMF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,sBAAsB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,sBAAsB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,4BAA4B,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,eAAe,GAAG;IACtD,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,eAAe,GAAG;IACzD,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,0BAA0B,CAAC;AAE/B,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,CAAC;AAMvB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,CAAC,eAAe,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,CAAC,eAAe,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC1D,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,iBAAiB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACxD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAOF,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,kBAAkB,EAAO,GACjC,uBAAuB,CAwEzB"}
@@ -56,4 +56,4 @@ export function createInstrumentationRegistry(initial = []) {
56
56
  },
57
57
  };
58
58
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luc3RydW1lbnRhdGlvbi9JbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUpBLE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUNoRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7UUFDbEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUtyQixTQUFTLEtBQUs7UUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBTUQsU0FBUyxVQUFVLENBQ2pCLGVBQW1DLEVBQ25DLE1BQWdDLEVBQ2hDLE9BQWtCO1FBRWxCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0YsT0FBd0MsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxNQUFNLENBQUM7UUFFVCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLENBQUMsZUFBZTtZQUN0QixLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELFVBQVUsQ0FBQyxlQUFlO1lBQ3hCLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQUs7WUFDYixLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDcEMsVUFBVSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGlCQUFpQixDQUFDLEtBQUs7WUFDckIsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQ3BDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixPQUFPO1lBQ1QsQ0FBQztZQUNELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDcEMsVUFBVSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxJQUFJO1lBQ04sT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3hCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQXN5bmNSZXNvdXJjZVN0YXR1cyxcbiAgUHJlcGFyZWRWYWx1ZVJlc291cmNlLFxuICBVbmtub3duRmlsdGVycyxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY2hlbWEgYXMgRmlsdGVyU2NoZW1hIH0gZnJvbSAnQHBsdW1pbGUvZmlsdGVyLXF1ZXJ5JztcbmltcG9ydCB0eXBlIHtcbiAgUm91dGVySGlzdG9yeUFjdGlvblZhbHVlLFxuICBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlVmFsdWUsXG4gIFJvdXRlclBvcHN0YXRlRGlyZWN0aW9uVmFsdWUsXG4gIFJvdXRlclByZWxvYWRNb2RlVmFsdWUsXG4gIFJvdXRlclByZXBhcmVTdGF0dXNWYWx1ZSxcbn0gZnJvbSAnLi4vdmFsdWVzLmpzJztcblxuLyoqXG4gKiBFbnVtZXJhdGVzIHRoZSBvcmlnaW4gb2YgbmF2aWdhdGlvbi1yZWxhdGVkIGV2ZW50cyBleHBvc2VkIHRvIGluc3RydW1lbnRhdGlvbnMuXG4gKlxuICogS2VwdCBhcyBzdHJpbmcgbGl0ZXJhbHMgdG8gYXZvaWQgbGVha2luZyBkZWJ1ZyBlbnVtcyBpbnRvIHRoZSBwcm9kdWN0aW9uIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9IFJvdXRlck5hdmlnYXRpb25Tb3VyY2VWYWx1ZTtcblxuLyoqXG4gKiBDb21wYWN0IGxvY2F0aW9uIHNuYXBzaG90IHNoYXJlZCBieSBhbGwgaW5zdHJ1bWVudGF0aW9uIGV2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUm91dGVyTG9jYXRpb25TbmFwc2hvdCA9IHtcbiAgcGF0aG5hbWU6IHN0cmluZztcbiAgc2VhcmNoOiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlclByZXBhcmVkU2VnbWVudFNuYXBzaG90ID0ge1xuICBwYXRoPzogc3RyaW5nO1xuICBmdWxsUGF0aD86IHN0cmluZztcbiAgc2VnbWVudEluZGV4OiBudW1iZXI7XG4gIHByZXBhcmVkUmVzb3VyY2U/OiBQcmVwYXJlZFZhbHVlUmVzb3VyY2U7XG4gIHJlZGlyZWN0VG86IHN0cmluZyB8IG51bGw7XG4gIGhpZ2hsaWdodElkPzogc3RyaW5nO1xuICBxdWVyeVNjaGVtYT86IEZpbHRlclNjaGVtYTtcbiAgcHJlcGFyZWRTdGF0dXM/OiBBc3luY1Jlc291cmNlU3RhdHVzO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZWRNYXRjaFNuYXBzaG90ID0ge1xuICBzZWdtZW50czogUm91dGVyUHJlcGFyZWRTZWdtZW50U25hcHNob3RbXTtcbiAgcm91dGVzOiBSb3V0ZXJQcmVwYXJlZFNlZ21lbnRTbmFwc2hvdFtdO1xufTtcblxuLyoqXG4gKiBTdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHJvdXRlciBlbnRyeSB0aGF0IGNhbiBiZSBicm9hZGNhc3QgdG8gaW5zdHJ1bWVudGF0aW9ucy5cbiAqIFRoZSBzaGFwZSBpbnRlbnRpb25hbGx5IG1pcnJvcnMgcHVibGljIGRhdGEgYWxyZWFkeSBhdmFpbGFibGUgdG8gYXBwbGljYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBSb3V0ZXJFbnRyeVNuYXBzaG90ID0ge1xuICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgcm91dGVQYXRoPzogc3RyaW5nO1xuICBwcmVwYXJlZE1hdGNoPzogUm91dGVyUHJlcGFyZWRNYXRjaFNuYXBzaG90O1xuICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gIGZpbHRlckRpYWdub3N0aWNzPzogdW5rbm93bltdO1xuICBhY3RpdmVRdWVyeVNjaGVtYT86IEZpbHRlclNjaGVtYTtcbn07XG5cbi8qKlxuICogQmFzZSBwYXlsb2FkIHNoYXJlZCBieSByb3V0ZXIgZXZlbnRzLiBFYWNoIGV2ZW50IGV4dGVuZHMgdGhlIGJhc2Ugd2l0aFxuICogc3BlY2lmaWMgZGV0YWlscyByZWxldmFudCB0byB0aGUgaW5zdHJ1bWVudGF0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSb3V0ZXJFdmVudEJhc2UgPSB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlclNuYXBzaG90RXZlbnQgPSBSb3V0ZXJFdmVudEJhc2UgJiB7XG4gIGtpbmQ6ICdzbmFwc2hvdCc7XG4gIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgcm91dGVQYXRoPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlbG9hZEV2ZW50ID0gUm91dGVyRXZlbnRCYXNlICYge1xuICBraW5kOiAncHJlbG9hZCc7XG4gIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgdGFyZ2V0UGF0aG5hbWU6IHN0cmluZztcbiAgbW9kZTogUm91dGVyUHJlbG9hZE1vZGVWYWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlckhpc3RvcnlFdmVudCA9IFJvdXRlckV2ZW50QmFzZSAmIHtcbiAga2luZDogJ2hpc3RvcnknO1xuICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gIGFjdGlvbjogUm91dGVySGlzdG9yeUFjdGlvblZhbHVlO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJQb3BzdGF0ZUV2ZW50ID0gUm91dGVyRXZlbnRCYXNlICYge1xuICBraW5kOiAncG9wc3RhdGUnO1xuICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gIGRpcmVjdGlvbjogUm91dGVyUG9wc3RhdGVEaXJlY3Rpb25WYWx1ZTtcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZVN0YXJ0RXZlbnQgPSBSb3V0ZXJFdmVudEJhc2UgJiB7XG4gIGtpbmQ6ICdwcmVwYXJlLXN0YXJ0JztcbiAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICByb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIG1vZHVsZUlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZUNvbXBsZXRlRXZlbnQgPSBSb3V0ZXJFdmVudEJhc2UgJiB7XG4gIGtpbmQ6ICdwcmVwYXJlLWNvbXBsZXRlJztcbiAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICByb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIG1vZHVsZUlkPzogc3RyaW5nO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIGhhc1ByZXBhcmVkOiBib29sZWFuO1xuICBzdGF0dXM6IEV4Y2x1ZGU8Um91dGVyUHJlcGFyZVN0YXR1c1ZhbHVlLCAncGVuZGluZyc+O1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZUV2ZW50ID1cbiAgfCBSb3V0ZXJQcmVwYXJlU3RhcnRFdmVudFxuICB8IFJvdXRlclByZXBhcmVDb21wbGV0ZUV2ZW50O1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJFdmVudCA9XG4gIHwgUm91dGVyU25hcHNob3RFdmVudFxuICB8IFJvdXRlclByZWxvYWRFdmVudFxuICB8IFJvdXRlckhpc3RvcnlFdmVudFxuICB8IFJvdXRlclBvcHN0YXRlRXZlbnRcbiAgfCBSb3V0ZXJQcmVwYXJlRXZlbnQ7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9ucyBjYW4gb2JzZXJ2ZSByb3V0ZXIgZXZlbnRzLCBlbnRyeSBjaGFuZ2VzLCBhbmQgb3B0aW9uYWxseVxuICogZGlzcG9zZSByZXNvdXJjZXMgd2hlbiB0aGUgcmVnaXN0cnkgaXMgdG9ybiBkb3duLlxuICovXG5leHBvcnQgdHlwZSBJbnN0cnVtZW50YXRpb25BUEkgPSB7XG4gIG9uRXZlbnQ/OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICBvbkVudHJ5Q2hhbmdlPzogKGVudHJ5OiBSb3V0ZXJFbnRyeVNuYXBzaG90KSA9PiB2b2lkO1xuICBkaXNwb3NlPzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5ID0ge1xuICByZWdpc3RlcjogKGluc3RydW1lbnRhdGlvbjogSW5zdHJ1bWVudGF0aW9uQVBJKSA9PiB2b2lkO1xuICB1bnJlZ2lzdGVyOiAoaW5zdHJ1bWVudGF0aW9uOiBJbnN0cnVtZW50YXRpb25BUEkpID0+IHZvaWQ7XG4gIGVtaXRFdmVudDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgbm90aWZ5RW50cnlDaGFuZ2U6IChlbnRyeTogUm91dGVyRW50cnlTbmFwc2hvdCkgPT4gdm9pZDtcbiAgZGlzcG9zZTogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVnaXN0cnkgY29vcmRpbmF0aW5nIGEgc2V0IG9mIGluc3RydW1lbnRhdGlvbnMuIFRoZSByZWdpc3RyeSBrZWVwc1xuICogY29uc3VtZXIgY29kZSBzaW1wbGU6IHJvdXRlciBpbnRlcm5hbHMgYnJvYWRjYXN0IGV2ZW50cyB3aXRob3V0IGNhcmluZyBhYm91dFxuICogdGhlIG51bWJlciBvciBuYXR1cmUgb2YgYXR0YWNoZWQgaW5zdHJ1bWVudGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5KFxuICBpbml0aWFsOiBJbnN0cnVtZW50YXRpb25BUElbXSA9IFtdLFxuKTogSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkge1xuICBjb25zdCBsaXN0ZW5lcnMgPSBuZXcgU2V0PEluc3RydW1lbnRhdGlvbkFQST4oKTtcbiAgaW5pdGlhbC5mb3JFYWNoKChpbnN0cnVtZW50YXRpb24pID0+IHtcbiAgICBsaXN0ZW5lcnMuYWRkKGluc3RydW1lbnRhdGlvbik7XG4gIH0pO1xuXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiB0aGUgcmVnaXN0cnkgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZC4gR3VhcmRzIGV2ZW50IGVtaXNzaW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gZ3VhcmQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3RydW1lbnRhdGlvbiByZWdpc3RyeSB3YXMgZGlzcG9zZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGludm9rZXMgYW4gb3B0aW9uYWwgaGFuZGxlciBwcm92aWRlZCBieSBhbiBpbnN0cnVtZW50YXRpb24uXG4gICAqIEZhaWx1cmVzIGFyZSBzd2FsbG93ZWQgc28gcm91dGVyIGV4ZWN1dGlvbiBjb250aW51ZXMgdW5pbnRlcnJ1cHRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHNhZmVJbnZva2UoXG4gICAgaW5zdHJ1bWVudGF0aW9uOiBJbnN0cnVtZW50YXRpb25BUEksXG4gICAgbWV0aG9kOiBrZXlvZiBJbnN0cnVtZW50YXRpb25BUEksXG4gICAgcGF5bG9hZDogdW5rbm93bltdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gaW5zdHJ1bWVudGF0aW9uW21ldGhvZF07XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAoaGFuZGxlciBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkKSguLi5wYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEluc3RydW1lbnRhdGlvbnMgc2hvdWxkIG5ldmVyIGJyZWFrIHJvdXRlciBleGVjdXRpb24uIEVycm9ycyBhcmUgc3dhbGxvd2VkLlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXIoaW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICBndWFyZCgpO1xuICAgICAgbGlzdGVuZXJzLmFkZChpbnN0cnVtZW50YXRpb24pO1xuICAgIH0sXG4gICAgdW5yZWdpc3RlcihpbnN0cnVtZW50YXRpb24pIHtcbiAgICAgIGd1YXJkKCk7XG4gICAgICBsaXN0ZW5lcnMuZGVsZXRlKGluc3RydW1lbnRhdGlvbik7XG4gICAgfSxcbiAgICBlbWl0RXZlbnQoZXZlbnQpIHtcbiAgICAgIGd1YXJkKCk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgoaW5zdHJ1bWVudGF0aW9uKSA9PiB7XG4gICAgICAgIHNhZmVJbnZva2UoaW5zdHJ1bWVudGF0aW9uLCAnb25FdmVudCcsIFtldmVudF0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBub3RpZnlFbnRyeUNoYW5nZShlbnRyeSkge1xuICAgICAgZ3VhcmQoKTtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChpbnN0cnVtZW50YXRpb24pID0+IHtcbiAgICAgICAgc2FmZUludm9rZShpbnN0cnVtZW50YXRpb24sICdvbkVudHJ5Q2hhbmdlJywgW2VudHJ5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBpZiAoZGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGluc3RydW1lbnRhdGlvbikgPT4ge1xuICAgICAgICBzYWZlSW52b2tlKGluc3RydW1lbnRhdGlvbiwgJ2Rpc3Bvc2UnLCBbXSk7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgZGlzcG9zZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gbGlzdGVuZXJzLnNpemU7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luc3RydW1lbnRhdGlvbi9JbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUpBLE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUNoRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7UUFDbEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUtyQixTQUFTLEtBQUs7UUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBTUQsU0FBUyxVQUFVLENBQ2pCLGVBQW1DLEVBQ25DLE1BQWdDLEVBQ2hDLE9BQWtCO1FBRWxCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0YsT0FBd0MsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxNQUFNLENBQUM7UUFFVCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLENBQUMsZUFBZTtZQUN0QixLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELFVBQVUsQ0FBQyxlQUFlO1lBQ3hCLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQUs7WUFDYixLQUFLLEVBQUUsQ0FBQztZQUNSLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDcEMsVUFBVSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGlCQUFpQixDQUFDLEtBQUs7WUFDckIsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBQ3BDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixPQUFPO1lBQ1QsQ0FBQztZQUNELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDcEMsVUFBVSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxJQUFJO1lBQ04sT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3hCLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQXN5bmNSZXNvdXJjZVN0YXR1cyxcbiAgUHJlcGFyZWRWYWx1ZVJlc291cmNlLFxuICBVbmtub3duRmlsdGVycyxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY2hlbWEgYXMgRmlsdGVyU2NoZW1hIH0gZnJvbSAnQHBsdW1pbGUvZmlsdGVyLXF1ZXJ5L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgUm91dGVySGlzdG9yeUFjdGlvblZhbHVlLFxuICBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlVmFsdWUsXG4gIFJvdXRlclBvcHN0YXRlRGlyZWN0aW9uVmFsdWUsXG4gIFJvdXRlclByZWxvYWRNb2RlVmFsdWUsXG4gIFJvdXRlclByZXBhcmVTdGF0dXNWYWx1ZSxcbn0gZnJvbSAnLi4vdmFsdWVzLmpzJztcblxuLyoqXG4gKiBFbnVtZXJhdGVzIHRoZSBvcmlnaW4gb2YgbmF2aWdhdGlvbi1yZWxhdGVkIGV2ZW50cyBleHBvc2VkIHRvIGluc3RydW1lbnRhdGlvbnMuXG4gKlxuICogS2VwdCBhcyBzdHJpbmcgbGl0ZXJhbHMgdG8gYXZvaWQgbGVha2luZyBkZWJ1ZyBlbnVtcyBpbnRvIHRoZSBwcm9kdWN0aW9uIGJ1bmRsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9IFJvdXRlck5hdmlnYXRpb25Tb3VyY2VWYWx1ZTtcblxuLyoqXG4gKiBDb21wYWN0IGxvY2F0aW9uIHNuYXBzaG90IHNoYXJlZCBieSBhbGwgaW5zdHJ1bWVudGF0aW9uIGV2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgUm91dGVyTG9jYXRpb25TbmFwc2hvdCA9IHtcbiAgcGF0aG5hbWU6IHN0cmluZztcbiAgc2VhcmNoOiBzdHJpbmc7XG4gIGhhc2g6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlclByZXBhcmVkU2VnbWVudFNuYXBzaG90ID0ge1xuICBwYXRoPzogc3RyaW5nO1xuICBmdWxsUGF0aD86IHN0cmluZztcbiAgc2VnbWVudEluZGV4OiBudW1iZXI7XG4gIHByZXBhcmVkUmVzb3VyY2U/OiBQcmVwYXJlZFZhbHVlUmVzb3VyY2U7XG4gIHJlZGlyZWN0VG86IHN0cmluZyB8IG51bGw7XG4gIGhpZ2hsaWdodElkPzogc3RyaW5nO1xuICBxdWVyeVNjaGVtYT86IEZpbHRlclNjaGVtYTtcbiAgcHJlcGFyZWRTdGF0dXM/OiBBc3luY1Jlc291cmNlU3RhdHVzO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZWRNYXRjaFNuYXBzaG90ID0ge1xuICBzZWdtZW50czogUm91dGVyUHJlcGFyZWRTZWdtZW50U25hcHNob3RbXTtcbiAgcm91dGVzOiBSb3V0ZXJQcmVwYXJlZFNlZ21lbnRTbmFwc2hvdFtdO1xufTtcblxuLyoqXG4gKiBTdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHJvdXRlciBlbnRyeSB0aGF0IGNhbiBiZSBicm9hZGNhc3QgdG8gaW5zdHJ1bWVudGF0aW9ucy5cbiAqIFRoZSBzaGFwZSBpbnRlbnRpb25hbGx5IG1pcnJvcnMgcHVibGljIGRhdGEgYWxyZWFkeSBhdmFpbGFibGUgdG8gYXBwbGljYXRpb25zLlxuICovXG5leHBvcnQgdHlwZSBSb3V0ZXJFbnRyeVNuYXBzaG90ID0ge1xuICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgcm91dGVQYXRoPzogc3RyaW5nO1xuICBwcmVwYXJlZE1hdGNoPzogUm91dGVyUHJlcGFyZWRNYXRjaFNuYXBzaG90O1xuICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gIGZpbHRlckRpYWdub3N0aWNzPzogdW5rbm93bltdO1xuICBhY3RpdmVRdWVyeVNjaGVtYT86IEZpbHRlclNjaGVtYTtcbn07XG5cbi8qKlxuICogQmFzZSBwYXlsb2FkIHNoYXJlZCBieSByb3V0ZXIgZXZlbnRzLiBFYWNoIGV2ZW50IGV4dGVuZHMgdGhlIGJhc2Ugd2l0aFxuICogc3BlY2lmaWMgZGV0YWlscyByZWxldmFudCB0byB0aGUgaW5zdHJ1bWVudGF0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSb3V0ZXJFdmVudEJhc2UgPSB7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlclNuYXBzaG90RXZlbnQgPSBSb3V0ZXJFdmVudEJhc2UgJiB7XG4gIGtpbmQ6ICdzbmFwc2hvdCc7XG4gIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgcm91dGVQYXRoPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlbG9hZEV2ZW50ID0gUm91dGVyRXZlbnRCYXNlICYge1xuICBraW5kOiAncHJlbG9hZCc7XG4gIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgdGFyZ2V0UGF0aG5hbWU6IHN0cmluZztcbiAgbW9kZTogUm91dGVyUHJlbG9hZE1vZGVWYWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlckhpc3RvcnlFdmVudCA9IFJvdXRlckV2ZW50QmFzZSAmIHtcbiAga2luZDogJ2hpc3RvcnknO1xuICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gIGFjdGlvbjogUm91dGVySGlzdG9yeUFjdGlvblZhbHVlO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJQb3BzdGF0ZUV2ZW50ID0gUm91dGVyRXZlbnRCYXNlICYge1xuICBraW5kOiAncG9wc3RhdGUnO1xuICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gIGRpcmVjdGlvbjogUm91dGVyUG9wc3RhdGVEaXJlY3Rpb25WYWx1ZTtcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZVN0YXJ0RXZlbnQgPSBSb3V0ZXJFdmVudEJhc2UgJiB7XG4gIGtpbmQ6ICdwcmVwYXJlLXN0YXJ0JztcbiAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICByb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIG1vZHVsZUlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZUNvbXBsZXRlRXZlbnQgPSBSb3V0ZXJFdmVudEJhc2UgJiB7XG4gIGtpbmQ6ICdwcmVwYXJlLWNvbXBsZXRlJztcbiAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICByb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIG1vZHVsZUlkPzogc3RyaW5nO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIGhhc1ByZXBhcmVkOiBib29sZWFuO1xuICBzdGF0dXM6IEV4Y2x1ZGU8Um91dGVyUHJlcGFyZVN0YXR1c1ZhbHVlLCAncGVuZGluZyc+O1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVyUHJlcGFyZUV2ZW50ID1cbiAgfCBSb3V0ZXJQcmVwYXJlU3RhcnRFdmVudFxuICB8IFJvdXRlclByZXBhcmVDb21wbGV0ZUV2ZW50O1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJFdmVudCA9XG4gIHwgUm91dGVyU25hcHNob3RFdmVudFxuICB8IFJvdXRlclByZWxvYWRFdmVudFxuICB8IFJvdXRlckhpc3RvcnlFdmVudFxuICB8IFJvdXRlclBvcHN0YXRlRXZlbnRcbiAgfCBSb3V0ZXJQcmVwYXJlRXZlbnQ7XG5cbi8qKlxuICogSW5zdHJ1bWVudGF0aW9ucyBjYW4gb2JzZXJ2ZSByb3V0ZXIgZXZlbnRzLCBlbnRyeSBjaGFuZ2VzLCBhbmQgb3B0aW9uYWxseVxuICogZGlzcG9zZSByZXNvdXJjZXMgd2hlbiB0aGUgcmVnaXN0cnkgaXMgdG9ybiBkb3duLlxuICovXG5leHBvcnQgdHlwZSBJbnN0cnVtZW50YXRpb25BUEkgPSB7XG4gIG9uRXZlbnQ/OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICBvbkVudHJ5Q2hhbmdlPzogKGVudHJ5OiBSb3V0ZXJFbnRyeVNuYXBzaG90KSA9PiB2b2lkO1xuICBkaXNwb3NlPzogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5ID0ge1xuICByZWdpc3RlcjogKGluc3RydW1lbnRhdGlvbjogSW5zdHJ1bWVudGF0aW9uQVBJKSA9PiB2b2lkO1xuICB1bnJlZ2lzdGVyOiAoaW5zdHJ1bWVudGF0aW9uOiBJbnN0cnVtZW50YXRpb25BUEkpID0+IHZvaWQ7XG4gIGVtaXRFdmVudDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgbm90aWZ5RW50cnlDaGFuZ2U6IChlbnRyeTogUm91dGVyRW50cnlTbmFwc2hvdCkgPT4gdm9pZDtcbiAgZGlzcG9zZTogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVnaXN0cnkgY29vcmRpbmF0aW5nIGEgc2V0IG9mIGluc3RydW1lbnRhdGlvbnMuIFRoZSByZWdpc3RyeSBrZWVwc1xuICogY29uc3VtZXIgY29kZSBzaW1wbGU6IHJvdXRlciBpbnRlcm5hbHMgYnJvYWRjYXN0IGV2ZW50cyB3aXRob3V0IGNhcmluZyBhYm91dFxuICogdGhlIG51bWJlciBvciBuYXR1cmUgb2YgYXR0YWNoZWQgaW5zdHJ1bWVudGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5KFxuICBpbml0aWFsOiBJbnN0cnVtZW50YXRpb25BUElbXSA9IFtdLFxuKTogSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkge1xuICBjb25zdCBsaXN0ZW5lcnMgPSBuZXcgU2V0PEluc3RydW1lbnRhdGlvbkFQST4oKTtcbiAgaW5pdGlhbC5mb3JFYWNoKChpbnN0cnVtZW50YXRpb24pID0+IHtcbiAgICBsaXN0ZW5lcnMuYWRkKGluc3RydW1lbnRhdGlvbik7XG4gIH0pO1xuXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiB0aGUgcmVnaXN0cnkgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZC4gR3VhcmRzIGV2ZW50IGVtaXNzaW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gZ3VhcmQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3RydW1lbnRhdGlvbiByZWdpc3RyeSB3YXMgZGlzcG9zZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGludm9rZXMgYW4gb3B0aW9uYWwgaGFuZGxlciBwcm92aWRlZCBieSBhbiBpbnN0cnVtZW50YXRpb24uXG4gICAqIEZhaWx1cmVzIGFyZSBzd2FsbG93ZWQgc28gcm91dGVyIGV4ZWN1dGlvbiBjb250aW51ZXMgdW5pbnRlcnJ1cHRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHNhZmVJbnZva2UoXG4gICAgaW5zdHJ1bWVudGF0aW9uOiBJbnN0cnVtZW50YXRpb25BUEksXG4gICAgbWV0aG9kOiBrZXlvZiBJbnN0cnVtZW50YXRpb25BUEksXG4gICAgcGF5bG9hZDogdW5rbm93bltdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gaW5zdHJ1bWVudGF0aW9uW21ldGhvZF07XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAoaGFuZGxlciBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkKSguLi5wYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEluc3RydW1lbnRhdGlvbnMgc2hvdWxkIG5ldmVyIGJyZWFrIHJvdXRlciBleGVjdXRpb24uIEVycm9ycyBhcmUgc3dhbGxvd2VkLlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXIoaW5zdHJ1bWVudGF0aW9uKSB7XG4gICAgICBndWFyZCgpO1xuICAgICAgbGlzdGVuZXJzLmFkZChpbnN0cnVtZW50YXRpb24pO1xuICAgIH0sXG4gICAgdW5yZWdpc3RlcihpbnN0cnVtZW50YXRpb24pIHtcbiAgICAgIGd1YXJkKCk7XG4gICAgICBsaXN0ZW5lcnMuZGVsZXRlKGluc3RydW1lbnRhdGlvbik7XG4gICAgfSxcbiAgICBlbWl0RXZlbnQoZXZlbnQpIHtcbiAgICAgIGd1YXJkKCk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgoaW5zdHJ1bWVudGF0aW9uKSA9PiB7XG4gICAgICAgIHNhZmVJbnZva2UoaW5zdHJ1bWVudGF0aW9uLCAnb25FdmVudCcsIFtldmVudF0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBub3RpZnlFbnRyeUNoYW5nZShlbnRyeSkge1xuICAgICAgZ3VhcmQoKTtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChpbnN0cnVtZW50YXRpb24pID0+IHtcbiAgICAgICAgc2FmZUludm9rZShpbnN0cnVtZW50YXRpb24sICdvbkVudHJ5Q2hhbmdlJywgW2VudHJ5XSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBpZiAoZGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGluc3RydW1lbnRhdGlvbikgPT4ge1xuICAgICAgICBzYWZlSW52b2tlKGluc3RydW1lbnRhdGlvbiwgJ2Rpc3Bvc2UnLCBbXSk7XG4gICAgICB9KTtcbiAgICAgIGxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgZGlzcG9zZWQgPSB0cnVlO1xuICAgIH0sXG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gbGlzdGVuZXJzLnNpemU7XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import type { StoryObj } from '@storybook/react';
2
+ declare const meta: {
3
+ title: string;
4
+ parameters: {
5
+ docs: {
6
+ description: {
7
+ component: string;
8
+ };
9
+ };
10
+ };
11
+ };
12
+ export default meta;
13
+ type Story = StoryObj<typeof meta>;
14
+ export declare const NavigationAndQueryParams: Story;
15
+ export declare const RendererPendingAndEmpty: Story;
16
+ export declare const RouteComponentStates: Story;
17
+ export declare const ResourcePageSuspense: Story;
18
+ //# sourceMappingURL=RouterPrimitives.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouterPrimitives.stories.d.ts","sourceRoot":"","sources":["../../../src/routing/RouterPrimitives.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAyFvD,QAAA,MAAM,IAAI;;;;;;;;;CAUM,CAAC;AAEjB,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,wBAAwB,EAAE,KA6BtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAiBrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAYlC,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Suspense, createElement } from 'react';
3
+ import { ResourcePage } from '../ResourcePage.js';
4
+ import Link from './Link.js';
5
+ import RouteComponent from './RouteComponent.js';
6
+ import RouterRenderer from './RouterRenderer.js';
7
+ import useLocation from './useLocation.js';
8
+ import useNavigate from './useNavigate.js';
9
+ import useQuery from './useQuery.js';
10
+ const waitForStoryIdle = async () => {
11
+ await new Promise((resolve) => {
12
+ window.setTimeout(resolve, 0);
13
+ });
14
+ };
15
+ const clickByText = async (root, selector, pattern) => {
16
+ const element = Array.from(root.querySelectorAll(selector)).find((item) => {
17
+ return pattern.test(item.textContent);
18
+ });
19
+ if (element == null) {
20
+ throw new Error(`Expected ${selector} matching ${pattern.source}.`);
21
+ }
22
+ element.click();
23
+ await waitForStoryIdle();
24
+ };
25
+ const expectTextContent = (root, selector, pattern) => {
26
+ const element = root.querySelector(selector);
27
+ if (element == null || !pattern.test(element.textContent)) {
28
+ throw new Error(`Expected ${selector} to contain ${pattern.source}.`);
29
+ }
30
+ };
31
+ const RouterStatePanel = () => {
32
+ const location = useLocation();
33
+ const query = useQuery();
34
+ const navigate = useNavigate();
35
+ return (_jsxs("div", { style: { display: 'grid', gap: 12 }, children: [_jsxs("div", { role: "status", children: ["Current location: ", location.pathname, location.search] }), _jsx("pre", { children: JSON.stringify(query, null, 2) }), _jsx("button", { type: "button", onClick: () => {
36
+ navigate({ pathname: '/projects', query: { status: 'active' } });
37
+ }, children: "Navigate to projects" })] }));
38
+ };
39
+ const LoadedResourcePage = () => {
40
+ return _jsx("div", { children: "Lazy resource loaded" });
41
+ };
42
+ const storybookResourcePage = new ResourcePage(async () => {
43
+ return LoadedResourcePage;
44
+ }, 'storybook-resource-page');
45
+ const LazyResourcePageFixture = () => {
46
+ const Component = storybookResourcePage.read();
47
+ if (Component instanceof Promise || Component instanceof Error) {
48
+ throw Component;
49
+ }
50
+ if ('default' in Component) {
51
+ return createElement(Component.default);
52
+ }
53
+ return createElement(Component);
54
+ };
55
+ const meta = {
56
+ title: '@plumile/router/Routing/Link',
57
+ parameters: {
58
+ docs: {
59
+ description: {
60
+ component: 'Behavioral Storybook demos for router links, query state, render fallbacks, route components, and resource pages.',
61
+ },
62
+ },
63
+ },
64
+ };
65
+ export default meta;
66
+ export const NavigationAndQueryParams = {
67
+ render: () => {
68
+ return (_jsxs("div", { style: { display: 'grid', gap: 16 }, children: [_jsxs("nav", { style: { display: 'flex', gap: 12 }, children: [_jsx(Link, { to: "/dashboard", exact: true, activeClassName: "active", children: "Dashboard" }), _jsx(Link, { to: { pathname: '/projects', search: '?status=active&page=2' }, children: "Active projects" }), _jsx(Link, { to: "/settings", isDisabled: true, children: "Disabled settings" })] }), _jsx(RouterStatePanel, {})] }));
69
+ },
70
+ play: async ({ canvasElement }) => {
71
+ await clickByText(canvasElement, 'a', /active projects/i);
72
+ expectTextContent(canvasElement, '[role="status"]', /\/projects\?status=active&page=2/i);
73
+ await clickByText(canvasElement, 'button', /navigate to projects/i);
74
+ expectTextContent(canvasElement, 'pre', /"status": "active"/i);
75
+ },
76
+ };
77
+ export const RendererPendingAndEmpty = {
78
+ render: () => {
79
+ return (_jsxs("div", { style: { display: 'grid', gap: 12 }, children: [_jsx(RouterRenderer, { enableTransition: true, fallback: _jsx("div", { role: "status", children: "Loading route" }), pending: _jsx("div", { role: "status", children: "Navigation pending" }) }), _jsx("div", { children: "No route segments are prepared in this fixture, so the renderer returns an empty route body while preserving fallback and pending wiring." })] }));
80
+ },
81
+ };
82
+ export const RouteComponentStates = {
83
+ render: () => {
84
+ return (_jsxs("div", { style: { display: 'grid', gap: 12 }, children: [_jsx(RouteComponent, { content: _jsx("div", { role: "status", children: "Resolved route component" }), redirectToPathname: null }), _jsx(RouteComponent, { content: null, redirectToPathname: "/login" })] }));
85
+ },
86
+ };
87
+ export const ResourcePageSuspense = {
88
+ render: () => {
89
+ return (_jsx(Suspense, { fallback: _jsx("div", { role: "status", children: "Loading resource" }), children: _jsx(LazyResourcePageFixture, {}) }));
90
+ },
91
+ play: async ({ canvasElement }) => {
92
+ await waitForStoryIdle();
93
+ expectTextContent(canvasElement, 'div', /lazy resource loaded/i);
94
+ },
95
+ };
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyUHJpbWl0aXZlcy5zdG9yaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvUm91dGVyUHJpbWl0aXZlcy5zdG9yaWVzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFHaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLFdBQVcsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLFdBQVcsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFFckMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLElBQW1CLEVBQUU7SUFDakQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUN2QixJQUFnQixFQUNoQixRQUFnQixFQUNoQixPQUFlLEVBQ0EsRUFBRTtJQUNqQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBYyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDM0UsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNQLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUNGLENBQUM7SUFDRixJQUFJLE9BQU8sSUFBSSxJQUFJLEVB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Q0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQVU7SUFDekMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNYLE9BQU8sQ0FDTCxlQUFLLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxhQUN0QyxLQUFDLGNBQWMsSUFDYixPQUFPLEVBQUUsY0FBSyxJQUFJLEVBQUMsUUFBUSx5Q0FBK0IsRUFDMUQsa0JBQWtCLEVBQUUsSUFBSSxHQUN4QixFQUNGLEtBQUMsY0FBYyxJQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsUUFBUSxHQUFHLElBQ3pELENBQ1AsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQVU7SUFDekMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNYLE9BQU8sQ0FDTCxLQUFDLFFBQVEsSUFBQyxRQUFRLEVBQUUsY0FBSyxJQUFJLEVBQUMsUUFBUSxpQ0FBdUIsWUFDM0QsS0FBQyx1QkFBdUIsS0FBRyxHQUNsQixDQUNaLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1c3BlbnNlLCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBNZXRhLCBTdG9yeU9iaiB9IGZyb20gJ0BzdG9yeWJvb2svcmVhY3QnO1xuXG5pbXBvcnQgeyBSZXNvdXJjZVBhZ2UgfSBmcm9tICcuLi9SZXNvdXJjZVBhZ2UuanMnO1xuaW1wb3J0IExpbmsgZnJvbSAnLi9MaW5rLmpzJztcbmltcG9ydCBSb3V0ZUNvbXBvbmVudCBmcm9tICcuL1JvdXRlQ29tcG9uZW50LmpzJztcbmltcG9ydCBSb3V0ZXJSZW5kZXJlciBmcm9tICcuL1JvdXRlclJlbmRlcmVyLmpzJztcbmltcG9ydCB1c2VMb2NhdGlvbiBmcm9tICcuL3VzZUxvY2F0aW9uLmpzJztcbmltcG9ydCB1c2VOYXZpZ2F0ZSBmcm9tICcuL3VzZU5hdmlnYXRlLmpzJztcbmltcG9ydCB1c2VRdWVyeSBmcm9tICcuL3VzZVF1ZXJ5LmpzJztcblxuY29uc3Qgd2FpdEZvclN0b3J5SWRsZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59O1xuXG5jb25zdCBjbGlja0J5VGV4dCA9IGFzeW5jIChcbiAgcm9vdDogUGFyZW50Tm9kZSxcbiAgc2VsZWN0b3I6IHN0cmluZyxcbiAgcGF0dGVybjogUmVnRXhwLFxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGVsZW1lbnQgPSBBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oc2VsZWN0b3IpKS5maW5kKFxuICAgIChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KGl0ZW0udGV4dENvbnRlbnQpO1xuICAgIH0sXG4gICk7XG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7c2VsZWN0b3J9IG1hdGNoaW5nICR7cGF0dGVybi5zb3VyY2V9LmApO1xuICB9XG4gIGVsZW1lbnQuY2xpY2soKTtcbiAgYXdhaXQgd2FpdEZvclN0b3J5SWRsZSgpO1xufTtcblxuY29uc3QgZXhwZWN0VGV4dENvbnRlbnQgPSAoXG4gIHJvb3Q6IFBhcmVudE5vZGUsXG4gIHNlbGVjdG9yOiBzdHJpbmcsXG4gIHBhdHRlcm46IFJlZ0V4cCxcbik6IHZvaWQgPT4ge1xuICBjb25zdCBlbGVtZW50ID0gcm9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCB8fCAhcGF0dGVybi50ZXN0KGVsZW1lbnQudGV4dENvbnRlbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3NlbGVjdG9yfSB0byBjb250YWluICR7cGF0dGVybi5zb3VyY2V9LmApO1xuICB9XG59O1xuXG5jb25zdCBSb3V0ZXJTdGF0ZVBhbmVsID0gKCkgPT4ge1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnkoKTtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZ3JpZCcsIGdhcDogMTIgfX0+XG4gICAgICA8ZGl2IHJvbGU9XCJzdGF0dXNcIj5cbiAgICAgICAgQ3VycmVudCBsb2NhdGlvbjoge2xvY2F0aW9uLnBhdGhuYW1lfVxuICAgICAgICB7bG9jYXRpb24uc2VhcmNofVxuICAgICAgPC9kaXY+XG4gICAgICA8cHJlPntKU09OLnN0cmluZ2lmeShxdWVyeSwgbnVsbCwgMil9PC9wcmU+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgbmF2aWdhdGUoeyBwYXRobmFtZTogJy9wcm9qZWN0cycsIHF1ZXJ5OiB7IHN0YXR1czogJ2FjdGl2ZScgfSB9KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgTmF2aWdhdGUgdG8gcHJvamVjdHNcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgTG9hZGVkUmVzb3VyY2VQYWdlID0gKCkgPT4ge1xuICByZXR1cm4gPGRpdj5MYXp5IHJlc291cmNlIGxvYWRlZDwvZGl2Pjtcbn07XG5cbmNvbnN0IHN0b3J5Ym9va1Jlc291cmNlUGFnZSA9IG5ldyBSZXNvdXJjZVBhZ2UoYXN5bmMgKCkgPT4ge1xuICByZXR1cm4gTG9hZGVkUmVzb3VyY2VQYWdlO1xufSwgJ3N0b3J5Ym9vay1yZXNvdXJjZS1wYWdlJyk7XG5cbmNvbnN0IExhenlSZXNvdXJjZVBhZ2VGaXh0dXJlID0gKCkgPT4ge1xuICBjb25zdCBDb21wb25lbnQgPSBzdG9yeWJvb2tSZXNvdXJjZVBhZ2UucmVhZCgpO1xuICBpZiAoQ29tcG9uZW50IGluc3RhbmNlb2YgUHJvbWlzZSB8fCBDb21wb25lbnQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIC8vIFJlYWN0IFN1c3BlbnNlIGV4cGVjdHMgcHJvbWlzZXMgdG8gYmUgdGhyb3duIHdoaWxlIGxhenkgcmVzb3VyY2VzIGxvYWQuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9vbmx5LXRocm93LWVycm9yXG4gICAgdGhyb3cgQ29tcG9uZW50O1xuICB9XG4gIGlmICgnZGVmYXVsdCcgaW4gQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LmRlZmF1bHQpO1xuICB9XG4gIHJldHVybiBjcmVhdGVFbGVtZW50KENvbXBvbmVudCk7XG59O1xuXG5jb25zdCBtZXRhID0ge1xuICB0aXRsZTogJ0BwbHVtaWxlL3JvdXRlci9Sb3V0aW5nL0xpbmsnLFxuICBwYXJhbWV0ZXJzOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgY29tcG9uZW50OlxuICAgICAgICAgICdCZWhhdmlvcmFsIFN0b3J5Ym9vayBkZW1vcyBmb3Igcm91dGVyIGxpbmtzLCBxdWVyeSBzdGF0ZSwgcmVuZGVyIGZhbGxiYWNrcywgcm91dGUgY29tcG9uZW50cywgYW5kIHJlc291cmNlIHBhZ2VzLicsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59IHNhdGlzZmllcyBNZXRhO1xuXG5leHBvcnQgZGVmYXVsdCBtZXRhO1xuXG50eXBlIFN0b3J5ID0gU3RvcnlPYmo8dHlwZW9mIG1ldGE+O1xuXG5leHBvcnQgY29uc3QgTmF2aWdhdGlvbkFuZFF1ZXJ5UGFyYW1zOiBTdG9yeSA9IHtcbiAgcmVuZGVyOiAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2dyaWQnLCBnYXA6IDE2IH19PlxuICAgICAgICA8bmF2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAxMiB9fT5cbiAgICAgICAgICA8TGluayB0bz1cIi9kYXNoYm9hcmRcIiBleGFjdCBhY3RpdmVDbGFzc05hbWU9XCJhY3RpdmVcIj5cbiAgICAgICAgICAgIERhc2hib2FyZFxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICA8TGluayB0bz17eyBwYXRobmFtZTogJy9wcm9qZWN0cycsIHNlYXJjaDogJz9zdGF0dXM9YWN0aXZlJnBhZ2U9MicgfX0+XG4gICAgICAgICAgICBBY3RpdmUgcHJvamVjdHNcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3NcIiBpc0Rpc2FibGVkPlxuICAgICAgICAgICAgRGlzYWJsZWQgc2V0dGluZ3NcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvbmF2PlxuICAgICAgICA8Um91dGVyU3RhdGVQYW5lbCAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSxcbiAgcGxheTogYXN5bmMgKHsgY2FudmFzRWxlbWVudCB9KSA9PiB7XG4gICAgYXdhaXQgY2xpY2tCeVRleHQoY2FudmFzRWxlbWVudCwgJ2EnLCAvYWN0aXZlIHByb2plY3RzL2kpO1xuICAgIGV4cGVjdFRleHRDb250ZW50KFxuICAgICAgY2FudmFzRWxlbWVudCxcbiAgICAgICdbcm9sZT1cInN0YXR1c1wiXScsXG4gICAgICAvXFwvcHJvamVjdHNcXD9zdGF0dXM9YWN0aXZlJnBhZ2U9Mi9pLFxuICAgICk7XG4gICAgYXdhaXQgY2xpY2tCeVRleHQoY2FudmFzRWxlbWVudCwgJ2J1dHRvbicsIC9uYXZpZ2F0ZSB0byBwcm9qZWN0cy9pKTtcbiAgICBleHBlY3RUZXh0Q29udGVudChjYW52YXNFbGVtZW50LCAncHJlJywgL1wic3RhdHVzXCI6IFwiYWN0aXZlXCIvaSk7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgUmVuZGVyZXJQZW5kaW5nQW5kRW1wdHk6IFN0b3J5ID0ge1xuICByZW5kZXI6ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZ3JpZCcsIGdhcDogMTIgfX0+XG4gICAgICAgIDxSb3V0ZXJSZW5kZXJlclxuICAgICAgICAgIGVuYWJsZVRyYW5zaXRpb25cbiAgICAgICAgICBmYWxsYmFjaz17PGRpdiByb2xlPVwic3RhdHVzXCI+TG9hZGluZyByb3V0ZTwvZGl2Pn1cbiAgICAgICAgICBwZW5kaW5nPXs8ZGl2IHJvbGU9XCJzdGF0dXNcIj5OYXZpZ2F0aW9uIHBlbmRpbmc8L2Rpdj59XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgTm8gcm91dGUgc2VnbWVudHMgYXJlIHByZXBhcmVkIGluIHRoaXMgZml4dHVyZSwgc28gdGhlIHJlbmRlcmVyXG4gICAgICAgICAgcmV0dXJucyBhbiBlbXB0eSByb3V0ZSBib2R5IHdoaWxlIHByZXNlcnZpbmcgZmFsbGJhY2sgYW5kIHBlbmRpbmdcbiAgICAgICAgICB3aXJpbmcuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBSb3V0ZUNvbXBvbmVudFN0YXRlczogU3RvcnkgPSB7XG4gIHJlbmRlcjogKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdncmlkJywgZ2FwOiAxMiB9fT5cbiAgICAgICAgPFJvdXRlQ29tcG9uZW50XG4gICAgICAgICAgY29udGVudD17PGRpdiByb2xlPVwic3RhdHVzXCI+UmVzb2x2ZWQgcm91dGUgY29tcG9uZW50PC9kaXY+fVxuICAgICAgICAgIHJlZGlyZWN0VG9QYXRobmFtZT17bnVsbH1cbiAgICAgICAgLz5cbiAgICAgICAgPFJvdXRlQ29tcG9uZW50IGNvbnRlbnQ9e251bGx9IHJlZGlyZWN0VG9QYXRobmFtZT1cIi9sb2dpblwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlUGFnZVN1c3BlbnNlOiBTdG9yeSA9IHtcbiAgcmVuZGVyOiAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17PGRpdiByb2xlPVwic3RhdHVzXCI+TG9hZGluZyByZXNvdXJjZTwvZGl2Pn0+XG4gICAgICAgIDxMYXp5UmVzb3VyY2VQYWdlRml4dHVyZSAvPlxuICAgICAgPC9TdXNwZW5zZT5cbiAgICApO1xuICB9LFxuICBwbGF5OiBhc3luYyAoeyBjYW52YXNFbGVtZW50IH0pID0+IHtcbiAgICBhd2FpdCB3YWl0Rm9yU3RvcnlJZGxlKCk7XG4gICAgZXhwZWN0VGV4dENvbnRlbnQoY2FudmFzRWxlbWVudCwgJ2RpdicsIC9sYXp5IHJlc291cmNlIGxvYWRlZC9pKTtcbiAgfSxcbn07XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { RoutingContextType, UnknownQueryShape } from '../types.js';
3
- declare const RoutingContext: React.Context<RoutingContextType<any, Readonly<Record<string, import("@plumile/filter-query").FieldDescriptor>> | undefined, UnknownQueryShape, any> | null>;
3
+ declare const RoutingContext: React.Context<RoutingContextType<any, Readonly<Record<string, import("@plumile/filter-query/types.js.js").FieldDescriptor>> | undefined, UnknownQueryShape, any> | null>;
4
4
  export default RoutingContext;
5
5
  //# sourceMappingURL=RoutingContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RoutingContext.d.ts","sourceRoot":"","sources":["../../../src/routing/RoutingContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,QAAA,MAAM,cAAc,8JAKL,CAAC;AAKhB,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"RoutingContext.d.ts","sourceRoot":"","sources":["../../../src/routing/RoutingContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,QAAA,MAAM,cAAc,0KAKL,CAAC;AAKhB,eAAe,cAAc,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type Schema as FilterSchema } from '@plumile/filter-query';
1
+ import { type Schema as FilterSchema } from '@plumile/filter-query/types.js';
2
2
  import type { ParamData } from 'path-to-regexp';
3
3
  import { type RoutingContextType, type AnyRoute, type PreparedAccess, type NavigateOverloads, type UnknownQueryShape } from '../types.js';
4
4
  import { type InstrumentationAPI } from '../instrumentation/Instrumentation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,MAAM,IAAI,YAAY,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAMtB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAQ/C,KAAK,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAsClD,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,IAAI;IAE/D,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAEjC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAC3B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CA+0BjC"}
1
+ {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAMtB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAQ/C,KAAK,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAsClD,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,IAAI;IAE/D,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAEjC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAC3B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CA+0BjC"}
@@ -3,7 +3,8 @@ import { BrowserHistory } from '../history/index.js';
3
3
  import { getMatchedRoute, prepareMatch } from '../tools.js';
4
4
  import { parseRawQuery } from '../tools/query.js';
5
5
  import buildCombinedSearch from '../tools/buildCombinedSearch.js';
6
- import { FILTER_OPERATORS, parse as parseFilters, } from '@plumile/filter-query';
6
+ import { parse as parseFilters } from '@plumile/filter-query/parse.js';
7
+ import { FILTER_OPERATORS } from '@plumile/filter-query/values.js';
7
8
  import { createInstrumentationRegistry, } from '../instrumentation/Instrumentation.js';
8
9
  import { isRouterNavigationSource, } from '../values.js';
9
10
  function shouldPrepareOnNavigation(input) {
@@ -626,4 +627,4 @@ export default function createRouter(routes, options = {}) {
626
627
  }
627
628
  return { context, cleanup };
628
629
  }
629
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsS0FBSyxJQUFJLFlBQVksR0FHdEIsTUFBTSx1QkFBdUIsQ0FBQztBQWdCL0IsT0FBTyxFQUNMLDZCQUE2QixHQU05QixNQUFNLHVDQUF1QyxDQUFDO0FBRS9DLE9BQU8sRUFDTCx3QkFBd0IsR0FHekIsTUFBTSxjQUFjLENBQUM7QUFrQnRCLFNBQVMseUJBQXlCLENBQUMsS0FJbEM7SUFDQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDdEQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEMsT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMscUJBQXFCLEtBQUssTUFBTSxDQUFDO0lBQ3pFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQTBFRCxNQUFN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Q0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUdELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkUm91dGVzIH0gZnJvbSAnLi4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCcm93c2VySGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFJvdXRlLCBwcmVwYXJlTWF0Y2ggfSBmcm9tICcuLi90b29scy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJhd1F1ZXJ5IH0gZnJvbSAnLi4vdG9vbHMvcXVlcnkuanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5pbXBvcnQge1xuICBGSUxURVJfT1BFUkFUT1JTLFxuICBwYXJzZSBhcyBwYXJzZUZpbHRlcnMsXG4gIHR5cGUgRGlhZ25vc3RpYyBhcyBGaWx0ZXJEaWFnbm9zdGljLFxuICB0eXBlIFNjaGVtYSBhcyBGaWx0ZXJTY2hlbWEsXG59IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCB7XG4gIHR5cGUgUm91dGVFbnRyeSxcbiAgdHlwZSBSb3V0aW5nQ29udGV4dFR5cGUsXG4gIHR5cGUgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIHR5cGUgQW55Um91dGUsXG4gIHR5cGUgUHJlcGFyZWRBY2Nlc3MsXG4gIHR5cGUgTmF2aWdhdGVPdmVybG9hZHMsXG4gIHR5cGUgUHJlbG9hZFRhcmdldCxcbiAgdHlwZSBQcmVwYXJlZFJvdXRlU2VnbWVudFNuYXBzaG90LFxuICB0eXBlIFJhd1F1ZXJ5LFxuICB0eXBlIFJvdXRlck1hdGNoZWRSb3V0ZSxcbiAgdHlwZSBVbmtub3duRmlsdGVycyxcbiAgdHlwZSBVbmtub3duUXVlcnlTaGFwZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnksXG4gIHR5cGUgSW5zdHJ1bWVudGF0aW9uQVBJLFxuICB0eXBlIFJvdXRlckVudHJ5U25hcHNob3QsXG4gIHR5cGUgUm91dGVyTG9jYXRpb25TbmFwc2hvdCxcbiAgdHlwZSBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICB0eXBlIFJvdXRlckV2ZW50LFxufSBmcm9tICcuLi9pbnN0cnVtZW50YXRpb24vSW5zdHJ1bWVudGF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgSGlzdG9yeURlYnVnQ29udGV4dCB9IGZyb20gJy4uL2hpc3RvcnkvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgaXNSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICB0eXBlIFJvdXRlckhpc3RvcnlBY3Rpb25WYWx1ZSxcbiAgdHlwZSBSb3V0ZXJQcmVsb2FkTW9kZVZhbHVlLFxufSBmcm9tICcuLi92YWx1ZXMuanMnO1xuXG50eXBlIFJvdXRlclF1ZXJ5U2NoZW1hID0gRmlsdGVyU2NoZW1hIHwgdW5kZWZpbmVkO1xudHlwZSBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PiA9IFJvdXRlRW50cnk8XG4gIFBhcmFtRGF0YSxcbiAgUm91dGVyUXVlcnlTY2hlbWEsXG4gIFRDb250ZXh0XG4+O1xudHlwZSBQYXJzZWRTZWFyY2hTdGF0ZSA9IHtcbiAgcXVlcnk6IFJhd1F1ZXJ5O1xuICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gIGZpbHRlckRpYWdub3N0aWNzPzogRmlsdGVyRGlhZ25vc3RpY1tdO1xufTtcbnR5cGUgUHJlcGFyZVF1ZXJ5SW5wdXQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByb3V0ZSBwcmVwYXJlIGNhbGxiYWNrIHNob3VsZCBydW4gYWZ0ZXIgbmF2aWdhdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJlcGFyZU9uTmF2aWdhdGlvbihpbnB1dDoge1xuICBzYW1lUGF0aG5hbWU6IGJvb2xlYW47XG4gIHNhbWVTZWFyY2g6IGJvb2xlYW47XG4gIHJvdXRlOiBSb3V0ZXJNYXRjaGVkUm91dGU8UGFyYW1EYXRhPiB8IG51bGw7XG59KTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQuc2FtZVBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaW5wdXQuc2FtZVNlYXJjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJvdXRlU2VnbWVudHMgPSBpbnB1dC5yb3V0ZT8ucm91dGUucm91dGVzID8/IFtdO1xuICByZXR1cm4gcm91dGVTZWdtZW50cy5zb21lKChyb3V0ZSkgPT4ge1xuICAgIHJldHVybiByb3V0ZS5wcmVwYXJlICE9IG51bGwgJiYgcm91dGUucHJlcGFyZVNlYXJjaEJlaGF2aW9yICE9PSAncGF0aCc7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgY3JlYXRlUm91dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXJSZXR1cm48VENvbnRleHQsIFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8XG4gICAgUGFyYW1EYXRhLFxuICAgIFJvdXRlclF1ZXJ5U2NoZW1hLFxuICAgIFVua25vd25RdWVyeVNoYXBlLFxuICAgIFRDb250ZXh0XG4gID4gJlxuICAgIFByZXBhcmVkQWNjZXNzPFI+ICYge1xuICAgICAgbmF2aWdhdGU6IE5hdmlnYXRlT3ZlcmxvYWRzPFI+O1xuICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb21wbGV0ZSByb3V0ZXIgc3lzdGVtIGZyb20gcm91dGUgY29uZmlndXJhdGlvbnMuXG4gKlxuICogVGhpcyByb3V0ZXIgaXMgYnVpbHQgZnJvbSB0aGUgc2FtZSBwcmltaXRpdmVzIGFzIHJlYWN0LXJvdXRlciBidXQgd2l0aCBhZGRpdGlvbmFsXG4gKiBmZWF0dXJlcyBmb3IgZGF0YSBwcmVsb2FkaW5nIGFuZCBjb2RlIHNwbGl0dGluZy4gRWFjaCByb3V0ZSBjYW4gY29udGFpbiBib3RoIGFcbiAqIENvbXBvbmVudCBhbmQgYSBwcmVwYXJlKCkgZnVuY3Rpb24gdGhhdCBjYW4gcHJlbG9hZCBkYXRhIGZvciB0aGUgY29tcG9uZW50LlxuICpcbiAqIFRoZSByb3V0ZXIgd2F0Y2hlcyBmb3IgY2hhbmdlcyB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB2aWEgdGhlIEhUTUw1IEhpc3RvcnkgQVBJLFxuICogbWFwcyB0aGUgbG9jYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91dGUgZW50cnksIGFuZCB0aGVuIHByZWxvYWRzIHRoZSBjb2RlXG4gKiBhbmQgZGF0YSBmb3IgdGhlIHJvdXRlIGJlZm9yZSByZW5kZXJpbmcuXG4gKlxuICogQHBhcmFtIHJvdXRlcyAtIEFycmF5IG9mIHJvdXRlIGNvbmZpZ3VyYXRpb25zXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgcm91dGVyIGNvbnRleHQgYW5kIGNsZWFudXAgZnVuY3Rpb25cbiAqXG4gIHByZXBhcmVkTWF0Y2g6IHByZXBhcmVNYXRjaChyb3V0ZSwgcGFyc2VSYXdRdWVyeShoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkpLFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgcm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJy91c2Vycy86aWQnLFxuICogICAgIHJlc291cmNlUGFnZTogZ2V0UmVzb3VyY2VQYWdlKCdVc2VyUHJvZmlsZScsICgpID0+IGltcG9ydCgnLi9Vc2VyUHJvZmlsZScpKSxcbiAqICAgICBwcmVwYXJlOiAoeyB2YXJpYWJsZXMgfSkgPT4gKHsgdXNlcklkOiB2YXJpYWJsZXMuaWQgfSlcbiAqICAgfVxuICogXTtcbiAqXG4gKiBjb25zdCB7IGNvbnRleHQsIGNsZWFudXAgfSA9IGNyZWF0ZVJvdXRlcihyb3V0ZXMpO1xuICpcbiAqIC8vIFVzZSBpbiBSZWFjdCBhcHBcbiAqIDxSb3V0aW5nQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gKiAgIDxSb3V0ZXJSZW5kZXJlciAvPlxuICogPC9Sb3V0aW5nQ29udGV4dC5Qcm92aWRlcj5cbiAqIGBgYFxuICovXG4vKipcbiAqIENyZWF0ZSBhIHJvdXRlciAodHlwZWQgb3ZlcmxvYWQpLiBXaGVuIGNhbGxlZCB3aXRoIGEgY29uc3QgdHVwbGUgb2Ygcm91dGVzLCBnZW5lcmljcyBhcmUgcHJlc2VydmVkLlxuICovXG4vKipcbiAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGBjcmVhdGVSb3V0ZXJgLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXJPcHRpb25zPFRDb250ZXh0PiA9IHtcbiAgLyoqIEluc3RydW1lbnRhdGlvbnMgdG8gYXR0YWNoIHRvIHRoZSByb3V0ZXIgKERldlRvb2xzIGJyaWRnZSwgbG9nZ2VyLCAuLi4pLiAqL1xuICBpbnN0cnVtZW50YXRpb25zPzogSW5zdHJ1bWVudGF0aW9uQVBJW107XG4gIC8qKiBTdGF0aWMgY29udGV4dCB2YWx1ZSBvciBsYXp5IGluaXRpYWxpemVyIGZvciB0aGUgcm91dGVyLiAqL1xuICBjb250ZXh0PzogVENvbnRleHQgfCAoKCkgPT4gVENvbnRleHQpO1xuICAvKiogUmVzb2x2ZSBhIGZyZXNoIGNvbnRleHQgdmFsdWUgcGVyIG5hdmlnYXRpb24uICovXG4gIGdldENvbnRleHQ/OiAoKSA9PiBUQ29udGV4dDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlciBpbnN0YW5jZSBmcm9tIGEgcm91dGUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gUm91dGUgZGVmaW5pdGlvbnMgdG8gcmVnaXN0ZXIuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGluc3RydW1lbnRhdGlvbiBzZXR0aW5ncyB1c2VkIGZvciBleHBvc2luZyBkZXZlbG9wbWVudCB0b29saW5nLlxuICogQHBhcmFtIG9wdGlvbnMuaW5zdHJ1bWVudGF0aW9ucyAtIEluc3RydW1lbnRhdGlvbnMgaW52b2tlZCBvbiByb3V0ZXIgZXZlbnRzIChkZXZlbG9wbWVudCBvbmx5KS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFxuICBUQ29udGV4dCA9IHVua25vd24sXG4gIFIgZXh0ZW5kcyBBbnlSb3V0ZVtdID0gQW55Um91dGVbXSxcbj4oXG4gIHJvdXRlczogWy4uLlJdIHwgQW55Um91dGVbXSxcbiAgb3B0aW9uczogQ3JlYXRlUm91dGVyT3B0aW9uczxUQ29udGV4dD4gPSB7fSxcbik6IENyZWF0ZVJvdXRlclJldHVybjxUQ29udGV4dCwgUj4ge1xuICAvLyBJbml0aWFsaXplIGJyb3dzZXIgaGlzdG9yeSBtYW5hZ2VyXG4gIGNvbnN0IGhpc3RvcnkgPSBuZXcgQnJvd3Nlckhpc3RvcnkoKTtcblxuICBjb25zdCByZWdpc3RyeSA9IGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5KFxuICAgIG9wdGlvbnMuaW5zdHJ1bWVudGF0aW9ucyA/PyBbXSxcbiAgKTtcblxuICBsZXQgc3RhdGljQ29udGV4dDogVENvbnRleHQgfCB1bmRlZmluZWQ7XG4gIGlmIChvcHRpb25zLmdldENvbnRleHQgPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0aWNDb250ZXh0ID0gKG9wdGlvbnMuY29udGV4dCBhcyAoKSA9PiBUQ29udGV4dCkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGljQ29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzb2x2ZSB0aGUgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbi4gKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZUNvbnRleHQoKTogVENvbnRleHQge1xuICAgIGlmIChvcHRpb25zLmdldENvbnRleHQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0Q29udGV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGljQ29udGV4dCBhcyBUQ29udGV4dDtcbiAgfVxuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3ROYXZpZ2F0aW9uT3JpZ2luOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ2V4dGVybmFsJztcbiAgbGV0IGxhc3RQcmVsb2FkU2lnbmF0dXJlOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdGltZXN0YW1wOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcbiAgbGV0IHJvdXRlckRpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgcGFydGlhbCBsb2NhdGlvbiBvYmplY3QgaW50byBhIGZ1bGwgbG9jYXRpb24gc3RydWN0dXJlIHdpdGggc3RyaW5nIGZpZWxkcy5cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uOiB7XG4gICAgcGF0aG5hbWU6IHN0cmluZztcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgaGFzaD86IHN0cmluZztcbiAgfSk6IHsgcGF0aG5hbWU6IHN0cmluZzsgc2VhcmNoOiBzdHJpbmc7IGhhc2g6IHN0cmluZyB9IHtcbiAgICBsZXQgcGF0aG5hbWVWYWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24ucGF0aG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXRobmFtZVZhbHVlID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgfVxuICAgIGxldCBzZWFyY2hWYWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24uc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgc2VhcmNoVmFsdWUgPSBsb2NhdGlvbi5zZWFyY2g7XG4gICAgfVxuICAgIGxldCBoYXNoVmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uLmhhc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICBoYXNoVmFsdWUgPSBsb2NhdGlvbi5oYXNoO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lVmFsdWUsXG4gICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlLFxuICAgICAgaGFzaDogaGFzaFZhbHVlLFxuICAgIH07XG4gIH1cblxuICAvKiogRW1pdHMgYSByb3V0ZXIgZXZlbnQgdG8gZXZlcnkgcmVnaXN0ZXJlZCBpbnN0cnVtZW50YXRpb24uICovXG4gIGZ1bmN0aW9uIGVtaXRFdmVudChldmVudDogUm91dGVyRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAocm91dGVyRGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVnaXN0cnkuZW1pdEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBjb2VyY2UgYW4gYXJiaXRyYXJ5IHN0cmluZyBpbnRvIGEga25vd24gbmF2aWdhdGlvbiBzb3VyY2UuXG4gICAqL1xuICBmdW5jdGlvbiBtYXBPcmlnaW4ocmF3Pzogc3RyaW5nKTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGlzUm91dGVyTmF2aWdhdGlvblNvdXJjZShyYXcpKSB7XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gbmV3IFNldDxzdHJpbmc+KEZJTFRFUl9PUEVSQVRPUlMpO1xuXG4gIC8qKiBIZXVyaXN0aWM6IGRldGVjdCBmaWx0ZXItbGlrZSBvYmplY3RzIHdoZW4gY2FsbGVycyBwYXNzIGZpbHRlciByZWNvcmRzIHRvIG5hdmlnYXRlLiAqL1xuICBmdW5jdGlvbiBsb29rc0xpa2VGaWx0ZXJzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkVmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlKSkge1xuICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRvcnMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBvcmlnaW4gZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gZXZlbnQuXG4gICAqL1xuICAvKiogUmVzb2x2ZXMgdGhlIG5hdmlnYXRpb24gc291cmNlIGNvbWJpbmluZyBoaXN0b3J5IGNvbnRleHQgYW5kIHBlbmRpbmcgaW50ZW50LiAqL1xuICBmdW5jdGlvbiByZXNvbHZlTmF2aWdhdGlvbk9yaWdpbihcbiAgICBjb250ZXh0PzogSGlzdG9yeURlYnVnQ29udGV4dCB8IG51bGwsXG4gICk6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2Uge1xuICAgIGNvbnN0IGZhbGxiYWNrT3JpZ2luID0gcGVuZGluZ05hdmlnYXRpb25PcmlnaW47XG4gICAgbGV0IG9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbnRleHRPcmlnaW4gPSBjb250ZXh0Py5vcmlnaW47XG4gICAgaWYgKGNvbnRleHRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3JpZ2luID0gbWFwT3JpZ2luKGNvbnRleHRPcmlnaW4pO1xuICAgIH1cblxuICAgIG9yaWdpbiA/Pz0gZmFsbGJhY2tPcmlnaW47XG4gICAgb3JpZ2luID8/PSAnZXh0ZXJuYWwnO1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBvcmlnaW47XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGlubmVyLW1vc3QgbWF0Y2hlZCByb3V0ZSBwYXRoIGZyb20gYSByb3V0ZSBlbnRyeSB3aGVuIGF2YWlsYWJsZS5cbiAgICovXG4gIC8qKiBSZXR1cm5zIHRoZSBkZWVwZXN0IG1hdGNoZWQgcm91dGUgcGF0aCBmcm9tIGEgcm91dGUgZW50cnkgaWYgYXZhaWxhYmxlLiAqL1xuICBmdW5jdGlvbiByZWFkTWF0Y2hlZFJvdXRlUGF0aChcbiAgICBlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4gfCB1bmRlZmluZWQsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZSA9IGVudHJ5LnJvdXRlO1xuICAgIGlmIChtYXRjaGVkUm91dGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gbWF0Y2hlZFJvdXRlLnJvdXRlLnJvdXRlcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFJvdXRlcykpIHtcbiAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGNoaWxkUm91dGVzLmF0KC0xKTtcbiAgICAgIGlmIChsYXN0Q2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGRSZWNvcmQgPSBsYXN0Q2hpbGQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGxhc3RDaGlsZFJlY29yZC5wYXRoO1xuICAgICAgICBpZiAodHlwZW9mIGNoaWxkUGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGRQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvb3RQYXRoID0gbWF0Y2hlZFJvdXRlLnJvdXRlLnBhdGg7XG4gICAgaWYgKHR5cGVvZiByb290UGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByb290UGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBkZWVwZXN0IGFjdGl2ZSBxdWVyeSBzY2hlbWEgZm9yIGEgbWF0Y2hlZCByb3V0ZS4gKi9cbiAgZnVuY3Rpb24gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKFxuICAgIHJvdXRlOiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0Plsncm91dGUnXSxcbiAgKTogUm91dGVyUXVlcnlTY2hlbWEge1xuICAgIHJldHVybiByb3V0ZT8ucm91dGUucm91dGVzLmF0KC0xKT8ucXVlcnlTY2hlbWE7XG4gIH1cblxuICAvKiogUGFyc2VzIHJhdyBxdWVyeSBhbmQgdHlwZWQgZmlsdGVycyBmb3IgdGhlIHByb3ZpZGVkIHNlYXJjaCBzdHJpbmcuICovXG4gIGZ1bmN0aW9uIHBhcnNlU2VhcmNoU3RhdGUoXG4gICAgc2VhcmNoOiBzdHJpbmcsXG4gICAgcXVlcnlTY2hlbWE6IFJvdXRlclF1ZXJ5U2NoZW1hLFxuICApOiBQYXJzZWRTZWFyY2hTdGF0ZSB7XG4gICAgY29uc3QgcXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KHNlYXJjaCk7XG4gICAgaWYgKHF1ZXJ5U2NoZW1hID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7IHF1ZXJ5IH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGaWx0ZXJzKHNlYXJjaCwgcXVlcnlTY2hlbWEpO1xuICAgIHJldHVybiB7XG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnM6IHBhcnNlZC5maWx0ZXJzLFxuICAgICAgZmlsdGVyRGlhZ25vc3RpY3M6IHBhcnNlZC5kaWFnbm9zdGljcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFJlYWRzIGEgcGFnZSBudW1iZXIgZnJvbSBlaXRoZXIgYHBhZ2VgIG9yIGBwYWdlLmVxYCBmaWx0ZXIgc2hhcGVzLiAqL1xuICBmdW5jdGlvbiByZWFkUGFnZVZhbHVlKGZpbHRlcnM/OiBVbmtub3duRmlsdGVycyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdQYWdlID0gZmlsdGVycy5wYWdlO1xuICAgIGlmICh0eXBlb2YgcmF3UGFnZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiByYXdQYWdlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICByYXdQYWdlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiByYXdQYWdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkocmF3UGFnZSkgJiZcbiAgICAgIHR5cGVvZiAocmF3UGFnZSBhcyB7IGVxPzogdW5rbm93biB9KS5lcSA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHJldHVybiAocmF3UGFnZSBhcyB7IGVxOiBudW1iZXIgfSkuZXE7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogTm9ybWFsaXplcyB0aGUgcGFnZSBmaWx0ZXIgdG8gYSBtaW5pbXVtIHZhbHVlIG9mIDEgd2hlbiBwcmVzZW50LiAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVQYWdlRmlsdGVycyhmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnMpOiB7XG4gICAgZmlsdGVycz86IFVua25vd25GaWx0ZXJzO1xuICAgIG5vcm1hbGl6ZWQ6IGJvb2xlYW47XG4gIH0ge1xuICAgIGNvbnN0IHBhZ2VWYWx1ZSA9IHJlYWRQYWdlVmFsdWUoZmlsdGVycyk7XG4gICAgaWYgKHBhZ2VWYWx1ZSA9PSBudWxsIHx8IHBhZ2VWYWx1ZSA+PSAxIHx8IGZpbHRlcnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgbm9ybWFsaXplZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIC4uLmZpbHRlcnMsXG4gICAgICAgIHBhZ2U6IHsgZXE6IDEgfSxcbiAgICAgIH0sXG4gICAgICBub3JtYWxpemVkOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICAvKiogQ29udmVydHMgcm91dGVyIHNlYXJjaCBzdGF0ZSBpbnRvIHRoZSBvYmplY3QgZm9yd2FyZGVkIHRvIGBwcmVwYXJlYC4gKi9cbiAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlUXVlcnlJbnB1dChcbiAgICBzdGF0ZTogUGFyc2VkU2VhcmNoU3RhdGUsXG4gICAgcXVlcnlTY2hlbWE6IFJvdXRlclF1ZXJ5U2NoZW1hLFxuICApOiBQcmVwYXJlUXVlcnlJbnB1dCB7XG4gICAgaWYgKHF1ZXJ5U2NoZW1hICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5maWx0ZXJzID8/IHt9O1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUucXVlcnk7XG4gIH1cblxuICAvKiogQnVpbGRzIGEgc25hcHNob3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgcm91dGVyIGVudHJ5LiAqL1xuICBmdW5jdGlvbiBidWlsZEVudHJ5U25hcHNob3QoXG4gICAgZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+LFxuICApOiBSb3V0ZXJFbnRyeVNuYXBzaG90IHtcbiAgICBjb25zdCBwcmVwYXJlZFNlZ21lbnRzID0gZW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IHNlZ21lbnQucGF0aCxcbiAgICAgICAgZnVsbFBhdGg6IHNlZ21lbnQuZnVsbFBhdGgsXG4gICAgICAgIHNlZ21lbnRJbmRleDogc2VnbWVudC5zZWdtZW50SW5kZXgsXG4gICAgICAgIHByZXBhcmVkUmVzb3VyY2U6IHNlZ21lbnQucHJlcGFyZWRSZXNvdXJjZSxcbiAgICAgICAgcmVkaXJlY3RUbzogc2VnbWVudC5yZWRpcmVjdFRvLFxuICAgICAgICBoaWdobGlnaHRJZDogc2VnbWVudC5oaWdobGlnaHRJZCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IHNlZ21lbnQucXVlcnlTY2hlbWEsXG4gICAgICAgIHByZXBhcmVkU3RhdHVzOiBzZWdtZW50LnByZXBhcmVkUmVzb3VyY2U/LmdldFN0YXR1cygpLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oZW50cnkubG9jYXRpb24pLFxuICAgICAgcm91dGVQYXRoOiByZWFkTWF0Y2hlZFJvdXRlUGF0aChlbnRyeSksXG4gICAgICBwcmVwYXJlZE1hdGNoOiB7XG4gICAgICAgIHNlZ21lbnRzOiBwcmVwYXJlZFNlZ21lbnRzLFxuICAgICAgICByb3V0ZXM6IHByZXBhcmVkU2VnbWVudHMsXG4gICAgICB9LFxuICAgICAgZmlsdGVyczogZW50cnkuZmlsdGVycyxcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzOiBlbnRyeS5maWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBlbnRyeS5hY3RpdmVRdWVyeVNjaGVtYSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIE5vdGlmaWVzIGluc3RydW1lbnRhdGlvbnMgb2YgYSBuZXcgYWN0aXZlIGVudHJ5LiAqL1xuICBmdW5jdGlvbiBub3RpZnlFbnRyeShlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4pOiB2b2lkIHtcbiAgICByZWdpc3RyeS5ub3RpZnlFbnRyeUNoYW5nZShidWlsZEVudHJ5U25hcHNob3QoZW50cnkpKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgZGVkdXBsaWNhdGlvbiBrZXkgZm9yIHByZWxvYWQgZXZlbnRzLiAqL1xuICBmdW5jdGlvbiBidWlsZFByZWxvYWRLZXkoXG4gICAgbW9kZTogUm91dGVyUHJlbG9hZE1vZGVWYWx1ZSxcbiAgICBwYXRobmFtZTogc3RyaW5nLFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHttb2RlfToke3BhdGhuYW1lfWA7XG4gIH1cblxuICAvKiogRW1pdHMgYSBwcmVsb2FkIG9yIHByZWxvYWQtY29kZSBpbnN0cnVtZW50YXRpb24gZXZlbnQuICovXG4gIGZ1bmN0aW9uIGVtaXRQcmVsb2FkRXZlbnQoXG4gICAgbW9kZTogJ2NvZGUnIHwgJ2Z1bGwnLFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkUHJlbG9hZEtleShtb2RlLCBwYXRobmFtZSk7XG4gICAgY29uc3QgcmVjZW50bHlSZWNvcmRlZCA9XG4gICAgICBsYXN0UHJlbG9hZFNpZ25hdHVyZSAhPT0gbnVsbCAmJlxuICAgICAgbGFzdFByZWxvYWRTaWduYXR1cmUua2V5ID09PSBrZXkgJiZcbiAgICAgIG5vdyAtIGxhc3RQcmVsb2FkU2lnbmF0dXJlLnRpbWVzdGFtcCA8IDUwO1xuXG4gICAgaWYgKCFyZWNlbnRseVJlY29yZGVkKSB7XG4gICAgICBlbWl0RXZlbnQoe1xuICAgICAgICBraW5kOiAncHJlbG9hZCcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wOiBub3csXG4gICAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uKSxcbiAgICAgICAgdGFyZ2V0UGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBtb2RlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGFzdFByZWxvYWRTaWduYXR1cmUgPSB7IGtleSwgdGltZXN0YW1wOiBub3cgfTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIGhpc3RvcnkgbXV0YXRpb24gZXZlbnQgKHB1c2gvcmVwbGFjZS9ub3JtYWxpemUpLiAqL1xuICBmdW5jdGlvbiBlbWl0SGlzdG9yeUV2ZW50KFxuICAgIGFjdGlvbjogUm91dGVySGlzdG9yeUFjdGlvblZhbHVlLFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogc3RyaW5nOyBzZWFyY2g/OiBzdHJpbmc7IGhhc2g/OiBzdHJpbmcgfSxcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luID0gc291cmNlO1xuICAgIGVtaXRFdmVudCh7XG4gICAgICBraW5kOiAnaGlzdG9yeScsXG4gICAgICBzb3VyY2UsXG4gICAgICBhY3Rpb24sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb24pLFxuICAgICAgZGV0YWlscyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZmxhdCBsaXN0IG9mIHJvdXRlcyBmb3IgZWZmaWNpZW50IG1hdGNoaW5nXG4gIGNvbnN0IGZsYXRSb3V0ZXMgPSBidWlsZFJvdXRlcyhyb3V0ZXMpO1xuXG4gIC8vIEZpbmQgdGhlIGluaXRpYWwgcm91dGUgbWF0Y2ggYW5kIHByZXBhcmUgaXQgZm9yIHJlbmRlcmluZ1xuICBjb25zdCByb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgY29uc3QgaW5pdGlhbFVuaWZpZWRTY2hlbWEgPSByZWFkQWN0aXZlUXVlcnlTY2hlbWEocm91dGUpO1xuICBjb25zdCBpbml0aWFsU2VhcmNoU3RhdGUgPSBwYXJzZVNlYXJjaFN0YXRlKFxuICAgIGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICApO1xuICBjb25zdCBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMgPSBub3JtYWxpemVQYWdlRmlsdGVycyhcbiAgICBpbml0aWFsU2VhcmNoU3RhdGUuZmlsdGVycyxcbiAgKTtcbiAgY29uc3QgaW5pdGlhbExvY2F0aW9uU25hcHNob3QgPSBub3JtYWxpemVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uKTtcbiAgbGV0IGluaXRpYWxJbnN0cnVtZW50YXRpb246XG4gICAgfCB7XG4gICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgbG9jYXRpb246IFJvdXRlckxvY2F0aW9uU25hcHNob3Q7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgaW5pdGlhbEluc3RydW1lbnRhdGlvbiA9IHtcbiAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgZW1pdEV2ZW50KGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBzb3VyY2U6IGxhc3ROYXZpZ2F0aW9uT3JpZ2luLFxuICAgICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvblNuYXBzaG90LFxuICAgIH07XG4gIH1cbiAgY29uc3QgaW5pdGlhbENvbnRleHQgPSByZXNvbHZlQ29udGV4dCgpO1xuICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKFxuICAgIHJvdXRlLFxuICAgIGJ1aWxkUHJlcGFyZVF1ZXJ5SW5wdXQoXG4gICAgICB7XG4gICAgICAgIC4uLmluaXRpYWxTZWFyY2hTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICB9LFxuICAgICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gICAgKSxcbiAgICBpbml0aWFsSW5zdHJ1bWVudGF0aW9uLFxuICAgIGluaXRpYWxDb250ZXh0LFxuICApO1xuICAvLyBIZWxwZXIgdG8gYnVpbGQgdGhlIHJhdyBxdWVyeSBvYmplY3QgZnJvbSBhIHNlYXJjaCBzdHJpbmdcbiAgbGV0IGN1cnJlbnRFbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4gPSB7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICBjb250ZXh0OiBpbml0aWFsQ29udGV4dCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsU2VhcmNoU3RhdGUucXVlcnksXG4gICAgLy8gdHlwZWRRdWVyeSByZW1vdmVkICh1bmlmaWVkIGludG8gZmlsdGVycy9xdWVyeSlcbiAgICBmaWx0ZXJzOiBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyxcbiAgICBmaWx0ZXJEaWFnbm9zdGljczogaW5pdGlhbFNlYXJjaFN0YXRlLmZpbHRlckRpYWdub3N0aWNzLFxuICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgfTtcblxuICAvLyBJbml0aWFsIG5vcm1hbGl6YXRpb24gcGFzcyAoZS5nLiwgY2xhbXAgcGFnZSlcbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRJbml0aWFsRmlsdGVycy5ub3JtYWxpemVkICYmXG4gICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgIT0gbnVsbCAmJlxuICAgIG5vcm1hbGl6ZWRJbml0aWFsRmlsdGVycy5maWx0ZXJzICE9IG51bGxcbiAgKSB7XG4gICAgY3VycmVudEVudHJ5LmZpbHRlcnMgPSBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycztcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICBmaWx0ZXJzOiBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyxcbiAgICAgIHF1ZXJ5OiBpbml0aWFsU2VhcmNoU3RhdGUucXVlcnksXG4gICAgICBxdWVyeVNjaGVtYTogaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gICAgfSk7IC8vIHJldHVybnMgJycgb3Igc3RyaW5nIHN0YXJ0aW5nIHdpdGggJz8nXG4gICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICBlbWl0SGlzdG9yeUV2ZW50KFxuICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICAgICAgaGFzaDogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHsgcmVhc29uOiAnaW5pdGlhbC1wYWdlLWNsYW1wJyB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZURlYnVnQ29udGV4dDogSGlzdG9yeURlYnVnQ29udGV4dCA9IHtcbiAgICAgICAgb3JpZ2luOiAnbm9ybWFsaXplJyxcbiAgICAgICAgdHJpZ2dlcjogJ25vcm1hbGl6ZScsXG4gICAgICB9O1xuICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgZGVidWdDb250ZXh0OiBub3JtYWxpemVEZWJ1Z0NvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIC8vIFVwZGF0ZSBjdXJyZW50RW50cnkubG9jYXRpb24gdG8gcmVmbGVjdCBuZXcgc2VhcmNoIGRpcmVjdGx5IChoaXN0b3J5LnNldCB0cmlnZ2VycyBhc3luYyBzdWJzY3JpYmVyKVxuICAgICAgY3VycmVudEVudHJ5ID0ge1xuICAgICAgICAuLi5jdXJyZW50RW50cnksXG4gICAgICAgIGxvY2F0aW9uOiB7IC4uLmN1cnJlbnRFbnRyeS5sb2NhdGlvbiwgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoIH0sXG4gICAgICAgIHJhd1NlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbm90aWZ5RW50cnkoY3VycmVudEVudHJ5KTtcbiAgZW1pdEV2ZW50KHtcbiAgICBraW5kOiAnc25hcHNob3QnLFxuICAgIHNvdXJjZTogbGFzdE5hdmlnYXRpb25PcmlnaW4sXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihjdXJyZW50RW50cnkubG9jYXRpb24pLFxuICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgoY3VycmVudEVudHJ5KSxcbiAgfSk7XG5cbiAgLy8gTWFpbnRhaW4gYSBzZXQgb2Ygc3Vic2NyaWJlcnMgdG8gdGhlIGFjdGl2ZSByb3V0ZSBlbnRyeVxuICBsZXQgbmV4dElkID0gMDtcbiAgY29uc3Qgc3Vic2NyaWJlcnMgPSBuZXcgTWFwPFxuICAgIG51bWJlcixcbiAgICBTdWJzY3JpYmVDYWxsYmFjazxQYXJhbURhdGEsIFJvdXRlclF1ZXJ5U2NoZW1hLCBUQ29udGV4dD5cbiAgPigpO1xuXG4gIC8vIExpc3RlbiBmb3IgbG9jYXRpb24gY2hhbmdlcywgbWF0Y2ggdG8gdGhlIHJvdXRlIGVudHJ5LCBwcmVwYXJlIHRoZSBlbnRyeSxcbiAgLy8gYW5kIG5vdGlmeSBzdWJzY3JpYmVycy4gVGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgZGlzcG9zZUhpc3RvcnkgPSBoaXN0b3J5LnN1YnNjcmliZShcbiAgICAobG9jYXRpb24sIGZvcmNlUmVyZW5kZXIsIGRlYnVnQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luID0gcmVzb2x2ZU5hdmlnYXRpb25PcmlnaW4oZGVidWdDb250ZXh0KTtcbiAgICAgIGxhc3ROYXZpZ2F0aW9uT3JpZ2luID0gb3JpZ2luO1xuICAgICAgY29uc3QgbG9jYXRpb25QYXlsb2FkID0gbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBkZWJ1Z0NvbnRleHRPcmlnaW4gPSBkZWJ1Z0NvbnRleHQ/Lm9yaWdpbjtcbiAgICAgIGlmIChkZWJ1Z0NvbnRleHRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgaGlzdG9yeURldGFpbHM6IHsgaGlzdG9yeUluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWJ1Z0NvbnRleHQ/Lmhpc3RvcnlJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoaXN0b3J5RGV0YWlscyA9IHsgaGlzdG9yeUluZGV4OiBkZWJ1Z0NvbnRleHQuaGlzdG9yeUluZGV4IH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtYmFjaycgfHxcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1mb3J3YXJkJyB8fFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLXVua25vd24nIHx8XG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBkaXJlY3Rpb246ICdiYWNrJyB8ICdmb3J3YXJkJyB8ICd1bmtub3duJyA9ICd1bmtub3duJztcbiAgICAgICAgICBpZiAoZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtYmFjaycpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdiYWNrJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWZvcndhcmQnKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAnZm9yd2FyZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgICAgICBraW5kOiAncG9wc3RhdGUnLFxuICAgICAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25QYXlsb2FkLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgZGV0YWlsczogaGlzdG9yeURldGFpbHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2FtZVBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIGNvbnN0IHNhbWVTZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggPT09IGN1cnJlbnRFbnRyeS5yYXdTZWFyY2g7XG5cbiAgICAgIGlmICghZm9yY2VSZXJlbmRlciAmJiBzYW1lUGF0aG5hbWUgJiYgc2FtZVNlYXJjaCkge1xuICAgICAgICAvLyBOb3RoaW5nIGNoYW5nZWQgdGhhdCB3ZSBjYXJlIGFib3V0XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dENvbnRleHQgPSByZXNvbHZlQ29udGV4dCgpO1xuXG4gICAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCB3ZSBzdGlsbCB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlLlxuICAgICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgICAgbGV0IG5leHRSb3V0ZSA9IGN1cnJlbnRFbnRyeS5yb3V0ZTtcblxuICAgICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGxvY2F0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgcmF3IHF1ZXJ5IG9iamVjdCAoYmFzaWMgYWdncmVnYXRpb24pIGZyb20gbG9jYXRpb24uc2VhcmNoXG4gICAgICBjb25zdCBxdWVyeVNjaGVtYSA9IHJlYWRBY3RpdmVRdWVyeVNjaGVtYShuZXh0Um91dGUpO1xuICAgICAgY29uc3QgcGFyc2VkU2VhcmNoU3RhdGUgPSBwYXJzZVNlYXJjaFN0YXRlKGxvY2F0aW9uLnNlYXJjaCwgcXVlcnlTY2hlbWEpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlcnMgPSBub3JtYWxpemVQYWdlRmlsdGVycyhwYXJzZWRTZWFyY2hTdGF0ZS5maWx0ZXJzKTtcblxuICAgICAgY29uc3Qgc2hvdWxkUmVwcmVwYXJlID0gc2hvdWxkUHJlcGFyZU9uTmF2aWdhdGlvbih7XG4gICAgICAgIHNhbWVQYXRobmFtZSxcbiAgICAgICAgc2FtZVNlYXJjaCxcbiAgICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2hvdWxkUmVwcmVwYXJlKSB7XG4gICAgICAgIGxldCB1cGRhdGVJbnN0cnVtZW50YXRpb246XG4gICAgICAgICAgfCB7XG4gICAgICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgICAgICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgICAgICAgbG9jYXRpb246IFJvdXRlckxvY2F0aW9uU25hcHNob3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChuZXh0Um91dGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUluc3RydW1lbnRhdGlvbiA9IHtcbiAgICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgZW1pdEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3VyY2U6IG9yaWdpbixcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblBheWxvYWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0UHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChcbiAgICAgICAgICBuZXh0Um91dGUsXG4gICAgICAgICAgYnVpbGRQcmVwYXJlUXVlcnlJbnB1dChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ucGFyc2VkU2VhcmNoU3RhdGUsXG4gICAgICAgICAgICAgIGZpbHRlcnM6IG5vcm1hbGl6ZWRGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcXVlcnlTY2hlbWEsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB1cGRhdGVJbnN0cnVtZW50YXRpb24sXG4gICAgICAgICAgbmV4dENvbnRleHQsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4gPSB7XG4gICAgICAgIGZvcmNlUmVyZW5kZXI6IGZvcmNlUmVyZW5kZXIgfHwgKHNhbWVQYXRobmFtZSAmJiAhc2FtZVNlYXJjaCksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgICBwcmVwYXJlZE1hdGNoOiBuZXh0UHJlcGFyZWRNYXRjaCxcbiAgICAgICAgY29udGV4dDogbmV4dENvbnRleHQsXG4gICAgICAgIHJhd1NlYXJjaDogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgICBxdWVyeTogcGFyc2VkU2VhcmNoU3RhdGUucXVlcnksXG4gICAgICAgIGZpbHRlcnM6IG5vcm1hbGl6ZWRGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICAgIGZpbHRlckRpYWdub3N0aWNzOiBwYXJzZWRTZWFyY2hTdGF0ZS5maWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgICAgYWN0aXZlUXVlcnlTY2hlbWE6IHF1ZXJ5U2NoZW1hLFxuICAgICAgfTtcblxuICAgICAgLy8gSWYgbm9ybWFsaXphdGlvbiBjaGFuZ2VkIHRoZSB0eXBlZCBxdWVyeSB3ZSB0cmlnZ2VyIGEgcmVwbGFjZSB3aXRoIG5vcm1hbGl6ZWQgc2VhcmNoXG4gICAgICBpZiAobm9ybWFsaXplZEZpbHRlcnMubm9ybWFsaXplZCAmJiBxdWVyeVNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkRmlsdGVycy5maWx0ZXJzLFxuICAgICAgICAgIHF1ZXJ5OiBwYXJzZWRTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgICAgICBxdWVyeVNjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBsb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgICAgICBsZXQgbmV4dFNlYXJjaFN0ciA9IG5vcm1hbGl6ZWRTZWFyY2g7XG4gICAgICAgICAgaWYgKCFuZXh0U2VhcmNoU3RyLnN0YXJ0c1dpdGgoJz8nKSAmJiBuZXh0U2VhcmNoU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG5leHRTZWFyY2hTdHIgPSBgPyR7bmV4dFNlYXJjaFN0cn1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbWl0SGlzdG9yeUV2ZW50KFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgICBzZWFyY2g6IG5leHRTZWFyY2hTdHIsXG4gICAgICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgcmVhc29uOiAncnVudGltZS1wYWdlLWNsYW1wJyB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcnVudGltZU5vcm1hbGl6ZUNvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgICAgICBvcmlnaW46ICdub3JtYWxpemUnLFxuICAgICAgICAgICAgdHJpZ2dlcjogJ25vcm1hbGl6ZScsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICBzZWFyY2g6IG5leHRTZWFyY2hTdHIsXG4gICAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgICAgIGRlYnVnQ29udGV4dDogcnVudGltZU5vcm1hbGl6ZUNvbnRleHQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuOyAvLyBlYXJseTogc3Vic2VxdWVudCBzZXQgd2lsbCB0cmlnZ2VyIHJlcnVuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGN1cnJlbnQgZW50cnkgYW5kIG5vdGlmeSBhbGwgc3Vic2NyaWJlcnNcbiAgICAgIGN1cnJlbnRFbnRyeSA9IG5leHRFbnRyeTtcbiAgICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKG5leHRFbnRyeSk7XG4gICAgICB9KTtcbiAgICAgIG5vdGlmeUVudHJ5KG5leHRFbnRyeSk7XG4gICAgICBlbWl0RXZlbnQoe1xuICAgICAgICBraW5kOiAnc25hcHNob3QnLFxuICAgICAgICBzb3VyY2U6IG9yaWdpbixcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25QYXlsb2FkLFxuICAgICAgICByb3V0ZVBhdGg6IHJlYWRNYXRjaGVkUm91dGVQYXRoKG5leHRFbnRyeSksXG4gICAgICB9KTtcbiAgICB9LFxuICApO1xuXG4gIC8qKiBOb3JtYWxpemVzIHVzZXItcHJvdmlkZWQgcHJlbG9hZCB0YXJnZXRzIGludG8gY29uc2lzdGVudCBzdHJ1Y3R1cmVzLiAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVQcmVsb2FkVGFyZ2V0KHRhcmdldDogUHJlbG9hZFRhcmdldCk6IHtcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgfSB7XG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRobmFtZSA9IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQucGF0aG5hbWUgPT09ICdzdHJpbmcnICYmIHRhcmdldC5wYXRobmFtZS5sZW5ndGggPiAwKSB7XG4gICAgICBub3JtYWxpemVkUGF0aG5hbWUgPSB0YXJnZXQucGF0aG5hbWU7XG4gICAgfVxuXG4gICAgbGV0IG5vcm1hbGl6ZWRTZWFyY2ggPSAnJztcbiAgICBpZiAodHlwZW9mIHRhcmdldC5zZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICBub3JtYWxpemVkU2VhcmNoID0gdGFyZ2V0LnNlYXJjaDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZFNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdwcm9ncmFtbWF0aWMnO1xuICAgIGNvbnN0IG1hcHBlZFNvdXJjZSA9IG1hcE9yaWdpbih0YXJnZXQuc291cmNlKTtcbiAgICBpZiAobWFwcGVkU291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vcm1hbGl6ZWRTb3VyY2UgPSBtYXBwZWRTb3VyY2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRobmFtZTogbm9ybWFsaXplZFBhdGhuYW1lLFxuICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgc291cmNlOiBub3JtYWxpemVkU291cmNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJlcGFyZWQgdmFsdWUgZm9yIHRoZSBmaXJzdCBhY3RpdmUgc2VnbWVudCBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSb3V0ZSBzZWdtZW50IHBhdGggb3IgZnVsbCBwYXRoIHRvIGluc3BlY3QuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRQcmVwYXJlZChwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cnkgPSBjdXJyZW50RW50cnk7XG4gICAgICBmb3IgKGNvbnN0IHByZXBhcmVkUm91dGUgb2YgZW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50cykge1xuICAgICAgICBpZiAocHJlcGFyZWRSb3V0ZS5wYXRoID09PSBwYXRoIHx8IHByZXBhcmVkUm91dGUuZnVsbFBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gcHJlcGFyZWRSb3V0ZS5wcmVwYXJlZFJlc291cmNlPy5nZXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXZlcnkgYWN0aXZlIHByZXBhcmVkIHNlZ21lbnQgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gUm91dGUgc2VnbWVudCBwYXRoIG9yIGZ1bGwgcGF0aCB0byBpbnNwZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJlcGFyZWRTZWdtZW50cyhwYXRoOiBzdHJpbmcpOiBQcmVwYXJlZFJvdXRlU2VnbWVudFNuYXBzaG90W10ge1xuICAgIHJldHVybiBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50c1xuICAgICAgLmZpbHRlcigocHJlcGFyZWRSb3V0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJlcGFyZWRSb3V0ZS5wYXRoID09PSBwYXRoIHx8IHByZXBhcmVkUm91dGUuZnVsbFBhdGggPT09IHBhdGg7XG4gICAgICB9KVxuICAgICAgLm1hcCgocHJlcGFyZWRSb3V0ZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhdGg6IHByZXBhcmVkUm91dGUucGF0aCxcbiAgICAgICAgICBmdWxsUGF0aDogcHJlcGFyZWRSb3V0ZS5mdWxsUGF0aCxcbiAgICAgICAgICBzZWdtZW50SW5kZXg6IHByZXBhcmVkUm91dGUuc2VnbWVudEluZGV4LFxuICAgICAgICAgIHByZXBhcmVkUmVzb3VyY2U6IHByZXBhcmVkUm91dGUucHJlcGFyZWRSZXNvdXJjZSxcbiAgICAgICAgICByZWRpcmVjdFRvOiBwcmVwYXJlZFJvdXRlLnJlZGlyZWN0VG8sXG4gICAgICAgICAgcmVzb3VyY2VQYWdlOiBwcmVwYXJlZFJvdXRlLnJlc291cmNlUGFnZSxcbiAgICAgICAgICBoaWdobGlnaHRJZDogcHJlcGFyZWRSb3V0ZS5oaWdobGlnaHRJZCxcbiAgICAgICAgICBxdWVyeVNjaGVtYTogcHJlcGFyZWRSb3V0ZS5xdWVyeVNjaGVtYSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gVGhlIHJvdXRlciBjb250ZXh0IG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIFJlYWN0IENvbnRleHRcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBoaXN0b3J5LFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50cnk7XG4gICAgfSxcbiAgICBwcmVsb2FkQ29kZSh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQcmVsb2FkVGFyZ2V0KHRhcmdldCk7XG4gICAgICBlbWl0UHJlbG9hZEV2ZW50KCdjb2RlJywgbm9ybWFsaXplZC5wYXRobmFtZSwgbm9ybWFsaXplZC5zb3VyY2UpO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJlbG9hZFRhcmdldCh0YXJnZXQpO1xuICAgICAgZW1pdFByZWxvYWRFdmVudCgnZnVsbCcsIG5vcm1hbGl6ZWQucGF0aG5hbWUsIG5vcm1hbGl6ZWQuc291cmNlKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25TbmFwc2hvdDogUm91dGVyTG9jYXRpb25TbmFwc2hvdCA9IHtcbiAgICAgICAgcGF0aG5hbWU6IG5vcm1hbGl6ZWQucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgfTtcbiAgICAgIGxldCBpbnN0cnVtZW50YXRpb246XG4gICAgICAgIHwge1xuICAgICAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgICAgICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKSB7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbiA9IHtcbiAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc291cmNlOiBub3JtYWxpemVkLnNvdXJjZSxcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25TbmFwc2hvdCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZWxvYWRDb250ZXh0ID0gcmVzb2x2ZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHByZWxvYWRRdWVyeVNjaGVtYSA9IHJlYWRBY3RpdmVRdWVyeVNjaGVtYShtYXRjaGVzKTtcbiAgICAgIGNvbnN0IHByZWxvYWRTZWFyY2hTdGF0ZSA9IHBhcnNlU2VhcmNoU3RhdGUoXG4gICAgICAgIG5vcm1hbGl6ZWQuc2VhcmNoLFxuICAgICAgICBwcmVsb2FkUXVlcnlTY2hlbWEsXG4gICAgICApO1xuICAgICAgY29uc3QgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChcbiAgICAgICAgbWF0Y2hlcyxcbiAgICAgICAgYnVpbGRQcmVwYXJlUXVlcnlJbnB1dChwcmVsb2FkU2VhcmNoU3RhdGUsIHByZWxvYWRRdWVyeVNjaGVtYSksXG4gICAgICAgIGluc3RydW1lbnRhdGlvbixcbiAgICAgICAgcHJlbG9hZENvbnRleHQsXG4gICAgICApO1xuICAgICAgcHJlcGFyZWRNYXRjaC5zZWdtZW50cy5mb3JFYWNoKChyb3V0ZSkgPT4ge1xuICAgICAgICBpZiAocm91dGUucHJlcGFyZWRSZXNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICAgIHJvdXRlLnByZXBhcmVkUmVzb3VyY2UubG9hZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbmV4dElkICs9IDE7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZDtcbiAgICAgIC8qKiBSZW1vdmVzIHRoZSBzdWJzY3JpYmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB2aWEgc3Vic2NyaWJlLiAqL1xuICAgICAgZnVuY3Rpb24gZGlzcG9zZUNhbGxiYWNrKCkge1xuICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgc3Vic2NyaWJlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZGlzcG9zZUNhbGxiYWNrO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoe1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnM6IG5hdkZpbHRlcnMsXG4gICAgICByZXBsYWNlLFxuICAgIH06IHtcbiAgICAgIHBhdGhuYW1lPzogc3RyaW5nO1xuICAgICAgcXVlcnk/OiBVbmtub3duUXVlcnlTaGFwZTtcbiAgICAgIGZpbHRlcnM/OiBVbmtub3duRmlsdGVycztcbiAgICAgIHJlcGxhY2U/OiBib29sZWFuO1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBjdXJyZW50RW50cnk7XG4gICAgICBsZXQgdGFyZ2V0UGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgIHRhcmdldFBhdGhuYW1lID8/PSBjdXJyZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuXG4gICAgICBjb25zdCBkZXN0aW5hdGlvblJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4uaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBsZXQgZGVzdFNjaGVtYSA9IHJlYWRBY3RpdmVRdWVyeVNjaGVtYShkZXN0aW5hdGlvblJvdXRlKTtcbiAgICAgIGRlc3RTY2hlbWEgPSBkZXN0U2NoZW1hID8/IGN1cnJlbnQuYWN0aXZlUXVlcnlTY2hlbWE7XG5cbiAgICAgIGNvbnN0IGhhc1NjaGVtYSA9IGRlc3RTY2hlbWEgIT0gbnVsbDtcbiAgICAgIGNvbnN0IHVzZVF1ZXJ5QXNGaWx0ZXJzID1cbiAgICAgICAgbmF2RmlsdGVycyA9PSBudWxsICYmXG4gICAgICAgIGhhc1NjaGVtYSAmJlxuICAgICAgICBxdWVyeSAhPSBudWxsICYmXG4gICAgICAgIGxvb2tzTGlrZUZpbHRlcnMocXVlcnkpO1xuICAgICAgbGV0IGZpbHRlcnNJbnB1dCA9IG5hdkZpbHRlcnM7XG4gICAgICBpZiAoZmlsdGVyc0lucHV0ID09IG51bGwpIHtcbiAgICAgICAgaWYgKHVzZVF1ZXJ5QXNGaWx0ZXJzKSB7XG4gICAgICAgICAgZmlsdGVyc0lucHV0ID0gcXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyc0lucHV0ID0gY3VycmVudC5maWx0ZXJzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgcmF3UXVlcnlJbnB1dDogVW5rbm93blF1ZXJ5U2hhcGUgfCBSYXdRdWVyeSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh1c2VRdWVyeUFzRmlsdGVycykge1xuICAgICAgICByYXdRdWVyeUlucHV0ID0gY3VycmVudC5xdWVyeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhd1F1ZXJ5SW5wdXQgPSBxdWVyeSA/PyBjdXJyZW50LnF1ZXJ5O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnk6IHJhd1F1ZXJ5SW5wdXQsXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBkZXN0U2NoZW1hLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2NhdGlvbk9iaiA9IHsgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLCBzZWFyY2gsIGhhc2g6ICcnIH07XG4gICAgICBjb25zdCBvcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgPSAncHJvZ3JhbW1hdGljJztcbiAgICAgIGNvbnN0IGRlYnVnQ29udGV4dDogSGlzdG9yeURlYnVnQ29udGV4dCA9IHtcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZXBsYWNlID09PSB0cnVlKSB7XG4gICAgICAgIGVtaXRIaXN0b3J5RXZlbnQoJ3JlcGxhY2UnLCBvcmlnaW4sIGxvY2F0aW9uT2JqLCB7XG4gICAgICAgICAgdHJpZ2dlcjogJ3Byb2dyYW1tYXRpYycsXG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgLi4ubG9jYXRpb25PYmosXG4gICAgICAgICAgZGVidWdDb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXRIaXN0b3J5RXZlbnQoJ3B1c2gnLCBvcmlnaW4sIGxvY2F0aW9uT2JqLCB7XG4gICAgICAgICAgdHJpZ2dlcjogJ3Byb2dyYW1tYXRpYycsXG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICAgIC4uLmxvY2F0aW9uT2JqLFxuICAgICAgICAgIGRlYnVnQ29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQcmVwYXJlZCxcbiAgICBnZXRQcmVwYXJlZFNlZ21lbnRzLFxuICB9IGFzIENyZWF0ZVJvdXRlclJldHVybjxUQ29udGV4dCwgUj5bJ2NvbnRleHQnXTtcblxuICAvKiogUmVsZWFzZXMgcm91dGVyIHJlc291cmNlcyBhbmQgZGV0YWNoZXMgYWxsIGluc3RydW1lbnRhdGlvbnMuICovXG4gIGZ1bmN0aW9uIGNsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHJvdXRlckRpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJvdXRlckRpc3Bvc2VkID0gdHJ1ZTtcbiAgICBkaXNwb3NlSGlzdG9yeSgpO1xuICAgIGhpc3RvcnkuZGlzcG9zZSgpO1xuICAgIHN1YnNjcmliZXJzLmNsZWFyKCk7XG4gICAgcmVnaXN0cnkuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUmV0dXJuIGJvdGggdGhlIGNvbnRleHQgb2JqZWN0IGFuZCBhIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuIHsgY29udGV4dCwgY2xlYW51cCB9O1xufVxuIl19
630
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFnQm5FLE9BQU8sRUFDTCw2QkFBNkIsR0FNOUIsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBR3pCLE1BQU0sY0FBYyxDQUFDO0FBa0J0QixTQUFTLHlCQUF5QixDQUFDLEtBSWxDO0lBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3RELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLHFCQUFxQixLQUFLLE1BQU0sQ0FBQztJQUN6RSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUEwRUQsTUFBTSxDQUFDLE9BQU8sVUFBVSxZQUFZLENBSWxDLE1BQTJCLEVBQzNCLFVBQXlDLEVBQUU7SUFHM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUVyQyxNQUFNLFFBQVEsR0FBRyw2QkFBNkIsQ0FDNUMsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FDL0IsQ0FBQztJQUVGLElBQUksYUFBbUMsQ0FBQztJQUN4QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDMUMsYUFBYSxHQUFJLE9BQU8sQ0FBQyxPQUEwQixFQUFFLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYztRQUNyQixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sYUFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSx1QkFBMkQsQ0FBQztJQUNoRSxJQUFJLG9CQUFvQixHQUEyQixVQUFVLENBQUM7SUFDOUQsSUFBSSxvQkFBb0IsR0FHYixJQUFJLENBQUM7SUFDaEIsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBSzNCLFNBQVMsaUJBQWlCLENBQUMsUUFJMUI7UUFDQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFHRCxTQUFTLFNBQVMsQ0FBQyxLQUFrQjtRQUNuQyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBS0QsU0FBUyxTQUFTLENBQUMsR0FBWTtRQUM3QixJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFTLGdCQUFnQixDQUFDLENBQUM7SUFHMUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ3RDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEtBQWdDLENBQUM7UUFDaEQsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFDRSxVQUFVLElBQUksSUFBSTtnQkFDbEIsT0FBTyxVQUFVLEtBQUssUUFBUTtnQkFDOUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUMxQixDQUFDO2dCQUNELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUMxQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDN0IsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFNRCxTQUFTLHVCQUF1QixDQUM5QixPQUFvQztRQUVwQyxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztRQUMvQyxJQUFJLE1BQTBDLENBQUM7UUFFL0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUN0QyxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxNQUFNLEtBQUssY0FBYyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxVQUFVLENBQUM7UUFDdEIsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFNRCxTQUFTLG9CQUFvQixDQUMzQixLQUE2QztRQUU3QyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDOUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLGVBQWUsR0FBRyxTQUFvQyxDQUFDO2dCQUM3RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUN2QyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNsQyxPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUdELFNBQVMscUJBQXFCLENBQzVCLEtBQTBDO1FBRTFDLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixNQUFjLEVBQ2QsV0FBOEI7UUFFOUIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNqRCxPQUFPO1lBQ0wsS0FBSztZQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsV0FBVztTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsYUFBYSxDQUFDLE9BQXdCO1FBQzdDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELElBQ0UsT0FBTyxJQUFJLElBQUk7WUFDZixPQUFPLE9BQU8sS0FBSyxRQUFRO1lBQzNCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdkIsT0FBUSxPQUE0QixDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQ3BELENBQUM7WUFDRCxPQUFRLE9BQTBCLENBQUMsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBR0QsU0FBUyxvQkFBb0IsQ0FBQyxPQUF3QjtRQUlwRCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNELE9BQU87Z0JBQ0wsT0FBTztnQkFDUCxVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxPQUFPO2dCQUNWLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7YUFDaEI7WUFDRCxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsc0JBQXNCLENBQzdCLEtBQXdCLEVBQ3hCLFdBQThCO1FBRTlCLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBR0QsU0FBUyxrQkFBa0IsQ0FDekIsS0FBaUM7UUFFakMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwRSxPQUFPO2dCQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dCQUMxQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7Z0JBQ2xDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7Z0JBQzFDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2dCQUNoQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLGNBQWMsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFO2FBQ3RELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxRQUFRLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMzQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3RDLGFBQWEsRUFBRTtnQkFDYixRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixNQUFNLEVBQUUsZ0JBQWdCO2FBQ3pCO1lBQ0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsV0FBVyxDQUFDLEtBQWlDO1FBQ3BELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FDdEIsSUFBNEIsRUFDNUIsUUFBZ0I7UUFFaEIsT0FBTyxHQUFHLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBR0QsU0FBUyxnQkFBZ0IsQ0FDdkIsSUFBcUIsRUFDckIsUUFBZ0IsRUFDaEIsTUFBOEI7UUFFOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsTUFBTSxnQkFBZ0IsR0FDcEIsb0JBQW9CLEtBQUssSUFBSTtZQUM3QixvQkFBb0IsQ0FBQyxHQUFHLEtBQUssR0FBRztZQUNoQyxHQUFHLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUU1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixTQUFTLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsTUFBTTtnQkFDTixTQUFTLEVBQUUsR0FBRztnQkFDZCxRQUFRLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDN0MsY0FBYyxFQUFFLFFBQVE7Z0JBQ3hCLElBQUk7YUFDTCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixNQUFnQyxFQUNoQyxNQUE4QixFQUM5QixRQUE4RCxFQUM5RCxPQUFpQztRQUVqQyx1QkFBdUIsR0FBRyxNQUFNLENBQUM7UUFDakMsU0FBUyxDQUFDO1lBQ1IsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNO1lBQ04sTUFBTTtZQUNOLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDckMsT0FBTztTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFHdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUN6QyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFDdkIsb0JBQW9CLENBQ3JCLENBQUM7SUFDRixNQUFNLHdCQUF3QixHQUFHLG9CQUFvQixDQUNuRCxrQkFBa0IsQ0FBQyxPQUFPLENBQzNCLENBQUM7SUFDRixNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRSxJQUFJLHNCQU1TLENBQUM7SUFDZCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsR0FBRztZQUN2QixJQUFJLEVBQUUsQ0FBQyxLQUFrQixFQUFFLEVBQUU7Z0JBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsTUFBTSxFQUFFLG9CQUFvQjtZQUM1QixRQUFRLEVBQUUsdUJBQXVCO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDeEMsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUNoQyxLQUFLLEVBQ0wsc0JBQXNCLENBQ3BCO1FBQ0UsR0FBRyxrQkFBa0I7UUFDckIsT0FBTyxFQUFFLHdCQUF3QixDQUFDLE9BQU87S0FDMUMsRUFDRCxvQkFBb0IsQ0FDckIsRUFDRCxzQkFBc0IsRUFDdEIsY0FBYyxDQUNmLENBQUM7SUFFRixJQUFJLFlBQVksR0FBK0I7UUFDN0MsYUFBYSxFQUFFLEtBQUs7UUFDcEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLEtBQUs7UUFDTCxhQUFhO1FBQ2IsT0FBTyxFQUFFLGNBQWM7UUFDdkIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUNsQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSztRQUUvQixPQUFPLEVBQUUsd0JBQXdCLENBQUMsT0FBTztRQUN6QyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxpQkFBaUI7UUFDdkQsaUJBQWlCLEVBQUUsb0JBQW9CO0tBQ3hDLENBQUM7SUFHRixJQUNFLHdCQUF3QixDQUFDLFVBQVU7UUFDbkMsb0JBQW9CLElBQUksSUFBSTtRQUM1Qix3QkFBd0IsQ0FBQyxPQUFPLElBQUksSUFBSSxFQUN4QyxDQUFDO1FBQ0QsWUFBWSxDQUFDLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLENBQUM7UUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztZQUMzQyxPQUFPLEVBQUUsd0JBQXdCLENBQUMsT0FBTztZQUN6QyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSztZQUMvQixXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDLENBQUMsQ0FBQztRQUNILElBQUksZ0JBQWdCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxnQkFBZ0IsQ0FDZCxXQUFXLEVBQ1gsV0FBVyxFQUNYO2dCQUNFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ25DLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLElBQUksRUFBRSxFQUFFO2FBQ1QsRUFDRCxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUNqQyxDQUFDO1lBQ0YsTUFBTSxxQkFBcUIsR0FBd0I7Z0JBQ2pELE1BQU0sRUFBRSxXQUFXO2dCQUNuQixPQUFPLEVBQUUsV0FBVzthQUNyQixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRO2dCQUNuQyxNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixJQUFJLEVBQUUsRUFBRTtnQkFDUixZQUFZLEVBQUUscUJBQXFCO2FBQ3BDLENBQUMsQ0FBQztZQUVILFlBQVksR0FBRztnQkFDYixHQUFHLFlBQVk7Z0JBQ2YsUUFBUSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRTtnQkFDaEUsU0FBUyxFQUFFLGdCQUFnQjthQUM1QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUIsU0FBUyxDQUFDO1FBQ1IsSUFBSSxFQUFFLFVBQVU7UUFDaEIsTUFBTSxFQUFFLG9CQUFvQjtRQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNyQixRQUFRLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNsRCxTQUFTLEVBQUUsb0JBQW9CLENBQUMsWUFBWSxDQUFDO0tBQzlDLENBQUMsQ0FBQztJQUdILElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUd4QixDQUFDO0lBS0osTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FDdEMsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxFQUFFO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELG9CQUFvQixHQUFHLE1BQU0sQ0FBQztRQUM5QixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRCxNQUFNLGtCQUFrQixHQUFHLFlBQVksRUFBRSxNQUFNLENBQUM7UUFDaEQsSUFBSSxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLGNBQW9ELENBQUM7WUFDekQsSUFBSSxPQUFPLFlBQVksRUFBRSxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ25ELGNBQWMsR0FBRyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0QsQ0FBQztZQUVELElBQ0Usa0JBQWtCLEtBQUssZUFBZTtnQkFDdEMsa0JBQWtCLEtBQUssa0JBQWtCO2dCQUN6QyxrQkFBa0IsS0FBSyxrQkFBa0I7Z0JBQ3pDLGtCQUFrQixLQUFLLFVBQVUsRUFDakMsQ0FBQztnQkFDRCxJQUFJLFNBQVMsR0FBbUMsU0FBUyxDQUFDO2dCQUMxRCxJQUFJLGtCQUFrQixLQUFLLGVBQWUsRUFBRSxDQUFDO29CQUMzQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixDQUFDO3FCQUFNLElBQUksa0JBQWtCLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztvQkFDckQsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxTQUFTLENBQUM7b0JBQ1IsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE1BQU0sRUFBRSxNQUFNO29CQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNyQixRQUFRLEVBQUUsZUFBZTtvQkFDekIsU0FBUztvQkFDVCxPQUFPLEVBQUUsY0FBYztpQkFDeEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUU5RCxJQUFJLENBQUMsYUFBYSxJQUFJLFlBQVksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUVqRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBSXJDLElBQUksaUJBQWlCLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNuRCxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBRW5DLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixTQUFTLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBR0QsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckQsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUUsTUFBTSxlQUFlLEdBQUcseUJBQXlCLENBQUM7WUFDaEQsWUFBWTtZQUNaLFVBQVU7WUFDVixLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDLENBQUM7UUFFSCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUkscUJBTVMsQ0FBQztZQUNkLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QixxQkFBcUIsR0FBRztvQkFDdEIsSUFBSSxFQUFFLENBQUMsS0FBa0IsRUFBRSxFQUFFO3dCQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUM7b0JBQ0QsTUFBTSxFQUFFLE1BQU07b0JBQ2QsUUFBUSxFQUFFLGVBQWU7aUJBQzFCLENBQUM7WUFDSixDQUFDO1lBQ0QsaUJBQWlCLEdBQUcsWUFBWSxDQUM5QixTQUFTLEVBQ1Qsc0JBQXNCLENBQ3BCO2dCQUNFLEdBQUcsaUJBQWlCO2dCQUNwQixPQUFPLEVBQUUsaUJBQWlCLENBQUMsT0FBTzthQUNuQyxFQUNELFdBQVcsQ0FDWixFQUNELHFCQUFxQixFQUNyQixXQUFXLENBQ1osQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBK0I7WUFDNUMsYUFBYSxFQUFFLGFBQWEsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3RCxRQUFRO1lBQ1IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsYUFBYSxFQUFFLGlCQUFpQjtZQUNoQyxPQUFPLEVBQUUsV0FBVztZQUNwQixTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDMUIsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUs7WUFDOUIsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDbEMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCO1lBQ3RELGlCQUFpQixFQUFFLFdBQVc7U0FDL0IsQ0FBQztRQUdGLElBQUksaUJBQWlCLENBQUMsVUFBVSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4RCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO2dCQUMzQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsT0FBTztnQkFDbEMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUs7Z0JBQzlCLFdBQVc7YUFDWixDQUFDLENBQUM7WUFDSCxJQUFJLGdCQUFnQixLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9ELGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELGdCQUFnQixDQUNkLFdBQVcsRUFDWCxXQUFXLEVBQ1g7b0JBQ0UsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO29CQUMzQixNQUFNLEVBQUUsYUFBYTtvQkFDckIsSUFBSSxFQUFFLEVBQUU7aUJBQ1QsRUFDRCxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUNqQyxDQUFDO2dCQUNGLE1BQU0sdUJBQXVCLEdBQXdCO29CQUNuRCxNQUFNLEVBQUUsV0FBVztvQkFDbkIsT0FBTyxFQUFFLFdBQVc7aUJBQ3JCLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDVixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLE1BQU0sRUFBRSxhQUFhO29CQUNyQixJQUFJLEVBQUUsRUFBRTtvQkFDUixZQUFZLEVBQUUsdUJBQXVCO2lCQUN0QyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDO1FBR0QsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUN6QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLFNBQVMsQ0FBQztZQUNSLElBQUksRUFBRSxVQUFVO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDckIsUUFBUSxFQUFFLGVBQWU7WUFDekIsU0FBUyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQ0YsQ0FBQztJQUdGLFNBQVMsc0JBQXNCLENBQUMsTUFBcUI7UUFLbkQsSUFBSSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNuRCxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEUsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsR0FBMkIsY0FBYyxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE1BQU0sRUFBRSxnQkFBZ0I7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFPRCxTQUFTLFdBQVcsQ0FBQyxJQUFZO1FBQy9CLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQztZQUMzQixLQUFLLE1BQU0sYUFBYSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pELElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDbkUsT0FBTyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBT0QsU0FBUyxtQkFBbUIsQ0FBQyxJQUFZO1FBQ3ZDLE9BQU8sWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRO2FBQ3ZDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUM7UUFDeEUsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDckIsT0FBTztnQkFDTCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7Z0JBQ3hCLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtnQkFDaEMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZO2dCQUN4QyxnQkFBZ0IsRUFBRSxhQUFhLENBQUMsZ0JBQWdCO2dCQUNoRCxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVU7Z0JBQ3BDLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWTtnQkFDeEMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXO2dCQUN0QyxXQUFXLEVBQUUsYUFBYSxDQUFDLFdBQVc7YUFDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdELE1BQU0sT0FBTyxHQUFHO1FBQ2QsT0FBTztRQUNQLEdBQUc7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsV0FBVyxDQUFDLE1BQU07WUFDaEIsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLEdBQUcsT0FBTyxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTthQUM5QixDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNO1lBQ1osTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLEdBQUcsT0FBTyxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTthQUM5QixDQUFDLENBQUM7WUFDSCxNQUFNLGdCQUFnQixHQUEyQjtnQkFDL0MsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQztZQUNGLElBQUksZUFNUyxDQUFDO1lBQ2QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLGVBQWUsR0FBRztvQkFDaEIsSUFBSSxFQUFFLENBQUMsS0FBa0IsRUFBRSxFQUFFO3dCQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUM7b0JBQ0QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO29CQUN6QixRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQixDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FDekMsVUFBVSxDQUFDLE1BQU0sRUFDakIsa0JBQWtCLENBQ25CLENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxZQUFZLENBQ2hDLE9BQU8sRUFDUCxzQkFBc0IsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxFQUM5RCxlQUFlLEVBQ2YsY0FBYyxDQUNmLENBQUM7WUFDRixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFFbkMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsU0FBUyxDQUFDLFFBQVE7WUFDaEIsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNaLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUVsQixTQUFTLGVBQWU7Z0JBQ3RCLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxRQUFRLENBQUMsRUFDUCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE9BQU8sRUFBRSxVQUFVLEVBQ25CLE9BQU8sR0FNUjtZQUNDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUM7WUFDOUIsY0FBYyxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBRTdDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDbkQsR0FBRyxPQUFPLENBQUMsUUFBUTtnQkFDbkIsUUFBUSxFQUFFLGNBQWM7YUFDekIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxVQUFVLEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxVQUFVLEdBQUcsVUFBVSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztZQUVyRCxNQUFNLFNBQVMsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDO1lBQ3JDLE1BQU0saUJBQWlCLEdBQ3JCLFVBQVUsSUFBSSxJQUFJO2dCQUNsQixTQUFTO2dCQUNULEtBQUssSUFBSSxJQUFJO2dCQUNiLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQztZQUM5QixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUN0QixZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxhQUF1RCxDQUFDO1lBQzVELElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsR0FBRyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN6QyxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixLQUFLLEVBQUUsYUFBYTtnQkFDcEIsV0FBVyxFQUFFLFVBQVU7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDbkUsTUFBTSxNQUFNLEdBQTJCLGNBQWMsQ0FBQztZQUN0RCxNQUFNLFlBQVksR0FBd0I7Z0JBQ3hDLE1BQU07Z0JBQ04sT0FBTyxFQUFFLGNBQWM7YUFDeEIsQ0FBQztZQUVGLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNyQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtvQkFDL0MsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNWLEdBQUcsV0FBVztvQkFDZCxZQUFZO2lCQUNiLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTtvQkFDNUMsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLEdBQUcsV0FBVztvQkFDZCxZQUFZO2lCQUNiLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsV0FBVztRQUNYLG1CQUFtQjtLQUMwQixDQUFDO0lBR2hELFNBQVMsT0FBTztRQUNkLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFDRCxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFHRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFJvdXRlcyB9IGZyb20gJy4uL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgQnJvd3Nlckhpc3RvcnkgfSBmcm9tICcuLi9oaXN0b3J5L2luZGV4LmpzJztcbmltcG9ydCB7IGdldE1hdGNoZWRSb3V0ZSwgcHJlcGFyZU1hdGNoIH0gZnJvbSAnLi4vdG9vbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VSYXdRdWVyeSB9IGZyb20gJy4uL3Rvb2xzL3F1ZXJ5LmpzJztcbmltcG9ydCBidWlsZENvbWJpbmVkU2VhcmNoIGZyb20gJy4uL3Rvb2xzL2J1aWxkQ29tYmluZWRTZWFyY2guanMnO1xuaW1wb3J0IHsgdHlwZSBEaWFnbm9zdGljIGFzIEZpbHRlckRpYWdub3N0aWMgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnkvZXJyb3JzLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeS9wYXJzZS5qcyc7XG5pbXBvcnQgeyB0eXBlIFNjaGVtYSBhcyBGaWx0ZXJTY2hlbWEgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnkvdHlwZXMuanMnO1xuaW1wb3J0IHsgRklMVEVSX09QRVJBVE9SUyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeS92YWx1ZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbURhdGEgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5pbXBvcnQge1xuICB0eXBlIFJvdXRlRW50cnksXG4gIHR5cGUgUm91dGluZ0NvbnRleHRUeXBlLFxuICB0eXBlIFN1YnNjcmliZUNhbGxiYWNrLFxuICB0eXBlIEFueVJvdXRlLFxuICB0eXBlIFByZXBhcmVkQWNjZXNzLFxuICB0eXBlIE5hdmlnYXRlT3ZlcmxvYWRzLFxuICB0eXBlIFByZWxvYWRUYXJnZXQsXG4gIHR5cGUgUHJlcGFyZWRSb3V0ZVNlZ21lbnRTbmFwc2hvdCxcbiAgdHlwZSBSYXdRdWVyeSxcbiAgdHlwZSBSb3V0ZXJNYXRjaGVkUm91dGUsXG4gIHR5cGUgVW5rbm93bkZpbHRlcnMsXG4gIHR5cGUgVW5rbm93blF1ZXJ5U2hhcGUsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LFxuICB0eXBlIEluc3RydW1lbnRhdGlvbkFQSSxcbiAgdHlwZSBSb3V0ZXJFbnRyeVNuYXBzaG90LFxuICB0eXBlIFJvdXRlckxvY2F0aW9uU25hcHNob3QsXG4gIHR5cGUgUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgdHlwZSBSb3V0ZXJFdmVudCxcbn0gZnJvbSAnLi4vaW5zdHJ1bWVudGF0aW9uL0luc3RydW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEhpc3RvcnlEZWJ1Z0NvbnRleHQgfSBmcm9tICcuLi9oaXN0b3J5L3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGlzUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgdHlwZSBSb3V0ZXJIaXN0b3J5QWN0aW9uVmFsdWUsXG4gIHR5cGUgUm91dGVyUHJlbG9hZE1vZGVWYWx1ZSxcbn0gZnJvbSAnLi4vdmFsdWVzLmpzJztcblxudHlwZSBSb3V0ZXJRdWVyeVNjaGVtYSA9IEZpbHRlclNjaGVtYSB8IHVuZGVmaW5lZDtcbnR5cGUgUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4gPSBSb3V0ZUVudHJ5PFxuICBQYXJhbURhdGEsXG4gIFJvdXRlclF1ZXJ5U2NoZW1hLFxuICBUQ29udGV4dFxuPjtcbnR5cGUgUGFyc2VkU2VhcmNoU3RhdGUgPSB7XG4gIHF1ZXJ5OiBSYXdRdWVyeTtcbiAgZmlsdGVycz86IFVua25vd25GaWx0ZXJzO1xuICBmaWx0ZXJEaWFnbm9zdGljcz86IEZpbHRlckRpYWdub3N0aWNbXTtcbn07XG50eXBlIFByZXBhcmVRdWVyeUlucHV0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcm91dGUgcHJlcGFyZSBjYWxsYmFjayBzaG91bGQgcnVuIGFmdGVyIG5hdmlnYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByZXBhcmVPbk5hdmlnYXRpb24oaW5wdXQ6IHtcbiAgc2FtZVBhdGhuYW1lOiBib29sZWFuO1xuICBzYW1lU2VhcmNoOiBib29sZWFuO1xuICByb3V0ZTogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsO1xufSk6IGJvb2xlYW4ge1xuICBpZiAoIWlucHV0LnNhbWVQYXRobmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlucHV0LnNhbWVTZWFyY2gpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByb3V0ZVNlZ21lbnRzID0gaW5wdXQucm91dGU/LnJvdXRlLnJvdXRlcyA/PyBbXTtcbiAgcmV0dXJuIHJvdXRlU2VnbWVudHMuc29tZSgocm91dGUpID0+IHtcbiAgICByZXR1cm4gcm91dGUucHJlcGFyZSAhPSBudWxsICYmIHJvdXRlLnByZXBhcmVTZWFyY2hCZWhhdmlvciAhPT0gJ3BhdGgnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFRDb250ZXh0LCBSIGV4dGVuZHMgQW55Um91dGVbXT4gPSB7XG4gIC8qKiBGdW5jdGlvbiB0byBjbGVhbiB1cCByb3V0ZXIgbGlzdGVuZXJzIGFuZCByZXNvdXJjZXMgKi9cbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgLyoqIFJvdXRlciBjb250ZXh0IG9iamVjdCBmb3IgdGhlIFJlYWN0IENvbnRleHQgUHJvdmlkZXIgKi9cbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPFxuICAgIFBhcmFtRGF0YSxcbiAgICBSb3V0ZXJRdWVyeVNjaGVtYSxcbiAgICBVbmtub3duUXVlcnlTaGFwZSxcbiAgICBUQ29udGV4dFxuICA+ICZcbiAgICBQcmVwYXJlZEFjY2VzczxSPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxSPjtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuLyoqXG4gKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBgY3JlYXRlUm91dGVyYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyT3B0aW9uczxUQ29udGV4dD4gPSB7XG4gIC8qKiBJbnN0cnVtZW50YXRpb25zIHRvIGF0dGFjaCB0byB0aGUgcm91dGVyIChEZXZUb29scyBicmlkZ2UsIGxvZ2dlciwgLi4uKS4gKi9cbiAgaW5zdHJ1bWVudGF0aW9ucz86IEluc3RydW1lbnRhdGlvbkFQSVtdO1xuICAvKiogU3RhdGljIGNvbnRleHQgdmFsdWUgb3IgbGF6eSBpbml0aWFsaXplciBmb3IgdGhlIHJvdXRlci4gKi9cbiAgY29udGV4dD86IFRDb250ZXh0IHwgKCgpID0+IFRDb250ZXh0KTtcbiAgLyoqIFJlc29sdmUgYSBmcmVzaCBjb250ZXh0IHZhbHVlIHBlciBuYXZpZ2F0aW9uLiAqL1xuICBnZXRDb250ZXh0PzogKCkgPT4gVENvbnRleHQ7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZXIgaW5zdGFuY2UgZnJvbSBhIHJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIHJvdXRlcyAtIFJvdXRlIGRlZmluaXRpb25zIHRvIHJlZ2lzdGVyLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBpbnN0cnVtZW50YXRpb24gc2V0dGluZ3MgdXNlZCBmb3IgZXhwb3NpbmcgZGV2ZWxvcG1lbnQgdG9vbGluZy5cbiAqIEBwYXJhbSBvcHRpb25zLmluc3RydW1lbnRhdGlvbnMgLSBJbnN0cnVtZW50YXRpb25zIGludm9rZWQgb24gcm91dGVyIGV2ZW50cyAoZGV2ZWxvcG1lbnQgb25seSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcjxcbiAgVENvbnRleHQgPSB1bmtub3duLFxuICBSIGV4dGVuZHMgQW55Um91dGVbXSA9IEFueVJvdXRlW10sXG4+KFxuICByb3V0ZXM6IFsuLi5SXSB8IEFueVJvdXRlW10sXG4gIG9wdGlvbnM6IENyZWF0ZVJvdXRlck9wdGlvbnM8VENvbnRleHQ+ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48VENvbnRleHQsIFI+IHtcbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGVJbnN0cnVtZW50YXRpb25SZWdpc3RyeShcbiAgICBvcHRpb25zLmluc3RydW1lbnRhdGlvbnMgPz8gW10sXG4gICk7XG5cbiAgbGV0IHN0YXRpY0NvbnRleHQ6IFRDb250ZXh0IHwgdW5kZWZpbmVkO1xuICBpZiAob3B0aW9ucy5nZXRDb250ZXh0ID09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc3RhdGljQ29udGV4dCA9IChvcHRpb25zLmNvbnRleHQgYXMgKCkgPT4gVENvbnRleHQpKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpY0NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc29sdmUgdGhlIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24uICovXG4gIGZ1bmN0aW9uIHJlc29sdmVDb250ZXh0KCk6IFRDb250ZXh0IHtcbiAgICBpZiAob3B0aW9ucy5nZXRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmdldENvbnRleHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRpY0NvbnRleHQgYXMgVENvbnRleHQ7XG4gIH1cblxuICBsZXQgcGVuZGluZ05hdmlnYXRpb25PcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XG4gIGxldCBsYXN0TmF2aWdhdGlvbk9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdleHRlcm5hbCc7XG4gIGxldCBsYXN0UHJlbG9hZFNpZ25hdHVyZToge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCByb3V0ZXJEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHBhcnRpYWwgbG9jYXRpb24gb2JqZWN0IGludG8gYSBmdWxsIGxvY2F0aW9uIHN0cnVjdHVyZSB3aXRoIHN0cmluZyBmaWVsZHMuXG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVMb2NhdGlvbihsb2NhdGlvbjoge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIGhhc2g/OiBzdHJpbmc7XG4gIH0pOiB7IHBhdGhuYW1lOiBzdHJpbmc7IHNlYXJjaDogc3RyaW5nOyBoYXNoOiBzdHJpbmcgfSB7XG4gICAgbGV0IHBhdGhuYW1lVmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhdGhuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcGF0aG5hbWVWYWx1ZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cbiAgICBsZXQgc2VhcmNoVmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNlYXJjaFZhbHVlID0gbG9jYXRpb24uc2VhcmNoO1xuICAgIH1cbiAgICBsZXQgaGFzaFZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5oYXNoID09PSAnc3RyaW5nJykge1xuICAgICAgaGFzaFZhbHVlID0gbG9jYXRpb24uaGFzaDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBwYXRobmFtZVZhbHVlLFxuICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgIGhhc2g6IGhhc2hWYWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEVtaXRzIGEgcm91dGVyIGV2ZW50IHRvIGV2ZXJ5IHJlZ2lzdGVyZWQgaW5zdHJ1bWVudGF0aW9uLiAqL1xuICBmdW5jdGlvbiBlbWl0RXZlbnQoZXZlbnQ6IFJvdXRlckV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHJvdXRlckRpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlZ2lzdHJ5LmVtaXRFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gY29lcmNlIGFuIGFyYml0cmFyeSBzdHJpbmcgaW50byBhIGtub3duIG5hdmlnYXRpb24gc291cmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwT3JpZ2luKHJhdz86IHN0cmluZyk6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIGlmIChpc1JvdXRlck5hdmlnYXRpb25Tb3VyY2UocmF3KSkge1xuICAgICAgcmV0dXJuIHJhdztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IG5ldyBTZXQ8c3RyaW5nPihGSUxURVJfT1BFUkFUT1JTKTtcblxuICAvKiogSGV1cmlzdGljOiBkZXRlY3QgZmlsdGVyLWxpa2Ugb2JqZWN0cyB3aGVuIGNhbGxlcnMgcGFzcyBmaWx0ZXIgcmVjb3JkcyB0byBuYXZpZ2F0ZS4gKi9cbiAgZnVuY3Rpb24gbG9va3NMaWtlRmlsdGVycyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIE9iamVjdC52YWx1ZXMocmVjb3JkKSkge1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZFZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGZpZWxkVmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAoZmlsdGVyT3BlcmF0b3JzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgb3JpZ2luIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGV2ZW50LlxuICAgKi9cbiAgLyoqIFJlc29sdmVzIHRoZSBuYXZpZ2F0aW9uIHNvdXJjZSBjb21iaW5pbmcgaGlzdG9yeSBjb250ZXh0IGFuZCBwZW5kaW5nIGludGVudC4gKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZU5hdmlnYXRpb25PcmlnaW4oXG4gICAgY29udGV4dD86IEhpc3RvcnlEZWJ1Z0NvbnRleHQgfCBudWxsLFxuICApOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlIHtcbiAgICBjb25zdCBmYWxsYmFja09yaWdpbiA9IHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luO1xuICAgIGxldCBvcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjb250ZXh0T3JpZ2luID0gY29udGV4dD8ub3JpZ2luO1xuICAgIGlmIChjb250ZXh0T3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9yaWdpbiA9IG1hcE9yaWdpbihjb250ZXh0T3JpZ2luKTtcbiAgICB9XG5cbiAgICBvcmlnaW4gPz89IGZhbGxiYWNrT3JpZ2luO1xuICAgIG9yaWdpbiA/Pz0gJ2V4dGVybmFsJztcbiAgICBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbiA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gb3JpZ2luO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBpbm5lci1tb3N0IG1hdGNoZWQgcm91dGUgcGF0aCBmcm9tIGEgcm91dGUgZW50cnkgd2hlbiBhdmFpbGFibGUuXG4gICAqL1xuICAvKiogUmV0dXJucyB0aGUgZGVlcGVzdCBtYXRjaGVkIHJvdXRlIHBhdGggZnJvbSBhIHJvdXRlIGVudHJ5IGlmIGF2YWlsYWJsZS4gKi9cbiAgZnVuY3Rpb24gcmVhZE1hdGNoZWRSb3V0ZVBhdGgoXG4gICAgZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+IHwgdW5kZWZpbmVkLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChlbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVkUm91dGUgPSBlbnRyeS5yb3V0ZTtcbiAgICBpZiAobWF0Y2hlZFJvdXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IG1hdGNoZWRSb3V0ZS5yb3V0ZS5yb3V0ZXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRSb3V0ZXMpKSB7XG4gICAgICBjb25zdCBsYXN0Q2hpbGQgPSBjaGlsZFJvdXRlcy5hdCgtMSk7XG4gICAgICBpZiAobGFzdENoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkUmVjb3JkID0gbGFzdENoaWxkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBsYXN0Q2hpbGRSZWNvcmQucGF0aDtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZFBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByb290UGF0aCA9IG1hdGNoZWRSb3V0ZS5yb3V0ZS5wYXRoO1xuICAgIGlmICh0eXBlb2Ygcm9vdFBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcm9vdFBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgZGVlcGVzdCBhY3RpdmUgcXVlcnkgc2NoZW1hIGZvciBhIG1hdGNoZWQgcm91dGUuICovXG4gIGZ1bmN0aW9uIHJlYWRBY3RpdmVRdWVyeVNjaGVtYShcbiAgICByb3V0ZTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD5bJ3JvdXRlJ10sXG4gICk6IFJvdXRlclF1ZXJ5U2NoZW1hIHtcbiAgICByZXR1cm4gcm91dGU/LnJvdXRlLnJvdXRlcy5hdCgtMSk/LnF1ZXJ5U2NoZW1hO1xuICB9XG5cbiAgLyoqIFBhcnNlcyByYXcgcXVlcnkgYW5kIHR5cGVkIGZpbHRlcnMgZm9yIHRoZSBwcm92aWRlZCBzZWFyY2ggc3RyaW5nLiAqL1xuICBmdW5jdGlvbiBwYXJzZVNlYXJjaFN0YXRlKFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICAgIHF1ZXJ5U2NoZW1hOiBSb3V0ZXJRdWVyeVNjaGVtYSxcbiAgKTogUGFyc2VkU2VhcmNoU3RhdGUge1xuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyc2VSYXdRdWVyeShzZWFyY2gpO1xuICAgIGlmIChxdWVyeVNjaGVtYSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBxdWVyeSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmlsdGVycyhzZWFyY2gsIHF1ZXJ5U2NoZW1hKTtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnksXG4gICAgICBmaWx0ZXJzOiBwYXJzZWQuZmlsdGVycyxcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzOiBwYXJzZWQuZGlhZ25vc3RpY3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZWFkcyBhIHBhZ2UgbnVtYmVyIGZyb20gZWl0aGVyIGBwYWdlYCBvciBgcGFnZS5lcWAgZmlsdGVyIHNoYXBlcy4gKi9cbiAgZnVuY3Rpb24gcmVhZFBhZ2VWYWx1ZShmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnMpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmIChmaWx0ZXJzID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3UGFnZSA9IGZpbHRlcnMucGFnZTtcbiAgICBpZiAodHlwZW9mIHJhd1BhZ2UgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcmF3UGFnZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcmF3UGFnZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgcmF3UGFnZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHJhd1BhZ2UpICYmXG4gICAgICB0eXBlb2YgKHJhd1BhZ2UgYXMgeyBlcT86IHVua25vd24gfSkuZXEgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICByZXR1cm4gKHJhd1BhZ2UgYXMgeyBlcTogbnVtYmVyIH0pLmVxO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIE5vcm1hbGl6ZXMgdGhlIHBhZ2UgZmlsdGVyIHRvIGEgbWluaW11bSB2YWx1ZSBvZiAxIHdoZW4gcHJlc2VudC4gKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplUGFnZUZpbHRlcnMoZmlsdGVycz86IFVua25vd25GaWx0ZXJzKToge1xuICAgIGZpbHRlcnM/OiBVbmtub3duRmlsdGVycztcbiAgICBub3JtYWxpemVkOiBib29sZWFuO1xuICB9IHtcbiAgICBjb25zdCBwYWdlVmFsdWUgPSByZWFkUGFnZVZhbHVlKGZpbHRlcnMpO1xuICAgIGlmIChwYWdlVmFsdWUgPT0gbnVsbCB8fCBwYWdlVmFsdWUgPj0gMSB8fCBmaWx0ZXJzID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIG5vcm1hbGl6ZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICAuLi5maWx0ZXJzLFxuICAgICAgICBwYWdlOiB7IGVxOiAxIH0sXG4gICAgICB9LFxuICAgICAgbm9ybWFsaXplZDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHJvdXRlciBzZWFyY2ggc3RhdGUgaW50byB0aGUgb2JqZWN0IGZvcndhcmRlZCB0byBgcHJlcGFyZWAuICovXG4gIGZ1bmN0aW9uIGJ1aWxkUHJlcGFyZVF1ZXJ5SW5wdXQoXG4gICAgc3RhdGU6IFBhcnNlZFNlYXJjaFN0YXRlLFxuICAgIHF1ZXJ5U2NoZW1hOiBSb3V0ZXJRdWVyeVNjaGVtYSxcbiAgKTogUHJlcGFyZVF1ZXJ5SW5wdXQge1xuICAgIGlmIChxdWVyeVNjaGVtYSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZmlsdGVycyA/PyB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLnF1ZXJ5O1xuICB9XG5cbiAgLyoqIEJ1aWxkcyBhIHNuYXBzaG90IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHJvdXRlciBlbnRyeS4gKi9cbiAgZnVuY3Rpb24gYnVpbGRFbnRyeVNuYXBzaG90KFxuICAgIGVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PixcbiAgKTogUm91dGVyRW50cnlTbmFwc2hvdCB7XG4gICAgY29uc3QgcHJlcGFyZWRTZWdtZW50cyA9IGVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiBzZWdtZW50LnBhdGgsXG4gICAgICAgIGZ1bGxQYXRoOiBzZWdtZW50LmZ1bGxQYXRoLFxuICAgICAgICBzZWdtZW50SW5kZXg6IHNlZ21lbnQuc2VnbWVudEluZGV4LFxuICAgICAgICBwcmVwYXJlZFJlc291cmNlOiBzZWdtZW50LnByZXBhcmVkUmVzb3VyY2UsXG4gICAgICAgIHJlZGlyZWN0VG86IHNlZ21lbnQucmVkaXJlY3RUbyxcbiAgICAgICAgaGlnaGxpZ2h0SWQ6IHNlZ21lbnQuaGlnaGxpZ2h0SWQsXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBzZWdtZW50LnF1ZXJ5U2NoZW1hLFxuICAgICAgICBwcmVwYXJlZFN0YXR1czogc2VnbWVudC5wcmVwYXJlZFJlc291cmNlPy5nZXRTdGF0dXMoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGVudHJ5LmxvY2F0aW9uKSxcbiAgICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgoZW50cnkpLFxuICAgICAgcHJlcGFyZWRNYXRjaDoge1xuICAgICAgICBzZWdtZW50czogcHJlcGFyZWRTZWdtZW50cyxcbiAgICAgICAgcm91dGVzOiBwcmVwYXJlZFNlZ21lbnRzLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IGVudHJ5LmZpbHRlcnMsXG4gICAgICBmaWx0ZXJEaWFnbm9zdGljczogZW50cnkuZmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgICBhY3RpdmVRdWVyeVNjaGVtYTogZW50cnkuYWN0aXZlUXVlcnlTY2hlbWEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBOb3RpZmllcyBpbnN0cnVtZW50YXRpb25zIG9mIGEgbmV3IGFjdGl2ZSBlbnRyeS4gKi9cbiAgZnVuY3Rpb24gbm90aWZ5RW50cnkoZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+KTogdm9pZCB7XG4gICAgcmVnaXN0cnkubm90aWZ5RW50cnlDaGFuZ2UoYnVpbGRFbnRyeVNuYXBzaG90KGVudHJ5KSk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhIGRlZHVwbGljYXRpb24ga2V5IGZvciBwcmVsb2FkIGV2ZW50cy4gKi9cbiAgZnVuY3Rpb24gYnVpbGRQcmVsb2FkS2V5KFxuICAgIG1vZGU6IFJvdXRlclByZWxvYWRNb2RlVmFsdWUsXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bW9kZX06JHtwYXRobmFtZX1gO1xuICB9XG5cbiAgLyoqIEVtaXRzIGEgcHJlbG9hZCBvciBwcmVsb2FkLWNvZGUgaW5zdHJ1bWVudGF0aW9uIGV2ZW50LiAqL1xuICBmdW5jdGlvbiBlbWl0UHJlbG9hZEV2ZW50KFxuICAgIG1vZGU6ICdjb2RlJyB8ICdmdWxsJyxcbiAgICBwYXRobmFtZTogc3RyaW5nLFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXkgPSBidWlsZFByZWxvYWRLZXkobW9kZSwgcGF0aG5hbWUpO1xuICAgIGNvbnN0IHJlY2VudGx5UmVjb3JkZWQgPVxuICAgICAgbGFzdFByZWxvYWRTaWduYXR1cmUgIT09IG51bGwgJiZcbiAgICAgIGxhc3RQcmVsb2FkU2lnbmF0dXJlLmtleSA9PT0ga2V5ICYmXG4gICAgICBub3cgLSBsYXN0UHJlbG9hZFNpZ25hdHVyZS50aW1lc3RhbXAgPCA1MDtcblxuICAgIGlmICghcmVjZW50bHlSZWNvcmRlZCkge1xuICAgICAgZW1pdEV2ZW50KHtcbiAgICAgICAga2luZDogJ3ByZWxvYWQnLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcDogbm93LFxuICAgICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbiksXG4gICAgICAgIHRhcmdldFBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgbW9kZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxhc3RQcmVsb2FkU2lnbmF0dXJlID0geyBrZXksIHRpbWVzdGFtcDogbm93IH07XG4gIH1cblxuICAvKiogRW1pdHMgYSBoaXN0b3J5IG11dGF0aW9uIGV2ZW50IChwdXNoL3JlcGxhY2Uvbm9ybWFsaXplKS4gKi9cbiAgZnVuY3Rpb24gZW1pdEhpc3RvcnlFdmVudChcbiAgICBhY3Rpb246IFJvdXRlckhpc3RvcnlBY3Rpb25WYWx1ZSxcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICAgbG9jYXRpb246IHsgcGF0aG5hbWU6IHN0cmluZzsgc2VhcmNoPzogc3RyaW5nOyBoYXNoPzogc3RyaW5nIH0sXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbiA9IHNvdXJjZTtcbiAgICBlbWl0RXZlbnQoe1xuICAgICAga2luZDogJ2hpc3RvcnknLFxuICAgICAgc291cmNlLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uKSxcbiAgICAgIGRldGFpbHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyBCdWlsZCBhIGZsYXQgbGlzdCBvZiByb3V0ZXMgZm9yIGVmZmljaWVudCBtYXRjaGluZ1xuICBjb25zdCBmbGF0Um91dGVzID0gYnVpbGRSb3V0ZXMocm91dGVzKTtcblxuICAvLyBGaW5kIHRoZSBpbml0aWFsIHJvdXRlIG1hdGNoIGFuZCBwcmVwYXJlIGl0IGZvciByZW5kZXJpbmdcbiAgY29uc3Qgcm91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgaGlzdG9yeS5sb2NhdGlvbik7XG4gIGNvbnN0IGluaXRpYWxVbmlmaWVkU2NoZW1hID0gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKHJvdXRlKTtcbiAgY29uc3QgaW5pdGlhbFNlYXJjaFN0YXRlID0gcGFyc2VTZWFyY2hTdGF0ZShcbiAgICBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCxcbiAgICBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgKTtcbiAgY29uc3Qgbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzID0gbm9ybWFsaXplUGFnZUZpbHRlcnMoXG4gICAgaW5pdGlhbFNlYXJjaFN0YXRlLmZpbHRlcnMsXG4gICk7XG4gIGNvbnN0IGluaXRpYWxMb2NhdGlvblNuYXBzaG90ID0gbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbik7XG4gIGxldCBpbml0aWFsSW5zdHJ1bWVudGF0aW9uOlxuICAgIHwge1xuICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGluaXRpYWxJbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgIGVtaXRFdmVudChldmVudCk7XG4gICAgICB9LFxuICAgICAgc291cmNlOiBsYXN0TmF2aWdhdGlvbk9yaWdpbixcbiAgICAgIGxvY2F0aW9uOiBpbml0aWFsTG9jYXRpb25TbmFwc2hvdCxcbiAgICB9O1xuICB9XG4gIGNvbnN0IGluaXRpYWxDb250ZXh0ID0gcmVzb2x2ZUNvbnRleHQoKTtcbiAgY29uc3QgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChcbiAgICByb3V0ZSxcbiAgICBidWlsZFByZXBhcmVRdWVyeUlucHV0KFxuICAgICAge1xuICAgICAgICAuLi5pbml0aWFsU2VhcmNoU3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IG5vcm1hbGl6ZWRJbml0aWFsRmlsdGVycy5maWx0ZXJzLFxuICAgICAgfSxcbiAgICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgICksXG4gICAgaW5pdGlhbEluc3RydW1lbnRhdGlvbixcbiAgICBpbml0aWFsQ29udGV4dCxcbiAgKTtcbiAgLy8gSGVscGVyIHRvIGJ1aWxkIHRoZSByYXcgcXVlcnkgb2JqZWN0IGZyb20gYSBzZWFyY2ggc3RyaW5nXG4gIGxldCBjdXJyZW50RW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+ID0ge1xuICAgIGZvcmNlUmVyZW5kZXI6IGZhbHNlLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uLFxuICAgIHJvdXRlLFxuICAgIHByZXBhcmVkTWF0Y2gsXG4gICAgY29udGV4dDogaW5pdGlhbENvbnRleHQsXG4gICAgcmF3U2VhcmNoOiBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCxcbiAgICBxdWVyeTogaW5pdGlhbFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgIC8vIHR5cGVkUXVlcnkgcmVtb3ZlZCAodW5pZmllZCBpbnRvIGZpbHRlcnMvcXVlcnkpXG4gICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgZmlsdGVyRGlhZ25vc3RpY3M6IGluaXRpYWxTZWFyY2hTdGF0ZS5maWx0ZXJEaWFnbm9zdGljcyxcbiAgICBhY3RpdmVRdWVyeVNjaGVtYTogaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gIH07XG5cbiAgLy8gSW5pdGlhbCBub3JtYWxpemF0aW9uIHBhc3MgKGUuZy4sIGNsYW1wIHBhZ2UpXG4gIGlmIChcbiAgICBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMubm9ybWFsaXplZCAmJlxuICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwgJiZcbiAgICBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyAhPSBudWxsXG4gICkge1xuICAgIGN1cnJlbnRFbnRyeS5maWx0ZXJzID0gbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnM7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICBxdWVyeTogaW5pdGlhbFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgZW1pdEhpc3RvcnlFdmVudChcbiAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB7IHJlYXNvbjogJ2luaXRpYWwtcGFnZS1jbGFtcCcgfSxcbiAgICAgICk7XG4gICAgICBjb25zdCBub3JtYWxpemVEZWJ1Z0NvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgIG9yaWdpbjogJ25vcm1hbGl6ZScsXG4gICAgICAgIHRyaWdnZXI6ICdub3JtYWxpemUnLFxuICAgICAgfTtcbiAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGRlYnVnQ29udGV4dDogbm9ybWFsaXplRGVidWdDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICAvLyBVcGRhdGUgY3VycmVudEVudHJ5LmxvY2F0aW9uIHRvIHJlZmxlY3QgbmV3IHNlYXJjaCBkaXJlY3RseSAoaGlzdG9yeS5zZXQgdHJpZ2dlcnMgYXN5bmMgc3Vic2NyaWJlcilcbiAgICAgIGN1cnJlbnRFbnRyeSA9IHtcbiAgICAgICAgLi4uY3VycmVudEVudHJ5LFxuICAgICAgICBsb2NhdGlvbjogeyAuLi5jdXJyZW50RW50cnkubG9jYXRpb24sIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCB9LFxuICAgICAgICByYXdTZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeUVudHJ5KGN1cnJlbnRFbnRyeSk7XG4gIGVtaXRFdmVudCh7XG4gICAga2luZDogJ3NuYXBzaG90JyxcbiAgICBzb3VyY2U6IGxhc3ROYXZpZ2F0aW9uT3JpZ2luLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oY3VycmVudEVudHJ5LmxvY2F0aW9uKSxcbiAgICByb3V0ZVBhdGg6IHJlYWRNYXRjaGVkUm91dGVQYXRoKGN1cnJlbnRFbnRyeSksXG4gIH0pO1xuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgU3Vic2NyaWJlQ2FsbGJhY2s8UGFyYW1EYXRhLCBSb3V0ZXJRdWVyeVNjaGVtYSwgVENvbnRleHQ+XG4gID4oKTtcblxuICAvLyBMaXN0ZW4gZm9yIGxvY2F0aW9uIGNoYW5nZXMsIG1hdGNoIHRvIHRoZSByb3V0ZSBlbnRyeSwgcHJlcGFyZSB0aGUgZW50cnksXG4gIC8vIGFuZCBub3RpZnkgc3Vic2NyaWJlcnMuIFRoaXMgcGF0dGVybiBlbnN1cmVzIHRoYXQgZGF0YS1sb2FkaW5nXG4gIC8vIG9jY3VycyAqb3V0c2lkZSogb2YgLSBhbmQgKmJlZm9yZSogLSByZW5kZXJpbmcuXG4gIGNvbnN0IGRpc3Bvc2VIaXN0b3J5ID0gaGlzdG9yeS5zdWJzY3JpYmUoXG4gICAgKGxvY2F0aW9uLCBmb3JjZVJlcmVuZGVyLCBkZWJ1Z0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHJlc29sdmVOYXZpZ2F0aW9uT3JpZ2luKGRlYnVnQ29udGV4dCk7XG4gICAgICBsYXN0TmF2aWdhdGlvbk9yaWdpbiA9IG9yaWdpbjtcbiAgICAgIGNvbnN0IGxvY2F0aW9uUGF5bG9hZCA9IG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgZGVidWdDb250ZXh0T3JpZ2luID0gZGVidWdDb250ZXh0Py5vcmlnaW47XG4gICAgICBpZiAoZGVidWdDb250ZXh0T3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGhpc3RvcnlEZXRhaWxzOiB7IGhpc3RvcnlJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgZGVidWdDb250ZXh0Py5oaXN0b3J5SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgaGlzdG9yeURldGFpbHMgPSB7IGhpc3RvcnlJbmRleDogZGVidWdDb250ZXh0Lmhpc3RvcnlJbmRleCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWJhY2snIHx8XG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtZm9yd2FyZCcgfHxcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS11bmtub3duJyB8fFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ2V4dGVybmFsJ1xuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlyZWN0aW9uOiAnYmFjaycgfCAnZm9yd2FyZCcgfCAndW5rbm93bicgPSAndW5rbm93bic7XG4gICAgICAgICAgaWYgKGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWJhY2snKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAnYmFjayc7XG4gICAgICAgICAgfSBlbHNlIGlmIChkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1mb3J3YXJkJykge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2ZvcndhcmQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbWl0RXZlbnQoe1xuICAgICAgICAgICAga2luZDogJ3BvcHN0YXRlJyxcbiAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uUGF5bG9hZCxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIGRldGFpbHM6IGhpc3RvcnlEZXRhaWxzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNhbWVQYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lID09PSBjdXJyZW50RW50cnkubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICBjb25zdCBzYW1lU2VhcmNoID0gbG9jYXRpb24uc2VhcmNoID09PSBjdXJyZW50RW50cnkucmF3U2VhcmNoO1xuXG4gICAgICBpZiAoIWZvcmNlUmVyZW5kZXIgJiYgc2FtZVBhdGhuYW1lICYmIHNhbWVTZWFyY2gpIHtcbiAgICAgICAgLy8gTm90aGluZyBjaGFuZ2VkIHRoYXQgd2UgY2FyZSBhYm91dFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRDb250ZXh0ID0gcmVzb2x2ZUNvbnRleHQoKTtcblxuICAgICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgd2Ugc3RpbGwgd2FudCB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZS5cbiAgICAgIC8vIEtlZXAgdGhlIGV4aXN0aW5nIHByZXBhcmVkTWF0Y2ggd2hlbiBwYXRobmFtZSBpcyBpZGVudGljYWwgdG8gYXZvaWQgcmVkdW5kYW50IHdvcmsuXG4gICAgICBsZXQgbmV4dFByZXBhcmVkTWF0Y2ggPSBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaDtcbiAgICAgIGxldCBuZXh0Um91dGUgPSBjdXJyZW50RW50cnkucm91dGU7XG5cbiAgICAgIGlmICghc2FtZVBhdGhuYW1lKSB7XG4gICAgICAgIG5leHRSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIHJhdyBxdWVyeSBvYmplY3QgKGJhc2ljIGFnZ3JlZ2F0aW9uKSBmcm9tIGxvY2F0aW9uLnNlYXJjaFxuICAgICAgY29uc3QgcXVlcnlTY2hlbWEgPSByZWFkQWN0aXZlUXVlcnlTY2hlbWEobmV4dFJvdXRlKTtcbiAgICAgIGNvbnN0IHBhcnNlZFNlYXJjaFN0YXRlID0gcGFyc2VTZWFyY2hTdGF0ZShsb2NhdGlvbi5zZWFyY2gsIHF1ZXJ5U2NoZW1hKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWx0ZXJzID0gbm9ybWFsaXplUGFnZUZpbHRlcnMocGFyc2VkU2VhcmNoU3RhdGUuZmlsdGVycyk7XG5cbiAgICAgIGNvbnN0IHNob3VsZFJlcHJlcGFyZSA9IHNob3VsZFByZXBhcmVPbk5hdmlnYXRpb24oe1xuICAgICAgICBzYW1lUGF0aG5hbWUsXG4gICAgICAgIHNhbWVTZWFyY2gsXG4gICAgICAgIHJvdXRlOiBuZXh0Um91dGUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHNob3VsZFJlcHJlcGFyZSkge1xuICAgICAgICBsZXQgdXBkYXRlSW5zdHJ1bWVudGF0aW9uOlxuICAgICAgICAgIHwge1xuICAgICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICAgICAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVJbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRFdmVudChldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25QYXlsb2FkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgICAgICAgbmV4dFJvdXRlLFxuICAgICAgICAgIGJ1aWxkUHJlcGFyZVF1ZXJ5SW5wdXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnBhcnNlZFNlYXJjaFN0YXRlLFxuICAgICAgICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkRmlsdGVycy5maWx0ZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHF1ZXJ5U2NoZW1hLFxuICAgICAgICAgICksXG4gICAgICAgICAgdXBkYXRlSW5zdHJ1bWVudGF0aW9uLFxuICAgICAgICAgIG5leHRDb250ZXh0LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+ID0ge1xuICAgICAgICBmb3JjZVJlcmVuZGVyOiBmb3JjZVJlcmVuZGVyIHx8IChzYW1lUGF0aG5hbWUgJiYgIXNhbWVTZWFyY2gpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgICAgcHJlcGFyZWRNYXRjaDogbmV4dFByZXBhcmVkTWF0Y2gsXG4gICAgICAgIGNvbnRleHQ6IG5leHRDb250ZXh0LFxuICAgICAgICByYXdTZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgcXVlcnk6IHBhcnNlZFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkRmlsdGVycy5maWx0ZXJzLFxuICAgICAgICBmaWx0ZXJEaWFnbm9zdGljczogcGFyc2VkU2VhcmNoU3RhdGUuZmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBxdWVyeVNjaGVtYSxcbiAgICAgIH07XG5cbiAgICAgIC8vIElmIG5vcm1hbGl6YXRpb24gY2hhbmdlZCB0aGUgdHlwZWQgcXVlcnkgd2UgdHJpZ2dlciBhIHJlcGxhY2Ugd2l0aCBub3JtYWxpemVkIHNlYXJjaFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWx0ZXJzLm5vcm1hbGl6ZWQgJiYgcXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgICBxdWVyeTogcGFyc2VkU2VhcmNoU3RhdGUucXVlcnksXG4gICAgICAgICAgcXVlcnlTY2hlbWEsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm9ybWFsaXplZFNlYXJjaCAhPT0gbG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICAgICAgbGV0IG5leHRTZWFyY2hTdHIgPSBub3JtYWxpemVkU2VhcmNoO1xuICAgICAgICAgIGlmICghbmV4dFNlYXJjaFN0ci5zdGFydHNXaXRoKCc/JykgJiYgbmV4dFNlYXJjaFN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXh0U2VhcmNoU3RyID0gYD8ke25leHRTZWFyY2hTdHJ9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZW1pdEhpc3RvcnlFdmVudChcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHJlYXNvbjogJ3J1bnRpbWUtcGFnZS1jbGFtcCcgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJ1bnRpbWVOb3JtYWxpemVDb250ZXh0OiBIaXN0b3J5RGVidWdDb250ZXh0ID0ge1xuICAgICAgICAgICAgb3JpZ2luOiAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgIHRyaWdnZXI6ICdub3JtYWxpemUnLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgICAgaGFzaDogJycsXG4gICAgICAgICAgICBkZWJ1Z0NvbnRleHQ6IHJ1bnRpbWVOb3JtYWxpemVDb250ZXh0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjsgLy8gZWFybHk6IHN1YnNlcXVlbnQgc2V0IHdpbGwgdHJpZ2dlciByZXJ1blxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjdXJyZW50IGVudHJ5IGFuZCBub3RpZnkgYWxsIHN1YnNjcmliZXJzXG4gICAgICBjdXJyZW50RW50cnkgPSBuZXh0RW50cnk7XG4gICAgICBzdWJzY3JpYmVycy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjYWxsYmFjayhuZXh0RW50cnkpO1xuICAgICAgfSk7XG4gICAgICBub3RpZnlFbnRyeShuZXh0RW50cnkpO1xuICAgICAgZW1pdEV2ZW50KHtcbiAgICAgICAga2luZDogJ3NuYXBzaG90JyxcbiAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uUGF5bG9hZCxcbiAgICAgICAgcm91dGVQYXRoOiByZWFkTWF0Y2hlZFJvdXRlUGF0aChuZXh0RW50cnkpLFxuICAgICAgfSk7XG4gICAgfSxcbiAgKTtcblxuICAvKiogTm9ybWFsaXplcyB1c2VyLXByb3ZpZGVkIHByZWxvYWQgdGFyZ2V0cyBpbnRvIGNvbnNpc3RlbnQgc3RydWN0dXJlcy4gKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplUHJlbG9hZFRhcmdldCh0YXJnZXQ6IFByZWxvYWRUYXJnZXQpOiB7XG4gICAgcGF0aG5hbWU6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gIH0ge1xuICAgIGxldCBub3JtYWxpemVkUGF0aG5hbWUgPSBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0LnBhdGhuYW1lID09PSAnc3RyaW5nJyAmJiB0YXJnZXQucGF0aG5hbWUubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFBhdGhuYW1lID0gdGFyZ2V0LnBhdGhuYW1lO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkU2VhcmNoID0gJyc7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQuc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgbm9ybWFsaXplZFNlYXJjaCA9IHRhcmdldC5zZWFyY2g7XG4gICAgfVxuXG4gICAgbGV0IG5vcm1hbGl6ZWRTb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgPSAncHJvZ3JhbW1hdGljJztcbiAgICBjb25zdCBtYXBwZWRTb3VyY2UgPSBtYXBPcmlnaW4odGFyZ2V0LnNvdXJjZSk7XG4gICAgaWYgKG1hcHBlZFNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBub3JtYWxpemVkU291cmNlID0gbWFwcGVkU291cmNlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IG5vcm1hbGl6ZWRQYXRobmFtZSxcbiAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgIHNvdXJjZTogbm9ybWFsaXplZFNvdXJjZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByZXBhcmVkIHZhbHVlIGZvciB0aGUgZmlyc3QgYWN0aXZlIHNlZ21lbnQgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gUm91dGUgc2VnbWVudCBwYXRoIG9yIGZ1bGwgcGF0aCB0byBpbnNwZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJlcGFyZWQocGF0aDogc3RyaW5nKTogdW5rbm93biB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY3VycmVudEVudHJ5O1xuICAgICAgZm9yIChjb25zdCBwcmVwYXJlZFJvdXRlIG9mIGVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHMpIHtcbiAgICAgICAgaWYgKHByZXBhcmVkUm91dGUucGF0aCA9PT0gcGF0aCB8fCBwcmVwYXJlZFJvdXRlLmZ1bGxQYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXBhcmVkUm91dGUucHJlcGFyZWRSZXNvdXJjZT8uZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGV2ZXJ5IGFjdGl2ZSBwcmVwYXJlZCBzZWdtZW50IG1hdGNoaW5nIHRoZSBwcm92aWRlZCBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJvdXRlIHNlZ21lbnQgcGF0aCBvciBmdWxsIHBhdGggdG8gaW5zcGVjdC5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFByZXBhcmVkU2VnbWVudHMocGF0aDogc3RyaW5nKTogUHJlcGFyZWRSb3V0ZVNlZ21lbnRTbmFwc2hvdFtdIHtcbiAgICByZXR1cm4gY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHNcbiAgICAgIC5maWx0ZXIoKHByZXBhcmVkUm91dGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHByZXBhcmVkUm91dGUucGF0aCA9PT0gcGF0aCB8fCBwcmVwYXJlZFJvdXRlLmZ1bGxQYXRoID09PSBwYXRoO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKHByZXBhcmVkUm91dGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYXRoOiBwcmVwYXJlZFJvdXRlLnBhdGgsXG4gICAgICAgICAgZnVsbFBhdGg6IHByZXBhcmVkUm91dGUuZnVsbFBhdGgsXG4gICAgICAgICAgc2VnbWVudEluZGV4OiBwcmVwYXJlZFJvdXRlLnNlZ21lbnRJbmRleCxcbiAgICAgICAgICBwcmVwYXJlZFJlc291cmNlOiBwcmVwYXJlZFJvdXRlLnByZXBhcmVkUmVzb3VyY2UsXG4gICAgICAgICAgcmVkaXJlY3RUbzogcHJlcGFyZWRSb3V0ZS5yZWRpcmVjdFRvLFxuICAgICAgICAgIHJlc291cmNlUGFnZTogcHJlcGFyZWRSb3V0ZS5yZXNvdXJjZVBhZ2UsXG4gICAgICAgICAgaGlnaGxpZ2h0SWQ6IHByZXBhcmVkUm91dGUuaGlnaGxpZ2h0SWQsXG4gICAgICAgICAgcXVlcnlTY2hlbWE6IHByZXBhcmVkUm91dGUucXVlcnlTY2hlbWEsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgaGlzdG9yeSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudHJ5O1xuICAgIH0sXG4gICAgcHJlbG9hZENvZGUodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJlbG9hZFRhcmdldCh0YXJnZXQpO1xuICAgICAgZW1pdFByZWxvYWRFdmVudCgnY29kZScsIG5vcm1hbGl6ZWQucGF0aG5hbWUsIG5vcm1hbGl6ZWQuc291cmNlKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2hlcy5yb3V0ZS5yb3V0ZXMuZm9yRWFjaCgoeyByZXNvdXJjZVBhZ2UgfSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByZXNvdXJjZVBhZ2UubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVsb2FkKHRhcmdldCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0KTtcbiAgICAgIGVtaXRQcmVsb2FkRXZlbnQoJ2Z1bGwnLCBub3JtYWxpemVkLnBhdGhuYW1lLCBub3JtYWxpemVkLnNvdXJjZSk7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4uaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IG5vcm1hbGl6ZWQucGF0aG5hbWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uU25hcHNob3Q6IFJvdXRlckxvY2F0aW9uU25hcHNob3QgPSB7XG4gICAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IG5vcm1hbGl6ZWQuc2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgIH07XG4gICAgICBsZXQgaW5zdHJ1bWVudGF0aW9uOlxuICAgICAgICB8IHtcbiAgICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgICAgICAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gICAgICAgICAgICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbCkge1xuICAgICAgICBpbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgZW1pdEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNvdXJjZTogbm9ybWFsaXplZC5zb3VyY2UsXG4gICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uU25hcHNob3QsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwcmVsb2FkQ29udGV4dCA9IHJlc29sdmVDb250ZXh0KCk7XG4gICAgICBjb25zdCBwcmVsb2FkUXVlcnlTY2hlbWEgPSByZWFkQWN0aXZlUXVlcnlTY2hlbWEobWF0Y2hlcyk7XG4gICAgICBjb25zdCBwcmVsb2FkU2VhcmNoU3RhdGUgPSBwYXJzZVNlYXJjaFN0YXRlKFxuICAgICAgICBub3JtYWxpemVkLnNlYXJjaCxcbiAgICAgICAgcHJlbG9hZFF1ZXJ5U2NoZW1hLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgICAgIG1hdGNoZXMsXG4gICAgICAgIGJ1aWxkUHJlcGFyZVF1ZXJ5SW5wdXQocHJlbG9hZFNlYXJjaFN0YXRlLCBwcmVsb2FkUXVlcnlTY2hlbWEpLFxuICAgICAgICBpbnN0cnVtZW50YXRpb24sXG4gICAgICAgIHByZWxvYWRDb250ZXh0LFxuICAgICAgKTtcbiAgICAgIHByZXBhcmVkTWF0Y2guc2VnbWVudHMuZm9yRWFjaCgocm91dGUpID0+IHtcbiAgICAgICAgaWYgKHJvdXRlLnByZXBhcmVkUmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICByb3V0ZS5wcmVwYXJlZFJlc291cmNlLmxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIG5leHRJZCArPSAxO1xuICAgICAgY29uc3QgaWQgPSBuZXh0SWQ7XG4gICAgICAvKiogUmVtb3ZlcyB0aGUgc3Vic2NyaWJlciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdmlhIHN1YnNjcmliZS4gKi9cbiAgICAgIGZ1bmN0aW9uIGRpc3Bvc2VDYWxsYmFjaygpIHtcbiAgICAgICAgc3Vic2NyaWJlcnMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICAgIHN1YnNjcmliZXJzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGRpc3Bvc2VDYWxsYmFjaztcbiAgICB9LFxuICAgIG5hdmlnYXRlKHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgcXVlcnksXG4gICAgICBmaWx0ZXJzOiBuYXZGaWx0ZXJzLFxuICAgICAgcmVwbGFjZSxcbiAgICB9OiB7XG4gICAgICBwYXRobmFtZT86IHN0cmluZztcbiAgICAgIHF1ZXJ5PzogVW5rbm93blF1ZXJ5U2hhcGU7XG4gICAgICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICB9KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY3VycmVudEVudHJ5O1xuICAgICAgbGV0IHRhcmdldFBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICB0YXJnZXRQYXRobmFtZSA/Pz0gY3VycmVudC5sb2NhdGlvbi5wYXRobmFtZTtcblxuICAgICAgY29uc3QgZGVzdGluYXRpb25Sb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiB0YXJnZXRQYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgbGV0IGRlc3RTY2hlbWEgPSByZWFkQWN0aXZlUXVlcnlTY2hlbWEoZGVzdGluYXRpb25Sb3V0ZSk7XG4gICAgICBkZXN0U2NoZW1hID0gZGVzdFNjaGVtYSA/PyBjdXJyZW50LmFjdGl2ZVF1ZXJ5U2NoZW1hO1xuXG4gICAgICBjb25zdCBoYXNTY2hlbWEgPSBkZXN0U2NoZW1hICE9IG51bGw7XG4gICAgICBjb25zdCB1c2VRdWVyeUFzRmlsdGVycyA9XG4gICAgICAgIG5hdkZpbHRlcnMgPT0gbnVsbCAmJlxuICAgICAgICBoYXNTY2hlbWEgJiZcbiAgICAgICAgcXVlcnkgIT0gbnVsbCAmJlxuICAgICAgICBsb29rc0xpa2VGaWx0ZXJzKHF1ZXJ5KTtcbiAgICAgIGxldCBmaWx0ZXJzSW5wdXQgPSBuYXZGaWx0ZXJzO1xuICAgICAgaWYgKGZpbHRlcnNJbnB1dCA9PSBudWxsKSB7XG4gICAgICAgIGlmICh1c2VRdWVyeUFzRmlsdGVycykge1xuICAgICAgICAgIGZpbHRlcnNJbnB1dCA9IHF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlcnNJbnB1dCA9IGN1cnJlbnQuZmlsdGVycztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IHJhd1F1ZXJ5SW5wdXQ6IFVua25vd25RdWVyeVNoYXBlIHwgUmF3UXVlcnkgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodXNlUXVlcnlBc0ZpbHRlcnMpIHtcbiAgICAgICAgcmF3UXVlcnlJbnB1dCA9IGN1cnJlbnQucXVlcnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYXdRdWVyeUlucHV0ID0gcXVlcnkgPz8gY3VycmVudC5xdWVyeTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzSW5wdXQsXG4gICAgICAgIHF1ZXJ5OiByYXdRdWVyeUlucHV0LFxuICAgICAgICBxdWVyeVNjaGVtYTogZGVzdFNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25PYmogPSB7IHBhdGhuYW1lOiB0YXJnZXRQYXRobmFtZSwgc2VhcmNoLCBoYXNoOiAnJyB9O1xuICAgICAgY29uc3Qgb3JpZ2luOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ3Byb2dyYW1tYXRpYyc7XG4gICAgICBjb25zdCBkZWJ1Z0NvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgdHJpZ2dlcjogJ3Byb2dyYW1tYXRpYycsXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVwbGFjZSA9PT0gdHJ1ZSkge1xuICAgICAgICBlbWl0SGlzdG9yeUV2ZW50KCdyZXBsYWNlJywgb3JpZ2luLCBsb2NhdGlvbk9iaiwge1xuICAgICAgICAgIHRyaWdnZXI6ICdwcm9ncmFtbWF0aWMnLFxuICAgICAgICB9KTtcbiAgICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICAgIC4uLmxvY2F0aW9uT2JqLFxuICAgICAgICAgIGRlYnVnQ29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0SGlzdG9yeUV2ZW50KCdwdXNoJywgb3JpZ2luLCBsb2NhdGlvbk9iaiwge1xuICAgICAgICAgIHRyaWdnZXI6ICdwcm9ncmFtbWF0aWMnLFxuICAgICAgICB9KTtcbiAgICAgICAgaGlzdG9yeS5wdXNoKHtcbiAgICAgICAgICAuLi5sb2NhdGlvbk9iaixcbiAgICAgICAgICBkZWJ1Z0NvbnRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UHJlcGFyZWQsXG4gICAgZ2V0UHJlcGFyZWRTZWdtZW50cyxcbiAgfSBhcyBDcmVhdGVSb3V0ZXJSZXR1cm48VENvbnRleHQsIFI+Wydjb250ZXh0J107XG5cbiAgLyoqIFJlbGVhc2VzIHJvdXRlciByZXNvdXJjZXMgYW5kIGRldGFjaGVzIGFsbCBpbnN0cnVtZW50YXRpb25zLiAqL1xuICBmdW5jdGlvbiBjbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmIChyb3V0ZXJEaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByb3V0ZXJEaXNwb3NlZCA9IHRydWU7XG4gICAgZGlzcG9zZUhpc3RvcnkoKTtcbiAgICBoaXN0b3J5LmRpc3Bvc2UoKTtcbiAgICBzdWJzY3JpYmVycy5jbGVhcigpO1xuICAgIHJlZ2lzdHJ5LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIHJldHVybiB7IGNvbnRleHQsIGNsZWFudXAgfTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { type Schema as FilterSchema } from '@plumile/filter-query';
1
+ import { type Schema as FilterSchema } from '@plumile/filter-query/types.js';
2
2
  import type { ParamData } from 'path-to-regexp';
3
3
  import type { AnyRoute, RouteEntry, RoutingContextType, UnknownQueryShape } from '../types.js';
4
4
  type RouterQuerySchema = FilterSchema | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"createStaticRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createStaticRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,IAAI,YAAY,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,kBAAkB,EAElB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAErB,KAAK,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,QAAQ,IAAI;IAChD,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,IAAI;IACrE,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,CAAC;IACF,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AA2HF,wBAAsB,kBAAkB,CACtC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAEjC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAC3B,OAAO,EAAE,yBAAyB,CAAC,QAAQ,CAAC,GAC3C,OAAO,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CA6ChD;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"createStaticRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createStaticRouter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,kBAAkB,EAElB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAErB,KAAK,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,CAAC,QAAQ,IAAI;IAChD,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,oBAAoB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,wBAAwB,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,IAAI;IACrE,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,CAAC;IACF,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,CAAC;CACX,CAAC;AA2HF,wBAAsB,kBAAkB,CACtC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAEjC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAC3B,OAAO,EAAE,yBAAyB,CAAC,QAAQ,CAAC,GAC3C,OAAO,CAAC,wBAAwB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CA6ChD;AAED,eAAe,kBAAkB,CAAC"}