tnp-helpers 18.0.18 → 18.0.20

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 (174) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/README.md +24 -24
  3. package/browser/esm2022/lib/base/classes/base-cli-worker.mjs +57 -8
  4. package/browser/esm2022/lib/base/classes/base-git.mjs +16 -1
  5. package/browser/esm2022/lib/base/classes/base-library-build.mjs +31 -10
  6. package/browser/esm2022/lib/base/classes/base-npm-helpers.mjs +5 -6
  7. package/browser/esm2022/lib/base/classes/base-project.mjs +12 -31
  8. package/browser/esm2022/lib/base/classes/base-release-process.mjs +8 -43
  9. package/browser/esm2022/lib/base/classes/base-vscode.mjs +28 -1
  10. package/browser/esm2022/lib/base/commit-data.mjs +5 -6
  11. package/browser/esm2022/lib/base/core-project.mjs +1 -1
  12. package/browser/esm2022/lib/base/tcp-udp-ports/index.mjs +1 -2
  13. package/browser/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +169 -17
  14. package/browser/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +10 -3
  15. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -3
  16. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +187 -11
  17. package/browser/esm2022/lib/index.mjs +1 -4
  18. package/browser/esm2022/lib/models.mjs +1 -1
  19. package/browser/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +16 -8
  20. package/browser/esm2022/migrations/1736454437350_addFreePorts.mjs +20 -7
  21. package/browser/fesm2022/tnp-helpers.mjs +544 -150
  22. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  23. package/browser/lib/base/classes/base-cli-worker.d.ts +28 -5
  24. package/browser/lib/base/classes/base-git.d.ts +8 -0
  25. package/browser/lib/base/classes/base-library-build.d.ts +3 -6
  26. package/browser/lib/base/classes/base-npm-helpers.d.ts +5 -1
  27. package/browser/lib/base/classes/base-project.d.ts +3 -2
  28. package/browser/lib/base/classes/base-release-process.d.ts +13 -10
  29. package/browser/lib/base/core-project.d.ts +1 -1
  30. package/browser/lib/base/tcp-udp-ports/index.d.ts +0 -1
  31. package/browser/lib/base/tcp-udp-ports/ports.controller.d.ts +15 -6
  32. package/browser/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
  33. package/browser/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +10 -8
  34. package/browser/lib/index.d.ts +1 -3
  35. package/browser/lib/models.d.ts +0 -6
  36. package/client/README.md +24 -24
  37. package/client/esm2022/lib/base/classes/base-cli-worker.mjs +57 -8
  38. package/client/esm2022/lib/base/classes/base-git.mjs +16 -1
  39. package/client/esm2022/lib/base/classes/base-library-build.mjs +31 -10
  40. package/client/esm2022/lib/base/classes/base-npm-helpers.mjs +5 -6
  41. package/client/esm2022/lib/base/classes/base-project.mjs +12 -31
  42. package/client/esm2022/lib/base/classes/base-release-process.mjs +8 -43
  43. package/client/esm2022/lib/base/classes/base-vscode.mjs +28 -1
  44. package/client/esm2022/lib/base/commit-data.mjs +5 -6
  45. package/client/esm2022/lib/base/core-project.mjs +1 -1
  46. package/client/esm2022/lib/base/tcp-udp-ports/index.mjs +1 -2
  47. package/client/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +169 -17
  48. package/client/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +10 -3
  49. package/client/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -3
  50. package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +187 -11
  51. package/client/esm2022/lib/index.mjs +1 -4
  52. package/client/esm2022/lib/models.mjs +1 -1
  53. package/client/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +16 -8
  54. package/client/esm2022/migrations/1736454437350_addFreePorts.mjs +20 -7
  55. package/client/fesm2022/tnp-helpers.mjs +544 -150
  56. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  57. package/client/lib/base/classes/base-cli-worker.d.ts +28 -5
  58. package/client/lib/base/classes/base-git.d.ts +8 -0
  59. package/client/lib/base/classes/base-library-build.d.ts +3 -6
  60. package/client/lib/base/classes/base-npm-helpers.d.ts +5 -1
  61. package/client/lib/base/classes/base-project.d.ts +3 -2
  62. package/client/lib/base/classes/base-release-process.d.ts +13 -10
  63. package/client/lib/base/core-project.d.ts +1 -1
  64. package/client/lib/base/tcp-udp-ports/index.d.ts +0 -1
  65. package/client/lib/base/tcp-udp-ports/ports.controller.d.ts +15 -6
  66. package/client/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
  67. package/client/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +10 -8
  68. package/client/lib/index.d.ts +1 -3
  69. package/client/lib/models.d.ts +0 -6
  70. package/lib/base/classes/base-cli-worker-controller.js +1 -1
  71. package/lib/base/classes/base-cli-worker-controller.js.map +1 -1
  72. package/lib/base/classes/base-cli-worker.d.ts +28 -5
  73. package/lib/base/classes/base-cli-worker.js +104 -34
  74. package/lib/base/classes/base-cli-worker.js.map +1 -1
  75. package/lib/base/classes/base-git.d.ts +8 -0
  76. package/lib/base/classes/base-git.js +32 -0
  77. package/lib/base/classes/base-git.js.map +1 -1
  78. package/lib/base/classes/base-global-command-line.backend.d.ts +4 -0
  79. package/lib/base/classes/base-global-command-line.backend.js +25 -0
  80. package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
  81. package/lib/base/classes/base-library-build.d.ts +3 -6
  82. package/lib/base/classes/base-library-build.js +46 -29
  83. package/lib/base/classes/base-library-build.js.map +1 -1
  84. package/lib/base/classes/base-npm-helpers.d.ts +2 -0
  85. package/lib/base/classes/base-npm-helpers.js +11 -3
  86. package/lib/base/classes/base-npm-helpers.js.map +1 -1
  87. package/lib/base/classes/base-project.d.ts +3 -2
  88. package/lib/base/classes/base-project.js +18 -43
  89. package/lib/base/classes/base-project.js.map +1 -1
  90. package/lib/base/classes/base-release-process.d.ts +13 -10
  91. package/lib/base/classes/base-release-process.js +15 -88
  92. package/lib/base/classes/base-release-process.js.map +1 -1
  93. package/lib/base/classes/base-start-config.backend.js +1 -1
  94. package/lib/base/classes/base-start-config.backend.js.map +1 -1
  95. package/lib/base/classes/base-vscode.js +45 -25
  96. package/lib/base/classes/base-vscode.js.map +1 -1
  97. package/lib/base/commit-data.js +9 -10
  98. package/lib/base/commit-data.js.map +1 -1
  99. package/lib/base/core-project.d.ts +1 -1
  100. package/lib/base/tcp-udp-ports/index.d.ts +0 -1
  101. package/lib/base/tcp-udp-ports/index.js +0 -1
  102. package/lib/base/tcp-udp-ports/index.js.map +1 -1
  103. package/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -6
  104. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -42
  105. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js.map +1 -1
  106. package/lib/base/tcp-udp-ports/ports.controller.d.ts +14 -5
  107. package/lib/base/tcp-udp-ports/ports.controller.js +227 -19
  108. package/lib/base/tcp-udp-ports/ports.controller.js.map +1 -1
  109. package/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
  110. package/lib/base/tcp-udp-ports/ports.entity.js +32 -2
  111. package/lib/base/tcp-udp-ports/ports.entity.js.map +1 -1
  112. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +1 -2
  113. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
  114. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +14 -8
  115. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +293 -30
  116. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
  117. package/lib/helpers/for-backend/helpers-git.backend.d.ts +10 -0
  118. package/lib/helpers/for-backend/helpers-git.backend.js +59 -0
  119. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
  120. package/lib/helpers/for-browser/angular.helper.js +2 -2
  121. package/lib/index.d.ts +1 -3
  122. package/lib/index.js +0 -3
  123. package/lib/index.js.map +1 -1
  124. package/lib/models.d.ts +0 -6
  125. package/lib/old/base-component.js +2 -2
  126. package/lib/old/base-formly-component.js +2 -2
  127. package/lib/old/dual-component-ctrl.js +2 -2
  128. package/migrations/1736199486472_addingNotAssignablePorts.js +33 -10
  129. package/migrations/1736199486472_addingNotAssignablePorts.js.map +1 -1
  130. package/migrations/1736454437350_addFreePorts.js +42 -14
  131. package/migrations/1736454437350_addFreePorts.js.map +1 -1
  132. package/package.json +5 -5
  133. package/taon.jsonc +49 -49
  134. package/tmp-environment.json +29 -29
  135. package/websql/README.md +24 -24
  136. package/websql/esm2022/lib/base/classes/base-cli-worker.mjs +57 -8
  137. package/websql/esm2022/lib/base/classes/base-git.mjs +16 -1
  138. package/websql/esm2022/lib/base/classes/base-library-build.mjs +31 -10
  139. package/websql/esm2022/lib/base/classes/base-npm-helpers.mjs +5 -6
  140. package/websql/esm2022/lib/base/classes/base-project.mjs +12 -31
  141. package/websql/esm2022/lib/base/classes/base-release-process.mjs +8 -43
  142. package/websql/esm2022/lib/base/classes/base-vscode.mjs +28 -1
  143. package/websql/esm2022/lib/base/commit-data.mjs +5 -6
  144. package/websql/esm2022/lib/base/core-project.mjs +1 -1
  145. package/websql/esm2022/lib/base/tcp-udp-ports/index.mjs +1 -2
  146. package/websql/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +169 -17
  147. package/websql/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +25 -3
  148. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -3
  149. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +187 -11
  150. package/websql/esm2022/lib/index.mjs +1 -4
  151. package/websql/esm2022/lib/models.mjs +1 -1
  152. package/websql/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +16 -8
  153. package/websql/esm2022/migrations/1736454437350_addFreePorts.mjs +20 -7
  154. package/websql/fesm2022/tnp-helpers.mjs +560 -166
  155. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  156. package/websql/lib/base/classes/base-cli-worker.d.ts +28 -5
  157. package/websql/lib/base/classes/base-git.d.ts +8 -0
  158. package/websql/lib/base/classes/base-library-build.d.ts +3 -6
  159. package/websql/lib/base/classes/base-npm-helpers.d.ts +2 -0
  160. package/websql/lib/base/classes/base-project.d.ts +3 -2
  161. package/websql/lib/base/classes/base-release-process.d.ts +13 -10
  162. package/websql/lib/base/core-project.d.ts +1 -1
  163. package/websql/lib/base/tcp-udp-ports/index.d.ts +0 -1
  164. package/websql/lib/base/tcp-udp-ports/ports.controller.d.ts +15 -6
  165. package/websql/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
  166. package/websql/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +10 -8
  167. package/websql/lib/index.d.ts +1 -3
  168. package/websql/lib/models.d.ts +0 -6
  169. package/browser/esm2022/lib/base/tcp-udp-ports/not-assignable-port.entity.mjs +0 -19
  170. package/browser/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -7
  171. package/client/esm2022/lib/base/tcp-udp-ports/not-assignable-port.entity.mjs +0 -19
  172. package/client/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -7
  173. package/websql/esm2022/lib/base/tcp-udp-ports/not-assignable-port.entity.mjs +0 -34
  174. package/websql/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -7
