taon-typeorm 18.0.24 → 19.0.1

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 (1725) hide show
  1. package/assets/shared/shared_folder_info.txt +3 -3
  2. package/browser/README.md +24 -24
  3. package/client/README.md +24 -24
  4. package/index.js.map +1 -1
  5. package/lib/build-info._auto-generated_.d.ts +1 -0
  6. package/lib/build-info._auto-generated_.js +4 -1
  7. package/lib/build-info._auto-generated_.js.map +1 -1
  8. package/lib/index._auto-generated_.js +2 -2
  9. package/lib/index._auto-generated_.js.map +1 -1
  10. package/lib/index.js.map +1 -1
  11. package/lib/typeorm/cache/DbQueryResultCache.js.map +1 -1
  12. package/lib/typeorm/cache/QueryResultCache.js.map +1 -1
  13. package/lib/typeorm/cache/QueryResultCacheFactory.js.map +1 -1
  14. package/lib/typeorm/cache/QueryResultCacheOptions.js.map +1 -1
  15. package/lib/typeorm/cache/RedisQueryResultCache.js.map +1 -1
  16. package/lib/typeorm/cli-ts-node-commonjs.js.map +1 -1
  17. package/lib/typeorm/cli-ts-node-esm.js.map +1 -1
  18. package/lib/typeorm/cli.js.map +1 -1
  19. package/lib/typeorm/commands/CacheClearCommand.js.map +1 -1
  20. package/lib/typeorm/commands/CommandUtils.js.map +1 -1
  21. package/lib/typeorm/commands/EntityCreateCommand.js.map +1 -1
  22. package/lib/typeorm/commands/InitCommand.js.map +1 -1
  23. package/lib/typeorm/commands/MigrationCreateCommand.js.map +1 -1
  24. package/lib/typeorm/commands/MigrationGenerateCommand.js.map +1 -1
  25. package/lib/typeorm/commands/MigrationRevertCommand.js.map +1 -1
  26. package/lib/typeorm/commands/MigrationRunCommand.js.map +1 -1
  27. package/lib/typeorm/commands/MigrationShowCommand.js.map +1 -1
  28. package/lib/typeorm/commands/QueryCommand.js.map +1 -1
  29. package/lib/typeorm/commands/SchemaDropCommand.js.map +1 -1
  30. package/lib/typeorm/commands/SchemaLogCommand.js.map +1 -1
  31. package/lib/typeorm/commands/SchemaSyncCommand.js.map +1 -1
  32. package/lib/typeorm/commands/SubscriberCreateCommand.js.map +1 -1
  33. package/lib/typeorm/commands/VersionCommand.js.map +1 -1
  34. package/lib/typeorm/common/DeepPartial.js.map +1 -1
  35. package/lib/typeorm/common/EntityTarget.js.map +1 -1
  36. package/lib/typeorm/common/MixedList.js.map +1 -1
  37. package/lib/typeorm/common/NonNever.js.map +1 -1
  38. package/lib/typeorm/common/ObjectLiteral.js.map +1 -1
  39. package/lib/typeorm/common/ObjectType.js.map +1 -1
  40. package/lib/typeorm/common/RelationType.js.map +1 -1
  41. package/lib/typeorm/connection/BaseConnectionOptions.js.map +1 -1
  42. package/lib/typeorm/connection/Connection.js.map +1 -1
  43. package/lib/typeorm/connection/ConnectionManager.js.map +1 -1
  44. package/lib/typeorm/connection/ConnectionMetadataBuilder.js.map +1 -1
  45. package/lib/typeorm/connection/ConnectionOptions.js.map +1 -1
  46. package/lib/typeorm/connection/ConnectionOptionsReader.js.map +1 -1
  47. package/lib/typeorm/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  48. package/lib/typeorm/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
  49. package/lib/typeorm/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  50. package/lib/typeorm/constants.js.map +1 -1
  51. package/lib/typeorm/container.js.map +1 -1
  52. package/lib/typeorm/data-source/BaseDataSourceOptions.js.map +1 -1
  53. package/lib/typeorm/data-source/DataSource.js.map +1 -1
  54. package/lib/typeorm/data-source/DataSourceOptions.js.map +1 -1
  55. package/lib/typeorm/data-source/index.js.map +1 -1
  56. package/lib/typeorm/decorator/Check.js.map +1 -1
  57. package/lib/typeorm/decorator/EntityRepository.js.map +1 -1
  58. package/lib/typeorm/decorator/Exclusion.js.map +1 -1
  59. package/lib/typeorm/decorator/Generated.js.map +1 -1
  60. package/lib/typeorm/decorator/Index.js.map +1 -1
  61. package/lib/typeorm/decorator/Unique.js.map +1 -1
  62. package/lib/typeorm/decorator/columns/Column.js.map +1 -1
  63. package/lib/typeorm/decorator/columns/CreateDateColumn.js.map +1 -1
  64. package/lib/typeorm/decorator/columns/DeleteDateColumn.js.map +1 -1
  65. package/lib/typeorm/decorator/columns/ObjectIdColumn.js.map +1 -1
  66. package/lib/typeorm/decorator/columns/PrimaryColumn.js.map +1 -1
  67. package/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  68. package/lib/typeorm/decorator/columns/UpdateDateColumn.js.map +1 -1
  69. package/lib/typeorm/decorator/columns/VersionColumn.js.map +1 -1
  70. package/lib/typeorm/decorator/columns/ViewColumn.js.map +1 -1
  71. package/lib/typeorm/decorator/columns/VirtualColumn.js.map +1 -1
  72. package/lib/typeorm/decorator/entity/ChildEntity.js.map +1 -1
  73. package/lib/typeorm/decorator/entity/Entity.js.map +1 -1
  74. package/lib/typeorm/decorator/entity/TableInheritance.js.map +1 -1
  75. package/lib/typeorm/decorator/entity-view/ViewEntity.js.map +1 -1
  76. package/lib/typeorm/decorator/listeners/AfterInsert.js.map +1 -1
  77. package/lib/typeorm/decorator/listeners/AfterLoad.js.map +1 -1
  78. package/lib/typeorm/decorator/listeners/AfterRecover.js.map +1 -1
  79. package/lib/typeorm/decorator/listeners/AfterRemove.js.map +1 -1
  80. package/lib/typeorm/decorator/listeners/AfterSoftRemove.js.map +1 -1
  81. package/lib/typeorm/decorator/listeners/AfterUpdate.js.map +1 -1
  82. package/lib/typeorm/decorator/listeners/BeforeInsert.js.map +1 -1
  83. package/lib/typeorm/decorator/listeners/BeforeRecover.js.map +1 -1
  84. package/lib/typeorm/decorator/listeners/BeforeRemove.js.map +1 -1
  85. package/lib/typeorm/decorator/listeners/BeforeSoftRemove.js.map +1 -1
  86. package/lib/typeorm/decorator/listeners/BeforeUpdate.js.map +1 -1
  87. package/lib/typeorm/decorator/listeners/EventSubscriber.js.map +1 -1
  88. package/lib/typeorm/decorator/options/ColumnCommonOptions.js.map +1 -1
  89. package/lib/typeorm/decorator/options/ColumnEmbeddedOptions.js.map +1 -1
  90. package/lib/typeorm/decorator/options/ColumnEnumOptions.js.map +1 -1
  91. package/lib/typeorm/decorator/options/ColumnHstoreOptions.js.map +1 -1
  92. package/lib/typeorm/decorator/options/ColumnNumericOptions.js.map +1 -1
  93. package/lib/typeorm/decorator/options/ColumnOptions.js.map +1 -1
  94. package/lib/typeorm/decorator/options/ColumnWithLengthOptions.js.map +1 -1
  95. package/lib/typeorm/decorator/options/ColumnWithWidthOptions.js.map +1 -1
  96. package/lib/typeorm/decorator/options/EntityOptions.js.map +1 -1
  97. package/lib/typeorm/decorator/options/IndexOptions.js.map +1 -1
  98. package/lib/typeorm/decorator/options/JoinColumnOptions.js.map +1 -1
  99. package/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.js.map +1 -1
  100. package/lib/typeorm/decorator/options/JoinTableOptions.js.map +1 -1
  101. package/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  102. package/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  103. package/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  104. package/lib/typeorm/decorator/options/RelationOptions.js.map +1 -1
  105. package/lib/typeorm/decorator/options/SpatialColumnOptions.js.map +1 -1
  106. package/lib/typeorm/decorator/options/TransactionOptions.js.map +1 -1
  107. package/lib/typeorm/decorator/options/UniqueOptions.js.map +1 -1
  108. package/lib/typeorm/decorator/options/ValueTransformer.js.map +1 -1
  109. package/lib/typeorm/decorator/options/ViewColumnOptions.js.map +1 -1
  110. package/lib/typeorm/decorator/options/ViewEntityOptions.js.map +1 -1
  111. package/lib/typeorm/decorator/options/VirtualColumnOptions.js.map +1 -1
  112. package/lib/typeorm/decorator/relations/JoinColumn.js.map +1 -1
  113. package/lib/typeorm/decorator/relations/JoinTable.js.map +1 -1
  114. package/lib/typeorm/decorator/relations/ManyToMany.js.map +1 -1
  115. package/lib/typeorm/decorator/relations/ManyToOne.js.map +1 -1
  116. package/lib/typeorm/decorator/relations/OneToMany.js.map +1 -1
  117. package/lib/typeorm/decorator/relations/OneToOne.js.map +1 -1
  118. package/lib/typeorm/decorator/relations/RelationCount.js.map +1 -1
  119. package/lib/typeorm/decorator/relations/RelationId.js.map +1 -1
  120. package/lib/typeorm/decorator/tree/Tree.js.map +1 -1
  121. package/lib/typeorm/decorator/tree/TreeChildren.js.map +1 -1
  122. package/lib/typeorm/decorator/tree/TreeLevelColumn.js.map +1 -1
  123. package/lib/typeorm/decorator/tree/TreeParent.js.map +1 -1
  124. package/lib/typeorm/driver/Driver.js.map +1 -1
  125. package/lib/typeorm/driver/DriverFactory.js.map +1 -1
  126. package/lib/typeorm/driver/DriverUtils.js.map +1 -1
  127. package/lib/typeorm/driver/Query.js.map +1 -1
  128. package/lib/typeorm/driver/SqlInMemory.js.map +1 -1
  129. package/lib/typeorm/driver/aurora-mysql/AuroraMysqlConnection.js.map +1 -1
  130. package/lib/typeorm/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
  131. package/lib/typeorm/driver/aurora-mysql/AuroraMysqlConnectionOptions.js.map +1 -1
  132. package/lib/typeorm/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  133. package/lib/typeorm/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  134. package/lib/typeorm/driver/aurora-postgres/AuroraPostgresConnectionOptions.js.map +1 -1
  135. package/lib/typeorm/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
  136. package/lib/typeorm/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  137. package/lib/typeorm/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  138. package/lib/typeorm/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  139. package/lib/typeorm/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  140. package/lib/typeorm/driver/capacitor/CapacitorConnectionOptions.js.map +1 -1
  141. package/lib/typeorm/driver/capacitor/CapacitorDriver.js.map +1 -1
  142. package/lib/typeorm/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  143. package/lib/typeorm/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
  144. package/lib/typeorm/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  145. package/lib/typeorm/driver/cockroachdb/CockroachDriver.js.map +1 -1
  146. package/lib/typeorm/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  147. package/lib/typeorm/driver/cordova/CordovaConnectionOptions.js.map +1 -1
  148. package/lib/typeorm/driver/cordova/CordovaDriver.js.map +1 -1
  149. package/lib/typeorm/driver/cordova/CordovaQueryRunner.js.map +1 -1
  150. package/lib/typeorm/driver/expo/ExpoConnectionOptions.js.map +1 -1
  151. package/lib/typeorm/driver/expo/ExpoDriver.js.map +1 -1
  152. package/lib/typeorm/driver/expo/ExpoQueryRunner.js.map +1 -1
  153. package/lib/typeorm/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  154. package/lib/typeorm/driver/mongodb/MongoDriver.js.map +1 -1
  155. package/lib/typeorm/driver/mongodb/MongoQueryRunner.js.map +1 -1
  156. package/lib/typeorm/driver/mongodb/typings.js.map +1 -1
  157. package/lib/typeorm/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
  158. package/lib/typeorm/driver/mysql/MysqlConnectionOptions.js.map +1 -1
  159. package/lib/typeorm/driver/mysql/MysqlDriver.js.map +1 -1
  160. package/lib/typeorm/driver/mysql/MysqlQueryRunner.js.map +1 -1
  161. package/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.js.map +1 -1
  162. package/lib/typeorm/driver/nativescript/NativescriptDriver.js.map +1 -1
  163. package/lib/typeorm/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  164. package/lib/typeorm/driver/oracle/OracleConnectionCredentialsOptions.js.map +1 -1
  165. package/lib/typeorm/driver/oracle/OracleConnectionOptions.js.map +1 -1
  166. package/lib/typeorm/driver/oracle/OracleDriver.js.map +1 -1
  167. package/lib/typeorm/driver/oracle/OracleQueryRunner.js.map +1 -1
  168. package/lib/typeorm/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  169. package/lib/typeorm/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  170. package/lib/typeorm/driver/postgres/PostgresDriver.js.map +1 -1
  171. package/lib/typeorm/driver/postgres/PostgresQueryRunner.js.map +1 -1
  172. package/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.js.map +1 -1
  173. package/lib/typeorm/driver/react-native/ReactNativeDriver.js.map +1 -1
  174. package/lib/typeorm/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  175. package/lib/typeorm/driver/sap/SapConnectionCredentialsOptions.js.map +1 -1
  176. package/lib/typeorm/driver/sap/SapConnectionOptions.js.map +1 -1
  177. package/lib/typeorm/driver/sap/SapDriver.js.map +1 -1
  178. package/lib/typeorm/driver/sap/SapQueryRunner.js.map +1 -1
  179. package/lib/typeorm/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -1
  180. package/lib/typeorm/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  181. package/lib/typeorm/driver/spanner/SpannerDriver.js.map +1 -1
  182. package/lib/typeorm/driver/spanner/SpannerQueryRunner.js.map +1 -1
  183. package/lib/typeorm/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  184. package/lib/typeorm/driver/sqlite/SqliteDriver.js.map +1 -1
  185. package/lib/typeorm/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  186. package/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  187. package/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  188. package/lib/typeorm/driver/sqljs/SqljsConnectionOptions.js.map +1 -1
  189. package/lib/typeorm/driver/sqljs/SqljsDriver.js.map +1 -1
  190. package/lib/typeorm/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  191. package/lib/typeorm/driver/sqlserver/MssqlParameter.js.map +1 -1
  192. package/lib/typeorm/driver/sqlserver/SqlServerConnectionCredentialsOptions.js.map +1 -1
  193. package/lib/typeorm/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  194. package/lib/typeorm/driver/sqlserver/SqlServerDriver.js.map +1 -1
  195. package/lib/typeorm/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  196. package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  197. package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  198. package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  199. package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  200. package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryServicePrincipalSecret.js.map +1 -1
  201. package/lib/typeorm/driver/sqlserver/authentication/DefaultAuthentication.js.map +1 -1
  202. package/lib/typeorm/driver/sqlserver/authentication/NtlmAuthentication.js.map +1 -1
  203. package/lib/typeorm/driver/types/ColumnTypes.js.map +1 -1
  204. package/lib/typeorm/driver/types/CteCapabilities.js.map +1 -1
  205. package/lib/typeorm/driver/types/DataTypeDefaults.js.map +1 -1
  206. package/lib/typeorm/driver/types/DatabaseType.js.map +1 -1
  207. package/lib/typeorm/driver/types/IsolationLevel.js.map +1 -1
  208. package/lib/typeorm/driver/types/MappedColumnTypes.js.map +1 -1
  209. package/lib/typeorm/driver/types/MetadataTableType.js.map +1 -1
  210. package/lib/typeorm/driver/types/ReplicationMode.js.map +1 -1
  211. package/lib/typeorm/driver/types/UpsertType.js.map +1 -1
  212. package/lib/typeorm/entity-manager/EntityManager.js.map +1 -1
  213. package/lib/typeorm/entity-manager/EntityManagerFactory.js.map +1 -1
  214. package/lib/typeorm/entity-manager/MongoEntityManager.js.map +1 -1
  215. package/lib/typeorm/entity-manager/SqljsEntityManager.js.map +1 -1
  216. package/lib/typeorm/entity-schema/EntitySchema.js.map +1 -1
  217. package/lib/typeorm/entity-schema/EntitySchemaCheckOptions.js.map +1 -1
  218. package/lib/typeorm/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  219. package/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.js.map +1 -1
  220. package/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.js.map +1 -1
  221. package/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.js.map +1 -1
  222. package/lib/typeorm/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  223. package/lib/typeorm/entity-schema/EntitySchemaOptions.js.map +1 -1
  224. package/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.js.map +1 -1
  225. package/lib/typeorm/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  226. package/lib/typeorm/entity-schema/EntitySchemaTransformer.js.map +1 -1
  227. package/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  228. package/lib/typeorm/error/AlreadyHasActiveConnectionError.js.map +1 -1
  229. package/lib/typeorm/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
  230. package/lib/typeorm/error/CannotConnectAlreadyConnectedError.js.map +1 -1
  231. package/lib/typeorm/error/CannotCreateEntityIdMapError.js.map +1 -1
  232. package/lib/typeorm/error/CannotDetermineEntityError.js.map +1 -1
  233. package/lib/typeorm/error/CannotExecuteNotConnectedError.js.map +1 -1
  234. package/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
  235. package/lib/typeorm/error/CannotReflectMethodParameterTypeError.js.map +1 -1
  236. package/lib/typeorm/error/CircularRelationsError.js.map +1 -1
  237. package/lib/typeorm/error/ColumnTypeUndefinedError.js.map +1 -1
  238. package/lib/typeorm/error/ConnectionIsNotSetError.js.map +1 -1
  239. package/lib/typeorm/error/ConnectionNotFoundError.js.map +1 -1
  240. package/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
  241. package/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
  242. package/lib/typeorm/error/CustomRepositoryNotFoundError.js.map +1 -1
  243. package/lib/typeorm/error/DataTypeNotSupportedError.js.map +1 -1
  244. package/lib/typeorm/error/DriverOptionNotSetError.js.map +1 -1
  245. package/lib/typeorm/error/DriverPackageNotInstalledError.js.map +1 -1
  246. package/lib/typeorm/error/EntityMetadataNotFoundError.js.map +1 -1
  247. package/lib/typeorm/error/EntityNotFoundError.js.map +1 -1
  248. package/lib/typeorm/error/EntityPropertyNotFoundError.js.map +1 -1
  249. package/lib/typeorm/error/FindRelationsNotFoundError.js.map +1 -1
  250. package/lib/typeorm/error/ForbiddenTransactionModeOverrideError.js.map +1 -1
  251. package/lib/typeorm/error/InitializedRelationError.js.map +1 -1
  252. package/lib/typeorm/error/InsertValuesMissingError.js.map +1 -1
  253. package/lib/typeorm/error/LimitOnUpdateNotSupportedError.js.map +1 -1
  254. package/lib/typeorm/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
  255. package/lib/typeorm/error/MetadataAlreadyExistsError.js.map +1 -1
  256. package/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
  257. package/lib/typeorm/error/MissingDeleteDateColumnError.js.map +1 -1
  258. package/lib/typeorm/error/MissingDriverError.js.map +1 -1
  259. package/lib/typeorm/error/MissingJoinColumnError.js.map +1 -1
  260. package/lib/typeorm/error/MissingJoinTableError.js.map +1 -1
  261. package/lib/typeorm/error/MissingPrimaryColumnError.js.map +1 -1
  262. package/lib/typeorm/error/MustBeEntityError.js.map +1 -1
  263. package/lib/typeorm/error/NamingStrategyNotFoundError.js.map +1 -1
  264. package/lib/typeorm/error/NestedSetMultipleRootError.js.map +1 -1
  265. package/lib/typeorm/error/NoConnectionForRepositoryError.js.map +1 -1
  266. package/lib/typeorm/error/NoConnectionOptionError.js.map +1 -1
  267. package/lib/typeorm/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
  268. package/lib/typeorm/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
  269. package/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
  270. package/lib/typeorm/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
  271. package/lib/typeorm/error/OptimisticLockVersionMismatchError.js.map +1 -1
  272. package/lib/typeorm/error/PersistedEntityNotFoundError.js.map +1 -1
  273. package/lib/typeorm/error/PessimisticLockTransactionRequiredError.js.map +1 -1
  274. package/lib/typeorm/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
  275. package/lib/typeorm/error/QueryFailedError.js.map +1 -1
  276. package/lib/typeorm/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
  277. package/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
  278. package/lib/typeorm/error/RepositoryNotTreeError.js.map +1 -1
  279. package/lib/typeorm/error/ReturningStatementNotSupportedError.js.map +1 -1
  280. package/lib/typeorm/error/SubjectRemovedAndUpdatedError.js.map +1 -1
  281. package/lib/typeorm/error/SubjectWithoutIdentifierError.js.map +1 -1
  282. package/lib/typeorm/error/TransactionAlreadyStartedError.js.map +1 -1
  283. package/lib/typeorm/error/TransactionNotStartedError.js.map +1 -1
  284. package/lib/typeorm/error/TreeRepositoryNotSupportedError.js.map +1 -1
  285. package/lib/typeorm/error/TypeORMError.js.map +1 -1
  286. package/lib/typeorm/error/UpdateValuesMissingError.js.map +1 -1
  287. package/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
  288. package/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
  289. package/lib/typeorm/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
  290. package/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
  291. package/lib/typeorm/error/index.js.map +1 -1
  292. package/lib/typeorm/find-options/EqualOperator.js.map +1 -1
  293. package/lib/typeorm/find-options/FindManyOptions.js.map +1 -1
  294. package/lib/typeorm/find-options/FindOneOptions.js.map +1 -1
  295. package/lib/typeorm/find-options/FindOperator.js.map +1 -1
  296. package/lib/typeorm/find-options/FindOperatorType.js.map +1 -1
  297. package/lib/typeorm/find-options/FindOptionsOrder.js.map +1 -1
  298. package/lib/typeorm/find-options/FindOptionsRelations.js.map +1 -1
  299. package/lib/typeorm/find-options/FindOptionsSelect.js.map +1 -1
  300. package/lib/typeorm/find-options/FindOptionsUtils.js.map +1 -1
  301. package/lib/typeorm/find-options/FindOptionsWhere.js.map +1 -1
  302. package/lib/typeorm/find-options/FindTreeOptions.js.map +1 -1
  303. package/lib/typeorm/find-options/JoinOptions.js.map +1 -1
  304. package/lib/typeorm/find-options/OrderByCondition.js.map +1 -1
  305. package/lib/typeorm/find-options/mongodb/MongoFindManyOptions.js.map +1 -1
  306. package/lib/typeorm/find-options/mongodb/MongoFindOneOptions.js.map +1 -1
  307. package/lib/typeorm/find-options/operator/And.js.map +1 -1
  308. package/lib/typeorm/find-options/operator/Any.js.map +1 -1
  309. package/lib/typeorm/find-options/operator/ArrayContainedBy.js.map +1 -1
  310. package/lib/typeorm/find-options/operator/ArrayContains.js.map +1 -1
  311. package/lib/typeorm/find-options/operator/ArrayOverlap.js.map +1 -1
  312. package/lib/typeorm/find-options/operator/Between.js.map +1 -1
  313. package/lib/typeorm/find-options/operator/Equal.js.map +1 -1
  314. package/lib/typeorm/find-options/operator/ILike.js.map +1 -1
  315. package/lib/typeorm/find-options/operator/In.js.map +1 -1
  316. package/lib/typeorm/find-options/operator/IsNull.js.map +1 -1
  317. package/lib/typeorm/find-options/operator/LessThan.js.map +1 -1
  318. package/lib/typeorm/find-options/operator/LessThanOrEqual.js.map +1 -1
  319. package/lib/typeorm/find-options/operator/Like.js.map +1 -1
  320. package/lib/typeorm/find-options/operator/MoreThan.js.map +1 -1
  321. package/lib/typeorm/find-options/operator/MoreThanOrEqual.js.map +1 -1
  322. package/lib/typeorm/find-options/operator/Not.js.map +1 -1
  323. package/lib/typeorm/find-options/operator/Raw.js.map +1 -1
  324. package/lib/typeorm/globals.js.map +1 -1
  325. package/lib/typeorm/index.js.map +1 -1
  326. package/lib/typeorm/logger/AdvancedConsoleLogger.js.map +1 -1
  327. package/lib/typeorm/logger/DebugLogger.js.map +1 -1
  328. package/lib/typeorm/logger/FileLogger.js.map +1 -1
  329. package/lib/typeorm/logger/Logger.js.map +1 -1
  330. package/lib/typeorm/logger/LoggerFactory.js.map +1 -1
  331. package/lib/typeorm/logger/LoggerOptions.js.map +1 -1
  332. package/lib/typeorm/logger/SimpleConsoleLogger.js.map +1 -1
  333. package/lib/typeorm/metadata/CheckMetadata.js.map +1 -1
  334. package/lib/typeorm/metadata/ColumnMetadata.js.map +1 -1
  335. package/lib/typeorm/metadata/EmbeddedMetadata.js.map +1 -1
  336. package/lib/typeorm/metadata/EntityListenerMetadata.js.map +1 -1
  337. package/lib/typeorm/metadata/EntityMetadata.js.map +1 -1
  338. package/lib/typeorm/metadata/ExclusionMetadata.js.map +1 -1
  339. package/lib/typeorm/metadata/ForeignKeyMetadata.js.map +1 -1
  340. package/lib/typeorm/metadata/IndexMetadata.js.map +1 -1
  341. package/lib/typeorm/metadata/RelationCountMetadata.js.map +1 -1
  342. package/lib/typeorm/metadata/RelationIdMetadata.js.map +1 -1
  343. package/lib/typeorm/metadata/RelationMetadata.js.map +1 -1
  344. package/lib/typeorm/metadata/UniqueMetadata.js.map +1 -1
  345. package/lib/typeorm/metadata/types/ClosureTreeOptions.js.map +1 -1
  346. package/lib/typeorm/metadata/types/DeferrableType.js.map +1 -1
  347. package/lib/typeorm/metadata/types/EventListenerTypes.js.map +1 -1
  348. package/lib/typeorm/metadata/types/OnDeleteType.js.map +1 -1
  349. package/lib/typeorm/metadata/types/OnUpdateType.js.map +1 -1
  350. package/lib/typeorm/metadata/types/PropertyTypeInFunction.js.map +1 -1
  351. package/lib/typeorm/metadata/types/RelationTypeInFunction.js.map +1 -1
  352. package/lib/typeorm/metadata/types/RelationTypes.js.map +1 -1
  353. package/lib/typeorm/metadata/types/TableTypes.js.map +1 -1
  354. package/lib/typeorm/metadata/types/TreeTypes.js.map +1 -1
  355. package/lib/typeorm/metadata-args/CheckMetadataArgs.js.map +1 -1
  356. package/lib/typeorm/metadata-args/ColumnMetadataArgs.js.map +1 -1
  357. package/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.js.map +1 -1
  358. package/lib/typeorm/metadata-args/EmbeddedMetadataArgs.js.map +1 -1
  359. package/lib/typeorm/metadata-args/EntityListenerMetadataArgs.js.map +1 -1
  360. package/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.js.map +1 -1
  361. package/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.js.map +1 -1
  362. package/lib/typeorm/metadata-args/ExclusionMetadataArgs.js.map +1 -1
  363. package/lib/typeorm/metadata-args/GeneratedMetadataArgs.js.map +1 -1
  364. package/lib/typeorm/metadata-args/IndexMetadataArgs.js.map +1 -1
  365. package/lib/typeorm/metadata-args/InheritanceMetadataArgs.js.map +1 -1
  366. package/lib/typeorm/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  367. package/lib/typeorm/metadata-args/JoinTableMetadataArgs.js.map +1 -1
  368. package/lib/typeorm/metadata-args/MetadataArgsStorage.js.map +1 -1
  369. package/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.js.map +1 -1
  370. package/lib/typeorm/metadata-args/RelationCountMetadataArgs.js.map +1 -1
  371. package/lib/typeorm/metadata-args/RelationIdMetadataArgs.js.map +1 -1
  372. package/lib/typeorm/metadata-args/RelationMetadataArgs.js.map +1 -1
  373. package/lib/typeorm/metadata-args/TableMetadataArgs.js.map +1 -1
  374. package/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.js.map +1 -1
  375. package/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.js.map +1 -1
  376. package/lib/typeorm/metadata-args/TreeMetadataArgs.js.map +1 -1
  377. package/lib/typeorm/metadata-args/UniqueMetadataArgs.js.map +1 -1
  378. package/lib/typeorm/metadata-args/types/ColumnMode.js.map +1 -1
  379. package/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  380. package/lib/typeorm/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  381. package/lib/typeorm/metadata-builder/EntityMetadataValidator.js.map +1 -1
  382. package/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  383. package/lib/typeorm/metadata-builder/MetadataUtils.js.map +1 -1
  384. package/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  385. package/lib/typeorm/migration/Migration.js.map +1 -1
  386. package/lib/typeorm/migration/MigrationExecutor.js.map +1 -1
  387. package/lib/typeorm/migration/MigrationInterface.js.map +1 -1
  388. package/lib/typeorm/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  389. package/lib/typeorm/naming-strategy/NamingStrategyInterface.js.map +1 -1
  390. package/lib/typeorm/persistence/EntityPersistExecutor.js.map +1 -1
  391. package/lib/typeorm/persistence/Subject.js.map +1 -1
  392. package/lib/typeorm/persistence/SubjectChangeMap.js.map +1 -1
  393. package/lib/typeorm/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  394. package/lib/typeorm/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  395. package/lib/typeorm/persistence/SubjectExecutor.js.map +1 -1
  396. package/lib/typeorm/persistence/SubjectTopoligicalSorter.js.map +1 -1
  397. package/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  398. package/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  399. package/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  400. package/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  401. package/lib/typeorm/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  402. package/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  403. package/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  404. package/lib/typeorm/platform/PlatformTools.js.map +1 -1
  405. package/lib/typeorm/query-builder/Alias.js.map +1 -1
  406. package/lib/typeorm/query-builder/Brackets.js.map +1 -1
  407. package/lib/typeorm/query-builder/DeleteQueryBuilder.js.map +1 -1
  408. package/lib/typeorm/query-builder/InsertOrUpdateOptions.js.map +1 -1
  409. package/lib/typeorm/query-builder/InsertQueryBuilder.js.map +1 -1
  410. package/lib/typeorm/query-builder/JoinAttribute.js.map +1 -1
  411. package/lib/typeorm/query-builder/JoinOptions.js.map +1 -1
  412. package/lib/typeorm/query-builder/NotBrackets.js.map +1 -1
  413. package/lib/typeorm/query-builder/QueryBuilder.js.map +1 -1
  414. package/lib/typeorm/query-builder/QueryBuilderCte.js.map +1 -1
  415. package/lib/typeorm/query-builder/QueryBuilderUtils.js.map +1 -1
  416. package/lib/typeorm/query-builder/QueryExpressionMap.js.map +1 -1
  417. package/lib/typeorm/query-builder/QueryPartialEntity.js.map +1 -1
  418. package/lib/typeorm/query-builder/RelationIdLoader.js.map +1 -1
  419. package/lib/typeorm/query-builder/RelationLoader.js.map +1 -1
  420. package/lib/typeorm/query-builder/RelationQueryBuilder.js.map +1 -1
  421. package/lib/typeorm/query-builder/RelationRemover.js.map +1 -1
  422. package/lib/typeorm/query-builder/RelationUpdater.js.map +1 -1
  423. package/lib/typeorm/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  424. package/lib/typeorm/query-builder/SelectQuery.js.map +1 -1
  425. package/lib/typeorm/query-builder/SelectQueryBuilder.js.map +1 -1
  426. package/lib/typeorm/query-builder/SelectQueryBuilderOption.js.map +1 -1
  427. package/lib/typeorm/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  428. package/lib/typeorm/query-builder/UpdateQueryBuilder.js.map +1 -1
  429. package/lib/typeorm/query-builder/WhereClause.js.map +1 -1
  430. package/lib/typeorm/query-builder/WhereExpressionBuilder.js.map +1 -1
  431. package/lib/typeorm/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
  432. package/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.js.map +1 -1
  433. package/lib/typeorm/query-builder/relation-count/RelationCountLoader.js.map +1 -1
  434. package/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
  435. package/lib/typeorm/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  436. package/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.js.map +1 -1
  437. package/lib/typeorm/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  438. package/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
  439. package/lib/typeorm/query-builder/result/DeleteResult.js.map +1 -1
  440. package/lib/typeorm/query-builder/result/InsertResult.js.map +1 -1
  441. package/lib/typeorm/query-builder/result/UpdateResult.js.map +1 -1
  442. package/lib/typeorm/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
  443. package/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  444. package/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
  445. package/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  446. package/lib/typeorm/query-runner/BaseQueryRunner.js.map +1 -1
  447. package/lib/typeorm/query-runner/QueryLock.js.map +1 -1
  448. package/lib/typeorm/query-runner/QueryResult.js.map +1 -1
  449. package/lib/typeorm/query-runner/QueryRunner.js.map +1 -1
  450. package/lib/typeorm/repository/AbstractRepository.js.map +1 -1
  451. package/lib/typeorm/repository/BaseEntity.js.map +1 -1
  452. package/lib/typeorm/repository/EntityId.js.map +1 -1
  453. package/lib/typeorm/repository/FindTreesOptions.js.map +1 -1
  454. package/lib/typeorm/repository/MongoRepository.js.map +1 -1
  455. package/lib/typeorm/repository/RemoveOptions.js.map +1 -1
  456. package/lib/typeorm/repository/Repository.js.map +1 -1
  457. package/lib/typeorm/repository/SaveOptions.js.map +1 -1
  458. package/lib/typeorm/repository/TreeRepository.js.map +1 -1
  459. package/lib/typeorm/repository/UpsertOptions.js.map +1 -1
  460. package/lib/typeorm/schema-builder/MongoSchemaBuilder.js.map +1 -1
  461. package/lib/typeorm/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  462. package/lib/typeorm/schema-builder/SchemaBuilder.js.map +1 -1
  463. package/lib/typeorm/schema-builder/options/TableCheckOptions.js.map +1 -1
  464. package/lib/typeorm/schema-builder/options/TableColumnOptions.js.map +1 -1
  465. package/lib/typeorm/schema-builder/options/TableExclusionOptions.js.map +1 -1
  466. package/lib/typeorm/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  467. package/lib/typeorm/schema-builder/options/TableIndexOptions.js.map +1 -1
  468. package/lib/typeorm/schema-builder/options/TableOptions.js.map +1 -1
  469. package/lib/typeorm/schema-builder/options/TableUniqueOptions.js.map +1 -1
  470. package/lib/typeorm/schema-builder/options/ViewOptions.js.map +1 -1
  471. package/lib/typeorm/schema-builder/table/Table.js.map +1 -1
  472. package/lib/typeorm/schema-builder/table/TableCheck.js.map +1 -1
  473. package/lib/typeorm/schema-builder/table/TableColumn.js.map +1 -1
  474. package/lib/typeorm/schema-builder/table/TableExclusion.js.map +1 -1
  475. package/lib/typeorm/schema-builder/table/TableForeignKey.js.map +1 -1
  476. package/lib/typeorm/schema-builder/table/TableIndex.js.map +1 -1
  477. package/lib/typeorm/schema-builder/table/TableUnique.js.map +1 -1
  478. package/lib/typeorm/schema-builder/util/TableUtils.js.map +1 -1
  479. package/lib/typeorm/schema-builder/util/ViewUtils.js.map +1 -1
  480. package/lib/typeorm/schema-builder/view/View.js.map +1 -1
  481. package/lib/typeorm/subscriber/Broadcaster.js.map +1 -1
  482. package/lib/typeorm/subscriber/BroadcasterResult.js.map +1 -1
  483. package/lib/typeorm/subscriber/EntitySubscriberInterface.js.map +1 -1
  484. package/lib/typeorm/subscriber/event/InsertEvent.js.map +1 -1
  485. package/lib/typeorm/subscriber/event/LoadEvent.js.map +1 -1
  486. package/lib/typeorm/subscriber/event/RecoverEvent.js.map +1 -1
  487. package/lib/typeorm/subscriber/event/RemoveEvent.js.map +1 -1
  488. package/lib/typeorm/subscriber/event/SoftRemoveEvent.js.map +1 -1
  489. package/lib/typeorm/subscriber/event/TransactionCommitEvent.js.map +1 -1
  490. package/lib/typeorm/subscriber/event/TransactionRollbackEvent.js.map +1 -1
  491. package/lib/typeorm/subscriber/event/TransactionStartEvent.js.map +1 -1
  492. package/lib/typeorm/subscriber/event/UpdateEvent.js.map +1 -1
  493. package/lib/typeorm/util/ApplyValueTransformers.js.map +1 -1
  494. package/lib/typeorm/util/DateUtils.js.map +1 -1
  495. package/lib/typeorm/util/DepGraph.js.map +1 -1
  496. package/lib/typeorm/util/DirectoryExportedClassesLoader.js.map +1 -1
  497. package/lib/typeorm/util/ImportUtils.js.map +1 -1
  498. package/lib/typeorm/util/InstanceChecker.js.map +1 -1
  499. package/lib/typeorm/util/ObjectUtils.js.map +1 -1
  500. package/lib/typeorm/util/OrmUtils.js.map +1 -1
  501. package/lib/typeorm/util/PathUtils.js.map +1 -1
  502. package/lib/typeorm/util/RandomGenerator.js.map +1 -1
  503. package/lib/typeorm/util/StringUtils.js.map +1 -1
  504. package/lib/typeorm/util/TreeRepositoryUtils.js.map +1 -1
  505. package/lib/typeorm/util/VersionUtils.js.map +1 -1
  506. package/lib/typeorm/util/escapeRegExp.js.map +1 -1
  507. package/migrations/index.js.map +1 -1
  508. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  509. package/package.json +2 -2
  510. package/src.d.ts +3 -3
  511. package/taon.jsonc +7 -9
  512. package/tmp-environment.json +4 -3
  513. package/websql/README.md +24 -24
  514. package/browser/esm2022/lib/index.mjs +0 -4
  515. package/browser/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
  516. package/browser/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
  517. package/browser/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
  518. package/browser/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
  519. package/browser/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
  520. package/browser/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
  521. package/browser/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
  522. package/browser/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
  523. package/browser/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
  524. package/browser/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
  525. package/browser/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
  526. package/browser/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
  527. package/browser/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
  528. package/browser/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
  529. package/browser/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
  530. package/browser/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
  531. package/browser/esm2022/lib/typeorm/constants.mjs +0 -4
  532. package/browser/esm2022/lib/typeorm/container.mjs +0 -57
  533. package/browser/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
  534. package/browser/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
  535. package/browser/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
  536. package/browser/esm2022/lib/typeorm/data-source/index.mjs +0 -4
  537. package/browser/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
  538. package/browser/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
  539. package/browser/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
  540. package/browser/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
  541. package/browser/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
  542. package/browser/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
  543. package/browser/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
  544. package/browser/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
  545. package/browser/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
  546. package/browser/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
  547. package/browser/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
  548. package/browser/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
  549. package/browser/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
  550. package/browser/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
  551. package/browser/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
  552. package/browser/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
  553. package/browser/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
  554. package/browser/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
  555. package/browser/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
  556. package/browser/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
  557. package/browser/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
  558. package/browser/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
  559. package/browser/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
  560. package/browser/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
  561. package/browser/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
  562. package/browser/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
  563. package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
  564. package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
  565. package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
  566. package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
  567. package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
  568. package/browser/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
  569. package/browser/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
  570. package/browser/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
  571. package/browser/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
  572. package/browser/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
  573. package/browser/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
  574. package/browser/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
  575. package/browser/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
  576. package/browser/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
  577. package/browser/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
  578. package/browser/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
  579. package/browser/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
  580. package/browser/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
  581. package/browser/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
  582. package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
  583. package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
  584. package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
  585. package/browser/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
  586. package/browser/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
  587. package/browser/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
  588. package/browser/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
  589. package/browser/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
  590. package/browser/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
  591. package/browser/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
  592. package/browser/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
  593. package/browser/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
  594. package/browser/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
  595. package/browser/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
  596. package/browser/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
  597. package/browser/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
  598. package/browser/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
  599. package/browser/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
  600. package/browser/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
  601. package/browser/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
  602. package/browser/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
  603. package/browser/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
  604. package/browser/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
  605. package/browser/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
  606. package/browser/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
  607. package/browser/esm2022/lib/typeorm/driver/Query.mjs +0 -13
  608. package/browser/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
  609. package/browser/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
  610. package/browser/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
  611. package/browser/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
  612. package/browser/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
  613. package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
  614. package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
  615. package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
  616. package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
  617. package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
  618. package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
  619. package/browser/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
  620. package/browser/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
  621. package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
  622. package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
  623. package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
  624. package/browser/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
  625. package/browser/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
  626. package/browser/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
  627. package/browser/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
  628. package/browser/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
  629. package/browser/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
  630. package/browser/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
  631. package/browser/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
  632. package/browser/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
  633. package/browser/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
  634. package/browser/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
  635. package/browser/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
  636. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
  637. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
  638. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
  639. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
  640. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
  641. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
  642. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
  643. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
  644. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
  645. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
  646. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
  647. package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
  648. package/browser/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
  649. package/browser/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
  650. package/browser/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
  651. package/browser/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
  652. package/browser/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
  653. package/browser/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
  654. package/browser/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
  655. package/browser/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
  656. package/browser/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
  657. package/browser/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
  658. package/browser/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
  659. package/browser/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
  660. package/browser/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
  661. package/browser/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
  662. package/browser/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
  663. package/browser/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
  664. package/browser/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
  665. package/browser/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
  666. package/browser/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
  667. package/browser/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
  668. package/browser/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
  669. package/browser/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
  670. package/browser/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
  671. package/browser/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
  672. package/browser/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
  673. package/browser/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
  674. package/browser/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
  675. package/browser/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
  676. package/browser/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
  677. package/browser/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
  678. package/browser/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
  679. package/browser/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
  680. package/browser/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
  681. package/browser/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
  682. package/browser/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
  683. package/browser/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
  684. package/browser/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
  685. package/browser/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
  686. package/browser/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
  687. package/browser/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
  688. package/browser/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
  689. package/browser/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
  690. package/browser/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
  691. package/browser/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
  692. package/browser/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
  693. package/browser/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
  694. package/browser/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
  695. package/browser/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
  696. package/browser/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
  697. package/browser/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
  698. package/browser/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
  699. package/browser/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
  700. package/browser/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
  701. package/browser/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
  702. package/browser/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
  703. package/browser/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
  704. package/browser/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
  705. package/browser/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
  706. package/browser/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
  707. package/browser/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
  708. package/browser/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
  709. package/browser/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
  710. package/browser/esm2022/lib/typeorm/error/index.mjs +0 -63
  711. package/browser/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
  712. package/browser/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
  713. package/browser/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
  714. package/browser/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
  715. package/browser/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
  716. package/browser/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
  717. package/browser/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
  718. package/browser/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
  719. package/browser/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
  720. package/browser/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
  721. package/browser/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
  722. package/browser/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
  723. package/browser/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
  724. package/browser/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
  725. package/browser/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
  726. package/browser/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
  727. package/browser/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
  728. package/browser/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
  729. package/browser/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
  730. package/browser/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
  731. package/browser/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
  732. package/browser/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
  733. package/browser/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
  734. package/browser/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
  735. package/browser/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
  736. package/browser/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
  737. package/browser/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
  738. package/browser/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
  739. package/browser/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
  740. package/browser/esm2022/lib/typeorm/globals.mjs +0 -165
  741. package/browser/esm2022/lib/typeorm/index.mjs +0 -157
  742. package/browser/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
  743. package/browser/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
  744. package/browser/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
  745. package/browser/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
  746. package/browser/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
  747. package/browser/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
  748. package/browser/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
  749. package/browser/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
  750. package/browser/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
  751. package/browser/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
  752. package/browser/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
  753. package/browser/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
  754. package/browser/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
  755. package/browser/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
  756. package/browser/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
  757. package/browser/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
  758. package/browser/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
  759. package/browser/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
  760. package/browser/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
  761. package/browser/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
  762. package/browser/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
  763. package/browser/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
  764. package/browser/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
  765. package/browser/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
  766. package/browser/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
  767. package/browser/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
  768. package/browser/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
  769. package/browser/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
  770. package/browser/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
  771. package/browser/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
  772. package/browser/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
  773. package/browser/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
  774. package/browser/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
  775. package/browser/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
  776. package/browser/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
  777. package/browser/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
  778. package/browser/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
  779. package/browser/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
  780. package/browser/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
  781. package/browser/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
  782. package/browser/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
  783. package/browser/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
  784. package/browser/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
  785. package/browser/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
  786. package/browser/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
  787. package/browser/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
  788. package/browser/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
  789. package/browser/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
  790. package/browser/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
  791. package/browser/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
  792. package/browser/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
  793. package/browser/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
  794. package/browser/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
  795. package/browser/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
  796. package/browser/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
  797. package/browser/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
  798. package/browser/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
  799. package/browser/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
  800. package/browser/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
  801. package/browser/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
  802. package/browser/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
  803. package/browser/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
  804. package/browser/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
  805. package/browser/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
  806. package/browser/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
  807. package/browser/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
  808. package/browser/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
  809. package/browser/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
  810. package/browser/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
  811. package/browser/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
  812. package/browser/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
  813. package/browser/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
  814. package/browser/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
  815. package/browser/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
  816. package/browser/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
  817. package/browser/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
  818. package/browser/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
  819. package/browser/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -346
  820. package/browser/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
  821. package/browser/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
  822. package/browser/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
  823. package/browser/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
  824. package/browser/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
  825. package/browser/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
  826. package/browser/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
  827. package/browser/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
  828. package/browser/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
  829. package/browser/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
  830. package/browser/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
  831. package/browser/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
  832. package/browser/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
  833. package/browser/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
  834. package/browser/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
  835. package/browser/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
  836. package/browser/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
  837. package/browser/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
  838. package/browser/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
  839. package/browser/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
  840. package/browser/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
  841. package/browser/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
  842. package/browser/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
  843. package/browser/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
  844. package/browser/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
  845. package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
  846. package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
  847. package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
  848. package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
  849. package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
  850. package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
  851. package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
  852. package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
  853. package/browser/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
  854. package/browser/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
  855. package/browser/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
  856. package/browser/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
  857. package/browser/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
  858. package/browser/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
  859. package/browser/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
  860. package/browser/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
  861. package/browser/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
  862. package/browser/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
  863. package/browser/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
  864. package/browser/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
  865. package/browser/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
  866. package/browser/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
  867. package/browser/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
  868. package/browser/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
  869. package/browser/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
  870. package/browser/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
  871. package/browser/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
  872. package/browser/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
  873. package/browser/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
  874. package/browser/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
  875. package/browser/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
  876. package/browser/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
  877. package/browser/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
  878. package/browser/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
  879. package/browser/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
  880. package/browser/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
  881. package/browser/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
  882. package/browser/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
  883. package/browser/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
  884. package/browser/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
  885. package/browser/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
  886. package/browser/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
  887. package/browser/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
  888. package/browser/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
  889. package/browser/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
  890. package/browser/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
  891. package/browser/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
  892. package/browser/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
  893. package/browser/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
  894. package/browser/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
  895. package/browser/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
  896. package/browser/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
  897. package/browser/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
  898. package/browser/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
  899. package/browser/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
  900. package/browser/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
  901. package/browser/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
  902. package/browser/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
  903. package/browser/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
  904. package/browser/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
  905. package/browser/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
  906. package/browser/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
  907. package/browser/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
  908. package/browser/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
  909. package/browser/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
  910. package/browser/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
  911. package/browser/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
  912. package/browser/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
  913. package/browser/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
  914. package/browser/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
  915. package/browser/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
  916. package/browser/esm2022/public-api.mjs +0 -2
  917. package/browser/esm2022/taon-typeorm.mjs +0 -5
  918. package/client/esm2022/lib/index.mjs +0 -4
  919. package/client/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
  920. package/client/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
  921. package/client/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
  922. package/client/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
  923. package/client/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
  924. package/client/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
  925. package/client/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
  926. package/client/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
  927. package/client/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
  928. package/client/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
  929. package/client/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
  930. package/client/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
  931. package/client/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
  932. package/client/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
  933. package/client/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
  934. package/client/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
  935. package/client/esm2022/lib/typeorm/constants.mjs +0 -4
  936. package/client/esm2022/lib/typeorm/container.mjs +0 -57
  937. package/client/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
  938. package/client/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
  939. package/client/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
  940. package/client/esm2022/lib/typeorm/data-source/index.mjs +0 -4
  941. package/client/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
  942. package/client/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
  943. package/client/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
  944. package/client/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
  945. package/client/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
  946. package/client/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
  947. package/client/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
  948. package/client/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
  949. package/client/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
  950. package/client/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
  951. package/client/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
  952. package/client/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
  953. package/client/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
  954. package/client/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
  955. package/client/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
  956. package/client/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
  957. package/client/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
  958. package/client/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
  959. package/client/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
  960. package/client/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
  961. package/client/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
  962. package/client/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
  963. package/client/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
  964. package/client/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
  965. package/client/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
  966. package/client/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
  967. package/client/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
  968. package/client/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
  969. package/client/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
  970. package/client/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
  971. package/client/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
  972. package/client/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
  973. package/client/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
  974. package/client/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
  975. package/client/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
  976. package/client/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
  977. package/client/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
  978. package/client/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
  979. package/client/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
  980. package/client/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
  981. package/client/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
  982. package/client/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
  983. package/client/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
  984. package/client/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
  985. package/client/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
  986. package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
  987. package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
  988. package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
  989. package/client/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
  990. package/client/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
  991. package/client/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
  992. package/client/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
  993. package/client/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
  994. package/client/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
  995. package/client/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
  996. package/client/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
  997. package/client/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
  998. package/client/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
  999. package/client/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
  1000. package/client/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
  1001. package/client/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
  1002. package/client/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
  1003. package/client/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
  1004. package/client/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
  1005. package/client/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
  1006. package/client/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
  1007. package/client/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
  1008. package/client/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
  1009. package/client/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
  1010. package/client/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
  1011. package/client/esm2022/lib/typeorm/driver/Query.mjs +0 -13
  1012. package/client/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
  1013. package/client/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
  1014. package/client/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
  1015. package/client/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
  1016. package/client/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
  1017. package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
  1018. package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
  1019. package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
  1020. package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
  1021. package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
  1022. package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
  1023. package/client/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
  1024. package/client/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
  1025. package/client/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
  1026. package/client/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
  1027. package/client/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
  1028. package/client/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
  1029. package/client/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
  1030. package/client/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
  1031. package/client/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
  1032. package/client/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
  1033. package/client/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
  1034. package/client/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
  1035. package/client/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
  1036. package/client/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
  1037. package/client/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
  1038. package/client/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
  1039. package/client/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
  1040. package/client/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
  1041. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
  1042. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
  1043. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
  1044. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
  1045. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
  1046. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
  1047. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
  1048. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
  1049. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
  1050. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
  1051. package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
  1052. package/client/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
  1053. package/client/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
  1054. package/client/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
  1055. package/client/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
  1056. package/client/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
  1057. package/client/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
  1058. package/client/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
  1059. package/client/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
  1060. package/client/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
  1061. package/client/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
  1062. package/client/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
  1063. package/client/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
  1064. package/client/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
  1065. package/client/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
  1066. package/client/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
  1067. package/client/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
  1068. package/client/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
  1069. package/client/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
  1070. package/client/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
  1071. package/client/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
  1072. package/client/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
  1073. package/client/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
  1074. package/client/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
  1075. package/client/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
  1076. package/client/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
  1077. package/client/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
  1078. package/client/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
  1079. package/client/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
  1080. package/client/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
  1081. package/client/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
  1082. package/client/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
  1083. package/client/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
  1084. package/client/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
  1085. package/client/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
  1086. package/client/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
  1087. package/client/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
  1088. package/client/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
  1089. package/client/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
  1090. package/client/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
  1091. package/client/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
  1092. package/client/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
  1093. package/client/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
  1094. package/client/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
  1095. package/client/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
  1096. package/client/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
  1097. package/client/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
  1098. package/client/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
  1099. package/client/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
  1100. package/client/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
  1101. package/client/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
  1102. package/client/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
  1103. package/client/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
  1104. package/client/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
  1105. package/client/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
  1106. package/client/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
  1107. package/client/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
  1108. package/client/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
  1109. package/client/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
  1110. package/client/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
  1111. package/client/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
  1112. package/client/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
  1113. package/client/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
  1114. package/client/esm2022/lib/typeorm/error/index.mjs +0 -63
  1115. package/client/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
  1116. package/client/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
  1117. package/client/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
  1118. package/client/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
  1119. package/client/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
  1120. package/client/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
  1121. package/client/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
  1122. package/client/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
  1123. package/client/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
  1124. package/client/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
  1125. package/client/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
  1126. package/client/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
  1127. package/client/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
  1128. package/client/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
  1129. package/client/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
  1130. package/client/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
  1131. package/client/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
  1132. package/client/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
  1133. package/client/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
  1134. package/client/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
  1135. package/client/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
  1136. package/client/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
  1137. package/client/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
  1138. package/client/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
  1139. package/client/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
  1140. package/client/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
  1141. package/client/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
  1142. package/client/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
  1143. package/client/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
  1144. package/client/esm2022/lib/typeorm/globals.mjs +0 -165
  1145. package/client/esm2022/lib/typeorm/index.mjs +0 -157
  1146. package/client/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
  1147. package/client/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
  1148. package/client/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
  1149. package/client/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
  1150. package/client/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
  1151. package/client/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
  1152. package/client/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
  1153. package/client/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
  1154. package/client/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
  1155. package/client/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
  1156. package/client/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
  1157. package/client/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
  1158. package/client/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
  1159. package/client/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
  1160. package/client/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
  1161. package/client/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
  1162. package/client/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
  1163. package/client/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
  1164. package/client/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
  1165. package/client/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
  1166. package/client/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
  1167. package/client/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
  1168. package/client/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
  1169. package/client/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
  1170. package/client/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
  1171. package/client/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
  1172. package/client/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
  1173. package/client/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
  1174. package/client/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
  1175. package/client/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
  1176. package/client/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
  1177. package/client/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
  1178. package/client/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
  1179. package/client/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
  1180. package/client/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
  1181. package/client/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
  1182. package/client/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
  1183. package/client/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
  1184. package/client/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
  1185. package/client/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
  1186. package/client/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
  1187. package/client/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
  1188. package/client/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
  1189. package/client/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
  1190. package/client/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
  1191. package/client/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
  1192. package/client/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
  1193. package/client/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
  1194. package/client/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
  1195. package/client/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
  1196. package/client/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
  1197. package/client/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
  1198. package/client/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
  1199. package/client/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
  1200. package/client/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
  1201. package/client/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
  1202. package/client/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
  1203. package/client/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
  1204. package/client/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
  1205. package/client/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
  1206. package/client/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
  1207. package/client/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
  1208. package/client/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
  1209. package/client/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
  1210. package/client/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
  1211. package/client/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
  1212. package/client/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
  1213. package/client/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
  1214. package/client/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
  1215. package/client/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
  1216. package/client/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
  1217. package/client/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
  1218. package/client/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
  1219. package/client/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
  1220. package/client/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
  1221. package/client/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
  1222. package/client/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
  1223. package/client/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -346
  1224. package/client/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
  1225. package/client/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
  1226. package/client/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
  1227. package/client/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
  1228. package/client/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
  1229. package/client/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
  1230. package/client/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
  1231. package/client/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
  1232. package/client/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
  1233. package/client/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
  1234. package/client/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
  1235. package/client/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
  1236. package/client/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
  1237. package/client/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
  1238. package/client/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
  1239. package/client/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
  1240. package/client/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
  1241. package/client/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
  1242. package/client/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
  1243. package/client/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
  1244. package/client/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
  1245. package/client/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
  1246. package/client/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
  1247. package/client/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
  1248. package/client/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
  1249. package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
  1250. package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
  1251. package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
  1252. package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
  1253. package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
  1254. package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
  1255. package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
  1256. package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
  1257. package/client/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
  1258. package/client/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
  1259. package/client/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
  1260. package/client/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
  1261. package/client/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
  1262. package/client/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
  1263. package/client/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
  1264. package/client/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
  1265. package/client/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
  1266. package/client/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
  1267. package/client/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
  1268. package/client/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
  1269. package/client/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
  1270. package/client/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
  1271. package/client/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
  1272. package/client/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
  1273. package/client/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
  1274. package/client/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
  1275. package/client/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
  1276. package/client/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
  1277. package/client/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
  1278. package/client/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
  1279. package/client/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
  1280. package/client/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
  1281. package/client/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
  1282. package/client/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
  1283. package/client/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
  1284. package/client/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
  1285. package/client/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
  1286. package/client/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
  1287. package/client/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
  1288. package/client/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
  1289. package/client/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
  1290. package/client/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
  1291. package/client/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
  1292. package/client/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
  1293. package/client/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
  1294. package/client/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
  1295. package/client/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
  1296. package/client/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
  1297. package/client/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
  1298. package/client/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
  1299. package/client/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
  1300. package/client/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
  1301. package/client/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
  1302. package/client/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
  1303. package/client/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
  1304. package/client/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
  1305. package/client/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
  1306. package/client/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
  1307. package/client/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
  1308. package/client/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
  1309. package/client/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
  1310. package/client/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
  1311. package/client/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
  1312. package/client/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
  1313. package/client/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
  1314. package/client/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
  1315. package/client/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
  1316. package/client/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
  1317. package/client/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
  1318. package/client/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
  1319. package/client/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
  1320. package/client/esm2022/public-api.mjs +0 -2
  1321. package/client/esm2022/taon-typeorm.mjs +0 -5
  1322. package/websql/esm2022/lib/index.mjs +0 -4
  1323. package/websql/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
  1324. package/websql/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
  1325. package/websql/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
  1326. package/websql/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
  1327. package/websql/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
  1328. package/websql/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
  1329. package/websql/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
  1330. package/websql/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
  1331. package/websql/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
  1332. package/websql/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
  1333. package/websql/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
  1334. package/websql/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
  1335. package/websql/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
  1336. package/websql/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
  1337. package/websql/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
  1338. package/websql/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
  1339. package/websql/esm2022/lib/typeorm/constants.mjs +0 -4
  1340. package/websql/esm2022/lib/typeorm/container.mjs +0 -57
  1341. package/websql/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
  1342. package/websql/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
  1343. package/websql/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
  1344. package/websql/esm2022/lib/typeorm/data-source/index.mjs +0 -4
  1345. package/websql/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
  1346. package/websql/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
  1347. package/websql/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
  1348. package/websql/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
  1349. package/websql/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
  1350. package/websql/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
  1351. package/websql/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
  1352. package/websql/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
  1353. package/websql/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
  1354. package/websql/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
  1355. package/websql/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
  1356. package/websql/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
  1357. package/websql/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
  1358. package/websql/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
  1359. package/websql/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
  1360. package/websql/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
  1361. package/websql/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
  1362. package/websql/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
  1363. package/websql/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
  1364. package/websql/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
  1365. package/websql/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
  1366. package/websql/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
  1367. package/websql/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
  1368. package/websql/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
  1369. package/websql/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
  1370. package/websql/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
  1371. package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
  1372. package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
  1373. package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
  1374. package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
  1375. package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
  1376. package/websql/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
  1377. package/websql/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
  1378. package/websql/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
  1379. package/websql/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
  1380. package/websql/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
  1381. package/websql/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
  1382. package/websql/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
  1383. package/websql/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
  1384. package/websql/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
  1385. package/websql/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
  1386. package/websql/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
  1387. package/websql/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
  1388. package/websql/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
  1389. package/websql/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
  1390. package/websql/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
  1391. package/websql/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
  1392. package/websql/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
  1393. package/websql/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
  1394. package/websql/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
  1395. package/websql/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
  1396. package/websql/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
  1397. package/websql/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
  1398. package/websql/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
  1399. package/websql/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
  1400. package/websql/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
  1401. package/websql/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
  1402. package/websql/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
  1403. package/websql/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
  1404. package/websql/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
  1405. package/websql/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
  1406. package/websql/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
  1407. package/websql/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
  1408. package/websql/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
  1409. package/websql/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
  1410. package/websql/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
  1411. package/websql/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
  1412. package/websql/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
  1413. package/websql/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
  1414. package/websql/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
  1415. package/websql/esm2022/lib/typeorm/driver/Query.mjs +0 -13
  1416. package/websql/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
  1417. package/websql/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
  1418. package/websql/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
  1419. package/websql/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
  1420. package/websql/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
  1421. package/websql/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
  1422. package/websql/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
  1423. package/websql/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
  1424. package/websql/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
  1425. package/websql/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
  1426. package/websql/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
  1427. package/websql/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
  1428. package/websql/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
  1429. package/websql/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
  1430. package/websql/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
  1431. package/websql/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
  1432. package/websql/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
  1433. package/websql/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
  1434. package/websql/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
  1435. package/websql/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
  1436. package/websql/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
  1437. package/websql/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
  1438. package/websql/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
  1439. package/websql/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
  1440. package/websql/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
  1441. package/websql/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
  1442. package/websql/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
  1443. package/websql/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
  1444. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
  1445. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
  1446. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
  1447. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
  1448. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
  1449. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
  1450. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
  1451. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
  1452. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
  1453. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
  1454. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
  1455. package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
  1456. package/websql/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
  1457. package/websql/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
  1458. package/websql/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
  1459. package/websql/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
  1460. package/websql/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
  1461. package/websql/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
  1462. package/websql/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
  1463. package/websql/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
  1464. package/websql/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
  1465. package/websql/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
  1466. package/websql/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
  1467. package/websql/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
  1468. package/websql/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
  1469. package/websql/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
  1470. package/websql/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
  1471. package/websql/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
  1472. package/websql/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
  1473. package/websql/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
  1474. package/websql/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
  1475. package/websql/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
  1476. package/websql/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
  1477. package/websql/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
  1478. package/websql/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
  1479. package/websql/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
  1480. package/websql/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
  1481. package/websql/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
  1482. package/websql/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
  1483. package/websql/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
  1484. package/websql/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
  1485. package/websql/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
  1486. package/websql/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
  1487. package/websql/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
  1488. package/websql/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
  1489. package/websql/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
  1490. package/websql/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
  1491. package/websql/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
  1492. package/websql/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
  1493. package/websql/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
  1494. package/websql/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
  1495. package/websql/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
  1496. package/websql/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
  1497. package/websql/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
  1498. package/websql/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
  1499. package/websql/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
  1500. package/websql/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
  1501. package/websql/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
  1502. package/websql/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
  1503. package/websql/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
  1504. package/websql/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
  1505. package/websql/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
  1506. package/websql/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
  1507. package/websql/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
  1508. package/websql/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
  1509. package/websql/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
  1510. package/websql/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
  1511. package/websql/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
  1512. package/websql/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
  1513. package/websql/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
  1514. package/websql/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
  1515. package/websql/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
  1516. package/websql/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
  1517. package/websql/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
  1518. package/websql/esm2022/lib/typeorm/error/index.mjs +0 -63
  1519. package/websql/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
  1520. package/websql/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
  1521. package/websql/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
  1522. package/websql/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
  1523. package/websql/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
  1524. package/websql/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
  1525. package/websql/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
  1526. package/websql/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
  1527. package/websql/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
  1528. package/websql/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
  1529. package/websql/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
  1530. package/websql/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
  1531. package/websql/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
  1532. package/websql/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
  1533. package/websql/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
  1534. package/websql/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
  1535. package/websql/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
  1536. package/websql/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
  1537. package/websql/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
  1538. package/websql/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
  1539. package/websql/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
  1540. package/websql/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
  1541. package/websql/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
  1542. package/websql/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
  1543. package/websql/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
  1544. package/websql/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
  1545. package/websql/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
  1546. package/websql/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
  1547. package/websql/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
  1548. package/websql/esm2022/lib/typeorm/globals.mjs +0 -165
  1549. package/websql/esm2022/lib/typeorm/index.mjs +0 -157
  1550. package/websql/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
  1551. package/websql/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
  1552. package/websql/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
  1553. package/websql/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
  1554. package/websql/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
  1555. package/websql/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
  1556. package/websql/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
  1557. package/websql/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
  1558. package/websql/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
  1559. package/websql/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
  1560. package/websql/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
  1561. package/websql/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
  1562. package/websql/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
  1563. package/websql/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
  1564. package/websql/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
  1565. package/websql/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
  1566. package/websql/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
  1567. package/websql/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
  1568. package/websql/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
  1569. package/websql/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
  1570. package/websql/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
  1571. package/websql/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
  1572. package/websql/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
  1573. package/websql/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
  1574. package/websql/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
  1575. package/websql/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
  1576. package/websql/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
  1577. package/websql/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
  1578. package/websql/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
  1579. package/websql/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
  1580. package/websql/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
  1581. package/websql/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
  1582. package/websql/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
  1583. package/websql/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
  1584. package/websql/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
  1585. package/websql/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
  1586. package/websql/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
  1587. package/websql/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
  1588. package/websql/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
  1589. package/websql/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
  1590. package/websql/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
  1591. package/websql/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
  1592. package/websql/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
  1593. package/websql/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
  1594. package/websql/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
  1595. package/websql/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
  1596. package/websql/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
  1597. package/websql/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
  1598. package/websql/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
  1599. package/websql/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
  1600. package/websql/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
  1601. package/websql/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
  1602. package/websql/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
  1603. package/websql/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
  1604. package/websql/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
  1605. package/websql/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
  1606. package/websql/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
  1607. package/websql/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
  1608. package/websql/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
  1609. package/websql/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
  1610. package/websql/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
  1611. package/websql/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
  1612. package/websql/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
  1613. package/websql/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
  1614. package/websql/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
  1615. package/websql/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
  1616. package/websql/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
  1617. package/websql/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
  1618. package/websql/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
  1619. package/websql/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
  1620. package/websql/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
  1621. package/websql/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
  1622. package/websql/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
  1623. package/websql/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
  1624. package/websql/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
  1625. package/websql/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
  1626. package/websql/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
  1627. package/websql/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -331
  1628. package/websql/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
  1629. package/websql/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
  1630. package/websql/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
  1631. package/websql/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
  1632. package/websql/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
  1633. package/websql/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
  1634. package/websql/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
  1635. package/websql/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
  1636. package/websql/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
  1637. package/websql/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
  1638. package/websql/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
  1639. package/websql/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
  1640. package/websql/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
  1641. package/websql/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
  1642. package/websql/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
  1643. package/websql/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
  1644. package/websql/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
  1645. package/websql/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
  1646. package/websql/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
  1647. package/websql/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
  1648. package/websql/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
  1649. package/websql/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
  1650. package/websql/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
  1651. package/websql/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
  1652. package/websql/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
  1653. package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
  1654. package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
  1655. package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
  1656. package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
  1657. package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
  1658. package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
  1659. package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
  1660. package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
  1661. package/websql/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
  1662. package/websql/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
  1663. package/websql/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
  1664. package/websql/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
  1665. package/websql/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
  1666. package/websql/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
  1667. package/websql/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
  1668. package/websql/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
  1669. package/websql/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
  1670. package/websql/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
  1671. package/websql/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
  1672. package/websql/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
  1673. package/websql/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
  1674. package/websql/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
  1675. package/websql/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
  1676. package/websql/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
  1677. package/websql/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
  1678. package/websql/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
  1679. package/websql/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
  1680. package/websql/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
  1681. package/websql/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
  1682. package/websql/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
  1683. package/websql/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
  1684. package/websql/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
  1685. package/websql/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
  1686. package/websql/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
  1687. package/websql/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
  1688. package/websql/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
  1689. package/websql/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
  1690. package/websql/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
  1691. package/websql/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
  1692. package/websql/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
  1693. package/websql/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
  1694. package/websql/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
  1695. package/websql/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
  1696. package/websql/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
  1697. package/websql/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
  1698. package/websql/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
  1699. package/websql/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
  1700. package/websql/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
  1701. package/websql/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
  1702. package/websql/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
  1703. package/websql/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
  1704. package/websql/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
  1705. package/websql/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
  1706. package/websql/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
  1707. package/websql/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
  1708. package/websql/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
  1709. package/websql/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
  1710. package/websql/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
  1711. package/websql/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
  1712. package/websql/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
  1713. package/websql/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
  1714. package/websql/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
  1715. package/websql/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
  1716. package/websql/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
  1717. package/websql/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
  1718. package/websql/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
  1719. package/websql/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
  1720. package/websql/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
  1721. package/websql/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
  1722. package/websql/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
  1723. package/websql/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
  1724. package/websql/esm2022/public-api.mjs +0 -2
  1725. package/websql/esm2022/taon-typeorm.mjs +0 -5