@@ -16,6 +16,7 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
16
16
  * unique id for service
17
17
  */
18
18
  protected readonly serviceVersion: string;
19
+ protected SPECIAL_WORKER_READY_MESSAGE: string;
19
20
  constructor(
20
21
  /**
21
22
  * unique id for service
@@ -33,7 +34,9 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
33
34
  abstract getControllerForRemoteConnection(): Promise<REMOTE_CTRL>;
34
35
  protected get pathToProcessLocalInfoJson(): string;
35
36
  protected get processLocalInfoObj(): BaseCliWorkerConfig;
36
- startDetachedIfNeedsToBeStarted(): Promise<any>;
37
+ startDetachedIfNeedsToBeStarted(options?: {
38
+ useCurrentWindowForDetach?: boolean;
39
+ }): Promise<any>;
37
40
  /**
38
41
  * stop if started
39
42
  */
@@ -46,6 +49,7 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
46
49
  */
47
50
  restart(options?: {
48
51
  detached?: boolean;
52
+ useCurrentWindowForDetach?: boolean;
49
53
  }): Promise<void>;
50
54
  /**
51
55
  * only for cli start
@@ -66,7 +70,9 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
66
70
  /**
67
71
  * start if not started detached process
68
72
  */
69
- protected startDetached(): Promise<any>;
73
+ protected startDetached(options?: {
74
+ useCurrentWindowForDetach?: boolean;
75
+ }): Promise<any>;
70
76
  protected headerText(): Promise<string>;
71
77
  protected textHeaderStyle(): CfontStyle;
72
78
  protected headerTextAlign(): CfontAlign;
@@ -75,13 +81,30 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
75
81
  */
76
82
  protected header(): Promise<void>;
77
83
  infoMessageBelowHeader(): Promise<void>;
78
- protected getWorkerTerminalActions(): {
84
+ protected get backAction(): {
85
+ back: {
86
+ name: string;
87
+ };
88
+ };
89
+ protected get chooseAction(): {
90
+ emptyAction: {
91
+ name: string;
92
+ action: () => Promise<void>;
93
+ };
94
+ };
95
+ protected displaySpecialWorkerReadyMessage(): void;
96
+ protected getWorkerTerminalActions(options?: {
97
+ exitIsOnlyReturn?: boolean;
98
+ chooseAction?: boolean;
99
+ }): {
79
100
  [uniqeActionName: string]: {
80
101
  name: string;
81
- action: () => void | Promise<void>;
102
+ action: () => unknown | Promise<unknown>;
82
103
  };
83
104
  };
84
- protected _infoScreen(): Promise<void>;
105
+ infoScreen(options?: {
106
+ exitIsOnlyReturn?: boolean;
107
+ }): Promise<void>;
85
108
  private saveProcessInfo;
86
109
  protected initializeWorkerMetadata(): Promise<any>;
87
110
  protected waitForProcessPortSavedToDisk(): Promise<void>;
@@ -24,6 +24,14 @@ export declare class BaseGit<PROJECT extends BaseProject = any> extends BaseFeat
24
24
  * alias to stage all and commit
25
25
  */
26
26
  addAndCommit(commitMessage: string): any;
27
+ getUserInfo(global?: boolean): Promise<{
28
+ name?: string;
29
+ email?: string;
30
+ }>;
31
+ setUserInfo({ name, email }: {
32
+ name?: string;
33
+ email?: string;
34
+ }, global?: boolean): Promise<void>;
27
35
  stageAllAndCommit(commitMessage: string): any;
28
36
  pushCurrentBranch(options?: {
29
37
  force?: boolean;
@@ -1,5 +1,4 @@
1
1
  // @ts-nocheck
2
- import { CoreModels } from 'tnp-core/browser';
3
2
  import { BaseFeatureForProject } from './base-feature-for-project';
4
3
  import { LibrariesBuildOptions, LibraryBuildCommandOptions } from '../../models';
5
4
  import type { BaseProject } from './base-project';
@@ -39,21 +38,19 @@ export declare abstract class BaseLibraryBuild<PROJECT extends BaseProject<BaseP
39
38
  /**
40
39
  * Angular library build
41
40
  */
42
- buildLibraries({ watch, strategy, releaseBuild, buildType, copylink_to_node_modules, outputLineReplace, libraries, useLastUserConfiguration, }?: LibrariesBuildOptions<PROJECT> & {
41
+ buildLibraries({ watch, strategy, releaseBuild, copylink_to_node_modules, outputLineReplace, libraries, useLastUserConfiguration, }?: LibrariesBuildOptions<PROJECT> & {
43
42
  watch?: boolean;
44
43
  }): Promise<void>;
45
- protected libWatchBuildProcess({ lib, locationsForNodeModules, strategy, buildType, outputLineReplace, }: {
44
+ protected libWatchBuildProcess({ lib, locationsForNodeModules, strategy, outputLineReplace, }: {
46
45
  lib: PROJECT;
47
46
  locationsForNodeModules: string[];
48
47
  strategy: 'link' | 'copy';
49
- buildType: CoreModels.LibraryType;
50
48
  outputLineReplace?: (outputLine: string) => string;
51
49
  }): Promise<any>;
52
- protected libNormalBuildProcess({ lib, locationsForNodeModules, strategy, buildType, outputLineReplace, }: {
50
+ protected libNormalBuildProcess({ lib, locationsForNodeModules, strategy, outputLineReplace, }: {
53
51
  lib: PROJECT;
54
52
  locationsForNodeModules: string[];
55
53
  strategy: 'link' | 'copy';
56
- buildType: CoreModels.LibraryType;
57
54
  outputLineReplace?: (outputLine: string) => string;
58
55
  }): Promise<any>;
59
56
  getLibraryBuildComamnd(options?: LibraryBuildCommandOptions): string | undefined;
@@ -5,6 +5,7 @@ import { PackageJson } from 'type-fest';
5
5
  import { CoreModels } from 'tnp-core/browser';
6
6
  export declare class BaseNpmHelpers<PROJECT extends BaseProject = any> extends BaseFeatureForProject {
7
7
  private packageJSON;
8
+ private bowerJson;
8
9
  constructor(project: PROJECT);
9
10
  updateDepsFrom(locations: string[]): any;
10
11
  /**
@@ -61,6 +62,7 @@ export declare class BaseNpmHelpers<PROJECT extends BaseProject = any> extends B
61
62
  * npm dependencies from package.json
62
63
  */
63
64
  get dependencies(): Partial<Record<string, string>>;
65
+ get bowerDependencies(): Partial<Record<string, string>>;
64
66
  /**
65
67
  * peerDependencies dependencies
66
68
  */
@@ -101,7 +103,9 @@ export declare class BaseNpmHelpers<PROJECT extends BaseProject = any> extends B
101
103
  stdoutMsg: string | string[];
102
104
  stderMsg?: string | string[];
103
105
  timeout?: number;
104
- stdoutOutputContainsCallback?: () => any;
106
+ stdoutOutputContainsCallback? /**
107
+ * resolutions dependencies
108
+ */: () => any;
105
109
  outputLineReplace?: (outputLine: string) => string;
106
110
  }): Promise<void>;
107
111
  unitlOutputContains(stdoutMsg: string | string[], stderMsg?: string | string[], timeout?: number, stdoutOutputContainsCallback?: () => any): any;
@@ -162,14 +162,15 @@ export declare abstract class BaseProject<PROJECT extends BaseProject = BaseProj
162
162
  };
163
163
  remove(relativePath: string | string[], exactPath?: boolean): any;
164
164
  removeFolderByRelativePath(relativePathToFolder: string): void;
165
+ get isAngularLib(): any;
165
166
  protected getUniqueForTask(task: string): string;
166
167
  registerAndAssignPort(taskName: string, options?: {
167
168
  startFrom?: number;
168
169
  }): Promise<number>;
169
170
  /**
170
- * @deprecated use registerAndAssignPort() instead
171
+ * @deprecated use this.registerAndAssignPort() or Utils.getFreePort() instead
171
172
  */
172
- assignFreePort(startFrom?: number, howManyFreePortsAfterThatPort?: number): Promise<number>;
173
+ assignFreePort(startFrom?: number): Promise<number>;
173
174
  removeItself(): void;
174
175
  /**
175
176
  * Purpose: not initializing all classes at the beginning
@@ -3,31 +3,34 @@ import { BaseFeatureForProject } from './base-feature-for-project';
3
3
  import type { BaseProject } from './base-project';
4
4
  import { CoreModels } from 'tnp-core/browser';
5
5
  import type { ChangelogData } from '../../models';
6
- export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> = any> extends BaseFeatureForProject {
6
+ export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> = any, ARTIFACT = string> extends BaseFeatureForProject {
7
7
  project: PROJECT;
8
8
  /**
9
9
  * Automatic release process of patch plus one version
10
10
  */
11
11
  automaticRelease: boolean;
12
- type: CoreModels.ReleaseType;
12
+ versionType: CoreModels.ReleaseVersionType;
13
+ processType: CoreModels.ReleaseProcessType;
14
+ releaseArtifactName: ARTIFACT;
15
+ preReleaseVersionTag: CoreModels.PreReleaseVersionTag;
13
16
  lastChangesSummary: string;
14
17
  newVersion: string;
15
18
  commitsForChangelog: {
16
19
  commitMessages: string;
17
20
  index: number;
18
21
  }[];
22
+ startRelease(options?: Partial<BaseReleaseProcess<PROJECT>>): Promise<void>;
19
23
  getReleaseWords(): string[];
20
- startRelease(options?: Partial<Pick<BaseReleaseProcess<PROJECT>, 'automaticRelease' | 'type' | 'newVersion'>>): Promise<void>;
21
- private reinstallNodeModules;
24
+ protected reinstallNodeModules(): Promise<void>;
22
25
  selectChangelogCommits(): Promise<{
23
26
  commitMessages: string;
24
27
  index: number;
25
28
  }[]>;
26
29
  private getCommitsUpToReleaseCommit;
27
- private publishToNpm;
28
- private testAfterPublish;
29
- private testBeforePublish;
30
- private commitAndPush;
30
+ protected publishToNpm(): Promise<boolean>;
31
+ protected testAfterPublish(): Promise<boolean>;
32
+ protected testBeforePublish(): Promise<boolean>;
33
+ protected commitAndPush(): Promise<void>;
31
34
  protected releaseCommitTemplate(): string;
32
35
  private testLibraries;
33
36
  buildAllLibraries(): Promise<void>;
@@ -35,7 +38,7 @@ export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> =
35
38
  get toBumpProjects(): PROJECT[];
36
39
  bumpNewVersionEverywhere(): Promise<any>;
37
40
  confirmNewVersion(): Promise<void>;
38
- private selectReleaseType;
41
+ protected selectReleaseType(): Promise<CoreModels.ReleaseVersionType>;
39
42
  protected commitMessageInChangelogTransformFn(message: string): Promise<string>;
40
43
  getChangelogContentToAppend(askForEveryItem: boolean): Promise<string>;
41
44
  /**
@@ -56,7 +59,7 @@ export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> =
56
59
  stopOnCommitMessage?: string;
57
60
  }): Promise<string>;
58
61
  getLastReleaseCommitData(): Promise<{
59
- lastRelaseCommitMsg: string;
62
+ lastReleaseCommitMsg: string;
60
63
  /**
61
64
  * -1 if not found
62
65
  */
@@ -73,7 +73,7 @@ export declare class CoreProject<PROJECT extends BaseProject = BaseProject> {
73
73
  */
74
74
  environments?: CoreProjectEnvironment[];
75
75
  startCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
76
- relaseCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
76
+ releaseCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
77
77
  publishCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
78
78
  deployCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
79
79
  testCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
@@ -1,5 +1,4 @@
1
1
  // @ts-nocheck
2
- export * from './not-assignable-port.entity';
3
2
  export * from './ports.entity';
4
3
  export * from './ports.controller';
5
4
  export * from './tcp-upd-ports.worker';
@@ -2,15 +2,24 @@
2
2
  import { Taon } from 'taon/browser';
3
3
  import { BaseCliWorkerController } from '../classes/base-cli-worker-controller';
4
4
  import { Port, PortStatus } from './ports.entity';
5
- import { NotAssignablePort } from './not-assignable-port.entity';
6
5
  export declare class PortsController extends BaseCliWorkerController {
7
6
  START_PORT: number;
8
7
  END_PORT: number;
9
- readonly takenByOsPorts: Map<number, NotAssignablePort>;
10
- readonly assignedPorts: Map<string, Port>;
11
- get firstFreePort(): Port;
12
- protected firstUnassignedPortMoreThan(port: number): Port;
13
- getPortByStatus(status: PortStatus): Taon.Response<Port[]>;
8
+ readonly portsCache: Map<string, Port>;
9
+ protected get firstFreePort(): any;
10
+ protected firstUnassignedPortMoreThan(port: number): any;
11
+ getFirstFreePort(): Taon.Response<Port>;
12
+ getPortByNumber(portNumber: number): Taon.Response<Port>;
13
+ getPortsByStatus(status: PortStatus): Taon.Response<Port[]>;
14
+ /**
15
+ * make it unassigned
16
+ */
17
+ deletePort(portNumber: number): Taon.Response<Port>;
18
+ /**
19
+ * make it unassigned
20
+ */
21
+ updatePortUniqueId(portNumber: number, serviceId: string): Taon.Response<Port>;
22
+ addTakeByOsPort(portNumber: number, uniqueId: string): Taon.Response<Port>;
14
23
  /**
15
24
  * @param uniqueServiceName unique service name
16
25
  * @param startFrom start searching for free port from this number
@@ -1,13 +1,17 @@
1
1
  // @ts-nocheck
2
- import { NotAssignablePort } from './not-assignable-port.entity';
2
+ import { Taon } from 'taon/browser';
3
3
  export type PortStatus = 'unassigned' | 'assigned' | 'assigned-not-registered' | 'assigned-taken-by-os';
4
4
  export declare const PortStatusArr: PortStatus[];
5
- export declare class Port extends NotAssignablePort {
6
- static from(opt: Omit<Port, 'version' | '_' | 'clone'>): Port & Omit<Port, "_" | "version" | "clone">;
5
+ export declare class Port extends Taon.Base.Entity {
6
+ static from(opt: Omit<Port, 'version' | '_' | 'clone' | 'titleOnList'>): Port & Omit<Port, "_" | "version" | "clone" | "titleOnList">;
7
+ static getTitleForFreePort(port: Number): string;
8
+ get titleOnList(): string;
9
+ port: number;
10
+ serviceId: string;
7
11
  /**
8
12
  * Port status
9
13
  */
10
- status?: PortStatus;
14
+ status: PortStatus;
11
15
  /**
12
16
  * When port was assigned as registered service
13
17
  */
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  import { BaseCliWorker, CfontStyle } from '../classes/base-cli-worker';
3
- import { PortStatus } from '../../index';
3
+ import { Port, PortStatus } from '../../index';
4
4
  import { PortsController } from '../tcp-udp-ports/ports.controller';
5
5
  export declare class PortsWorker extends BaseCliWorker<PortsController> {
6
6
  private portsController;
@@ -13,11 +13,13 @@ export declare class PortsWorker extends BaseCliWorker<PortsController> {
13
13
  */
14
14
  startNormallyInCurrentProcess(): Promise<any>;
15
15
  protected displayItemsForPortsStatus(status: PortStatus): Promise<any>;
16
- get backAction(): {
17
- back: {
18
- name: string;
19
- action: () => Promise<boolean>;
20
- };
21
- };
22
- getWorkerTerminalActions(): any;
16
+ getWorkerTerminalActions(options?: {
17
+ exitIsOnlyReturn?: boolean;
18
+ }): any;
19
+ protected getNewPortToAdd(): Promise<number>;
20
+ protected addPortTerminalUiProcess(): Promise<void>;
21
+ protected selectPortProcess(ports: Port[], title: string): Promise<Port>;
22
+ protected deletePortTerminalUiProcess(): Promise<any>;
23
+ protected editPortTerminalUiProcess(): Promise<any>;
24
+ protected crudMenuForTakeByOsPorts(): Promise<void>;
23
25
  }
@@ -3,8 +3,6 @@ export * from './validators/validators';
3
3
  export { HelpersAngular } from './helpers/for-browser/angular.helper';
4
4
  export * from './utils';
5
5
  import { HelpersTaon as Base } from './helpers/helpers';
6
- /**
7
- * Taon helpers
8
- */ export declare const Helpers: Base;
6
+ export declare const Helpers: Base;
9
7
  export * from './base';
10
8
  export * from './models';
@@ -20,15 +20,9 @@ export type NgProject = {
20
20
  };
21
21
  export type LibraryBuildCommandOptions = {
22
22
  watch?: boolean;
23
- buildType: core.CoreModels.LibraryType;
24
23
  };
25
24
  export type LibrariesBuildOptions<PROJECT extends BaseProject = BaseProject> = {
26
25
  strategy?: 'link' | 'copy';
27
- /**
28
- * @deprecated
29
- * this will be detected in future
30
- */
31
- buildType: core.CoreModels.LibraryType;
32
26
  /**
33
27
  * by default we are copying all libraries to node_modules of itself
34
28
  */
package/client/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # MyLib
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
8
- > Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
1
+ # MyLib
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
8
+ > Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -19,6 +19,7 @@ export class BaseCliWorker {
19
19
  this.serviceID = serviceID;
20
20
  this.startCommand = startCommand;
21
21
  this.serviceVersion = serviceVersion;
22
+ this.SPECIAL_WORKER_READY_MESSAGE = '$$$ WORKER_READY $$$';
22
23
  }
23
24
  get pathToProcessLocalInfoJson() {
24
25
  /* */
@@ -40,7 +41,7 @@ export class BaseCliWorker {
40
41
  /* */
41
42
  return (void 0);
42
43
  }
43
- async startDetachedIfNeedsToBeStarted() {
44
+ async startDetachedIfNeedsToBeStarted(options) {
44
45
  /* */
45
46
  /* */
46
47
  /* */
@@ -96,7 +97,7 @@ export class BaseCliWorker {
96
97
  //longer because os is disposing process previous process
97
98
  if (options.detached) {
98
99
  Helpers.info(`Restarting service "${this.serviceID}" in detached mode...`);
99
- await this.startDetached();
100
+ await this.startDetached(options);
100
101
  }
101
102
  else {
102
103
  Helpers.info(`Restarting service "${this.serviceID}" in current process...`);
@@ -262,12 +263,25 @@ export class BaseCliWorker {
262
263
  /* */
263
264
  /* */
264
265
  /* */
266
+ /* */
267
+ /* */
268
+ /* */
265
269
  return (void 0);
266
270
  }
267
271
  /**
268
272
  * start if not started detached process
269
273
  */
270
- async startDetached() {
274
+ async startDetached(options) {
275
+ /* */
276
+ /* */
277
+ /* */
278
+ /* */
279
+ /* */
280
+ /* */
281
+ /* */
282
+ /* */
283
+ /* */
284
+ /* */
271
285
  /* */
272
286
  /* */
273
287
  /* */
@@ -336,7 +350,38 @@ export class BaseCliWorker {
336
350
  /* */
337
351
  return (void 0);
338
352
  }
339
- getWorkerTerminalActions() {
353
+ get backAction() {
354
+ return {
355
+ back: {
356
+ name: 'Back',
357
+ },
358
+ };
359
+ }
360
+ get chooseAction() {
361
+ return {
362
+ emptyAction: {
363
+ name: ' -- choose any action below --',
364
+ action: async () => { },
365
+ },
366
+ };
367
+ }
368
+ displaySpecialWorkerReadyMessage() {
369
+ console.log(this.SPECIAL_WORKER_READY_MESSAGE);
370
+ }
371
+ getWorkerTerminalActions(options) {
372
+ /* */
373
+ /* */
374
+ /* */
375
+ /* */
376
+ /* */
377
+ /* */
378
+ /* */
379
+ /* */
380
+ /* */
381
+ /* */
382
+ /* */
383
+ /* */
384
+ /* */
340
385
  /* */
341
386
  /* */
342
387
  /* */
@@ -363,18 +408,22 @@ export class BaseCliWorker {
363
408
  /* */
364
409
  return (void 0);
365
410
  }
366
- async _infoScreen() {
411
+ async infoScreen(options) {
412
+ options = options || {};
367
413
  while (true) {
368
414
  Helpers.clearConsole();
369
415
  await this.header();
370
416
  await this.infoMessageBelowHeader();
371
- const choices = this.getWorkerTerminalActions();
417
+ const choices = this.getWorkerTerminalActions(options);
372
418
  const choice = await UtilsTerminal.select({
373
419
  choices,
374
420
  question: 'Choose action',
375
421
  });
376
422
  const action = choices[choice].action;
377
- await action();
423
+ const result = await action();
424
+ if (choice === 'exit' && result) {
425
+ break;
426
+ }
378
427
  }
379
428
  }
380
429
  saveProcessInfo(processConfig) {
@@ -463,4 +512,4 @@ export class BaseCliWorker {
463
512
  }
464
513
  ;
465
514
  ({}); // @--end-of-file-for-module=tnp-helpers lib/base/classes/base-cli-worker.ts
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbGktd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL2NsYXNzZXMvYmFzZS1jbGktd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBa0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsQ0FBQSxLQUFLO0FBYTdILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNdEMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7QUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFxQnJDLE1BQU0sT0FBZ0IsYUFBYTtJQUlqQztJQUNFOztPQUVHO0lBQ2dCLFNBQWlCO0lBQ3BDOztPQUVHO0lBQ2dCLFlBQW9CO0lBQ3ZDOztPQUVHO0lBQ2dCLGNBQXNCO1FBUnRCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFJakIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFJcEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7SUFDeEMsQ0FBQztJQVlKLElBQWMsMEJBQTBCO1FBQzFDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlELElBQWMsbUJBQW1CO1FBQ25DLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFRTSxLQUFLLENBQUMsK0JBQStCO1FBQzlDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQTRDO1FBQ3pELEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZ0M7UUFDNUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDbEUsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIseURBQXlEO1FBRXpELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUJBQXVCLElBQUksQ0FBQyxTQUFTLHVCQUF1QixDQUM3RCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUNWLHVCQUF1QixJQUFJLENBQUMsU0FBUyx5QkFBeUIsQ0FDL0QsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFJRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBYztRQUNwQyxNQUFNLFFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQVFTLDJCQUEyQjtRQUN2QyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlTLEtBQUssQ0FBQyw0QkFBNEI7UUFDOUMsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsMEJBQTBCO1FBQzVDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQ7Ozs7T0FJRztJQUNPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUVoQztRQUNILEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztR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Q0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsd0JBQXdCO1FBQzFDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsNkJBQTZCO1FBQy9DLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsS0FBSyxDQUFDLGNBQWM7UUFDdEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7Q0FJRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNEVBQTRFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuaW1wb3J0IHsgICBjaGFsaywgICBjcm9zc1BsYXRmb3JtUGF0aCwgICBfLCAvKiAqLyAvKiAqLyAvKiAqLyAvKiAqLyAvKiAqLyAgICAgIFV0aWxzVGVybWluYWwsIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ3RucC1jb25maWcvYnJvd3Nlcic7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAnLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHR5cGUgeyBCYXNlQ2xpV29ya2VyQ29udHJvbGxlciB9IGZyb20gJy4vYmFzZS1jbGktd29ya2VyLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQmFzZUNsaVdvcmtlckNvbmZpZyB9IGZyb20gJy4vYmFzZS1jbGktd29ya2VyLWNvbmZpZyc7XG5cblxuXG5jb25zdCBXT1JLRVJfSU5JVF9TVEFSVF9USU1FX0xJTUlUID0gMjU7IC8vIDE1IHNlY29uZHMgbWF4IHRvIHN0YXJ0IHdvcmtlclxuY29uc3QgU1RBUlRfUE9SVF9GT1JfU0VSVklDRVMgPSAzNjAwO1xuXG5cblxuZXhwb3J0IHR5cGUgQ2ZvbnRTdHlsZSA9XG4gIHwgJ2Jsb2NrJ1xuICB8ICdzbGljaydcbiAgfCAndGlueSdcbiAgfCAnZ3JpZCdcbiAgfCAncGFsbGV0J1xuICB8ICdzaGFkZSdcbiAgfCAnY2hyb21lJ1xuICB8ICdzaW1wbGUnXG4gIHwgJ3NpbXBsZUJsb2NrJ1xuICB8ICczZCdcbiAgfCAnc2ltcGxlM2QnXG4gIHwgJ2h1Z2UnO1xuXG5leHBvcnQgdHlwZSBDZm9udEFsaWduID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHwgJ2Jsb2NrJztcblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNsaVdvcmtlcjxcbiAgUkVNT1RFX0NUUkwgZXh0ZW5kcyBCYXNlQ2xpV29ya2VyQ29udHJvbGxlciA9IEJhc2VDbGlXb3JrZXJDb250cm9sbGVyLFxuPiB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkIGZvciBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2VJRDogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIGV4dGVybmFsIGNvbW1hbmQgdGhhdCB3aWxsIHN0YXJ0IHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhcnRDb21tYW5kOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkIGZvciBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2VWZXJzaW9uOiBzdHJpbmcsXG4gICkge31cblxuXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHN0YXJ0Tm9ybWFsbHlJbkN1cnJlbnRQcm9jZXNzKG9wdGlvbnM/OiB7fSk7XG5cbiAgcHVibGljIGFic3RyYWN0IGdldENvbnRyb2xsZXJGb3JSZW1vdGVDb25uZWN0aW9uKCk6IFByb21pc2U8UkVNT1RFX0NUUkw+O1xuXG5cblxuXG5cbiAgcHJvdGVjdGVkIGdldCBwYXRoVG9Qcm9jZXNzTG9jYWxJbmZvSnNvbigpOiBzdHJpbmcge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBnZXQgcHJvY2Vzc0xvY2FsSW5mb09iaigpOiBCYXNlQ2xpV29ya2VyQ29uZmlnIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cblxuXG5cblxuICBwdWJsaWMgYXN5bmMgc3RhcnREZXRhY2hlZElmTmVlZHNUb0JlU3RhcnRlZCgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzdG9wIGlmIHN0YXJ0ZWRcbiAgICovXG4gIGFzeW5jIGtpbGwob3B0aW9ucz86IHsgZG9udFJlbW92ZUNvbmZpZ0ZpbGU/OiBib29sZWFuIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICoga2lsbCBkZXRhY2hlZCBwcm9jZXNzIGFuZCBzdGFydCBhZ2FpblxuICAgKiBAcGFyYW0gb3B0aW9ucy5kZXRhY2hlZCAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXN5bmMgcmVzdGFydChvcHRpb25zPzogeyBkZXRhY2hlZD86IGJvb2xlYW4gfSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGV0YWNoZWQgPSBfLmlzVW5kZWZpbmVkKG9wdGlvbnMuZGV0YWNoZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMua2lsbCgpO1xuICAgIC8vbG9uZ2VyIGJlY2F1c2Ugb3MgaXMgZGlzcG9zaW5nIHByb2Nlc3MgcHJldmlvdXMgcHJvY2Vzc1xuXG4gICAgaWYgKG9wdGlvbnMuZGV0YWNoZWQpIHtcbiAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgYFJlc3RhcnRpbmcgc2VydmljZSBcIiR7dGhpcy5zZXJ2aWNlSUR9XCIgaW4gZGV0YWNoZWQgbW9kZS4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydERldGFjaGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgYFJlc3RhcnRpbmcgc2VydmljZSBcIiR7dGhpcy5zZXJ2aWNlSUR9XCIgaW4gY3VycmVudCBwcm9jZXNzLi4uYCxcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Tm9ybWFsbHlJbkN1cnJlbnRQcm9jZXNzKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBvbmx5IGZvciBjbGkgc3RhcnRcbiAgICogQHBhcmFtIGNsaVBhcmFtcyBvbiBmcm9tIGNsaVxuICAgKi9cbiAgYXN5bmMgY2xpU3RhcnRQcm9jZWR1cmUoY2xpUGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCBpbnN0YW5jZTogQmFzZUNsaVdvcmtlciA9IHRoaXM7XG4gICAgY29uc3QgZGV0YWNoZWQgPSAhIWNsaVBhcmFtc1snZGV0YWNoZWQnXSB8fCAhIWNsaVBhcmFtc1snZGV0YWNoJ107XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG5cblxuXG5cbiAgcHJvdGVjdGVkIHByZXZlbnRFeHRlcm5hbENvbmZpZ0NoYW5nZSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyBwcmV2ZW50U3RhcnRJZkFscmVhZHlTdGFydGVkKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGtpbGxXb3JrZXJXaXRoTG93ZXJWZXJzaW9uKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFRoaXMgaGFzIDIgcHVycG9zZXM6XG4gICAqIC0gaW5maW5pdGUgY2hlY2sgd2hlbiB3aGVuIGRldGFjaGVkIHByb2Nlc3MgZmluaXNoZWQgc3RhcnRpbmdcbiAgICogLSBxdWljayBjaGVjayBpZiBzZXJ2aWNlIGlzIGhlYWx0aHkgLyBhbHJlYWR5IHN0YXJ0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBpc1NlcnZpY2VIZWFsdGh5KG9wdGlvbnM6IHtcbiAgICBoZWFsdGhDaGVja1JlcXVlc3RUcnlzPzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHN0YXJ0IGlmIG5vdCBzdGFydGVkIGRldGFjaGVkIHByb2Nlc3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzdGFydERldGFjaGVkKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhlYWRlclRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gXy5zdGFydENhc2UodGhpcy5zZXJ2aWNlSUQpO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCB0ZXh0SGVhZGVyU3R5bGUoKTogQ2ZvbnRTdHlsZSB7XG4gICAgcmV0dXJuICdibG9jayc7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGhlYWRlclRleHRBbGlnbigpOiBDZm9udEFsaWduIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBvdmVycmlkZSB3aG9sZSB0ZXJtaW5hbCBoZWFkZXJcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBoZWFkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgaW5mb01lc3NhZ2VCZWxvd0hlYWRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBnZXRXb3JrZXJUZXJtaW5hbEFjdGlvbnMoKToge1xuICAgIFt1bmlxZUFjdGlvbk5hbWU6IHN0cmluZ106IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGFjdGlvbjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgfTtcbiAgfSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2luZm9TY3JlZW4oKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIEhlbHBlcnMuY2xlYXJDb25zb2xlKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuaGVhZGVyKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW5mb01lc3NhZ2VCZWxvd0hlYWRlcigpO1xuICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuZ2V0V29ya2VyVGVybWluYWxBY3Rpb25zKCk7XG4gICAgICBjb25zdCBjaG9pY2UgPSBhd2FpdCBVdGlsc1Rlcm1pbmFsLnNlbGVjdDxrZXlvZiB0eXBlb2YgY2hvaWNlcz4oe1xuICAgICAgICBjaG9pY2VzLFxuICAgICAgICBxdWVzdGlvbjogJ0Nob29zZSBhY3Rpb24nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjaG9pY2VzW2Nob2ljZV0uYWN0aW9uO1xuICAgICAgYXdhaXQgYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIHByaXZhdGUgc2F2ZVByb2Nlc3NJbmZvKHByb2Nlc3NDb25maWc6IFBhcnRpYWw8QmFzZUNsaVdvcmtlckNvbmZpZz4pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGluaXRpYWxpemVXb3JrZXJNZXRhZGF0YSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIHdhaXRGb3JQcm9jZXNzUG9ydFNhdmVkVG9EaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgZ2V0U2VydmljZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvYmFzZS9jbGFzc2VzL2Jhc2UtY2xpLXdvcmtlci50cyJdfQ==
515
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbGktd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL2NsYXNzZXMvYmFzZS1jbGktd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBa0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsQ0FBQSxLQUFLO0FBYTdILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNdEMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7QUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFxQnJDLE1BQU0sT0FBZ0IsYUFBYTtJQU1qQztJQUNFOztPQUVHO0lBQ2dCLFNBQWlCO0lBQ3BDOztPQUVHO0lBQ2dCLFlBQW9CO0lBQ3ZDOztPQUVHO0lBQ2dCLGNBQXNCO1FBUnRCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFJakIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFJcEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFmakMsaUNBQTRCLEdBQUcsc0JBQXNCLENBQUM7SUFnQjdELENBQUM7SUFZSixJQUFjLDBCQUEwQjtRQUMxQyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRCxJQUFjLG1CQUFtQjtRQUNuQyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxD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TCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSVMsS0FBSyxDQUFDLDBCQUEwQjtRQUM1QyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlEOzs7O09BSUc7SUFDTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FFaEM7UUFDSCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FFN0I7UUFDSCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsVUFBVTtRQUN4QixPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFJUyxlQUFlO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFJUyxlQUFlO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFJRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxNQUFNO1FBQ3hCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0ws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Y3Jvc3NQbGF0Zm9ybVBhdGgsICAgXywgLyogKi8gLyogKi8gLyogKi8gLyogKi8gLyogKi8gICAgICBVdGlsc1Rlcm1pbmFsLCB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICd0bnAtY29uZmlnL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4uLy4uL2luZGV4JztcbmltcG9ydCB0eXBlIHsgQmFzZUNsaVdvcmtlckNvbnRyb2xsZXIgfSBmcm9tICcuL2Jhc2UtY2xpLXdvcmtlci1jb250cm9sbGVyJztcbmltcG9ydCB7IEJhc2VDbGlXb3JrZXJDb25maWcgfSBmcm9tICcuL2Jhc2UtY2xpLXdvcmtlci1jb25maWcnO1xuXG5cblxuY29uc3QgV09SS0VSX0lOSVRfU1RBUlRfVElNRV9MSU1JVCA9IDI1OyAvLyAxNSBzZWNvbmRzIG1heCB0byBzdGFydCB3b3JrZXJcbmNvbnN0IFNUQVJUX1BPUlRfRk9SX1NFUlZJQ0VTID0gMzYwMDtcblxuXG5cbmV4cG9ydCB0eXBlIENmb250U3R5bGUgPVxuICB8ICdibG9jaydcbiAgfCAnc2xpY2snXG4gIHwgJ3RpbnknXG4gIHwgJ2dyaWQnXG4gIHwgJ3BhbGxldCdcbiAgfCAnc2hhZGUnXG4gIHwgJ2Nocm9tZSdcbiAgfCAnc2ltcGxlJ1xuICB8ICdzaW1wbGVCbG9jaydcbiAgfCAnM2QnXG4gIHwgJ3NpbXBsZTNkJ1xuICB8ICdodWdlJztcblxuZXhwb3J0IHR5cGUgQ2ZvbnRBbGlnbiA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdibG9jayc7XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDbGlXb3JrZXI8XG4gIFJFTU9URV9DVFJMIGV4dGVuZHMgQmFzZUNsaVdvcmtlckNvbnRyb2xsZXIgPSBCYXNlQ2xpV29ya2VyQ29udHJvbGxlcixcbj4ge1xuICBwcm90ZWN0ZWQgU1BFQ0lBTF9XT1JLRVJfUkVBRFlfTUVTU0FHRSA9ICckJCQgV09SS0VSX1JFQURZICQkJCc7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiB1bmlxdWUgaWQgZm9yIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZUlEOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogZXh0ZXJuYWwgY29tbWFuZCB0aGF0IHdpbGwgc3RhcnQgc2VydmljZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGFydENvbW1hbmQ6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiB1bmlxdWUgaWQgZm9yIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZVZlcnNpb246IHN0cmluZyxcbiAgKSB7fVxuXG5cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3RhcnROb3JtYWxseUluQ3VycmVudFByb2Nlc3Mob3B0aW9ucz86IHt9KTtcblxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0Q29udHJvbGxlckZvclJlbW90ZUNvbm5lY3Rpb24oKTogUHJvbWlzZTxSRU1PVEVfQ1RSTD47XG5cblxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0IHBhdGhUb1Byb2Nlc3NMb2NhbEluZm9Kc29uKCk6IHN0cmluZyB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldCBwcm9jZXNzTG9jYWxJbmZvT2JqKCk6IEJhc2VDbGlXb3JrZXJDb25maWcge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuXG5cblxuXG4gIHB1YmxpYyBhc3luYyBzdGFydERldGFjaGVkSWZOZWVkc1RvQmVTdGFydGVkKG9wdGlvbnM/OiB7XG4gICAgdXNlQ3VycmVudFdpbmRvd0ZvckRldGFjaD86IGJvb2xlYW47XG4gIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzdG9wIGlmIHN0YXJ0ZWRcbiAgICovXG4gIGFzeW5jIGtpbGwob3B0aW9ucz86IHsgZG9udFJlbW92ZUNvbmZpZ0ZpbGU/OiBib29sZWFuIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICoga2lsbCBkZXRhY2hlZCBwcm9jZXNzIGFuZCBzdGFydCBhZ2FpblxuICAgKiBAcGFyYW0gb3B0aW9ucy5kZXRhY2hlZCAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXN5bmMgcmVzdGFydChvcHRpb25zPzoge1xuICAgIGRldGFjaGVkPzogYm9vbGVhbjtcbiAgICB1c2VDdXJyZW50V2luZG93Rm9yRGV0YWNoPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGV0YWNoZWQgPSBfLmlzVW5kZWZpbmVkKG9wdGlvbnMuZGV0YWNoZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMua2lsbCgpO1xuICAgIC8vbG9uZ2VyIGJlY2F1c2Ugb3MgaXMgZGlzcG9zaW5nIHByb2Nlc3MgcHJldmlvdXMgcHJvY2Vzc1xuXG4gICAgaWYgKG9wdGlvbnMuZGV0YWNoZWQpIHtcbiAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgYFJlc3RhcnRpbmcgc2VydmljZSBcIiR7dGhpcy5zZXJ2aWNlSUR9XCIgaW4gZGV0YWNoZWQgbW9kZS4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydERldGFjaGVkKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBIZWxwZXJzLmluZm8oXG4gICAgICAgIGBSZXN0YXJ0aW5nIHNlcnZpY2UgXCIke3RoaXMuc2VydmljZUlEfVwiIGluIGN1cnJlbnQgcHJvY2Vzcy4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydE5vcm1hbGx5SW5DdXJyZW50UHJvY2VzcygpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvKipcbiAgICogb25seSBmb3IgY2xpIHN0YXJ0XG4gICAqIEBwYXJhbSBjbGlQYXJhbXMgb24gZnJvbSBjbGlcbiAgICovXG4gIGFzeW5jIGNsaVN0YXJ0UHJvY2VkdXJlKGNsaVBhcmFtczogYW55KSB7XG4gICAgY29uc3QgaW5zdGFuY2U6IEJhc2VDbGlXb3JrZXIgPSB0aGlzO1xuICAgIGNvbnN0IGRldGFjaGVkID0gISFjbGlQYXJhbXNbJ2RldGFjaGVkJ10gfHwgISFjbGlQYXJhbXNbJ2RldGFjaCddO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuXG5cblxuXG4gIHByb3RlY3RlZCBwcmV2ZW50RXh0ZXJuYWxDb25maWdDaGFuZ2UoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgcHJldmVudFN0YXJ0SWZBbHJlYWR5U3RhcnRlZCgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyBraWxsV29ya2VyV2l0aExvd2VyVmVyc2lvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBUaGlzIGhhcyAyIHB1cnBvc2VzOlxuICAgKiAtIGluZmluaXRlIGNoZWNrIHdoZW4gd2hlbiBkZXRhY2hlZCBwcm9jZXNzIGZpbmlzaGVkIHN0YXJ0aW5nXG4gICAqIC0gcXVpY2sgY2hlY2sgaWYgc2VydmljZSBpcyBoZWFsdGh5IC8gYWxyZWFkeSBzdGFydGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaXNTZXJ2aWNlSGVhbHRoeShvcHRpb25zOiB7XG4gICAgaGVhbHRoQ2hlY2tSZXF1ZXN0VHJ5cz86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzdGFydCBpZiBub3Qgc3RhcnRlZCBkZXRhY2hlZCBwcm9jZXNzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnREZXRhY2hlZChvcHRpb25zPzoge1xuICAgIHVzZUN1cnJlbnRXaW5kb3dGb3JEZXRhY2g/OiBib29sZWFuO1xuICB9KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhlYWRlclRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gXy5zdGFydENhc2UodGhpcy5zZXJ2aWNlSUQpO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCB0ZXh0SGVhZGVyU3R5bGUoKTogQ2ZvbnRTdHlsZSB7XG4gICAgcmV0dXJuICdibG9jayc7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGhlYWRlclRleHRBbGlnbigpOiBDZm9udEFsaWduIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBvdmVycmlkZSB3aG9sZSB0ZXJtaW5hbCBoZWFkZXJcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBoZWFkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgaW5mb01lc3NhZ2VCZWxvd0hlYWRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldCBiYWNrQWN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrOiB7XG4gICAgICAgIG5hbWU6ICdCYWNrJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0IGNob29zZUFjdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW1wdHlBY3Rpb246IHtcbiAgICAgICAgbmFtZTogJyAtLSBjaG9vc2UgYW55IGFjdGlvbiBiZWxvdyAtLScsXG4gICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4ge30sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGRpc3BsYXlTcGVjaWFsV29ya2VyUmVhZHlNZXNzYWdlKCkge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuU1BFQ0lBTF9XT1JLRVJfUkVBRFlfTUVTU0FHRSk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldFdvcmtlclRlcm1pbmFsQWN0aW9ucyhvcHRpb25zPzoge1xuICAgIGV4aXRJc09ubHlSZXR1cm4/OiBib29sZWFuO1xuICAgIGNob29zZUFjdGlvbj86IGJvb2xlYW47XG4gIH0pOiB7XG4gICAgW3VuaXFlQWN0aW9uTmFtZTogc3RyaW5nXToge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgYWN0aW9uOiAoKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPjtcbiAgICB9O1xuICB9IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHB1YmxpYyBhc3luYyBpbmZvU2NyZWVuKG9wdGlvbnM/OiB7IGV4aXRJc09ubHlSZXR1cm4/OiBib29sZWFuIH0pIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgSGVscGVycy5jbGVhckNvbnNvbGUoKTtcblxuICAgICAgYXdhaXQgdGhpcy5oZWFkZXIoKTtcblxuICAgICAgYXdhaXQgdGhpcy5pbmZvTWVzc2FnZUJlbG93SGVhZGVyKCk7XG4gICAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5nZXRXb3JrZXJUZXJtaW5hbEFjdGlvbnMob3B0aW9ucyk7XG4gICAgICBjb25zdCBjaG9pY2UgPSBhd2FpdCBVdGlsc1Rlcm1pbmFsLnNlbGVjdDxrZXlvZiB0eXBlb2YgY2hvaWNlcz4oe1xuICAgICAgICBjaG9pY2VzLFxuICAgICAgICBxdWVzdGlvbjogJ0Nob29zZSBhY3Rpb24nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjaG9pY2VzW2Nob2ljZV0uYWN0aW9uO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uKCk7XG4gICAgICBpZiAoY2hvaWNlID09PSAnZXhpdCcgJiYgcmVzdWx0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuICBwcml2YXRlIHNhdmVQcm9jZXNzSW5mbyhwcm9jZXNzQ29uZmlnOiBQYXJ0aWFsPEJhc2VDbGlXb3JrZXJDb25maWc+KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyBpbml0aWFsaXplV29ya2VyTWV0YWRhdGEoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyB3YWl0Rm9yUHJvY2Vzc1BvcnRTYXZlZFRvRGlzaygpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGFzeW5jIGdldFNlcnZpY2VQb3J0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2Jhc2UvY2xhc3Nlcy9iYXNlLWNsaS13b3JrZXIudHMiXX0=