@@ -1,1421 +0,0 @@
1
- import { TransactionNotStartedError } from "../../error/TransactionNotStartedError";
2
- import { TableColumn } from "../../schema-builder/table/TableColumn";
3
- import { Table } from "../../schema-builder/table/Table";
4
- import { TableIndex } from "../../schema-builder/table/TableIndex";
5
- import { TableForeignKey } from "../../schema-builder/table/TableForeignKey";
6
- import { View } from "../../schema-builder/view/View";
7
- import { Query } from "../Query";
8
- import { TableUnique } from "../../schema-builder/table/TableUnique";
9
- import { BaseQueryRunner } from "../../query-runner/BaseQueryRunner";
10
- import { OrmUtils } from "../../util/OrmUtils";
11
- import { TableCheck } from "../../schema-builder/table/TableCheck";
12
- import { TransactionAlreadyStartedError, TypeORMError } from "../../error";
13
- import { MetadataTableType } from "../types/MetadataTableType";
14
- import { InstanceChecker } from "../../util/InstanceChecker";
15
- /**
16
- * Runs queries on a single sqlite database connection.
17
- */
18
- export class AbstractSqliteQueryRunner extends BaseQueryRunner {
19
- constructor() {
20
- super();
21
- this.transactionPromise = null;
22
- }
23
- /**
24
- * Creates/uses database connection from the connection pool to perform further operations.
25
- * Returns obtained database connection.
26
- */
27
- connect() {
28
- return Promise.resolve(this.driver.databaseConnection);
29
- }
30
- /**
31
- * Releases used database connection.
32
- * We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.
33
- */
34
- release() {
35
- this.loadedTables = [];
36
- this.clearSqlMemory();
37
- return Promise.resolve();
38
- }
39
- /**
40
- * Starts transaction.
41
- */
42
- async startTransaction(isolationLevel) {
43
- if (this.driver.transactionSupport === "none")
44
- throw new TypeORMError(`Transactions aren't supported by ${this.connection.driver.options.type}.`);
45
- if (this.isTransactionActive &&
46
- this.driver.transactionSupport === "simple")
47
- throw new TransactionAlreadyStartedError();
48
- if (isolationLevel &&
49
- isolationLevel !== "READ UNCOMMITTED" &&
50
- isolationLevel !== "SERIALIZABLE")
51
- throw new TypeORMError(`SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation`);
52
- this.isTransactionActive = true;
53
- try {
54
- await this.broadcaster.broadcast("BeforeTransactionStart");
55
- }
56
- catch (err) {
57
- this.isTransactionActive = false;
58
- throw err;
59
- }
60
- if (this.transactionDepth === 0) {
61
- if (isolationLevel) {
62
- if (isolationLevel === "READ UNCOMMITTED") {
63
- await this.query("PRAGMA read_uncommitted = true");
64
- }
65
- else {
66
- await this.query("PRAGMA read_uncommitted = false");
67
- }
68
- }
69
- await this.query("BEGIN TRANSACTION");
70
- }
71
- else {
72
- await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`);
73
- }
74
- this.transactionDepth += 1;
75
- await this.broadcaster.broadcast("AfterTransactionStart");
76
- }
77
- /**
78
- * Commits transaction.
79
- * Error will be thrown if transaction was not started.
80
- */
81
- async commitTransaction() {
82
- if (!this.isTransactionActive)
83
- throw new TransactionNotStartedError();
84
- await this.broadcaster.broadcast("BeforeTransactionCommit");
85
- if (this.transactionDepth > 1) {
86
- await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`);
87
- }
88
- else {
89
- await this.query("COMMIT");
90
- this.isTransactionActive = false;
91
- }
92
- this.transactionDepth -= 1;
93
- await this.broadcaster.broadcast("AfterTransactionCommit");
94
- }
95
- /**
96
- * Rollbacks transaction.
97
- * Error will be thrown if transaction was not started.
98
- */
99
- async rollbackTransaction() {
100
- if (!this.isTransactionActive)
101
- throw new TransactionNotStartedError();
102
- await this.broadcaster.broadcast("BeforeTransactionRollback");
103
- if (this.transactionDepth > 1) {
104
- await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`);
105
- }
106
- else {
107
- await this.query("ROLLBACK");
108
- this.isTransactionActive = false;
109
- }
110
- this.transactionDepth -= 1;
111
- await this.broadcaster.broadcast("AfterTransactionRollback");
112
- }
113
- /**
114
- * Returns raw data stream.
115
- */
116
- stream(query, parameters, onEnd, onError) {
117
- throw new TypeORMError(`Stream is not supported by sqlite driver.`);
118
- }
119
- /**
120
- * Returns all available database names including system databases.
121
- */
122
- async getDatabases() {
123
- return Promise.resolve([]);
124
- }
125
- /**
126
- * Returns all available schema names including system schemas.
127
- * If database parameter specified, returns schemas of that database.
128
- */
129
- async getSchemas(database) {
130
- return Promise.resolve([]);
131
- }
132
- /**
133
- * Checks if database with the given name exist.
134
- */
135
- async hasDatabase(database) {
136
- return Promise.resolve(false);
137
- }
138
- /**
139
- * Loads currently using database
140
- */
141
- async getCurrentDatabase() {
142
- return Promise.resolve(undefined);
143
- }
144
- /**
145
- * Checks if schema with the given name exist.
146
- */
147
- async hasSchema(schema) {
148
- throw new TypeORMError(`This driver does not support table schemas`);
149
- }
150
- /**
151
- * Loads currently using database schema
152
- */
153
- async getCurrentSchema() {
154
- return Promise.resolve(undefined);
155
- }
156
- /**
157
- * Checks if table with the given name exist in the database.
158
- */
159
- async hasTable(tableOrName) {
160
- const tableName = InstanceChecker.isTable(tableOrName)
161
- ? tableOrName.name
162
- : tableOrName;
163
- const sql = `SELECT * FROM "sqlite_master" WHERE "type" = 'table' AND "name" = '${tableName}'`;
164
- const result = await this.query(sql);
165
- return result.length ? true : false;
166
- }
167
- /**
168
- * Checks if column with the given name exist in the given table.
169
- */
170
- async hasColumn(tableOrName, columnName) {
171
- const tableName = InstanceChecker.isTable(tableOrName)
172
- ? tableOrName.name
173
- : tableOrName;
174
- const sql = `PRAGMA table_xinfo(${this.escapePath(tableName)})`;
175
- const columns = await this.query(sql);
176
- return !!columns.find((column) => column["name"] === columnName);
177
- }
178
- /**
179
- * Creates a new database.
180
- */
181
- async createDatabase(database, ifNotExist) {
182
- return Promise.resolve();
183
- }
184
- /**
185
- * Drops database.
186
- */
187
- async dropDatabase(database, ifExist) {
188
- return Promise.resolve();
189
- }
190
- /**
191
- * Creates a new table schema.
192
- */
193
- async createSchema(schemaPath, ifNotExist) {
194
- return Promise.resolve();
195
- }
196
- /**
197
- * Drops table schema.
198
- */
199
- async dropSchema(schemaPath, ifExist) {
200
- return Promise.resolve();
201
- }
202
- /**
203
- * Creates a new table.
204
- */
205
- async createTable(table, ifNotExist = false, createForeignKeys = true, createIndices = true) {
206
- const upQueries = [];
207
- const downQueries = [];
208
- if (ifNotExist) {
209
- const isTableExist = await this.hasTable(table);
210
- if (isTableExist)
211
- return Promise.resolve();
212
- }
213
- upQueries.push(this.createTableSql(table, createForeignKeys));
214
- downQueries.push(this.dropTableSql(table));
215
- if (createIndices) {
216
- table.indices.forEach((index) => {
217
- if (!index.name)
218
- index.name = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
219
- upQueries.push(this.createIndexSql(table, index));
220
- downQueries.push(this.dropIndexSql(index));
221
- });
222
- }
223
- const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
224
- for (const column of generatedColumns) {
225
- const insertQuery = this.insertTypeormMetadataSql({
226
- table: table.name,
227
- type: MetadataTableType.GENERATED_COLUMN,
228
- name: column.name,
229
- value: column.asExpression,
230
- });
231
- const deleteQuery = this.deleteTypeormMetadataSql({
232
- table: table.name,
233
- type: MetadataTableType.GENERATED_COLUMN,
234
- name: column.name,
235
- });
236
- upQueries.push(insertQuery);
237
- downQueries.push(deleteQuery);
238
- }
239
- await this.executeQueries(upQueries, downQueries);
240
- }
241
- /**
242
- * Drops the table.
243
- */
244
- async dropTable(tableOrName, ifExist, dropForeignKeys = true, dropIndices = true) {
245
- if (ifExist) {
246
- const isTableExist = await this.hasTable(tableOrName);
247
- if (!isTableExist)
248
- return Promise.resolve();
249
- }
250
- const createForeignKeys = dropForeignKeys;
251
- const table = InstanceChecker.isTable(tableOrName)
252
- ? tableOrName
253
- : await this.getCachedTable(tableOrName);
254
- const upQueries = [];
255
- const downQueries = [];
256
- if (dropIndices) {
257
- table.indices.forEach((index) => {
258
- upQueries.push(this.dropIndexSql(index));
259
- downQueries.push(this.createIndexSql(table, index));
260
- });
261
- }
262
- upQueries.push(this.dropTableSql(table, ifExist));
263
- downQueries.push(this.createTableSql(table, createForeignKeys));
264
- const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
265
- for (const column of generatedColumns) {
266
- const deleteQuery = this.deleteTypeormMetadataSql({
267
- table: table.name,
268
- type: MetadataTableType.GENERATED_COLUMN,
269
- name: column.name,
270
- });
271
- const insertQuery = this.insertTypeormMetadataSql({
272
- table: table.name,
273
- type: MetadataTableType.GENERATED_COLUMN,
274
- name: column.name,
275
- value: column.asExpression,
276
- });
277
- upQueries.push(deleteQuery);
278
- downQueries.push(insertQuery);
279
- }
280
- await this.executeQueries(upQueries, downQueries);
281
- }
282
- /**
283
- * Creates a new view.
284
- */
285
- async createView(view, syncWithMetadata = false) {
286
- const upQueries = [];
287
- const downQueries = [];
288
- upQueries.push(this.createViewSql(view));
289
- if (syncWithMetadata)
290
- upQueries.push(this.insertViewDefinitionSql(view));
291
- downQueries.push(this.dropViewSql(view));
292
- if (syncWithMetadata)
293
- downQueries.push(this.deleteViewDefinitionSql(view));
294
- await this.executeQueries(upQueries, downQueries);
295
- }
296
- /**
297
- * Drops the view.
298
- */
299
- async dropView(target) {
300
- const viewName = InstanceChecker.isView(target) ? target.name : target;
301
- const view = await this.getCachedView(viewName);
302
- const upQueries = [];
303
- const downQueries = [];
304
- upQueries.push(this.deleteViewDefinitionSql(view));
305
- upQueries.push(this.dropViewSql(view));
306
- downQueries.push(this.insertViewDefinitionSql(view));
307
- downQueries.push(this.createViewSql(view));
308
- await this.executeQueries(upQueries, downQueries);
309
- }
310
- /**
311
- * Renames the given table.
312
- */
313
- async renameTable(oldTableOrName, newTableName) {
314
- const oldTable = InstanceChecker.isTable(oldTableOrName)
315
- ? oldTableOrName
316
- : await this.getCachedTable(oldTableOrName);
317
- const newTable = oldTable.clone();
318
- newTable.name = newTableName;
319
- const up = new Query(`ALTER TABLE ${this.escapePath(oldTable.name)} RENAME TO ${this.escapePath(newTableName)}`);
320
- const down = new Query(`ALTER TABLE ${this.escapePath(newTableName)} RENAME TO ${this.escapePath(oldTable.name)}`);
321
- await this.executeQueries(up, down);
322
- newTable.uniques.forEach((unique) => {
323
- const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
324
- if (unique.name !== oldUniqueName)
325
- return;
326
- unique.name = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
327
- });
328
- newTable.foreignKeys.forEach((foreignKey) => {
329
- const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
330
- if (foreignKey.name !== oldForeignKeyName)
331
- return;
332
- foreignKey.name = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
333
- });
334
- newTable.indices.forEach((index) => {
335
- const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
336
- if (index.name !== oldIndexName)
337
- return;
338
- index.name = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
339
- });
340
- oldTable.name = newTable.name;
341
- await this.recreateTable(newTable, oldTable);
342
- }
343
- /**
344
- * Creates a new column from the column in the table.
345
- */
346
- async addColumn(tableOrName, column) {
347
- const table = InstanceChecker.isTable(tableOrName)
348
- ? tableOrName
349
- : await this.getCachedTable(tableOrName);
350
- return this.addColumns(table, [column]);
351
- }
352
- /**
353
- * Creates a new columns from the column in the table.
354
- */
355
- async addColumns(tableOrName, columns) {
356
- const table = InstanceChecker.isTable(tableOrName)
357
- ? tableOrName
358
- : await this.getCachedTable(tableOrName);
359
- const changedTable = table.clone();
360
- columns.forEach((column) => changedTable.addColumn(column));
361
- await this.recreateTable(changedTable, table);
362
- }
363
- /**
364
- * Renames column in the given table.
365
- */
366
- async renameColumn(tableOrName, oldTableColumnOrName, newTableColumnOrName) {
367
- const table = InstanceChecker.isTable(tableOrName)
368
- ? tableOrName
369
- : await this.getCachedTable(tableOrName);
370
- const oldColumn = InstanceChecker.isTableColumn(oldTableColumnOrName)
371
- ? oldTableColumnOrName
372
- : table.columns.find((c) => c.name === oldTableColumnOrName);
373
- if (!oldColumn)
374
- throw new TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
375
- let newColumn = undefined;
376
- if (InstanceChecker.isTableColumn(newTableColumnOrName)) {
377
- newColumn = newTableColumnOrName;
378
- }
379
- else {
380
- newColumn = oldColumn.clone();
381
- newColumn.name = newTableColumnOrName;
382
- }
383
- return this.changeColumn(table, oldColumn, newColumn);
384
- }
385
- /**
386
- * Changes a column in the table.
387
- */
388
- async changeColumn(tableOrName, oldTableColumnOrName, newColumn) {
389
- const table = InstanceChecker.isTable(tableOrName)
390
- ? tableOrName
391
- : await this.getCachedTable(tableOrName);
392
- const oldColumn = InstanceChecker.isTableColumn(oldTableColumnOrName)
393
- ? oldTableColumnOrName
394
- : table.columns.find((c) => c.name === oldTableColumnOrName);
395
- if (!oldColumn)
396
- throw new TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
397
- await this.changeColumns(table, [{ oldColumn, newColumn }]);
398
- }
399
- /**
400
- * Changes a column in the table.
401
- * Changed column looses all its keys in the db.
402
- */
403
- async changeColumns(tableOrName, changedColumns) {
404
- const table = InstanceChecker.isTable(tableOrName)
405
- ? tableOrName
406
- : await this.getCachedTable(tableOrName);
407
- const changedTable = table.clone();
408
- changedColumns.forEach((changedColumnSet) => {
409
- if (changedColumnSet.newColumn.name !==
410
- changedColumnSet.oldColumn.name) {
411
- changedTable
412
- .findColumnUniques(changedColumnSet.oldColumn)
413
- .forEach((unique) => {
414
- const uniqueName = this.connection.namingStrategy.uniqueConstraintName(table, unique.columnNames);
415
- unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
416
- unique.columnNames.push(changedColumnSet.newColumn.name);
417
- if (unique.name === uniqueName) {
418
- unique.name =
419
- this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);
420
- }
421
- });
422
- changedTable
423
- .findColumnForeignKeys(changedColumnSet.oldColumn)
424
- .forEach((foreignKey) => {
425
- const foreignKeyName = this.connection.namingStrategy.foreignKeyName(table, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
426
- foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
427
- foreignKey.columnNames.push(changedColumnSet.newColumn.name);
428
- if (foreignKey.name === foreignKeyName) {
429
- foreignKey.name =
430
- this.connection.namingStrategy.foreignKeyName(changedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
431
- }
432
- });
433
- changedTable
434
- .findColumnIndices(changedColumnSet.oldColumn)
435
- .forEach((index) => {
436
- const indexName = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
437
- index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
438
- index.columnNames.push(changedColumnSet.newColumn.name);
439
- if (index.name === indexName) {
440
- index.name =
441
- this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);
442
- }
443
- });
444
- }
445
- const originalColumn = changedTable.columns.find((column) => column.name === changedColumnSet.oldColumn.name);
446
- if (originalColumn)
447
- changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;
448
- });
449
- await this.recreateTable(changedTable, table);
450
- }
451
- /**
452
- * Drops column in the table.
453
- */
454
- async dropColumn(tableOrName, columnOrName) {
455
- const table = InstanceChecker.isTable(tableOrName)
456
- ? tableOrName
457
- : await this.getCachedTable(tableOrName);
458
- const column = InstanceChecker.isTableColumn(columnOrName)
459
- ? columnOrName
460
- : table.findColumnByName(columnOrName);
461
- if (!column)
462
- throw new TypeORMError(`Column "${columnOrName}" was not found in table "${table.name}"`);
463
- await this.dropColumns(table, [column]);
464
- }
465
- /**
466
- * Drops the columns in the table.
467
- */
468
- async dropColumns(tableOrName, columns) {
469
- const table = InstanceChecker.isTable(tableOrName)
470
- ? tableOrName
471
- : await this.getCachedTable(tableOrName);
472
- const changedTable = table.clone();
473
- columns.forEach((column) => {
474
- const columnInstance = InstanceChecker.isTableColumn(column)
475
- ? column
476
- : table.findColumnByName(column);
477
- if (!columnInstance)
478
- throw new Error(`Column "${column}" was not found in table "${table.name}"`);
479
- changedTable.removeColumn(columnInstance);
480
- changedTable
481
- .findColumnUniques(columnInstance)
482
- .forEach((unique) => changedTable.removeUniqueConstraint(unique));
483
- changedTable
484
- .findColumnIndices(columnInstance)
485
- .forEach((index) => changedTable.removeIndex(index));
486
- changedTable
487
- .findColumnForeignKeys(columnInstance)
488
- .forEach((fk) => changedTable.removeForeignKey(fk));
489
- });
490
- await this.recreateTable(changedTable, table);
491
- }
492
- /**
493
- * Creates a new primary key.
494
- */
495
- async createPrimaryKey(tableOrName, columnNames) {
496
- const table = InstanceChecker.isTable(tableOrName)
497
- ? tableOrName
498
- : await this.getCachedTable(tableOrName);
499
- const changedTable = table.clone();
500
- changedTable.columns.forEach((column) => {
501
- if (columnNames.find((columnName) => columnName === column.name))
502
- column.isPrimary = true;
503
- });
504
- await this.recreateTable(changedTable, table);
505
- table.columns.forEach((column) => {
506
- if (columnNames.find((columnName) => columnName === column.name))
507
- column.isPrimary = true;
508
- });
509
- }
510
- /**
511
- * Updates composite primary keys.
512
- */
513
- async updatePrimaryKeys(tableOrName, columns) {
514
- await Promise.resolve();
515
- }
516
- /**
517
- * Drops a primary key.
518
- */
519
- async dropPrimaryKey(tableOrName) {
520
- const table = InstanceChecker.isTable(tableOrName)
521
- ? tableOrName
522
- : await this.getCachedTable(tableOrName);
523
- const changedTable = table.clone();
524
- changedTable.primaryColumns.forEach((column) => {
525
- column.isPrimary = false;
526
- });
527
- await this.recreateTable(changedTable, table);
528
- table.primaryColumns.forEach((column) => {
529
- column.isPrimary = false;
530
- });
531
- }
532
- /**
533
- * Creates a new unique constraint.
534
- */
535
- async createUniqueConstraint(tableOrName, uniqueConstraint) {
536
- await this.createUniqueConstraints(tableOrName, [uniqueConstraint]);
537
- }
538
- /**
539
- * Creates a new unique constraints.
540
- */
541
- async createUniqueConstraints(tableOrName, uniqueConstraints) {
542
- const table = InstanceChecker.isTable(tableOrName)
543
- ? tableOrName
544
- : await this.getCachedTable(tableOrName);
545
- const changedTable = table.clone();
546
- uniqueConstraints.forEach((uniqueConstraint) => changedTable.addUniqueConstraint(uniqueConstraint));
547
- await this.recreateTable(changedTable, table);
548
- }
549
- /**
550
- * Drops an unique constraint.
551
- */
552
- async dropUniqueConstraint(tableOrName, uniqueOrName) {
553
- const table = InstanceChecker.isTable(tableOrName)
554
- ? tableOrName
555
- : await this.getCachedTable(tableOrName);
556
- const uniqueConstraint = InstanceChecker.isTableUnique(uniqueOrName)
557
- ? uniqueOrName
558
- : table.uniques.find((u) => u.name === uniqueOrName);
559
- if (!uniqueConstraint)
560
- throw new TypeORMError(`Supplied unique constraint was not found in table ${table.name}`);
561
- await this.dropUniqueConstraints(table, [uniqueConstraint]);
562
- }
563
- /**
564
- * Creates an unique constraints.
565
- */
566
- async dropUniqueConstraints(tableOrName, uniqueConstraints) {
567
- const table = InstanceChecker.isTable(tableOrName)
568
- ? tableOrName
569
- : await this.getCachedTable(tableOrName);
570
- const changedTable = table.clone();
571
- uniqueConstraints.forEach((uniqueConstraint) => changedTable.removeUniqueConstraint(uniqueConstraint));
572
- await this.recreateTable(changedTable, table);
573
- }
574
- /**
575
- * Creates new check constraint.
576
- */
577
- async createCheckConstraint(tableOrName, checkConstraint) {
578
- await this.createCheckConstraints(tableOrName, [checkConstraint]);
579
- }
580
- /**
581
- * Creates new check constraints.
582
- */
583
- async createCheckConstraints(tableOrName, checkConstraints) {
584
- const table = InstanceChecker.isTable(tableOrName)
585
- ? tableOrName
586
- : await this.getCachedTable(tableOrName);
587
- const changedTable = table.clone();
588
- checkConstraints.forEach((checkConstraint) => changedTable.addCheckConstraint(checkConstraint));
589
- await this.recreateTable(changedTable, table);
590
- }
591
- /**
592
- * Drops check constraint.
593
- */
594
- async dropCheckConstraint(tableOrName, checkOrName) {
595
- const table = InstanceChecker.isTable(tableOrName)
596
- ? tableOrName
597
- : await this.getCachedTable(tableOrName);
598
- const checkConstraint = InstanceChecker.isTableCheck(checkOrName)
599
- ? checkOrName
600
- : table.checks.find((c) => c.name === checkOrName);
601
- if (!checkConstraint)
602
- throw new TypeORMError(`Supplied check constraint was not found in table ${table.name}`);
603
- await this.dropCheckConstraints(table, [checkConstraint]);
604
- }
605
- /**
606
- * Drops check constraints.
607
- */
608
- async dropCheckConstraints(tableOrName, checkConstraints) {
609
- const table = InstanceChecker.isTable(tableOrName)
610
- ? tableOrName
611
- : await this.getCachedTable(tableOrName);
612
- const changedTable = table.clone();
613
- checkConstraints.forEach((checkConstraint) => changedTable.removeCheckConstraint(checkConstraint));
614
- await this.recreateTable(changedTable, table);
615
- }
616
- /**
617
- * Creates a new exclusion constraint.
618
- */
619
- async createExclusionConstraint(tableOrName, exclusionConstraint) {
620
- throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
621
- }
622
- /**
623
- * Creates a new exclusion constraints.
624
- */
625
- async createExclusionConstraints(tableOrName, exclusionConstraints) {
626
- throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
627
- }
628
- /**
629
- * Drops exclusion constraint.
630
- */
631
- async dropExclusionConstraint(tableOrName, exclusionOrName) {
632
- throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
633
- }
634
- /**
635
- * Drops exclusion constraints.
636
- */
637
- async dropExclusionConstraints(tableOrName, exclusionConstraints) {
638
- throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
639
- }
640
- /**
641
- * Creates a new foreign key.
642
- */
643
- async createForeignKey(tableOrName, foreignKey) {
644
- await this.createForeignKeys(tableOrName, [foreignKey]);
645
- }
646
- /**
647
- * Creates a new foreign keys.
648
- */
649
- async createForeignKeys(tableOrName, foreignKeys) {
650
- const table = InstanceChecker.isTable(tableOrName)
651
- ? tableOrName
652
- : await this.getCachedTable(tableOrName);
653
- const changedTable = table.clone();
654
- foreignKeys.forEach((foreignKey) => changedTable.addForeignKey(foreignKey));
655
- await this.recreateTable(changedTable, table);
656
- }
657
- /**
658
- * Drops a foreign key from the table.
659
- */
660
- async dropForeignKey(tableOrName, foreignKeyOrName) {
661
- const table = InstanceChecker.isTable(tableOrName)
662
- ? tableOrName
663
- : await this.getCachedTable(tableOrName);
664
- const foreignKey = InstanceChecker.isTableForeignKey(foreignKeyOrName)
665
- ? foreignKeyOrName
666
- : table.foreignKeys.find((fk) => fk.name === foreignKeyOrName);
667
- if (!foreignKey)
668
- throw new TypeORMError(`Supplied foreign key was not found in table ${table.name}`);
669
- await this.dropForeignKeys(tableOrName, [foreignKey]);
670
- }
671
- /**
672
- * Drops a foreign keys from the table.
673
- */
674
- async dropForeignKeys(tableOrName, foreignKeys) {
675
- const table = InstanceChecker.isTable(tableOrName)
676
- ? tableOrName
677
- : await this.getCachedTable(tableOrName);
678
- const changedTable = table.clone();
679
- foreignKeys.forEach((foreignKey) => changedTable.removeForeignKey(foreignKey));
680
- await this.recreateTable(changedTable, table);
681
- }
682
- /**
683
- * Creates a new index.
684
- */
685
- async createIndex(tableOrName, index) {
686
- const table = InstanceChecker.isTable(tableOrName)
687
- ? tableOrName
688
- : await this.getCachedTable(tableOrName);
689
- if (!index.name)
690
- index.name = this.generateIndexName(table, index);
691
- const up = this.createIndexSql(table, index);
692
- const down = this.dropIndexSql(index);
693
- await this.executeQueries(up, down);
694
- table.addIndex(index);
695
- }
696
- /**
697
- * Creates a new indices
698
- */
699
- async createIndices(tableOrName, indices) {
700
- const promises = indices.map((index) => this.createIndex(tableOrName, index));
701
- await Promise.all(promises);
702
- }
703
- /**
704
- * Drops an index from the table.
705
- */
706
- async dropIndex(tableOrName, indexOrName) {
707
- const table = InstanceChecker.isTable(tableOrName)
708
- ? tableOrName
709
- : await this.getCachedTable(tableOrName);
710
- const index = InstanceChecker.isTableIndex(indexOrName)
711
- ? indexOrName
712
- : table.indices.find((i) => i.name === indexOrName);
713
- if (!index)
714
- throw new TypeORMError(`Supplied index ${indexOrName} was not found in table ${table.name}`);
715
- if (!index.name)
716
- index.name = this.generateIndexName(table, index);
717
- const up = this.dropIndexSql(index);
718
- const down = this.createIndexSql(table, index);
719
- await this.executeQueries(up, down);
720
- table.removeIndex(index);
721
- }
722
- /**
723
- * Drops an indices from the table.
724
- */
725
- async dropIndices(tableOrName, indices) {
726
- const promises = indices.map((index) => this.dropIndex(tableOrName, index));
727
- await Promise.all(promises);
728
- }
729
- /**
730
- * Clears all table contents.
731
- * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.
732
- */
733
- async clearTable(tableName) {
734
- await this.query(`DELETE FROM ${this.escapePath(tableName)}`);
735
- }
736
- /**
737
- * Removes all tables from the currently connected database.
738
- */
739
- async clearDatabase(database) {
740
- let dbPath = undefined;
741
- if (database &&
742
- this.driver.getAttachedDatabaseHandleByRelativePath(database)) {
743
- dbPath =
744
- this.driver.getAttachedDatabaseHandleByRelativePath(database);
745
- }
746
- await this.query(`PRAGMA foreign_keys = OFF`);
747
- const isAnotherTransactionActive = this.isTransactionActive;
748
- if (!isAnotherTransactionActive)
749
- await this.startTransaction();
750
- try {
751
- const selectViewDropsQuery = dbPath
752
- ? `SELECT 'DROP VIEW "${dbPath}"."' || name || '";' as query FROM "${dbPath}"."sqlite_master" WHERE "type" = 'view'`
753
- : `SELECT 'DROP VIEW "' || name || '";' as query FROM "sqlite_master" WHERE "type" = 'view'`;
754
- const dropViewQueries = await this.query(selectViewDropsQuery);
755
- await Promise.all(dropViewQueries.map((q) => this.query(q["query"])));
756
- const selectTableDropsQuery = dbPath
757
- ? `SELECT 'DROP TABLE "${dbPath}"."' || name || '";' as query FROM "${dbPath}"."sqlite_master" WHERE "type" = 'table' AND "name" != 'sqlite_sequence'`
758
- : `SELECT 'DROP TABLE "' || name || '";' as query FROM "sqlite_master" WHERE "type" = 'table' AND "name" != 'sqlite_sequence'`;
759
- const dropTableQueries = await this.query(selectTableDropsQuery);
760
- await Promise.all(dropTableQueries.map((q) => this.query(q["query"])));
761
- if (!isAnotherTransactionActive)
762
- await this.commitTransaction();
763
- }
764
- catch (error) {
765
- try {
766
- if (!isAnotherTransactionActive)
767
- await this.rollbackTransaction();
768
- }
769
- catch (rollbackError) { }
770
- throw error;
771
- }
772
- finally {
773
- await this.query(`PRAGMA foreign_keys = ON`);
774
- }
775
- }
776
- async loadViews(viewNames) {
777
- const hasTable = await this.hasTable(this.getTypeormMetadataTableName());
778
- if (!hasTable) {
779
- return [];
780
- }
781
- if (!viewNames) {
782
- viewNames = [];
783
- }
784
- const viewNamesString = viewNames
785
- .map((name) => "'" + name + "'")
786
- .join(", ");
787
- let query = `SELECT "t".* FROM "${this.getTypeormMetadataTableName()}" "t" INNER JOIN "sqlite_master" s ON "s"."name" = "t"."name" AND "s"."type" = 'view' WHERE "t"."type" = '${MetadataTableType.VIEW}'`;
788
- if (viewNamesString.length > 0)
789
- query += ` AND "t"."name" IN (${viewNamesString})`;
790
- const dbViews = await this.query(query);
791
- return dbViews.map((dbView) => {
792
- const view = new View();
793
- view.name = dbView["name"];
794
- view.expression = dbView["value"];
795
- return view;
796
- });
797
- }
798
- async loadTableRecords(tablePath, tableOrIndex) {
799
- let database = undefined;
800
- const [schema, tableName] = this.splitTablePath(tablePath);
801
- if (schema &&
802
- this.driver.getAttachedDatabasePathRelativeByHandle(schema)) {
803
- database =
804
- this.driver.getAttachedDatabasePathRelativeByHandle(schema);
805
- }
806
- const res = await this.query(`SELECT ${database ? `'${database}'` : null} as database, ${schema ? `'${schema}'` : null} as schema, * FROM ${schema ? `"${schema}".` : ""}${this.escapePath(`sqlite_master`)} WHERE "type" = '${tableOrIndex}' AND "${tableOrIndex === "table" ? "name" : "tbl_name"}" IN ('${tableName}')`);
807
- return res;
808
- }
809
- async loadPragmaRecords(tablePath, pragma) {
810
- const [, tableName] = this.splitTablePath(tablePath);
811
- const res = await this.query(`PRAGMA ${pragma}("${tableName}")`);
812
- return res;
813
- }
814
- /**
815
- * Loads all tables (with given names) from the database and creates a Table from them.
816
- */
817
- async loadTables(tableNames) {
818
- if (tableNames && tableNames.length === 0) {
819
- return [];
820
- }
821
- let dbTables = [];
822
- let dbIndicesDef;
823
- if (!tableNames) {
824
- const tablesSql = `SELECT * FROM "sqlite_master" WHERE "type" = 'table'`;
825
- dbTables.push(...(await this.query(tablesSql)));
826
- const tableNamesString = dbTables
827
- .map(({ name }) => `'${name}'`)
828
- .join(", ");
829
- dbIndicesDef = await this.query(`SELECT * FROM "sqlite_master" WHERE "type" = 'index' AND "tbl_name" IN (${tableNamesString})`);
830
- }
831
- else {
832
- dbTables = (await Promise.all(tableNames.map((tableName) => this.loadTableRecords(tableName, "table"))))
833
- .reduce((acc, res) => [...acc, ...res], [])
834
- .filter(Boolean);
835
- dbIndicesDef = (await Promise.all((tableNames ?? []).map((tableName) => this.loadTableRecords(tableName, "index"))))
836
- .reduce((acc, res) => [...acc, ...res], [])
837
- .filter(Boolean);
838
- }
839
- if (dbTables.length === 0) {
840
- return [];
841
- }
842
- return Promise.all(dbTables.map(async (dbTable) => {
843
- const tablePath = dbTable["database"] &&
844
- this.driver.getAttachedDatabaseHandleByRelativePath(dbTable["database"])
845
- ? `${this.driver.getAttachedDatabaseHandleByRelativePath(dbTable["database"])}.${dbTable["name"]}`
846
- : dbTable["name"];
847
- const sql = dbTable["sql"];
848
- const withoutRowid = sql.includes("WITHOUT ROWID");
849
- const table = new Table({ name: tablePath, withoutRowid });
850
- const [dbColumns, dbIndices, dbForeignKeys] = await Promise.all([
851
- this.loadPragmaRecords(tablePath, `table_xinfo`),
852
- this.loadPragmaRecords(tablePath, `index_list`),
853
- this.loadPragmaRecords(tablePath, `foreign_key_list`),
854
- ]);
855
- let autoIncrementColumnName = undefined;
856
- const tableSql = dbTable["sql"];
857
- let autoIncrementIndex = tableSql
858
- .toUpperCase()
859
- .indexOf("AUTOINCREMENT");
860
- if (autoIncrementIndex !== -1) {
861
- autoIncrementColumnName = tableSql.substr(0, autoIncrementIndex);
862
- const comma = autoIncrementColumnName.lastIndexOf(",");
863
- const bracket = autoIncrementColumnName.lastIndexOf("(");
864
- if (comma !== -1) {
865
- autoIncrementColumnName =
866
- autoIncrementColumnName.substr(comma);
867
- autoIncrementColumnName =
868
- autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf('"'));
869
- autoIncrementColumnName =
870
- autoIncrementColumnName.substr(autoIncrementColumnName.indexOf('"') + 1);
871
- }
872
- else if (bracket !== -1) {
873
- autoIncrementColumnName =
874
- autoIncrementColumnName.substr(bracket);
875
- autoIncrementColumnName =
876
- autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf('"'));
877
- autoIncrementColumnName =
878
- autoIncrementColumnName.substr(autoIncrementColumnName.indexOf('"') + 1);
879
- }
880
- }
881
- table.columns = await Promise.all(dbColumns.map(async (dbColumn) => {
882
- const tableColumn = new TableColumn();
883
- tableColumn.name = dbColumn["name"];
884
- tableColumn.type = dbColumn["type"].toLowerCase();
885
- tableColumn.default =
886
- dbColumn["dflt_value"] !== null &&
887
- dbColumn["dflt_value"] !== undefined
888
- ? dbColumn["dflt_value"]
889
- : undefined;
890
- tableColumn.isNullable = dbColumn["notnull"] === 0;
891
- tableColumn.isPrimary = dbColumn["pk"] > 0;
892
- tableColumn.comment = ""; // SQLite does not support column comments
893
- tableColumn.isGenerated =
894
- autoIncrementColumnName === dbColumn["name"];
895
- if (tableColumn.isGenerated) {
896
- tableColumn.generationStrategy = "increment";
897
- }
898
- if (dbColumn["hidden"] === 2 ||
899
- dbColumn["hidden"] === 3) {
900
- tableColumn.generatedType =
901
- dbColumn["hidden"] === 2 ? "VIRTUAL" : "STORED";
902
- const asExpressionQuery = await this.selectTypeormMetadataSql({
903
- table: table.name,
904
- type: MetadataTableType.GENERATED_COLUMN,
905
- name: tableColumn.name,
906
- });
907
- const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
908
- if (results[0] && results[0].value) {
909
- tableColumn.asExpression = results[0].value;
910
- }
911
- else {
912
- tableColumn.asExpression = "";
913
- }
914
- }
915
- if (tableColumn.type === "varchar") {
916
- const enumMatch = sql.match(new RegExp('"(' +
917
- tableColumn.name +
918
- ")\" varchar CHECK\\s*\\(\\s*\"\\1\"\\s+IN\\s*\\(('[^']+'(?:\\s*,\\s*'[^']+')+)\\s*\\)\\s*\\)"));
919
- if (enumMatch) {
920
- tableColumn.enum = enumMatch[2]
921
- .substr(1, enumMatch[2].length - 2)
922
- .split("','");
923
- }
924
- }
925
- let pos = tableColumn.type.indexOf("(");
926
- if (pos !== -1) {
927
- const fullType = tableColumn.type;
928
- let dataType = fullType.substr(0, pos);
929
- if (!!this.driver.withLengthColumnTypes.find((col) => col === dataType)) {
930
- let len = parseInt(fullType.substring(pos + 1, fullType.length - 1));
931
- if (len) {
932
- tableColumn.length = len.toString();
933
- tableColumn.type = dataType; // remove the length part from the datatype
934
- }
935
- }
936
- if (!!this.driver.withPrecisionColumnTypes.find((col) => col === dataType)) {
937
- const re = new RegExp(`^${dataType}\\((\\d+),?\\s?(\\d+)?\\)`);
938
- const matches = fullType.match(re);
939
- if (matches && matches[1]) {
940
- tableColumn.precision = +matches[1];
941
- }
942
- if (!!this.driver.withScaleColumnTypes.find((col) => col === dataType)) {
943
- if (matches && matches[2]) {
944
- tableColumn.scale = +matches[2];
945
- }
946
- }
947
- tableColumn.type = dataType; // remove the precision/scale part from the datatype
948
- }
949
- }
950
- return tableColumn;
951
- }));
952
- let fkResult;
953
- const fkMappings = [];
954
- const fkRegex = /CONSTRAINT "([^"]*)" FOREIGN KEY ?\((.*?)\) REFERENCES "([^"]*)"/g;
955
- while ((fkResult = fkRegex.exec(sql)) !== null) {
956
- fkMappings.push({
957
- name: fkResult[1],
958
- columns: fkResult[2]
959
- .substr(1, fkResult[2].length - 2)
960
- .split(`", "`),
961
- referencedTableName: fkResult[3],
962
- });
963
- }
964
- const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, (dbForeignKey) => dbForeignKey["id"]);
965
- table.foreignKeys = tableForeignKeyConstraints.map((foreignKey) => {
966
- const ownForeignKeys = dbForeignKeys.filter((dbForeignKey) => dbForeignKey["id"] === foreignKey["id"] &&
967
- dbForeignKey["table"] === foreignKey["table"]);
968
- const columnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["from"]);
969
- const referencedColumnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["to"]);
970
- const fkMapping = fkMappings.find((it) => it.referencedTableName ===
971
- foreignKey["table"] &&
972
- it.columns.every((column) => columnNames.indexOf(column) !== -1));
973
- return new TableForeignKey({
974
- name: fkMapping.name,
975
- columnNames: columnNames,
976
- referencedTableName: foreignKey["table"],
977
- referencedColumnNames: referencedColumnNames,
978
- onDelete: foreignKey["on_delete"],
979
- onUpdate: foreignKey["on_update"],
980
- });
981
- });
982
- let uniqueRegexResult;
983
- const uniqueMappings = [];
984
- const uniqueRegex = /CONSTRAINT "([^"]*)" UNIQUE ?\((.*?)\)/g;
985
- while ((uniqueRegexResult = uniqueRegex.exec(sql)) !== null) {
986
- uniqueMappings.push({
987
- name: uniqueRegexResult[1],
988
- columns: uniqueRegexResult[2]
989
- .substr(1, uniqueRegexResult[2].length - 2)
990
- .split(`", "`),
991
- });
992
- }
993
- const tableUniquePromises = dbIndices
994
- .filter((dbIndex) => dbIndex["origin"] === "u")
995
- .map((dbIndex) => dbIndex["name"])
996
- .filter((value, index, self) => self.indexOf(value) === index)
997
- .map(async (dbIndexName) => {
998
- const dbIndex = dbIndices.find((dbIndex) => dbIndex["name"] === dbIndexName);
999
- const indexInfos = await this.query(`PRAGMA index_info("${dbIndex["name"]}")`);
1000
- const indexColumns = indexInfos
1001
- .sort((indexInfo1, indexInfo2) => parseInt(indexInfo1["seqno"]) -
1002
- parseInt(indexInfo2["seqno"]))
1003
- .map((indexInfo) => indexInfo["name"]);
1004
- if (indexColumns.length === 1) {
1005
- const column = table.columns.find((column) => {
1006
- return !!indexColumns.find((indexColumn) => indexColumn === column.name);
1007
- });
1008
- if (column)
1009
- column.isUnique = true;
1010
- }
1011
- const foundMapping = uniqueMappings.find((mapping) => {
1012
- return mapping.columns.every((column) => indexColumns.indexOf(column) !== -1);
1013
- });
1014
- return new TableUnique({
1015
- name: foundMapping
1016
- ? foundMapping.name
1017
- : this.connection.namingStrategy.uniqueConstraintName(table, indexColumns),
1018
- columnNames: indexColumns,
1019
- });
1020
- });
1021
- table.uniques = (await Promise.all(tableUniquePromises));
1022
- let result;
1023
- const regexp = /CONSTRAINT "([^"]*)" CHECK ?(\(.*?\))([,]|[)]$)/g;
1024
- while ((result = regexp.exec(sql)) !== null) {
1025
- table.checks.push(new TableCheck({
1026
- name: result[1],
1027
- expression: result[2],
1028
- }));
1029
- }
1030
- const indicesPromises = dbIndices
1031
- .filter((dbIndex) => dbIndex["origin"] === "c")
1032
- .map((dbIndex) => dbIndex["name"])
1033
- .filter((value, index, self) => self.indexOf(value) === index) // unqiue
1034
- .map(async (dbIndexName) => {
1035
- const indexDef = dbIndicesDef.find((dbIndexDef) => dbIndexDef["name"] === dbIndexName);
1036
- const condition = /WHERE (.*)/.exec(indexDef["sql"]);
1037
- const dbIndex = dbIndices.find((dbIndex) => dbIndex["name"] === dbIndexName);
1038
- const indexInfos = await this.query(`PRAGMA index_info("${dbIndex["name"]}")`);
1039
- const indexColumns = indexInfos
1040
- .sort((indexInfo1, indexInfo2) => parseInt(indexInfo1["seqno"]) -
1041
- parseInt(indexInfo2["seqno"]))
1042
- .map((indexInfo) => indexInfo["name"]);
1043
- const dbIndexPath = `${dbTable["database"] ? `${dbTable["database"]}.` : ""}${dbIndex["name"]}`;
1044
- const isUnique = dbIndex["unique"] === "1" ||
1045
- dbIndex["unique"] === 1;
1046
- return new TableIndex({
1047
- table: table,
1048
- name: dbIndexPath,
1049
- columnNames: indexColumns,
1050
- isUnique: isUnique,
1051
- where: condition ? condition[1] : undefined,
1052
- });
1053
- });
1054
- const indices = await Promise.all(indicesPromises);
1055
- table.indices = indices.filter((index) => !!index);
1056
- return table;
1057
- }));
1058
- }
1059
- /**
1060
- * Builds create table sql.
1061
- */
1062
- createTableSql(table, createForeignKeys, temporaryTable) {
1063
- const primaryColumns = table.columns.filter((column) => column.isPrimary);
1064
- const hasAutoIncrement = primaryColumns.find((column) => column.isGenerated && column.generationStrategy === "increment");
1065
- const skipPrimary = primaryColumns.length > 1;
1066
- if (skipPrimary && hasAutoIncrement)
1067
- throw new TypeORMError(`Sqlite does not support AUTOINCREMENT on composite primary key`);
1068
- const columnDefinitions = table.columns
1069
- .map((column) => this.buildCreateColumnSql(column, skipPrimary))
1070
- .join(", ");
1071
- const [database] = this.splitTablePath(table.name);
1072
- let sql = `CREATE TABLE ${this.escapePath(table.name)} (${columnDefinitions}`;
1073
- let [databaseNew, tableName] = this.splitTablePath(table.name);
1074
- const newTableName = temporaryTable
1075
- ? `${databaseNew ? `${databaseNew}.` : ""}${tableName.replace(/^temporary_/, "")}`
1076
- : table.name;
1077
- table.columns
1078
- .filter((column) => column.isUnique)
1079
- .forEach((column) => {
1080
- const isUniqueExist = table.uniques.some((unique) => unique.columnNames.length === 1 &&
1081
- unique.columnNames[0] === column.name);
1082
- if (!isUniqueExist)
1083
- table.uniques.push(new TableUnique({
1084
- name: this.connection.namingStrategy.uniqueConstraintName(table, [column.name]),
1085
- columnNames: [column.name],
1086
- }));
1087
- });
1088
- if (table.uniques.length > 0) {
1089
- const uniquesSql = table.uniques
1090
- .map((unique) => {
1091
- const uniqueName = unique.name
1092
- ? unique.name
1093
- : this.connection.namingStrategy.uniqueConstraintName(newTableName, unique.columnNames);
1094
- const columnNames = unique.columnNames
1095
- .map((columnName) => `"${columnName}"`)
1096
- .join(", ");
1097
- return `CONSTRAINT "${uniqueName}" UNIQUE (${columnNames})`;
1098
- })
1099
- .join(", ");
1100
- sql += `, ${uniquesSql}`;
1101
- }
1102
- if (table.checks.length > 0) {
1103
- const checksSql = table.checks
1104
- .map((check) => {
1105
- const checkName = check.name
1106
- ? check.name
1107
- : this.connection.namingStrategy.checkConstraintName(newTableName, check.expression);
1108
- return `CONSTRAINT "${checkName}" CHECK (${check.expression})`;
1109
- })
1110
- .join(", ");
1111
- sql += `, ${checksSql}`;
1112
- }
1113
- if (table.foreignKeys.length > 0 && createForeignKeys) {
1114
- const foreignKeysSql = table.foreignKeys
1115
- .filter((fk) => {
1116
- const [referencedDatabase] = this.splitTablePath(fk.referencedTableName);
1117
- if (referencedDatabase !== database) {
1118
- return false;
1119
- }
1120
- return true;
1121
- })
1122
- .map((fk) => {
1123
- const [, referencedTable] = this.splitTablePath(fk.referencedTableName);
1124
- const columnNames = fk.columnNames
1125
- .map((columnName) => `"${columnName}"`)
1126
- .join(", ");
1127
- if (!fk.name)
1128
- fk.name = this.connection.namingStrategy.foreignKeyName(newTableName, fk.columnNames, this.getTablePath(fk), fk.referencedColumnNames);
1129
- const referencedColumnNames = fk.referencedColumnNames
1130
- .map((columnName) => `"${columnName}"`)
1131
- .join(", ");
1132
- let constraint = `CONSTRAINT "${fk.name}" FOREIGN KEY (${columnNames}) REFERENCES "${referencedTable}" (${referencedColumnNames})`;
1133
- if (fk.onDelete)
1134
- constraint += ` ON DELETE ${fk.onDelete}`;
1135
- if (fk.onUpdate)
1136
- constraint += ` ON UPDATE ${fk.onUpdate}`;
1137
- if (fk.deferrable)
1138
- constraint += ` DEFERRABLE ${fk.deferrable}`;
1139
- return constraint;
1140
- })
1141
- .join(", ");
1142
- sql += `, ${foreignKeysSql}`;
1143
- }
1144
- if (primaryColumns.length > 1) {
1145
- const columnNames = primaryColumns
1146
- .map((column) => `"${column.name}"`)
1147
- .join(", ");
1148
- sql += `, PRIMARY KEY (${columnNames})`;
1149
- }
1150
- sql += `)`;
1151
- if (table.withoutRowid) {
1152
- sql += " WITHOUT ROWID";
1153
- }
1154
- return new Query(sql);
1155
- }
1156
- /**
1157
- * Builds drop table sql.
1158
- */
1159
- dropTableSql(tableOrName, ifExist) {
1160
- const tableName = InstanceChecker.isTable(tableOrName)
1161
- ? tableOrName.name
1162
- : tableOrName;
1163
- const query = ifExist
1164
- ? `DROP TABLE IF EXISTS ${this.escapePath(tableName)}`
1165
- : `DROP TABLE ${this.escapePath(tableName)}`;
1166
- return new Query(query);
1167
- }
1168
- createViewSql(view) {
1169
- if (typeof view.expression === "string") {
1170
- return new Query(`CREATE VIEW "${view.name}" AS ${view.expression}`);
1171
- }
1172
- else {
1173
- return new Query(`CREATE VIEW "${view.name}" AS ${view
1174
- .expression(this.connection)
1175
- .getQuery()}`);
1176
- }
1177
- }
1178
- insertViewDefinitionSql(view) {
1179
- const expression = typeof view.expression === "string"
1180
- ? view.expression.trim()
1181
- : view.expression(this.connection).getQuery();
1182
- return this.insertTypeormMetadataSql({
1183
- type: MetadataTableType.VIEW,
1184
- name: view.name,
1185
- value: expression,
1186
- });
1187
- }
1188
- /**
1189
- * Builds drop view sql.
1190
- */
1191
- dropViewSql(viewOrPath) {
1192
- const viewName = InstanceChecker.isView(viewOrPath)
1193
- ? viewOrPath.name
1194
- : viewOrPath;
1195
- return new Query(`DROP VIEW "${viewName}"`);
1196
- }
1197
- /**
1198
- * Builds remove view sql.
1199
- */
1200
- deleteViewDefinitionSql(viewOrPath) {
1201
- const viewName = InstanceChecker.isView(viewOrPath)
1202
- ? viewOrPath.name
1203
- : viewOrPath;
1204
- return this.deleteTypeormMetadataSql({
1205
- type: MetadataTableType.VIEW,
1206
- name: viewName,
1207
- });
1208
- }
1209
- /**
1210
- * Builds create index sql.
1211
- */
1212
- createIndexSql(table, index) {
1213
- const columns = index.columnNames
1214
- .map((columnName) => `"${columnName}"`)
1215
- .join(", ");
1216
- const [database, tableName] = this.splitTablePath(table.name);
1217
- return new Query(`CREATE ${index.isUnique ? "UNIQUE " : ""}INDEX ${database ? `"${database}".` : ""}${this.escapePath(index.name)} ON "${tableName}" (${columns}) ${index.where ? "WHERE " + index.where : ""}`);
1218
- }
1219
- /**
1220
- * Builds drop index sql.
1221
- */
1222
- dropIndexSql(indexOrName) {
1223
- let indexName = InstanceChecker.isTableIndex(indexOrName)
1224
- ? indexOrName.name
1225
- : indexOrName;
1226
- return new Query(`DROP INDEX ${this.escapePath(indexName)}`);
1227
- }
1228
- /**
1229
- * Builds a query for create column.
1230
- */
1231
- buildCreateColumnSql(column, skipPrimary) {
1232
- let c = '"' + column.name + '"';
1233
- if (InstanceChecker.isColumnMetadata(column)) {
1234
- c += " " + this.driver.normalizeType(column);
1235
- }
1236
- else {
1237
- c += " " + this.connection.driver.createFullType(column);
1238
- }
1239
- if (column.enum)
1240
- c +=
1241
- ' CHECK( "' +
1242
- column.name +
1243
- '" IN (' +
1244
- column.enum.map((val) => "'" + val + "'").join(",") +
1245
- ") )";
1246
- if (column.isPrimary && !skipPrimary)
1247
- c += " PRIMARY KEY";
1248
- if (column.isGenerated === true &&
1249
- column.generationStrategy === "increment")
1250
- c += " AUTOINCREMENT";
1251
- if (column.collation)
1252
- c += " COLLATE " + column.collation;
1253
- if (column.isNullable !== true)
1254
- c += " NOT NULL";
1255
- if (column.asExpression) {
1256
- c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
1257
- }
1258
- else {
1259
- if (column.default !== undefined && column.default !== null)
1260
- c += " DEFAULT (" + column.default + ")";
1261
- }
1262
- return c;
1263
- }
1264
- async recreateTable(newTable, oldTable, migrateData = true) {
1265
- const upQueries = [];
1266
- const downQueries = [];
1267
- oldTable.indices.forEach((index) => {
1268
- upQueries.push(this.dropIndexSql(index));
1269
- downQueries.push(this.createIndexSql(oldTable, index));
1270
- });
1271
- let [databaseNew, tableNameNew] = this.splitTablePath(newTable.name);
1272
- let [, tableNameOld] = this.splitTablePath(oldTable.name);
1273
- newTable.name = tableNameNew = `${databaseNew ? `${databaseNew}.` : ""}temporary_${tableNameNew}`;
1274
- upQueries.push(this.createTableSql(newTable, true, true));
1275
- downQueries.push(this.dropTableSql(newTable));
1276
- if (migrateData) {
1277
- let newColumnNames = newTable.columns
1278
- .filter((column) => !column.generatedType)
1279
- .map((column) => `"${column.name}"`);
1280
- let oldColumnNames = oldTable.columns
1281
- .filter((column) => !column.generatedType)
1282
- .map((column) => `"${column.name}"`);
1283
- if (oldColumnNames.length < newColumnNames.length) {
1284
- newColumnNames = newTable.columns
1285
- .filter((column) => {
1286
- const oldColumn = oldTable.columns.find((c) => c.name === column.name);
1287
- if (oldColumn && oldColumn.generatedType)
1288
- return false;
1289
- return !column.generatedType && oldColumn;
1290
- })
1291
- .map((column) => `"${column.name}"`);
1292
- }
1293
- else if (oldColumnNames.length > newColumnNames.length) {
1294
- oldColumnNames = oldTable.columns
1295
- .filter((column) => {
1296
- return (!column.generatedType &&
1297
- newTable.columns.find((c) => c.name === column.name));
1298
- })
1299
- .map((column) => `"${column.name}"`);
1300
- }
1301
- upQueries.push(new Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames.join(", ")}) SELECT ${oldColumnNames.join(", ")} FROM ${this.escapePath(oldTable.name)}`));
1302
- downQueries.push(new Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames.join(", ")}) SELECT ${newColumnNames.join(", ")} FROM ${this.escapePath(newTable.name)}`));
1303
- }
1304
- upQueries.push(this.dropTableSql(oldTable));
1305
- downQueries.push(this.createTableSql(oldTable, true));
1306
- upQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable.name)} RENAME TO ${this.escapePath(tableNameOld)}`));
1307
- downQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable.name)} RENAME TO ${this.escapePath(tableNameNew)}`));
1308
- newTable.name = oldTable.name;
1309
- newTable.indices.forEach((index) => {
1310
- if (!index.name)
1311
- index.name = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
1312
- upQueries.push(this.createIndexSql(newTable, index));
1313
- downQueries.push(this.dropIndexSql(index));
1314
- });
1315
- oldTable.columns
1316
- .filter((column) => {
1317
- const newTableColumn = newTable.columns.find((c) => c.name === column.name);
1318
- return (column.generatedType &&
1319
- column.asExpression &&
1320
- (!newTableColumn ||
1321
- (!newTableColumn.generatedType &&
1322
- !newTableColumn.asExpression)));
1323
- })
1324
- .forEach((column) => {
1325
- const deleteQuery = this.deleteTypeormMetadataSql({
1326
- table: oldTable.name,
1327
- type: MetadataTableType.GENERATED_COLUMN,
1328
- name: column.name,
1329
- });
1330
- const insertQuery = this.insertTypeormMetadataSql({
1331
- table: oldTable.name,
1332
- type: MetadataTableType.GENERATED_COLUMN,
1333
- name: column.name,
1334
- value: column.asExpression,
1335
- });
1336
- upQueries.push(deleteQuery);
1337
- downQueries.push(insertQuery);
1338
- });
1339
- newTable.columns
1340
- .filter((column) => column.generatedType &&
1341
- column.asExpression &&
1342
- !oldTable.columns.some((c) => c.name === column.name))
1343
- .forEach((column) => {
1344
- const insertQuery = this.insertTypeormMetadataSql({
1345
- table: newTable.name,
1346
- type: MetadataTableType.GENERATED_COLUMN,
1347
- name: column.name,
1348
- value: column.asExpression,
1349
- });
1350
- const deleteQuery = this.deleteTypeormMetadataSql({
1351
- table: newTable.name,
1352
- type: MetadataTableType.GENERATED_COLUMN,
1353
- name: column.name,
1354
- });
1355
- upQueries.push(insertQuery);
1356
- downQueries.push(deleteQuery);
1357
- });
1358
- newTable.columns
1359
- .filter((column) => column.generatedType && column.asExpression)
1360
- .forEach((column) => {
1361
- const oldColumn = oldTable.columns.find((c) => c.name === column.name &&
1362
- c.generatedType &&
1363
- column.generatedType &&
1364
- c.asExpression !== column.asExpression);
1365
- if (!oldColumn)
1366
- return;
1367
- const deleteQuery = this.deleteTypeormMetadataSql({
1368
- table: oldTable.name,
1369
- type: MetadataTableType.GENERATED_COLUMN,
1370
- name: oldColumn.name,
1371
- });
1372
- const insertQuery = this.insertTypeormMetadataSql({
1373
- table: newTable.name,
1374
- type: MetadataTableType.GENERATED_COLUMN,
1375
- name: column.name,
1376
- value: column.asExpression,
1377
- });
1378
- upQueries.push(deleteQuery);
1379
- upQueries.push(insertQuery);
1380
- const revertInsertQuery = this.insertTypeormMetadataSql({
1381
- table: newTable.name,
1382
- type: MetadataTableType.GENERATED_COLUMN,
1383
- name: oldColumn.name,
1384
- value: oldColumn.asExpression,
1385
- });
1386
- const revertDeleteQuery = this.deleteTypeormMetadataSql({
1387
- table: oldTable.name,
1388
- type: MetadataTableType.GENERATED_COLUMN,
1389
- name: column.name,
1390
- });
1391
- downQueries.push(revertInsertQuery);
1392
- downQueries.push(revertDeleteQuery);
1393
- });
1394
- await this.executeQueries(upQueries, downQueries);
1395
- this.replaceCachedTable(oldTable, newTable);
1396
- }
1397
- /**
1398
- * tablePath e.g. "myDB.myTable", "myTable"
1399
- */
1400
- splitTablePath(tablePath) {
1401
- return (tablePath.indexOf(".") !== -1
1402
- ? tablePath.split(".")
1403
- : [undefined, tablePath]);
1404
- }
1405
- /**
1406
- * Escapes given table or view path. Tolerates leading/trailing dots
1407
- */
1408
- escapePath(target, disableEscape) {
1409
- const tableName = InstanceChecker.isTable(target) || InstanceChecker.isView(target)
1410
- ? target.name
1411
- : target;
1412
- return tableName
1413
- .replace(/^\.+|\.+$/g, "")
1414
- .split(".")
1415
- .map((i) => (disableEscape ? i : `"${i}"`))
1416
- .join(".");
1417
- }
1418
- }
1419
- ;
1420
- ({}); // @--end-of-file-for-module=taon-typeorm lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.ts
1421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTcWxpdGVRdWVyeVJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uLXR5cGVvcm0vcHJvamVjdHMvdGFvbi10eXBlb3JtL3NyYy9saWIvdHlwZW9ybS9kcml2ZXIvc3FsaXRlLWFic3RyYWN0L0Fic3RyYWN0U3FsaXRlUXVlcnlSdW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBTWhDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUdsRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU1RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IseUJBQ2xC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QUNiLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDaEIsT0FBTyxTQUFTO2FBQ1gsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7YUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQixDQUFDO0NBQ0o7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlHQUF5RyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBRdWVyeVJ1bm5lciB9IGZyb20gXCIuLi8uLi9xdWVyeS1ydW5uZXIvUXVlcnlSdW5uZXJcIlxuaW1wb3J0IHsgT2JqZWN0TGl0ZXJhbCB9IGZyb20gXCIuLi8uLi9jb21tb24vT2JqZWN0TGl0ZXJhbFwiXG5pbXBvcnQgeyBUcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvci9UcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvclwiXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9zY2hlbWEtYnVpbGRlci90YWJsZS9UYWJsZUNvbHVtblwiXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCIuLi8uLi9zY2hlbWEtYnVpbGRlci90YWJsZS9UYWJsZVwiXG5pbXBvcnQgeyBUYWJsZUluZGV4IH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlSW5kZXhcIlxuaW1wb3J0IHsgVGFibGVGb3JlaWduS2V5IH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlRm9yZWlnbktleVwiXG5pbXBvcnQgeyBWaWV3IH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3ZpZXcvVmlld1wiXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuLi9RdWVyeVwiXG5pbXBvcnQgeyBBYnN0cmFjdFNxbGl0ZURyaXZlciB9IGZyb20gXCIuL0Fic3RyYWN0U3FsaXRlRHJpdmVyXCJcbi8qICovXG4vKiAqL1xuICBcbmltcG9ydCB7IFRhYmxlSW5kZXhPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL29wdGlvbnMvVGFibGVJbmRleE9wdGlvbnNcIlxuaW1wb3J0IHsgVGFibGVVbmlxdWUgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVVbmlxdWVcIlxuaW1wb3J0IHsgQmFzZVF1ZXJ5UnVubmVyIH0gZnJvbSBcIi4uLy4uL3F1ZXJ5LXJ1bm5lci9CYXNlUXVlcnlSdW5uZXJcIlxuaW1wb3J0IHsgT3JtVXRpbHMgfSBmcm9tIFwiLi4vLi4vdXRpbC9Pcm1VdGlsc1wiXG5pbXBvcnQgeyBUYWJsZUNoZWNrIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlQ2hlY2tcIlxuaW1wb3J0IHsgSXNvbGF0aW9uTGV2ZWwgfSBmcm9tIFwiLi4vdHlwZXMvSXNvbGF0aW9uTGV2ZWxcIlxuaW1wb3J0IHsgVGFibGVFeGNsdXNpb24gfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVFeGNsdXNpb25cIlxuaW1wb3J0IHsgVHJhbnNhY3Rpb25BbHJlYWR5U3RhcnRlZEVycm9yLCBUeXBlT1JNRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JcIlxuaW1wb3J0IHsgTWV0YWRhdGFUYWJsZVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvTWV0YWRhdGFUYWJsZVR5cGVcIlxuaW1wb3J0IHsgSW5zdGFuY2VDaGVja2VyIH0gZnJvbSBcIi4uLy4uL3V0aWwvSW5zdGFuY2VDaGVja2VyXCJcblxuLyoqXG4gKiBSdW5zIHF1ZXJpZXMgb24gYSBzaW5nbGUgc3FsaXRlIGRhdGFiYXNlIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNxbGl0ZVF1ZXJ5UnVubmVyXG4gICAgZXh0ZW5kcyBCYXNlUXVlcnlSdW5uZXJcbiAgICBpbXBsZW1lbnRzIFF1ZXJ5UnVubmVyXG57XG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBEYXRhYmFzZSBkcml2ZXIgdXNlZCBieSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGRyaXZlcjogQWJzdHJhY3RTcWxpdGVEcml2ZXJcblxuICAgIHByb3RlY3RlZCB0cmFuc2FjdGlvblByb21pc2U6IFByb21pc2U8YW55PiB8IG51bGwgPSBudWxsXG5cblxuXG5cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG4gICAgfVxuXG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzL3VzZXMgZGF0YWJhc2UgY29ubmVjdGlvbiBmcm9tIHRoZSBjb25uZWN0aW9uIHBvb2wgdG8gcGVyZm9ybSBmdXJ0aGVyIG9wZXJhdGlvbnMuXG4gICAgICogUmV0dXJucyBvYnRhaW5lZCBkYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGNvbm5lY3QoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRyaXZlci5kYXRhYmFzZUNvbm5lY3Rpb24pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgdXNlZCBkYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgICAqIFdlIGp1c3QgY2xlYXIgbG9hZGVkIHRhYmxlcyBhbmQgc3FsIGluIG1lbW9yeSwgYmVjYXVzZSBzcWxpdGUgZG8gbm90IHN1cHBvcnQgbXVsdGlwbGUgY29ubmVjdGlvbnMgdGh1cyBxdWVyeSBydW5uZXJzLlxuICAgICAqL1xuICAgIHJlbGVhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubG9hZGVkVGFibGVzID0gW11cbiAgICAgICAgdGhpcy5jbGVhclNxbE1lbW9yeSgpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyB0cmFuc2FjdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydFRyYW5zYWN0aW9uKGlzb2xhdGlvbkxldmVsPzogSXNvbGF0aW9uTGV2ZWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnRyYW5zYWN0aW9uU3VwcG9ydCA9PT0gXCJub25lXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBUcmFuc2FjdGlvbnMgYXJlbid0IHN1cHBvcnRlZCBieSAke3RoaXMuY29ubmVjdGlvbi5kcml2ZXIub3B0aW9ucy50eXBlfS5gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSAmJlxuICAgICAgICAgICAgdGhpcy5kcml2ZXIudHJhbnNhY3Rpb25TdXBwb3J0ID09PSBcInNpbXBsZVwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHRocm93IG5ldyBUcmFuc2FjdGlvbkFscmVhZHlTdGFydGVkRXJyb3IoKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsICYmXG4gICAgICAgICAgICBpc29sYXRpb25MZXZlbCAhPT0gXCJSRUFEIFVOQ09NTUlUVEVEXCIgJiZcbiAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsICE9PSBcIlNFUklBTElaQUJMRVwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFNRTGl0ZSBvbmx5IHN1cHBvcnRzIFNFUklBTElaQUJMRSBhbmQgUkVBRCBVTkNPTU1JVFRFRCBpc29sYXRpb25gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0ZXIuYnJvYWRjYXN0KFwiQmVmb3JlVHJhbnNhY3Rpb25TdGFydFwiKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSA9IGZhbHNlXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIGlmIChpc29sYXRpb25MZXZlbCkge1xuICAgICAgICAgICAgICAgIGlmIChpc29sYXRpb25MZXZlbCA9PT0gXCJSRUFEIFVOQ09NTUlUVEVEXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIlBSQUdNQSByZWFkX3VuY29tbWl0dGVkID0gdHJ1ZVwiKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoXCJQUkFHTUEgcmVhZF91bmNvbW1pdHRlZCA9IGZhbHNlXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIkJFR0lOIFRSQU5TQUNUSU9OXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KGBTQVZFUE9JTlQgdHlwZW9ybV8ke3RoaXMudHJhbnNhY3Rpb25EZXB0aH1gKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCArPSAxXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJBZnRlclRyYW5zYWN0aW9uU3RhcnRcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXRzIHRyYW5zYWN0aW9uLlxuICAgICAqIEVycm9yIHdpbGwgYmUgdGhyb3duIGlmIHRyYW5zYWN0aW9uIHdhcyBub3Qgc3RhcnRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBjb21taXRUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUpIHRocm93IG5ldyBUcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvcigpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJCZWZvcmVUcmFuc2FjdGlvbkNvbW1pdFwiKVxuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgICAgIGBSRUxFQVNFIFNBVkVQT0lOVCB0eXBlb3JtXyR7dGhpcy50cmFuc2FjdGlvbkRlcHRoIC0gMX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIkNPTU1JVFwiKVxuICAgICAgICAgICAgdGhpcy5pc1RyYW5zYWN0aW9uQWN0aXZlID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGVwdGggLT0gMVxuXG4gICAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0ZXIuYnJvYWRjYXN0KFwiQWZ0ZXJUcmFuc2FjdGlvbkNvbW1pdFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvbGxiYWNrcyB0cmFuc2FjdGlvbi5cbiAgICAgKiBFcnJvciB3aWxsIGJlIHRocm93biBpZiB0cmFuc2FjdGlvbiB3YXMgbm90IHN0YXJ0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUpIHRocm93IG5ldyBUcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvcigpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJCZWZvcmVUcmFuc2FjdGlvblJvbGxiYWNrXCIpXG5cbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25EZXB0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgYFJPTExCQUNLIFRPIFNBVkVQT0lOVCB0eXBlb3JtXyR7dGhpcy50cmFuc2FjdGlvbkRlcHRoIC0gMX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIlJPTExCQUNLXCIpXG4gICAgICAgICAgICB0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCAtPSAxXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJBZnRlclRyYW5zYWN0aW9uUm9sbGJhY2tcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHJhdyBkYXRhIHN0cmVhbS5cbiAgICAgKi9cbiAgICBzdHJlYW0oXG4gICAgICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgICAgIHBhcmFtZXRlcnM/OiBhbnlbXSxcbiAgICAgICAgb25FbmQ/OiBGdW5jdGlvbixcbiAgICAgICAgb25FcnJvcj86IEZ1bmN0aW9uLFxuICAgIClcbi8qICovXG4vKiAqL1xuICBcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNxbGl0ZSBkcml2ZXIuYClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCBhdmFpbGFibGUgZGF0YWJhc2UgbmFtZXMgaW5jbHVkaW5nIHN5c3RlbSBkYXRhYmFzZXMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0RGF0YWJhc2VzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCBhdmFpbGFibGUgc2NoZW1hIG5hbWVzIGluY2x1ZGluZyBzeXN0ZW0gc2NoZW1hcy5cbiAgICAgKiBJZiBkYXRhYmFzZSBwYXJhbWV0ZXIgc3BlY2lmaWVkLCByZXR1cm5zIHNjaGVtYXMgb2YgdGhhdCBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTY2hlbWFzKGRhdGFiYXNlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBkYXRhYmFzZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0LlxuICAgICAqL1xuICAgIGFzeW5jIGhhc0RhdGFiYXNlKGRhdGFiYXNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBjdXJyZW50bHkgdXNpbmcgZGF0YWJhc2VcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDdXJyZW50RGF0YWJhc2UoKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHNjaGVtYSB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0LlxuICAgICAqL1xuICAgIGFzeW5jIGhhc1NjaGVtYShzY2hlbWE6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKGBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRhYmxlIHNjaGVtYXNgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGN1cnJlbnRseSB1c2luZyBkYXRhYmFzZSBzY2hlbWFcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDdXJyZW50U2NoZW1hKCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0YWJsZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBhc3luYyBoYXNUYWJsZSh0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgdGFibGVOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lLm5hbWVcbiAgICAgICAgICAgIDogdGFibGVPck5hbWVcbiAgICAgICAgY29uc3Qgc3FsID0gYFNFTEVDVCAqIEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnIEFORCBcIm5hbWVcIiA9ICcke3RhYmxlTmFtZX0nYFxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgY29sdW1uIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3QgaW4gdGhlIGdpdmVuIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGhhc0NvbHVtbihcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZS5uYW1lXG4gICAgICAgICAgICA6IHRhYmxlT3JOYW1lXG4gICAgICAgIGNvbnN0IHNxbCA9IGBQUkFHTUEgdGFibGVfeGluZm8oJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lKX0pYFxuICAgICAgICBjb25zdCBjb2x1bW5zOiBPYmplY3RMaXRlcmFsW10gPSBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgICAgICAgcmV0dXJuICEhY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbltcIm5hbWVcIl0gPT09IGNvbHVtbk5hbWUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVEYXRhYmFzZShcbiAgICAgICAgZGF0YWJhc2U6IHN0cmluZyxcbiAgICAgICAgaWZOb3RFeGlzdD86IGJvb2xlYW4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BEYXRhYmFzZShkYXRhYmFzZTogc3RyaW5nLCBpZkV4aXN0PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRhYmxlIHNjaGVtYS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVTY2hlbWEoXG4gICAgICAgIHNjaGVtYVBhdGg6IHN0cmluZyxcbiAgICAgICAgaWZOb3RFeGlzdD86IGJvb2xlYW4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIHRhYmxlIHNjaGVtYS5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wU2NoZW1hKHNjaGVtYVBhdGg6IHN0cmluZywgaWZFeGlzdD86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVUYWJsZShcbiAgICAgICAgdGFibGU6IFRhYmxlLFxuICAgICAgICBpZk5vdEV4aXN0OiBib29sZWFuID0gZmFsc2UsXG4gICAgICAgIGNyZWF0ZUZvcmVpZ25LZXlzOiBib29sZWFuID0gdHJ1ZSxcbiAgICAgICAgY3JlYXRlSW5kaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVwUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIGNvbnN0IGRvd25RdWVyaWVzOiBRdWVyeVtdID0gW11cblxuICAgICAgICBpZiAoaWZOb3RFeGlzdCkge1xuICAgICAgICAgICAgY29uc3QgaXNUYWJsZUV4aXN0ID0gYXdhaXQgdGhpcy5oYXNUYWJsZSh0YWJsZSlcbiAgICAgICAgICAgIGlmIChpc1RhYmxlRXhpc3QpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVUYWJsZVNxbCh0YWJsZSwgY3JlYXRlRm9yZWlnbktleXMpKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcFRhYmxlU3FsKHRhYmxlKSlcblxuICAgICAgICBpZiAoY3JlYXRlSW5kaWNlcykge1xuICAgICAgICAgICAgdGFibGUuaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpbmRleC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICBpbmRleC5uYW1lID0gdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmluZGV4TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuY3JlYXRlSW5kZXhTcWwodGFibGUsIGluZGV4KSlcbiAgICAgICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmIGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgIClcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBnZW5lcmF0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRRdWVyeSA9IHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICB0YWJsZTogdGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGluc2VydFF1ZXJ5KVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXBRdWVyaWVzLCBkb3duUXVlcmllcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFRhYmxlKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGlmRXhpc3Q/OiBib29sZWFuLFxuICAgICAgICBkcm9wRm9yZWlnbktleXM6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgICBkcm9wSW5kaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChpZkV4aXN0KSB7XG4gICAgICAgICAgICBjb25zdCBpc1RhYmxlRXhpc3QgPSBhd2FpdCB0aGlzLmhhc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgaWYgKCFpc1RhYmxlRXhpc3QpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBjcmVhdGVGb3JlaWduS2V5czogYm9vbGVhbiA9IGRyb3BGb3JlaWduS2V5c1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCB1cFF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICBjb25zdCBkb3duUXVlcmllczogUXVlcnlbXSA9IFtdXG5cbiAgICAgICAgaWYgKGRyb3BJbmRpY2VzKSB7XG4gICAgICAgICAgICB0YWJsZS5pbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5kcm9wSW5kZXhTcWwoaW5kZXgpKVxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbCh0YWJsZSwgaW5kZXgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcFRhYmxlU3FsKHRhYmxlLCBpZkV4aXN0KSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlU3FsKHRhYmxlLCBjcmVhdGVGb3JlaWduS2V5cykpXG5cblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gdGFibGUuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZ2VuZXJhdGVkVHlwZSAmJiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICApXG5cbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZ2VuZXJhdGVkQ29sdW1ucykge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2goaW5zZXJ0UXVlcnkpXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwUXVlcmllcywgZG93blF1ZXJpZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB2aWV3LlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVZpZXcoXG4gICAgICAgIHZpZXc6IFZpZXcsXG4gICAgICAgIHN5bmNXaXRoTWV0YWRhdGE6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXBRdWVyaWVzOiBRdWVyeVtdID0gW11cbiAgICAgICAgY29uc3QgZG93blF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVZpZXdTcWwodmlldykpXG4gICAgICAgIGlmIChzeW5jV2l0aE1ldGFkYXRhKSB1cFF1ZXJpZXMucHVzaCh0aGlzLmluc2VydFZpZXdEZWZpbml0aW9uU3FsKHZpZXcpKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcFZpZXdTcWwodmlldykpXG4gICAgICAgIGlmIChzeW5jV2l0aE1ldGFkYXRhKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmRlbGV0ZVZpZXdEZWZpbml0aW9uU3FsKHZpZXcpKVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwUXVlcmllcywgZG93blF1ZXJpZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgdGhlIHZpZXcuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFZpZXcodGFyZ2V0OiBWaWV3IHwgc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHZpZXdOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVmlldyh0YXJnZXQpID8gdGFyZ2V0Lm5hbWUgOiB0YXJnZXRcbiAgICAgICAgY29uc3QgdmlldyA9IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVmlldyh2aWV3TmFtZSlcblxuICAgICAgICBjb25zdCB1cFF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICBjb25zdCBkb3duUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZGVsZXRlVmlld0RlZmluaXRpb25TcWwodmlldykpXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcFZpZXdTcWwodmlldykpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5pbnNlcnRWaWV3RGVmaW5pdGlvblNxbCh2aWV3KSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVZpZXdTcWwodmlldykpXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXBRdWVyaWVzLCBkb3duUXVlcmllcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBnaXZlbiB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyByZW5hbWVUYWJsZShcbiAgICAgICAgb2xkVGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBuZXdUYWJsZU5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgb2xkVGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZShvbGRUYWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gb2xkVGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZShvbGRUYWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgbmV3VGFibGUgPSBvbGRUYWJsZS5jbG9uZSgpXG5cbiAgICAgICAgbmV3VGFibGUubmFtZSA9IG5ld1RhYmxlTmFtZVxuXG5cbiAgICAgICAgY29uc3QgdXAgPSBuZXcgUXVlcnkoXG4gICAgICAgICAgICBgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICAgICAgb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICl9IFJFTkFNRSBUTyAke3RoaXMuZXNjYXBlUGF0aChuZXdUYWJsZU5hbWUpfWAsXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgZG93biA9IG5ldyBRdWVyeShcbiAgICAgICAgICAgIGBBTFRFUiBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICApfSBSRU5BTUUgVE8gJHt0aGlzLmVzY2FwZVBhdGgob2xkVGFibGUubmFtZSl9YCxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwLCBkb3duKVxuXG5cbiAgICAgICAgbmV3VGFibGUudW5pcXVlcy5mb3JFYWNoKCh1bmlxdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFVuaXF1ZU5hbWUgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgb2xkVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgaWYgKHVuaXF1ZS5uYW1lICE9PSBvbGRVbmlxdWVOYW1lKSByZXR1cm5cblxuICAgICAgICAgICAgdW5pcXVlLm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kudW5pcXVlQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgbmV3VGFibGUsXG4gICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3VGFibGUuZm9yZWlnbktleXMuZm9yRWFjaCgoZm9yZWlnbktleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2xkRm9yZWlnbktleU5hbWUgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5mb3JlaWduS2V5TmFtZShcbiAgICAgICAgICAgICAgICAgICAgb2xkVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkuY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKGZvcmVpZ25LZXkpLFxuICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgaWYgKGZvcmVpZ25LZXkubmFtZSAhPT0gb2xkRm9yZWlnbktleU5hbWUpIHJldHVyblxuXG4gICAgICAgICAgICBmb3JlaWduS2V5Lm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuZm9yZWlnbktleU5hbWUoXG4gICAgICAgICAgICAgICAgbmV3VGFibGUsXG4gICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChmb3JlaWduS2V5KSxcbiAgICAgICAgICAgICAgICBmb3JlaWduS2V5LnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcblxuXG4gICAgICAgIG5ld1RhYmxlLmluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEluZGV4TmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5pbmRleE5hbWUoXG4gICAgICAgICAgICAgICAgb2xkVGFibGUsXG4gICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgaWYgKGluZGV4Lm5hbWUgIT09IG9sZEluZGV4TmFtZSkgcmV0dXJuXG5cbiAgICAgICAgICAgIGluZGV4Lm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuaW5kZXhOYW1lKFxuICAgICAgICAgICAgICAgIG5ld1RhYmxlLFxuICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgIGluZGV4LndoZXJlLFxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgb2xkVGFibGUubmFtZSA9IG5ld1RhYmxlLm5hbWVcblxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShuZXdUYWJsZSwgb2xkVGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb2x1bW4gZnJvbSB0aGUgY29sdW1uIGluIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBhZGRDb2x1bW4oXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1ucyh0YWJsZSEsIFtjb2x1bW5dKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29sdW1ucyBmcm9tIHRoZSBjb2x1bW4gaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZENvbHVtbnMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uczogVGFibGVDb2x1bW5bXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4gY2hhbmdlZFRhYmxlLmFkZENvbHVtbihjb2x1bW4pKVxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIGNvbHVtbiBpbiB0aGUgZ2l2ZW4gdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgcmVuYW1lQ29sdW1uKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIG9sZFRhYmxlQ29sdW1uT3JOYW1lOiBUYWJsZUNvbHVtbiB8IHN0cmluZyxcbiAgICAgICAgbmV3VGFibGVDb2x1bW5Pck5hbWU6IFRhYmxlQ29sdW1uIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBvbGRDb2x1bW4gPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNvbHVtbihvbGRUYWJsZUNvbHVtbk9yTmFtZSlcbiAgICAgICAgICAgID8gb2xkVGFibGVDb2x1bW5Pck5hbWVcbiAgICAgICAgICAgIDogdGFibGUuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG9sZFRhYmxlQ29sdW1uT3JOYW1lKVxuICAgICAgICBpZiAoIW9sZENvbHVtbilcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvbHVtbiBcIiR7b2xkVGFibGVDb2x1bW5Pck5hbWV9XCIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgXCIke3RhYmxlLm5hbWV9XCIgdGFibGUuYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBsZXQgbmV3Q29sdW1uOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4obmV3VGFibGVDb2x1bW5Pck5hbWUpKSB7XG4gICAgICAgICAgICBuZXdDb2x1bW4gPSBuZXdUYWJsZUNvbHVtbk9yTmFtZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q29sdW1uID0gb2xkQ29sdW1uLmNsb25lKClcbiAgICAgICAgICAgIG5ld0NvbHVtbi5uYW1lID0gbmV3VGFibGVDb2x1bW5Pck5hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5nZUNvbHVtbih0YWJsZSwgb2xkQ29sdW1uLCBuZXdDb2x1bW4pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhIGNvbHVtbiBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgY2hhbmdlQ29sdW1uKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIG9sZFRhYmxlQ29sdW1uT3JOYW1lOiBUYWJsZUNvbHVtbiB8IHN0cmluZyxcbiAgICAgICAgbmV3Q29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3Qgb2xkQ29sdW1uID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4ob2xkVGFibGVDb2x1bW5Pck5hbWUpXG4gICAgICAgICAgICA/IG9sZFRhYmxlQ29sdW1uT3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBvbGRUYWJsZUNvbHVtbk9yTmFtZSlcbiAgICAgICAgaWYgKCFvbGRDb2x1bW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBDb2x1bW4gXCIke29sZFRhYmxlQ29sdW1uT3JOYW1lfVwiIHdhcyBub3QgZm91bmQgaW4gdGhlIFwiJHt0YWJsZS5uYW1lfVwiIHRhYmxlLmAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5jaGFuZ2VDb2x1bW5zKHRhYmxlLCBbeyBvbGRDb2x1bW4sIG5ld0NvbHVtbiB9XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGEgY29sdW1uIGluIHRoZSB0YWJsZS5cbiAgICAgKiBDaGFuZ2VkIGNvbHVtbiBsb29zZXMgYWxsIGl0cyBrZXlzIGluIHRoZSBkYi5cbiAgICAgKi9cbiAgICBhc3luYyBjaGFuZ2VDb2x1bW5zKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoYW5nZWRDb2x1bW5zOiB7IG9sZENvbHVtbjogVGFibGVDb2x1bW47IG5ld0NvbHVtbjogVGFibGVDb2x1bW4gfVtdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGNoYW5nZWRDb2x1bW5zLmZvckVhY2goKGNoYW5nZWRDb2x1bW5TZXQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lICE9PVxuICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgICAgICAuZmluZENvbHVtblVuaXF1ZXMoY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh1bmlxdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLnB1c2goY2hhbmdlZENvbHVtblNldC5uZXdDb2x1bW4ubmFtZSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pcXVlLm5hbWUgPT09IHVuaXF1ZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUubmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlXG4gICAgICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uRm9yZWlnbktleXMoY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmb3JlaWduS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmZvcmVpZ25LZXlOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZm9yZWlnbktleSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkucmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcy5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uU2V0Lm9sZENvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkuY29sdW1uTmFtZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JlaWduS2V5Lm5hbWUgPT09IGZvcmVpZ25LZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5uYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmZvcmVpZ25LZXlOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKGZvcmVpZ25LZXkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5yZWZlcmVuY2VkQ29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgICAgICAuZmluZENvbHVtbkluZGljZXMoY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhOYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuaW5kZXhOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LndoZXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMuc3BsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMucHVzaChjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleC5uYW1lID09PSBpbmRleE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5uYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmluZGV4TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sdW1uID0gY2hhbmdlZFRhYmxlLmNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbENvbHVtbilcbiAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGUuY29sdW1uc1tcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlLmNvbHVtbnMuaW5kZXhPZihvcmlnaW5hbENvbHVtbilcbiAgICAgICAgICAgICAgICBdID0gY2hhbmdlZENvbHVtblNldC5uZXdDb2x1bW5cbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBjb2x1bW4gaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BDb2x1bW4oXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uT3JOYW1lOiBUYWJsZUNvbHVtbiB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgY29sdW1uID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4oY29sdW1uT3JOYW1lKVxuICAgICAgICAgICAgPyBjb2x1bW5Pck5hbWVcbiAgICAgICAgICAgIDogdGFibGUuZmluZENvbHVtbkJ5TmFtZShjb2x1bW5Pck5hbWUpXG4gICAgICAgIGlmICghY29sdW1uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtjb2x1bW5Pck5hbWV9XCIgd2FzIG5vdCBmb3VuZCBpbiB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wQ29sdW1ucyh0YWJsZSwgW2NvbHVtbl0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgdGhlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BDb2x1bW5zKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gfCBzdHJpbmdbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IFRhYmxlQ29sdW1uIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbnN0YW5jZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlQ29sdW1uKGNvbHVtbilcbiAgICAgICAgICAgICAgICA/IGNvbHVtblxuICAgICAgICAgICAgICAgIDogdGFibGUuZmluZENvbHVtbkJ5TmFtZShjb2x1bW4pXG4gICAgICAgICAgICBpZiAoIWNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYENvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBub3QgZm91bmQgaW4gdGFibGUgXCIke3RhYmxlLm5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLnJlbW92ZUNvbHVtbihjb2x1bW5JbnN0YW5jZSlcbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uVW5pcXVlcyhjb2x1bW5JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgodW5pcXVlKSA9PlxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGUucmVtb3ZlVW5pcXVlQ29uc3RyYWludCh1bmlxdWUpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uSW5kaWNlcyhjb2x1bW5JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaW5kZXgpID0+IGNoYW5nZWRUYWJsZS5yZW1vdmVJbmRleChpbmRleCkpXG4gICAgICAgICAgICBjaGFuZ2VkVGFibGVcbiAgICAgICAgICAgICAgICAuZmluZENvbHVtbkZvcmVpZ25LZXlzKGNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaykgPT4gY2hhbmdlZFRhYmxlLnJlbW92ZUZvcmVpZ25LZXkoZmspKVxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcHJpbWFyeSBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlUHJpbWFyeUtleShcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGFuZ2VkVGFibGUuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lcy5maW5kKChjb2x1bW5OYW1lKSA9PiBjb2x1bW5OYW1lID09PSBjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAgICAgY29sdW1uLmlzUHJpbWFyeSA9IHRydWVcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcblxuICAgICAgICB0YWJsZS5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWVzLmZpbmQoKGNvbHVtbk5hbWUpID0+IGNvbHVtbk5hbWUgPT09IGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgICAgICBjb2x1bW4uaXNQcmltYXJ5ID0gdHJ1ZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgY29tcG9zaXRlIHByaW1hcnkga2V5cy5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVQcmltYXJ5S2V5cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgcHJpbWFyeSBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFByaW1hcnlLZXkodGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGFuZ2VkVGFibGUucHJpbWFyeUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4uaXNQcmltYXJ5ID0gZmFsc2VcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcblxuICAgICAgICB0YWJsZS5wcmltYXJ5Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1ByaW1hcnkgPSBmYWxzZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgdW5pcXVlIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlVW5pcXVlQ29uc3RyYWludChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICB1bmlxdWVDb25zdHJhaW50OiBUYWJsZVVuaXF1ZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVVbmlxdWVDb25zdHJhaW50cyh0YWJsZU9yTmFtZSwgW3VuaXF1ZUNvbnN0cmFpbnRdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgdW5pcXVlIGNvbnN0cmFpbnRzLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVVuaXF1ZUNvbnN0cmFpbnRzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzOiBUYWJsZVVuaXF1ZVtdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICB1bmlxdWVDb25zdHJhaW50cy5mb3JFYWNoKCh1bmlxdWVDb25zdHJhaW50KSA9PlxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLmFkZFVuaXF1ZUNvbnN0cmFpbnQodW5pcXVlQ29uc3RyYWludCksXG4gICAgICAgIClcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYW4gdW5pcXVlIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFVuaXF1ZUNvbnN0cmFpbnQoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgdW5pcXVlT3JOYW1lOiBUYWJsZVVuaXF1ZSB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgdW5pcXVlQ29uc3RyYWludCA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlVW5pcXVlKHVuaXF1ZU9yTmFtZSlcbiAgICAgICAgICAgID8gdW5pcXVlT3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLnVuaXF1ZXMuZmluZCgodSkgPT4gdS5uYW1lID09PSB1bmlxdWVPck5hbWUpXG4gICAgICAgIGlmICghdW5pcXVlQ29uc3RyYWludClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN1cHBsaWVkIHVuaXF1ZSBjb25zdHJhaW50IHdhcyBub3QgZm91bmQgaW4gdGFibGUgJHt0YWJsZS5uYW1lfWAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wVW5pcXVlQ29uc3RyYWludHModGFibGUsIFt1bmlxdWVDb25zdHJhaW50XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHVuaXF1ZSBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wVW5pcXVlQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgdW5pcXVlQ29uc3RyYWludHM6IFRhYmxlVW5pcXVlW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzLmZvckVhY2goKHVuaXF1ZUNvbnN0cmFpbnQpID0+XG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUucmVtb3ZlVW5pcXVlQ29uc3RyYWludCh1bmlxdWVDb25zdHJhaW50KSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IGNoZWNrIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlQ2hlY2tDb25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoZWNrQ29uc3RyYWludDogVGFibGVDaGVjayxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVDaGVja0NvbnN0cmFpbnRzKHRhYmxlT3JOYW1lLCBbY2hlY2tDb25zdHJhaW50XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBjaGVjayBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVDaGVja0NvbnN0cmFpbnRzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoZWNrQ29uc3RyYWludHM6IFRhYmxlQ2hlY2tbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgY2hlY2tDb25zdHJhaW50cy5mb3JFYWNoKChjaGVja0NvbnN0cmFpbnQpID0+XG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUuYWRkQ2hlY2tDb25zdHJhaW50KGNoZWNrQ29uc3RyYWludCksXG4gICAgICAgIClcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgY2hlY2sgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wQ2hlY2tDb25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoZWNrT3JOYW1lOiBUYWJsZUNoZWNrIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBjaGVja0NvbnN0cmFpbnQgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNoZWNrKGNoZWNrT3JOYW1lKVxuICAgICAgICAgICAgPyBjaGVja09yTmFtZVxuICAgICAgICAgICAgOiB0YWJsZS5jaGVja3MuZmluZCgoYykgPT4gYy5uYW1lID09PSBjaGVja09yTmFtZSlcbiAgICAgICAgaWYgKCFjaGVja0NvbnN0cmFpbnQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBTdXBwbGllZCBjaGVjayBjb25zdHJhaW50IHdhcyBub3QgZm91bmQgaW4gdGFibGUgJHt0YWJsZS5uYW1lfWAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wQ2hlY2tDb25zdHJhaW50cyh0YWJsZSwgW2NoZWNrQ29uc3RyYWludF0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgY2hlY2sgY29uc3RyYWludHMuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcENoZWNrQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50czogVGFibGVDaGVja1tdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzLmZvckVhY2goKGNoZWNrQ29uc3RyYWludCkgPT5cbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5yZW1vdmVDaGVja0NvbnN0cmFpbnQoY2hlY2tDb25zdHJhaW50KSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZXhjbHVzaW9uIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlRXhjbHVzaW9uQ29uc3RyYWludChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBleGNsdXNpb25Db25zdHJhaW50OiBUYWJsZUV4Y2x1c2lvbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgU3FsaXRlIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzLmApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBleGNsdXNpb24gY29uc3RyYWludHMuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlRXhjbHVzaW9uQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IFRhYmxlRXhjbHVzaW9uW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGV4Y2x1c2lvbiBjb25zdHJhaW50LlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BFeGNsdXNpb25Db25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGV4Y2x1c2lvbk9yTmFtZTogVGFibGVFeGNsdXNpb24gfCBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGV4Y2x1c2lvbiBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wRXhjbHVzaW9uQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IFRhYmxlRXhjbHVzaW9uW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZm9yZWlnbiBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlRm9yZWlnbktleShcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBmb3JlaWduS2V5OiBUYWJsZUZvcmVpZ25LZXksXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRm9yZWlnbktleXModGFibGVPck5hbWUsIFtmb3JlaWduS2V5XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGZvcmVpZ24ga2V5cy5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVGb3JlaWduS2V5cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBmb3JlaWduS2V5czogVGFibGVGb3JlaWduS2V5W10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBmb3JlaWduS2V5cy5mb3JFYWNoKChmb3JlaWduS2V5KSA9PlxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLmFkZEZvcmVpZ25LZXkoZm9yZWlnbktleSksXG4gICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhIGZvcmVpZ24ga2V5IGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BGb3JlaWduS2V5KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGZvcmVpZ25LZXlPck5hbWU6IFRhYmxlRm9yZWlnbktleSB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgZm9yZWlnbktleSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlRm9yZWlnbktleShmb3JlaWduS2V5T3JOYW1lKVxuICAgICAgICAgICAgPyBmb3JlaWduS2V5T3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLmZvcmVpZ25LZXlzLmZpbmQoKGZrKSA9PiBmay5uYW1lID09PSBmb3JlaWduS2V5T3JOYW1lKVxuICAgICAgICBpZiAoIWZvcmVpZ25LZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBTdXBwbGllZCBmb3JlaWduIGtleSB3YXMgbm90IGZvdW5kIGluIHRhYmxlICR7dGFibGUubmFtZX1gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZHJvcEZvcmVpZ25LZXlzKHRhYmxlT3JOYW1lLCBbZm9yZWlnbktleV0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYSBmb3JlaWduIGtleXMgZnJvbSB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcEZvcmVpZ25LZXlzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGZvcmVpZ25LZXlzOiBUYWJsZUZvcmVpZ25LZXlbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgZm9yZWlnbktleXMuZm9yRWFjaCgoZm9yZWlnbktleSkgPT5cbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5yZW1vdmVGb3JlaWduS2V5KGZvcmVpZ25LZXkpLFxuICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbmRleC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJbmRleChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBpbmRleDogVGFibGVJbmRleCxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGlmICghaW5kZXgubmFtZSkgaW5kZXgubmFtZSA9IHRoaXMuZ2VuZXJhdGVJbmRleE5hbWUodGFibGUsIGluZGV4KVxuXG4gICAgICAgIGNvbnN0IHVwID0gdGhpcy5jcmVhdGVJbmRleFNxbCh0YWJsZSwgaW5kZXgpXG4gICAgICAgIGNvbnN0IGRvd24gPSB0aGlzLmRyb3BJbmRleFNxbChpbmRleClcbiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUXVlcmllcyh1cCwgZG93bilcbiAgICAgICAgdGFibGUuYWRkSW5kZXgoaW5kZXgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbmRpY2VzXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSW5kaWNlcyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBpbmRpY2VzOiBUYWJsZUluZGV4W10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gaW5kaWNlcy5tYXAoKGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJbmRleCh0YWJsZU9yTmFtZSwgaW5kZXgpLFxuICAgICAgICApXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGFuIGluZGV4IGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BJbmRleChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBpbmRleE9yTmFtZTogVGFibGVJbmRleCB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgaW5kZXggPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUluZGV4KGluZGV4T3JOYW1lKVxuICAgICAgICAgICAgPyBpbmRleE9yTmFtZVxuICAgICAgICAgICAgOiB0YWJsZS5pbmRpY2VzLmZpbmQoKGkpID0+IGkubmFtZSA9PT0gaW5kZXhPck5hbWUpXG4gICAgICAgIGlmICghaW5kZXgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBTdXBwbGllZCBpbmRleCAke2luZGV4T3JOYW1lfSB3YXMgbm90IGZvdW5kIGluIHRhYmxlICR7dGFibGUubmFtZX1gLFxuICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgaWYgKCFpbmRleC5uYW1lKSBpbmRleC5uYW1lID0gdGhpcy5nZW5lcmF0ZUluZGV4TmFtZSh0YWJsZSwgaW5kZXgpXG5cbiAgICAgICAgY29uc3QgdXAgPSB0aGlzLmRyb3BJbmRleFNxbChpbmRleClcbiAgICAgICAgY29uc3QgZG93biA9IHRoaXMuY3JlYXRlSW5kZXhTcWwodGFibGUsIGluZGV4KVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwLCBkb3duKVxuICAgICAgICB0YWJsZS5yZW1vdmVJbmRleChpbmRleClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbiBpbmRpY2VzIGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BJbmRpY2VzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGluZGljZXM6IFRhYmxlSW5kZXhbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBpbmRpY2VzLm1hcCgoaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmRyb3BJbmRleCh0YWJsZU9yTmFtZSwgaW5kZXgpLFxuICAgICAgICApXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgdGFibGUgY29udGVudHMuXG4gICAgICogTm90ZTogdGhpcyBvcGVyYXRpb24gdXNlcyBTUUwncyBUUlVOQ0FURSBxdWVyeSB3aGljaCBjYW5ub3QgYmUgcmV2ZXJ0ZWQgaW4gdHJhbnNhY3Rpb25zLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyVGFibGUodGFibGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShgREVMRVRFIEZST00gJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lKX1gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRhYmxlcyBmcm9tIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyRGF0YWJhc2UoZGF0YWJhc2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGRiUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFiYXNlICYmXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoZGF0YWJhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGJQYXRoID1cbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoZGF0YWJhc2UpXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KGBQUkFHTUEgZm9yZWlnbl9rZXlzID0gT0ZGYClcblxuICAgICAgICBjb25zdCBpc0Fub3RoZXJUcmFuc2FjdGlvbkFjdGl2ZSA9IHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZVxuICAgICAgICBpZiAoIWlzQW5vdGhlclRyYW5zYWN0aW9uQWN0aXZlKSBhd2FpdCB0aGlzLnN0YXJ0VHJhbnNhY3Rpb24oKVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0Vmlld0Ryb3BzUXVlcnkgPSBkYlBhdGhcbiAgICAgICAgICAgICAgICA/IGBTRUxFQ1QgJ0RST1AgVklFVyBcIiR7ZGJQYXRofVwiLlwiJyB8fCBuYW1lIHx8ICdcIjsnIGFzIHF1ZXJ5IEZST00gXCIke2RiUGF0aH1cIi5cInNxbGl0ZV9tYXN0ZXJcIiBXSEVSRSBcInR5cGVcIiA9ICd2aWV3J2BcbiAgICAgICAgICAgICAgICA6IGBTRUxFQ1QgJ0RST1AgVklFVyBcIicgfHwgbmFtZSB8fCAnXCI7JyBhcyBxdWVyeSBGUk9NIFwic3FsaXRlX21hc3RlclwiIFdIRVJFIFwidHlwZVwiID0gJ3ZpZXcnYFxuICAgICAgICAgICAgY29uc3QgZHJvcFZpZXdRdWVyaWVzOiBPYmplY3RMaXRlcmFsW10gPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgICAgIHNlbGVjdFZpZXdEcm9wc1F1ZXJ5LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZHJvcFZpZXdRdWVyaWVzLm1hcCgocSkgPT4gdGhpcy5xdWVyeShxW1wicXVlcnlcIl0pKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0VGFibGVEcm9wc1F1ZXJ5ID0gZGJQYXRoXG4gICAgICAgICAgICAgICAgPyBgU0VMRUNUICdEUk9QIFRBQkxFIFwiJHtkYlBhdGh9XCIuXCInIHx8IG5hbWUgfHwgJ1wiOycgYXMgcXVlcnkgRlJPTSBcIiR7ZGJQYXRofVwiLlwic3FsaXRlX21hc3RlclwiIFdIRVJFIFwidHlwZVwiID0gJ3RhYmxlJyBBTkQgXCJuYW1lXCIgIT0gJ3NxbGl0ZV9zZXF1ZW5jZSdgXG4gICAgICAgICAgICAgICAgOiBgU0VMRUNUICdEUk9QIFRBQkxFIFwiJyB8fCBuYW1lIHx8ICdcIjsnIGFzIHF1ZXJ5IEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnIEFORCBcIm5hbWVcIiAhPSAnc3FsaXRlX3NlcXVlbmNlJ2BcbiAgICAgICAgICAgIGNvbnN0IGRyb3BUYWJsZVF1ZXJpZXM6IE9iamVjdExpdGVyYWxbXSA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgc2VsZWN0VGFibGVEcm9wc1F1ZXJ5LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZHJvcFRhYmxlUXVlcmllcy5tYXAoKHEpID0+IHRoaXMucXVlcnkocVtcInF1ZXJ5XCJdKSksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmICghaXNBbm90aGVyVHJhbnNhY3Rpb25BY3RpdmUpIGF3YWl0IHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgIGlmICghaXNBbm90aGVyVHJhbnNhY3Rpb25BY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbigpXG4gICAgICAgICAgICB9IGNhdGNoIChyb2xsYmFja0Vycm9yKSB7fVxuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoYFBSQUdNQSBmb3JlaWduX2tleXMgPSBPTmApXG4gICAgICAgIH1cbiAgICB9XG5cblxuXG5cblxuICAgIHByb3RlY3RlZCBhc3luYyBsb2FkVmlld3Modmlld05hbWVzPzogc3RyaW5nW10pOiBQcm9taXNlPFZpZXdbXT4ge1xuICAgICAgICBjb25zdCBoYXNUYWJsZSA9IGF3YWl0IHRoaXMuaGFzVGFibGUodGhpcy5nZXRUeXBlb3JtTWV0YWRhdGFUYWJsZU5hbWUoKSlcbiAgICAgICAgaWYgKCFoYXNUYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZpZXdOYW1lcykge1xuICAgICAgICAgICAgdmlld05hbWVzID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpZXdOYW1lc1N0cmluZyA9IHZpZXdOYW1lc1xuICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gXCInXCIgKyBuYW1lICsgXCInXCIpXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpXG4gICAgICAgIGxldCBxdWVyeSA9IGBTRUxFQ1QgXCJ0XCIuKiBGUk9NIFwiJHt0aGlzLmdldFR5cGVvcm1NZXRhZGF0YVRhYmxlTmFtZSgpfVwiIFwidFwiIElOTkVSIEpPSU4gXCJzcWxpdGVfbWFzdGVyXCIgcyBPTiBcInNcIi5cIm5hbWVcIiA9IFwidFwiLlwibmFtZVwiIEFORCBcInNcIi5cInR5cGVcIiA9ICd2aWV3JyBXSEVSRSBcInRcIi5cInR5cGVcIiA9ICcke1xuICAgICAgICAgICAgTWV0YWRhdGFUYWJsZVR5cGUuVklFV1xuICAgICAgICB9J2BcbiAgICAgICAgaWYgKHZpZXdOYW1lc1N0cmluZy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcXVlcnkgKz0gYCBBTkQgXCJ0XCIuXCJuYW1lXCIgSU4gKCR7dmlld05hbWVzU3RyaW5nfSlgXG4gICAgICAgIGNvbnN0IGRiVmlld3MgPSBhd2FpdCB0aGlzLnF1ZXJ5KHF1ZXJ5KVxuICAgICAgICByZXR1cm4gZGJWaWV3cy5tYXAoKGRiVmlldzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFZpZXcoKVxuICAgICAgICAgICAgdmlldy5uYW1lID0gZGJWaWV3W1wibmFtZVwiXVxuICAgICAgICAgICAgdmlldy5leHByZXNzaW9uID0gZGJWaWV3W1widmFsdWVcIl1cbiAgICAgICAgICAgIHJldHVybiB2aWV3XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRUYWJsZVJlY29yZHMoXG4gICAgICAgIHRhYmxlUGF0aDogc3RyaW5nLFxuICAgICAgICB0YWJsZU9ySW5kZXg6IFwidGFibGVcIiB8IFwiaW5kZXhcIixcbiAgICApIHtcbiAgICAgICAgbGV0IGRhdGFiYXNlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgW3NjaGVtYSwgdGFibGVOYW1lXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGVQYXRoKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzY2hlbWEgJiZcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VQYXRoUmVsYXRpdmVCeUhhbmRsZShzY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGF0YWJhc2UgPVxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VQYXRoUmVsYXRpdmVCeUhhbmRsZShzY2hlbWEpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgIGBTRUxFQ1QgJHtkYXRhYmFzZSA/IGAnJHtkYXRhYmFzZX0nYCA6IG51bGx9IGFzIGRhdGFiYXNlLCAke1xuICAgICAgICAgICAgICAgIHNjaGVtYSA/IGAnJHtzY2hlbWF9J2AgOiBudWxsXG4gICAgICAgICAgICB9IGFzIHNjaGVtYSwgKiBGUk9NICR7XG4gICAgICAgICAgICAgICAgc2NoZW1hID8gYFwiJHtzY2hlbWF9XCIuYCA6IFwiXCJcbiAgICAgICAgICAgIH0ke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICBgc3FsaXRlX21hc3RlcmAsXG4gICAgICAgICAgICApfSBXSEVSRSBcInR5cGVcIiA9ICcke3RhYmxlT3JJbmRleH0nIEFORCBcIiR7XG4gICAgICAgICAgICAgICAgdGFibGVPckluZGV4ID09PSBcInRhYmxlXCIgPyBcIm5hbWVcIiA6IFwidGJsX25hbWVcIlxuICAgICAgICAgICAgfVwiIElOICgnJHt0YWJsZU5hbWV9JylgLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRQcmFnbWFSZWNvcmRzKHRhYmxlUGF0aDogc3RyaW5nLCBwcmFnbWE6IHN0cmluZykge1xuICAgICAgICBjb25zdCBbLCB0YWJsZU5hbWVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aCh0YWJsZVBhdGgpXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucXVlcnkoYFBSQUdNQSAke3ByYWdtYX0oXCIke3RhYmxlTmFtZX1cIilgKVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgYWxsIHRhYmxlcyAod2l0aCBnaXZlbiBuYW1lcykgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZXMgYSBUYWJsZSBmcm9tIHRoZW0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRUYWJsZXModGFibGVOYW1lcz86IHN0cmluZ1tdKTogUHJvbWlzZTxUYWJsZVtdPiB7XG5cbiAgICAgICAgaWYgKHRhYmxlTmFtZXMgJiYgdGFibGVOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRiVGFibGVzOiB7IGRhdGFiYXNlPzogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNxbDogc3RyaW5nIH1bXSA9IFtdXG4gICAgICAgIGxldCBkYkluZGljZXNEZWY6IE9iamVjdExpdGVyYWxbXVxuXG4gICAgICAgIGlmICghdGFibGVOYW1lcykge1xuICAgICAgICAgICAgY29uc3QgdGFibGVzU3FsID0gYFNFTEVDVCAqIEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnYFxuICAgICAgICAgICAgZGJUYWJsZXMucHVzaCguLi4oYXdhaXQgdGhpcy5xdWVyeSh0YWJsZXNTcWwpKSlcblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lc1N0cmluZyA9IGRiVGFibGVzXG4gICAgICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IGAnJHtuYW1lfSdgKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAgIGRiSW5kaWNlc0RlZiA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgYFNFTEVDVCAqIEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAnaW5kZXgnIEFORCBcInRibF9uYW1lXCIgSU4gKCR7dGFibGVOYW1lc1N0cmluZ30pYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRiVGFibGVzID0gKFxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICB0YWJsZU5hbWVzLm1hcCgodGFibGVOYW1lKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVSZWNvcmRzKHRhYmxlTmFtZSwgXCJ0YWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCByZXMpID0+IFsuLi5hY2MsIC4uLnJlc10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIGRiSW5kaWNlc0RlZiA9IChcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgKHRhYmxlTmFtZXMgPz8gW10pLm1hcCgodGFibGVOYW1lKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVSZWNvcmRzKHRhYmxlTmFtZSwgXCJpbmRleFwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCByZXMpID0+IFsuLi5hY2MsIC4uLnJlc10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKGRiVGFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGRiVGFibGVzLm1hcChhc3luYyAoZGJUYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9XG4gICAgICAgICAgICAgICAgICAgIGRiVGFibGVbXCJkYXRhYmFzZVwiXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYlRhYmxlW1wiZGF0YWJhc2VcIl0sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5kcml2ZXIuZ2V0QXR0YWNoZWREYXRhYmFzZUhhbmRsZUJ5UmVsYXRpdmVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJUYWJsZVtcImRhdGFiYXNlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApfS4ke2RiVGFibGVbXCJuYW1lXCJdfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGJUYWJsZVtcIm5hbWVcIl1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNxbCA9IGRiVGFibGVbXCJzcWxcIl1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHdpdGhvdXRSb3dpZCA9IHNxbC5pbmNsdWRlcyhcIldJVEhPVVQgUk9XSURcIilcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh7IG5hbWU6IHRhYmxlUGF0aCwgd2l0aG91dFJvd2lkIH0pXG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IFtkYkNvbHVtbnMsIGRiSW5kaWNlcywgZGJGb3JlaWduS2V5c106IE9iamVjdExpdGVyYWxbXVtdID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJhZ21hUmVjb3Jkcyh0YWJsZVBhdGgsIGB0YWJsZV94aW5mb2ApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJhZ21hUmVjb3Jkcyh0YWJsZVBhdGgsIGBpbmRleF9saXN0YCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcmFnbWFSZWNvcmRzKHRhYmxlUGF0aCwgYGZvcmVpZ25fa2V5X2xpc3RgKSxcbiAgICAgICAgICAgICAgICAgICAgXSlcblxuXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVNxbDogc3RyaW5nID0gZGJUYWJsZVtcInNxbFwiXVxuICAgICAgICAgICAgICAgIGxldCBhdXRvSW5jcmVtZW50SW5kZXggPSB0YWJsZVNxbFxuICAgICAgICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihcIkFVVE9JTkNSRU1FTlRcIilcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luY3JlbWVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9IHRhYmxlU3FsLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWEgPSBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5sYXN0SW5kZXhPZihcIixcIilcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldCA9IGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLmxhc3RJbmRleE9mKFwiKFwiKVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWEgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKGNvbW1hKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUubGFzdEluZGV4T2YoJ1wiJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuaW5kZXhPZignXCInKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJyYWNrZXQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKGJyYWNrZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5sYXN0SW5kZXhPZignXCInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5pbmRleE9mKCdcIicpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIHRhYmxlLmNvbHVtbnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5zLm1hcChhc3luYyAoZGJDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLm5hbWUgPSBkYkNvbHVtbltcIm5hbWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnR5cGUgPSBkYkNvbHVtbltcInR5cGVcIl0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uZGVmYXVsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJkZmx0X3ZhbHVlXCJdICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJkZmx0X3ZhbHVlXCJdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYkNvbHVtbltcImRmbHRfdmFsdWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmlzTnVsbGFibGUgPSBkYkNvbHVtbltcIm5vdG51bGxcIl0gPT09IDBcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uaXNQcmltYXJ5ID0gZGJDb2x1bW5bXCJwa1wiXSA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmNvbW1lbnQgPSBcIlwiIC8vIFNRTGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGNvbHVtbiBjb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uaXNHZW5lcmF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID09PSBkYkNvbHVtbltcIm5hbWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbHVtbi5pc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmdlbmVyYXRpb25TdHJhdGVneSA9IFwiaW5jcmVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiQ29sdW1uW1wiaGlkZGVuXCJdID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJoaWRkZW5cIl0gPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmdlbmVyYXRlZFR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkNvbHVtbltcImhpZGRlblwiXSA9PT0gMiA/IFwiVklSVFVBTFwiIDogXCJTVE9SRURcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNFeHByZXNzaW9uUXVlcnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZUNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzRXhwcmVzc2lvblF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc0V4cHJlc3Npb25RdWVyeS5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmFzRXhwcmVzc2lvbiA9IHJlc3VsdHNbMF0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5hc0V4cHJlc3Npb24gPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVDb2x1bW4udHlwZSA9PT0gXCJ2YXJjaGFyXCIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW1NYXRjaCA9IHNxbC5tYXRjaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIignICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5uYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIilcXFwiIHZhcmNoYXIgQ0hFQ0tcXFxccypcXFxcKFxcXFxzKlxcXCJcXFxcMVxcXCJcXFxccytJTlxcXFxzKlxcXFwoKCdbXiddKycoPzpcXFxccyosXFxcXHMqJ1teJ10rJykrKVxcXFxzKlxcXFwpXFxcXHMqXFxcXClcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudW1NYXRjaCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmVudW0gPSBlbnVtTWF0Y2hbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMSwgZW51bU1hdGNoWzJdLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCInLCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvcyA9IHRhYmxlQ29sdW1uLnR5cGUuaW5kZXhPZihcIihcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbFR5cGUgPSB0YWJsZUNvbHVtbi50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFUeXBlID0gZnVsbFR5cGUuc3Vic3RyKDAsIHBvcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhdGhpcy5kcml2ZXIud2l0aExlbmd0aENvbHVtblR5cGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sKSA9PiBjb2wgPT09IGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsZW4gPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxUeXBlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxUeXBlLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmxlbmd0aCA9IGxlbi50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi50eXBlID0gZGF0YVR5cGUgLy8gcmVtb3ZlIHRoZSBsZW5ndGggcGFydCBmcm9tIHRoZSBkYXRhdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLmRyaXZlci53aXRoUHJlY2lzaW9uQ29sdW1uVHlwZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wpID0+IGNvbCA9PT0gZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYF4ke2RhdGFUeXBlfVxcXFwoKFxcXFxkKyksP1xcXFxzPyhcXFxcZCspP1xcXFwpYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVsbFR5cGUubWF0Y2gocmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnByZWNpc2lvbiA9ICttYXRjaGVzWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLmRyaXZlci53aXRoU2NhbGVDb2x1bW5UeXBlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wpID0+IGNvbCA9PT0gZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1syXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnNjYWxlID0gK21hdGNoZXNbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi50eXBlID0gZGF0YVR5cGUgLy8gcmVtb3ZlIHRoZSBwcmVjaXNpb24vc2NhbGUgcGFydCBmcm9tIHRoZSBkYXRhdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICAgICAgbGV0IGZrUmVzdWx0XG4gICAgICAgICAgICAgICAgY29uc3QgZmtNYXBwaW5nczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uczogc3RyaW5nW11cbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogc3RyaW5nXG4gICAgICAgICAgICAgICAgfVtdID0gW11cbiAgICAgICAgICAgICAgICBjb25zdCBma1JlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgL0NPTlNUUkFJTlQgXCIoW15cIl0qKVwiIEZPUkVJR04gS0VZID9cXCgoLio/KVxcKSBSRUZFUkVOQ0VTIFwiKFteXCJdKilcIi9nXG4gICAgICAgICAgICAgICAgd2hpbGUgKChma1Jlc3VsdCA9IGZrUmVnZXguZXhlYyhzcWwpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBma01hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmtSZXN1bHRbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBma1Jlc3VsdFsyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMSwgZmtSZXN1bHRbMl0ubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoYFwiLCBcImApLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogZmtSZXN1bHRbM10sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUZvcmVpZ25LZXlDb25zdHJhaW50cyA9IE9ybVV0aWxzLnVuaXEoXG4gICAgICAgICAgICAgICAgICAgIGRiRm9yZWlnbktleXMsXG4gICAgICAgICAgICAgICAgICAgIChkYkZvcmVpZ25LZXkpID0+IGRiRm9yZWlnbktleVtcImlkXCJdLFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIHRhYmxlLmZvcmVpZ25LZXlzID0gdGFibGVGb3JlaWduS2V5Q29uc3RyYWludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAoZm9yZWlnbktleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3duRm9yZWlnbktleXMgPSBkYkZvcmVpZ25LZXlzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJGb3JlaWduS2V5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkZvcmVpZ25LZXlbXCJpZFwiXSA9PT0gZm9yZWlnbktleVtcImlkXCJdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiRm9yZWlnbktleVtcInRhYmxlXCJdID09PSBmb3JlaWduS2V5W1widGFibGVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IG93bkZvcmVpZ25LZXlzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJGb3JlaWduS2V5KSA9PiBkYkZvcmVpZ25LZXlbXCJmcm9tXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlZENvbHVtbk5hbWVzID0gb3duRm9yZWlnbktleXMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYkZvcmVpZ25LZXkpID0+IGRiRm9yZWlnbktleVtcInRvXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZrTWFwcGluZyA9IGZrTWFwcGluZ3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LnJlZmVyZW5jZWRUYWJsZU5hbWUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5W1widGFibGVcIl0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuY29sdW1ucy5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMuaW5kZXhPZihjb2x1bW4pICE9PSAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUZvcmVpZ25LZXkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZrTWFwcGluZyEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczogY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogZm9yZWlnbktleVtcInRhYmxlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRDb2x1bW5OYW1lczogcmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBmb3JlaWduS2V5W1wib25fZGVsZXRlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiBmb3JlaWduS2V5W1wib25fdXBkYXRlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgICAgIGxldCB1bmlxdWVSZWdleFJlc3VsdFxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZU1hcHBpbmdzOiB7IG5hbWU6IHN0cmluZzsgY29sdW1uczogc3RyaW5nW10gfVtdID0gW11cbiAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVSZWdleCA9IC9DT05TVFJBSU5UIFwiKFteXCJdKilcIiBVTklRVUUgP1xcKCguKj8pXFwpL2dcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHVuaXF1ZVJlZ2V4UmVzdWx0ID0gdW5pcXVlUmVnZXguZXhlYyhzcWwpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWVNYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHVuaXF1ZVJlZ2V4UmVzdWx0WzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogdW5pcXVlUmVnZXhSZXN1bHRbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic3RyKDEsIHVuaXF1ZVJlZ2V4UmVzdWx0WzJdLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KGBcIiwgXCJgKSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlVW5pcXVlUHJvbWlzZXMgPSBkYkluZGljZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZGJJbmRleCkgPT4gZGJJbmRleFtcIm9yaWdpblwiXSA9PT0gXCJ1XCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGRiSW5kZXgpID0+IGRiSW5kZXhbXCJuYW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLm1hcChhc3luYyAoZGJJbmRleE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRiSW5kZXggPSBkYkluZGljZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0gPT09IGRiSW5kZXhOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJbmZvczogT2JqZWN0TGl0ZXJhbFtdID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUFJBR01BIGluZGV4X2luZm8oXCIke2RiSW5kZXghW1wibmFtZVwiXX1cIilgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhDb2x1bW5zID0gaW5kZXhJbmZvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhJbmZvMSwgaW5kZXhJbmZvMikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGluZGV4SW5mbzFbXCJzZXFub1wiXSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXhJbmZvMltcInNlcW5vXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaW5kZXhJbmZvKSA9PiBpbmRleEluZm9bXCJuYW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0YWJsZS5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFpbmRleENvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleENvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvbHVtbiA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4pIGNvbHVtbi5pc1VuaXF1ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE1hcHBpbmcgPSB1bmlxdWVNYXBwaW5ncy5maW5kKChtYXBwaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmchLmNvbHVtbnMuZXZlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4pID0+IGluZGV4Q29sdW1ucy5pbmRleE9mKGNvbHVtbikgIT09IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVVbmlxdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZvdW5kTWFwcGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvdW5kTWFwcGluZy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXM6IGluZGV4Q29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgdGFibGUudW5pcXVlcyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgdGFibGVVbmlxdWVQcm9taXNlcyxcbiAgICAgICAgICAgICAgICApKSBhcyBUYWJsZVVuaXF1ZVtdXG5cblxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAvQ09OU1RSQUlOVCBcIihbXlwiXSopXCIgQ0hFQ0sgPyhcXCguKj9cXCkpKFssXXxbKV0kKS9nXG4gICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdleHAuZXhlYyhzcWwpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS5jaGVja3MucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUYWJsZUNoZWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHRbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcmVzdWx0WzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXNQcm9taXNlcyA9IGRiSW5kaWNlc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkYkluZGV4KSA9PiBkYkluZGV4W1wib3JpZ2luXCJdID09PSBcImNcIilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgKSAvLyB1bnFpdWVcbiAgICAgICAgICAgICAgICAgICAgLm1hcChhc3luYyAoZGJJbmRleE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4RGVmID0gZGJJbmRpY2VzRGVmLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRiSW5kZXhEZWYpID0+IGRiSW5kZXhEZWZbXCJuYW1lXCJdID09PSBkYkluZGV4TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IC9XSEVSRSAoLiopLy5leGVjKGluZGV4RGVmIVtcInNxbFwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRiSW5kZXggPSBkYkluZGljZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0gPT09IGRiSW5kZXhOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJbmZvczogT2JqZWN0TGl0ZXJhbFtdID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUFJBR01BIGluZGV4X2luZm8oXCIke2RiSW5kZXghW1wibmFtZVwiXX1cIilgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhDb2x1bW5zID0gaW5kZXhJbmZvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhJbmZvMSwgaW5kZXhJbmZvMikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGluZGV4SW5mbzFbXCJzZXFub1wiXSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXhJbmZvMltcInNlcW5vXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaW5kZXhJbmZvKSA9PiBpbmRleEluZm9bXCJuYW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGJJbmRleFBhdGggPSBgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYlRhYmxlW1wiZGF0YWJhc2VcIl0gPyBgJHtkYlRhYmxlW1wiZGF0YWJhc2VcIl19LmAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9JHtkYkluZGV4IVtcIm5hbWVcIl19YFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1VuaXF1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmRleCFbXCJ1bmlxdWVcIl0gPT09IFwiMVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmRleCFbXCJ1bmlxdWVcIl0gPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJbmRleCg8VGFibGVJbmRleE9wdGlvbnM+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBkYkluZGV4UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczogaW5kZXhDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5pcXVlOiBpc1VuaXF1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZTogY29uZGl0aW9uID8gY29uZGl0aW9uWzFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoaW5kaWNlc1Byb21pc2VzKVxuICAgICAgICAgICAgICAgIHRhYmxlLmluZGljZXMgPSBpbmRpY2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGluZGV4KSA9PiAhIWluZGV4LFxuICAgICAgICAgICAgICAgICkgYXMgVGFibGVJbmRleFtdXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGNyZWF0ZSB0YWJsZSBzcWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRhYmxlU3FsKFxuICAgICAgICB0YWJsZTogVGFibGUsXG4gICAgICAgIGNyZWF0ZUZvcmVpZ25LZXlzPzogYm9vbGVhbixcbiAgICAgICAgdGVtcG9yYXJ5VGFibGU/OiBib29sZWFuLFxuICAgICk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5pc1ByaW1hcnksXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgaGFzQXV0b0luY3JlbWVudCA9IHByaW1hcnlDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5pc0dlbmVyYXRlZCAmJiBjb2x1bW4uZ2VuZXJhdGlvblN0cmF0ZWd5ID09PSBcImluY3JlbWVudFwiLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHNraXBQcmltYXJ5ID0gcHJpbWFyeUNvbHVtbnMubGVuZ3RoID4gMVxuICAgICAgICBpZiAoc2tpcFByaW1hcnkgJiYgaGFzQXV0b0luY3JlbWVudClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IEFVVE9JTkNSRU1FTlQgb24gY29tcG9zaXRlIHByaW1hcnkga2V5YCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9ucyA9IHRhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gdGhpcy5idWlsZENyZWF0ZUNvbHVtblNxbChjb2x1bW4sIHNraXBQcmltYXJ5KSlcbiAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgY29uc3QgW2RhdGFiYXNlXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGUubmFtZSlcbiAgICAgICAgbGV0IHNxbCA9IGBDUkVBVEUgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICB0YWJsZS5uYW1lLFxuICAgICAgICApfSAoJHtjb2x1bW5EZWZpbml0aW9uc31gXG5cbiAgICAgICAgbGV0IFtkYXRhYmFzZU5ldywgdGFibGVOYW1lXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGUubmFtZSlcbiAgICAgICAgY29uc3QgbmV3VGFibGVOYW1lID0gdGVtcG9yYXJ5VGFibGVcbiAgICAgICAgICAgID8gYCR7ZGF0YWJhc2VOZXcgPyBgJHtkYXRhYmFzZU5ld30uYCA6IFwiXCJ9JHt0YWJsZU5hbWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgIC9edGVtcG9yYXJ5Xy8sXG4gICAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgIDogdGFibGUubmFtZVxuXG5cbiAgICAgICAgdGFibGUuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uaXNVbmlxdWUpXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNVbmlxdWVFeGlzdCA9IHRhYmxlLnVuaXF1ZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHVuaXF1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lc1swXSA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmICghaXNVbmlxdWVFeGlzdClcbiAgICAgICAgICAgICAgICAgICAgdGFibGUudW5pcXVlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRhYmxlVW5pcXVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kudW5pcXVlQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXM6IFtjb2x1bW4ubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBpZiAodGFibGUudW5pcXVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlxdWVzU3FsID0gdGFibGUudW5pcXVlc1xuICAgICAgICAgICAgICAgIC5tYXAoKHVuaXF1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gdW5pcXVlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdW5pcXVlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gdW5pcXVlLmNvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiBgXCIke2NvbHVtbk5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENPTlNUUkFJTlQgXCIke3VuaXF1ZU5hbWV9XCIgVU5JUVVFICgke2NvbHVtbk5hbWVzfSlgXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG5cbiAgICAgICAgICAgIHNxbCArPSBgLCAke3VuaXF1ZXNTcWx9YFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmxlLmNoZWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja3NTcWwgPSB0YWJsZS5jaGVja3NcbiAgICAgICAgICAgICAgICAubWFwKChjaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja05hbWUgPSBjaGVjay5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmNoZWNrQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjay5leHByZXNzaW9uISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENPTlNUUkFJTlQgXCIke2NoZWNrTmFtZX1cIiBDSEVDSyAoJHtjaGVjay5leHByZXNzaW9ufSlgXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG5cbiAgICAgICAgICAgIHNxbCArPSBgLCAke2NoZWNrc1NxbH1gXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFibGUuZm9yZWlnbktleXMubGVuZ3RoID4gMCAmJiBjcmVhdGVGb3JlaWduS2V5cykge1xuICAgICAgICAgICAgY29uc3QgZm9yZWlnbktleXNTcWwgPSB0YWJsZS5mb3JlaWduS2V5c1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZWZlcmVuY2VkRGF0YWJhc2VdID0gdGhpcy5zcGxpdFRhYmxlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZrLnJlZmVyZW5jZWRUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWREYXRhYmFzZSAhPT0gZGF0YWJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAubWFwKChmaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCByZWZlcmVuY2VkVGFibGVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZrLnJlZmVyZW5jZWRUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZXMgPSBmay5jb2x1bW5OYW1lc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uTmFtZSkgPT4gYFwiJHtjb2x1bW5OYW1lfVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmay5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmsubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5mb3JlaWduS2V5TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmsuY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZmspLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZrLnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlZENvbHVtbk5hbWVzID0gZmsucmVmZXJlbmNlZENvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiBgXCIke2NvbHVtbk5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gYENPTlNUUkFJTlQgXCIke2ZrLm5hbWV9XCIgRk9SRUlHTiBLRVkgKCR7Y29sdW1uTmFtZXN9KSBSRUZFUkVOQ0VTIFwiJHtyZWZlcmVuY2VkVGFibGV9XCIgKCR7cmVmZXJlbmNlZENvbHVtbk5hbWVzfSlgXG4gICAgICAgICAgICAgICAgICAgIGlmIChmay5vbkRlbGV0ZSkgY29uc3RyYWludCArPSBgIE9OIERFTEVURSAke2ZrLm9uRGVsZXRlfWBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZrLm9uVXBkYXRlKSBjb25zdHJhaW50ICs9IGAgT04gVVBEQVRFICR7Zmsub25VcGRhdGV9YFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmsuZGVmZXJyYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQgKz0gYCBERUZFUlJBQkxFICR7ZmsuZGVmZXJyYWJsZX1gXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcblxuICAgICAgICAgICAgc3FsICs9IGAsICR7Zm9yZWlnbktleXNTcWx9YFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByaW1hcnlDb2x1bW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gcHJpbWFyeUNvbHVtbnNcbiAgICAgICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1uLm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAgIHNxbCArPSBgLCBQUklNQVJZIEtFWSAoJHtjb2x1bW5OYW1lc30pYFxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGApYFxuXG4gICAgICAgIGlmICh0YWJsZS53aXRob3V0Um93aWQpIHtcbiAgICAgICAgICAgIHNxbCArPSBcIiBXSVRIT1VUIFJPV0lEXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoc3FsKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBkcm9wIHRhYmxlIHNxbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZHJvcFRhYmxlU3FsKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGlmRXhpc3Q/OiBib29sZWFuLFxuICAgICk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3QgdGFibGVOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lLm5hbWVcbiAgICAgICAgICAgIDogdGFibGVPck5hbWVcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpZkV4aXN0XG4gICAgICAgICAgICA/IGBEUk9QIFRBQkxFIElGIEVYSVNUUyAke3RoaXMuZXNjYXBlUGF0aCh0YWJsZU5hbWUpfWBcbiAgICAgICAgICAgIDogYERST1AgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lKX1gXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkocXVlcnkpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVZpZXdTcWwodmlldzogVmlldyk6IFF1ZXJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2aWV3LmV4cHJlc3Npb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUXVlcnkoYENSRUFURSBWSUVXIFwiJHt2aWV3Lm5hbWV9XCIgQVMgJHt2aWV3LmV4cHJlc3Npb259YClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUXVlcnkoXG4gICAgICAgICAgICAgICAgYENSRUFURSBWSUVXIFwiJHt2aWV3Lm5hbWV9XCIgQVMgJHt2aWV3XG4gICAgICAgICAgICAgICAgICAgIC5leHByZXNzaW9uKHRoaXMuY29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmdldFF1ZXJ5KCl9YCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbnNlcnRWaWV3RGVmaW5pdGlvblNxbCh2aWV3OiBWaWV3KTogUXVlcnkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgICAgICAgIHR5cGVvZiB2aWV3LmV4cHJlc3Npb24gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IHZpZXcuZXhwcmVzc2lvbi50cmltKClcbiAgICAgICAgICAgICAgICA6IHZpZXcuZXhwcmVzc2lvbih0aGlzLmNvbm5lY3Rpb24pLmdldFF1ZXJ5KClcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLlZJRVcsXG4gICAgICAgICAgICBuYW1lOiB2aWV3Lm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogZXhwcmVzc2lvbixcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgZHJvcCB2aWV3IHNxbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZHJvcFZpZXdTcWwodmlld09yUGF0aDogVmlldyB8IHN0cmluZyk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3Qgdmlld05hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNWaWV3KHZpZXdPclBhdGgpXG4gICAgICAgICAgICA/IHZpZXdPclBhdGgubmFtZVxuICAgICAgICAgICAgOiB2aWV3T3JQYXRoXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoYERST1AgVklFVyBcIiR7dmlld05hbWV9XCJgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyByZW1vdmUgdmlldyBzcWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlbGV0ZVZpZXdEZWZpbml0aW9uU3FsKHZpZXdPclBhdGg6IFZpZXcgfCBzdHJpbmcpOiBRdWVyeSB7XG4gICAgICAgIGNvbnN0IHZpZXdOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVmlldyh2aWV3T3JQYXRoKVxuICAgICAgICAgICAgPyB2aWV3T3JQYXRoLm5hbWVcbiAgICAgICAgICAgIDogdmlld09yUGF0aFxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuVklFVyxcbiAgICAgICAgICAgIG5hbWU6IHZpZXdOYW1lLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBjcmVhdGUgaW5kZXggc3FsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVJbmRleFNxbCh0YWJsZTogVGFibGUsIGluZGV4OiBUYWJsZUluZGV4KTogUXVlcnkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gaW5kZXguY29sdW1uTmFtZXNcbiAgICAgICAgICAgIC5tYXAoKGNvbHVtbk5hbWUpID0+IGBcIiR7Y29sdW1uTmFtZX1cImApXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpXG4gICAgICAgIGNvbnN0IFtkYXRhYmFzZSwgdGFibGVOYW1lXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGUubmFtZSlcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShcbiAgICAgICAgICAgIGBDUkVBVEUgJHtpbmRleC5pc1VuaXF1ZSA/IFwiVU5JUVVFIFwiIDogXCJcIn1JTkRFWCAke1xuICAgICAgICAgICAgICAgIGRhdGFiYXNlID8gYFwiJHtkYXRhYmFzZX1cIi5gIDogXCJcIlxuICAgICAgICAgICAgfSR7dGhpcy5lc2NhcGVQYXRoKGluZGV4Lm5hbWUhKX0gT04gXCIke3RhYmxlTmFtZX1cIiAoJHtjb2x1bW5zfSkgJHtcbiAgICAgICAgICAgICAgICBpbmRleC53aGVyZSA/IFwiV0hFUkUgXCIgKyBpbmRleC53aGVyZSA6IFwiXCJcbiAgICAgICAgICAgIH1gLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGRyb3AgaW5kZXggc3FsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkcm9wSW5kZXhTcWwoaW5kZXhPck5hbWU6IFRhYmxlSW5kZXggfCBzdHJpbmcpOiBRdWVyeSB7XG4gICAgICAgIGxldCBpbmRleE5hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUluZGV4KGluZGV4T3JOYW1lKVxuICAgICAgICAgICAgPyBpbmRleE9yTmFtZS5uYW1lXG4gICAgICAgICAgICA6IGluZGV4T3JOYW1lXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoYERST1AgSU5ERVggJHt0aGlzLmVzY2FwZVBhdGgoaW5kZXhOYW1lISl9YClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYSBxdWVyeSBmb3IgY3JlYXRlIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYnVpbGRDcmVhdGVDb2x1bW5TcWwoXG4gICAgICAgIGNvbHVtbjogVGFibGVDb2x1bW4sXG4gICAgICAgIHNraXBQcmltYXJ5PzogYm9vbGVhbixcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBsZXQgYyA9ICdcIicgKyBjb2x1bW4ubmFtZSArICdcIidcbiAgICAgICAgaWYgKEluc3RhbmNlQ2hlY2tlci5pc0NvbHVtbk1ldGFkYXRhKGNvbHVtbikpIHtcbiAgICAgICAgICAgIGMgKz0gXCIgXCIgKyB0aGlzLmRyaXZlci5ub3JtYWxpemVUeXBlKGNvbHVtbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGMgKz0gXCIgXCIgKyB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLmNyZWF0ZUZ1bGxUeXBlKGNvbHVtbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4uZW51bSlcbiAgICAgICAgICAgIGMgKz1cbiAgICAgICAgICAgICAgICAnIENIRUNLKCBcIicgK1xuICAgICAgICAgICAgICAgIGNvbHVtbi5uYW1lICtcbiAgICAgICAgICAgICAgICAnXCIgSU4gKCcgK1xuICAgICAgICAgICAgICAgIGNvbHVtbi5lbnVtLm1hcCgodmFsKSA9PiBcIidcIiArIHZhbCArIFwiJ1wiKS5qb2luKFwiLFwiKSArXG4gICAgICAgICAgICAgICAgXCIpIClcIlxuICAgICAgICBpZiAoY29sdW1uLmlzUHJpbWFyeSAmJiAhc2tpcFByaW1hcnkpIGMgKz0gXCIgUFJJTUFSWSBLRVlcIlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4uaXNHZW5lcmF0ZWQgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0aW9uU3RyYXRlZ3kgPT09IFwiaW5jcmVtZW50XCJcbiAgICAgICAgKVxuXG4gICAgICAgICAgICBjICs9IFwiIEFVVE9JTkNSRU1FTlRcIlxuICAgICAgICBpZiAoY29sdW1uLmNvbGxhdGlvbikgYyArPSBcIiBDT0xMQVRFIFwiICsgY29sdW1uLmNvbGxhdGlvblxuICAgICAgICBpZiAoY29sdW1uLmlzTnVsbGFibGUgIT09IHRydWUpIGMgKz0gXCIgTk9UIE5VTExcIlxuXG4gICAgICAgIGlmIChjb2x1bW4uYXNFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBjICs9IGAgQVMgKCR7Y29sdW1uLmFzRXhwcmVzc2lvbn0pICR7XG4gICAgICAgICAgICAgICAgY29sdW1uLmdlbmVyYXRlZFR5cGUgPyBjb2x1bW4uZ2VuZXJhdGVkVHlwZSA6IFwiVklSVFVBTFwiXG4gICAgICAgICAgICB9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmRlZmF1bHQgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgYyArPSBcIiBERUZBVUxUIChcIiArIGNvbHVtbi5kZWZhdWx0ICsgXCIpXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHJlY3JlYXRlVGFibGUoXG4gICAgICAgIG5ld1RhYmxlOiBUYWJsZSxcbiAgICAgICAgb2xkVGFibGU6IFRhYmxlLFxuICAgICAgICBtaWdyYXRlRGF0YSA9IHRydWUsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVwUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIGNvbnN0IGRvd25RdWVyaWVzOiBRdWVyeVtdID0gW11cblxuXG4gICAgICAgIG9sZFRhYmxlLmluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KSlcbiAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbChvbGRUYWJsZSwgaW5kZXgpKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbGV0IFtkYXRhYmFzZU5ldywgdGFibGVOYW1lTmV3XSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgobmV3VGFibGUubmFtZSlcbiAgICAgICAgbGV0IFssIHRhYmxlTmFtZU9sZF0gPSB0aGlzLnNwbGl0VGFibGVQYXRoKG9sZFRhYmxlLm5hbWUpXG4gICAgICAgIG5ld1RhYmxlLm5hbWUgPSB0YWJsZU5hbWVOZXcgPSBgJHtcbiAgICAgICAgICAgIGRhdGFiYXNlTmV3ID8gYCR7ZGF0YWJhc2VOZXd9LmAgOiBcIlwiXG4gICAgICAgIH10ZW1wb3JhcnlfJHt0YWJsZU5hbWVOZXd9YFxuXG5cbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVUYWJsZVNxbChuZXdUYWJsZSwgdHJ1ZSwgdHJ1ZSkpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5kcm9wVGFibGVTcWwobmV3VGFibGUpKVxuXG5cbiAgICAgICAgaWYgKG1pZ3JhdGVEYXRhKSB7XG4gICAgICAgICAgICBsZXQgbmV3Q29sdW1uTmFtZXMgPSBuZXdUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmdlbmVyYXRlZFR5cGUpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBgXCIke2NvbHVtbi5uYW1lfVwiYClcblxuICAgICAgICAgICAgbGV0IG9sZENvbHVtbk5hbWVzID0gb2xkVGFibGUuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5nZW5lcmF0ZWRUeXBlKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW4ubmFtZX1cImApXG5cbiAgICAgICAgICAgIGlmIChvbGRDb2x1bW5OYW1lcy5sZW5ndGggPCBuZXdDb2x1bW5OYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXdDb2x1bW5OYW1lcyA9IG5ld1RhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRDb2x1bW4gPSBvbGRUYWJsZS5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkQ29sdW1uICYmIG9sZENvbHVtbi5nZW5lcmF0ZWRUeXBlKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhY29sdW1uLmdlbmVyYXRlZFR5cGUgJiYgb2xkQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW4ubmFtZX1cImApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9sZENvbHVtbk5hbWVzLmxlbmd0aCA+IG5ld0NvbHVtbk5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9sZENvbHVtbk5hbWVzID0gb2xkVGFibGUuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1uLm5hbWV9XCJgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgUXVlcnkoXG4gICAgICAgICAgICAgICAgICAgIGBJTlNFUlQgSU5UTyAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICl9KCR7bmV3Q29sdW1uTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgKX0pIFNFTEVDVCAke29sZENvbHVtbk5hbWVzLmpvaW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICl9IEZST00gJHt0aGlzLmVzY2FwZVBhdGgob2xkVGFibGUubmFtZSl9YCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgUXVlcnkoXG4gICAgICAgICAgICAgICAgICAgIGBJTlNFUlQgSU5UTyAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICl9KCR7b2xkQ29sdW1uTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgKX0pIFNFTEVDVCAke25ld0NvbHVtbk5hbWVzLmpvaW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICl9IEZST00gJHt0aGlzLmVzY2FwZVBhdGgobmV3VGFibGUubmFtZSl9YCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cblxuICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmRyb3BUYWJsZVNxbChvbGRUYWJsZSkpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5jcmVhdGVUYWJsZVNxbChvbGRUYWJsZSwgdHJ1ZSkpXG5cblxuICAgICAgICB1cFF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICBgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgKX0gUkVOQU1FIFRPICR7dGhpcy5lc2NhcGVQYXRoKHRhYmxlTmFtZU9sZCl9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICBgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgKX0gUkVOQU1FIFRPICR7dGhpcy5lc2NhcGVQYXRoKHRhYmxlTmFtZU5ldyl9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcblxuICAgICAgICBuZXdUYWJsZS5uYW1lID0gb2xkVGFibGUubmFtZVxuXG5cbiAgICAgICAgbmV3VGFibGUuaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoIWluZGV4Lm5hbWUpXG4gICAgICAgICAgICAgICAgaW5kZXgubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5pbmRleE5hbWUoXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbChuZXdUYWJsZSwgaW5kZXgpKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmRyb3BJbmRleFNxbChpbmRleCkpXG4gICAgICAgIH0pXG5cblxuXG4gICAgICAgIG9sZFRhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1uID0gbmV3VGFibGUuY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5uYW1lID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hc0V4cHJlc3Npb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFuZXdUYWJsZUNvbHVtbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKCFuZXdUYWJsZUNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIW5ld1RhYmxlQ29sdW1uLmFzRXhwcmVzc2lvbikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVRdWVyeSA9IHRoaXMuZGVsZXRlVHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRRdWVyeSA9IHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2goZGVsZXRlUXVlcnkpXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChpbnNlcnRRdWVyeSlcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICBuZXdUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hc0V4cHJlc3Npb24gJiZcbiAgICAgICAgICAgICAgICAgICAgIW9sZFRhYmxlLmNvbHVtbnMuc29tZSgoYykgPT4gYy5uYW1lID09PSBjb2x1bW4ubmFtZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSB0aGlzLmluc2VydFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBuZXdUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogbmV3VGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGluc2VydFF1ZXJ5KVxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2goZGVsZXRlUXVlcnkpXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3VGFibGUuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uZ2VuZXJhdGVkVHlwZSAmJiBjb2x1bW4uYXNFeHByZXNzaW9uKVxuICAgICAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZENvbHVtbiA9IG9sZFRhYmxlLmNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjLm5hbWUgPT09IGNvbHVtbi5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmFzRXhwcmVzc2lvbiAhPT0gY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAoIW9sZENvbHVtbikgcmV0dXJuXG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogb2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogbmV3VGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChpbnNlcnRRdWVyeSlcblxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJ0SW5zZXJ0UXVlcnkgPSB0aGlzLmluc2VydFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBuZXdUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBvbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9sZENvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmVydERlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2gocmV2ZXJ0SW5zZXJ0UXVlcnkpXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChyZXZlcnREZWxldGVRdWVyeSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUXVlcmllcyh1cFF1ZXJpZXMsIGRvd25RdWVyaWVzKVxuICAgICAgICB0aGlzLnJlcGxhY2VDYWNoZWRUYWJsZShvbGRUYWJsZSwgbmV3VGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGFibGVQYXRoIGUuZy4gXCJteURCLm15VGFibGVcIiwgXCJteVRhYmxlXCJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3BsaXRUYWJsZVBhdGgodGFibGVQYXRoOiBzdHJpbmcpOiBbc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmddIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRhYmxlUGF0aC5pbmRleE9mKFwiLlwiKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRhYmxlUGF0aC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgICAgICA6IFt1bmRlZmluZWQsIHRhYmxlUGF0aF1cbiAgICAgICAgKSBhcyBbc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmddXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlcyBnaXZlbiB0YWJsZSBvciB2aWV3IHBhdGguIFRvbGVyYXRlcyBsZWFkaW5nL3RyYWlsaW5nIGRvdHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZXNjYXBlUGF0aChcbiAgICAgICAgdGFyZ2V0OiBUYWJsZSB8IFZpZXcgfCBzdHJpbmcsXG4gICAgICAgIGRpc2FibGVFc2NhcGU/OiBib29sZWFuLFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9XG4gICAgICAgICAgICBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YXJnZXQpIHx8IEluc3RhbmNlQ2hlY2tlci5pc1ZpZXcodGFyZ2V0KVxuICAgICAgICAgICAgICAgID8gdGFyZ2V0Lm5hbWVcbiAgICAgICAgICAgICAgICA6IHRhcmdldFxuICAgICAgICByZXR1cm4gdGFibGVOYW1lXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcLit8XFwuKyQvZywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5tYXAoKGkpID0+IChkaXNhYmxlRXNjYXBlID8gaSA6IGBcIiR7aX1cImApKVxuICAgICAgICAgICAgLmpvaW4oXCIuXCIpXG4gICAgfVxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlb3JtIGxpYi90eXBlb3JtL2RyaXZlci9zcWxpdGUtYWJzdHJhY3QvQWJzdHJhY3RTcWxpdGVRdWVyeVJ1bm5lci50cyJdfQ==