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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTcWxpdGVRdWVyeVJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3Rhb24tdHlwZW9ybS9wcm9qZWN0cy90YW9uLXR5cGVvcm0vc3JjL2xpYi90eXBlb3JtL2RyaXZlci9zcWxpdGUtYWJzdHJhY3QvQWJzdHJhY3RTcWxpdGVRdWVyeVJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDcEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUE7QUFDNUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFNaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBR2xFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRTVEOztHQUVHO0FBQ0gsTUFBTSxPQUFnQix5QkFDbEIsU0FBUSxlQUFlO0lBa0J2QjtRQUNJLEtBQUssRUFBRSxDQUFBO1FBUEQsdUJBQWtCLEdBQXdCLElBQUksQ0FBQTtJQVF4RCxDQUFDO0lBTUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNILE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDckIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGNBQStCO1FBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxNQUFNO1lBQ3pDLE1BQU0sSUFBSSxZQUFZLENBQ2xCLG9DQUFvQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQzdFLENBQUE7UUFFTCxJQUNJLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxRQUFRO1lBRTNDLE1BQU0sSUFBSSw4QkFBOEIsRUFBRSxDQUFBO1FBRTlDLElBQ0ksY0FBYztZQUNkLGNBQWMsS0FBSyxrQkFBa0I7WUFDckMsY0FBYyxLQUFLLGNBQWM7WUFFakMsTUFBTSxJQUFJLFlBQVksQ0FDbEIsa0VBQWtFLENBQ3JFLENBQUE7UUFFTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO1FBQy9CLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUM5RCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUE7WUFDaEMsTUFBTSxHQUFHLENBQUE7UUFDYixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxjQUFjLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUE7Z0JBQ3RELENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtnQkFDdkQsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQTtRQUUxQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUI7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxNQUFNLElBQUksMEJBQTBCLEVBQUUsQ0FBQTtRQUVyRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFFM0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUNaLDZCQUE2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQzNELENBQUE7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFBO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFBO1FBRTFCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUFFLE1BQU0sSUFBSSwwQkFBMEIsRUFBRSxDQUFBO1FBRXJFLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUU3RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQ1osaUNBQWlDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FDL0QsQ0FBQTtRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUE7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUE7UUFFMUIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FDRixLQUFhLEVBQ2IsVUFBa0IsRUFDbEIsS0FBZ0IsRUFDaEIsT0FBa0I7UUFNbEIsTUFBTSxJQUFJLFlBQVksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWlCO1FBQzlCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWdCO1FBQzlCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsa0JBQWtCO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQWM7UUFDMUIsTUFBTSxJQUFJLFlBQVksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxnQkFBZ0I7UUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBMkI7UUFDdEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDbEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ2xCLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFDakIsTUFBTSxHQUFHLEdBQUcsc0VBQXNFLFNBQVMsR0FBRyxDQUFBO1FBQzlGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNwQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ1gsV0FBMkIsRUFDM0IsVUFBa0I7UUFFbEIsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDbEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ2xCLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFDakIsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtRQUMvRCxNQUFNLE9BQU8sR0FBb0IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3RELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNoQixRQUFnQixFQUNoQixVQUFvQjtRQUVwQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQWdCLEVBQUUsT0FBaUI7UUFDbEQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FDZCxVQUFrQixFQUNsQixVQUFvQjtRQUVwQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQWtCLEVBQUUsT0FBaUI7UUFDbEQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FDYixLQUFZLEVBQ1osYUFBc0IsS0FBSyxFQUMzQixvQkFBNkIsSUFBSSxFQUNqQyxnQkFBeUIsSUFBSTtRQUU3QixNQUFNLFNBQVMsR0FBWSxFQUFFLENBQUE7UUFDN0IsTUFBTSxXQUFXLEdBQVksRUFBRSxDQUFBO1FBRS9CLElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDL0MsSUFBSSxZQUFZO2dCQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzlDLENBQUM7UUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUM3RCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUUxQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBRTVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtvQkFDWCxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FDakQsS0FBSyxFQUNMLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxLQUFLLENBQ2QsQ0FBQTtnQkFDTCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQ2pELFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQzlDLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUdELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3pDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQzFELENBQUE7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2dCQUM5QyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3hDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxZQUFZO2FBQzdCLENBQUMsQ0FBQTtZQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNqQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDcEIsQ0FBQyxDQUFBO1lBRUYsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFFRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ1gsV0FBMkIsRUFDM0IsT0FBaUIsRUFDakIsa0JBQTJCLElBQUksRUFDL0IsY0FBdUIsSUFBSTtRQUUzQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3JELElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQy9DLENBQUM7UUFHRCxNQUFNLGlCQUFpQixHQUFZLGVBQWUsQ0FBQTtRQUNsRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDNUMsTUFBTSxTQUFTLEdBQVksRUFBRSxDQUFBO1FBQzdCLE1BQU0sV0FBVyxHQUFZLEVBQUUsQ0FBQTtRQUUvQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQ3hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUN2RCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFFRCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7UUFHL0QsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFlBQVksQ0FDMUQsQ0FBQTtRQUVELEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDakIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGdCQUFnQjtnQkFDeEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ3BCLENBQUMsQ0FBQTtZQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUNqQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWTthQUM3QixDQUFDLENBQUE7WUFFRixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDakMsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FDWixJQUFVLEVBQ1YsbUJBQTRCLEtBQUs7UUFFakMsTUFBTSxTQUFTLEdBQVksRUFBRSxDQUFBO1FBQzdCLE1BQU0sV0FBVyxHQUFZLEVBQUUsQ0FBQTtRQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN4QyxJQUFJLGdCQUFnQjtZQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDeEUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDeEMsSUFBSSxnQkFBZ0I7WUFDaEIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUN4RCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBcUI7UUFDaEMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUvQyxNQUFNLFNBQVMsR0FBWSxFQUFFLENBQUE7UUFDN0IsTUFBTSxXQUFXLEdBQVksRUFBRSxDQUFBO1FBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdEMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNwRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMxQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQ2IsY0FBOEIsRUFDOUIsWUFBb0I7UUFFcEIsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDcEQsQ0FBQyxDQUFDLGNBQWM7WUFDaEIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7UUFFakMsUUFBUSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUE7UUFHNUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQ2hCLGVBQWUsSUFBSSxDQUFDLFVBQVUsQ0FDMUIsUUFBUSxDQUFDLElBQUksQ0FDaEIsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQ2pELENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FDbEIsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUMxQixZQUFZLENBQ2YsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNsRCxDQUFBO1FBQ0QsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUduQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2hDLE1BQU0sYUFBYSxHQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUMvQyxRQUFRLEVBQ1IsTUFBTSxDQUFDLFdBQVcsQ0FDckIsQ0FBQTtZQUdMLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhO2dCQUFFLE9BQU07WUFFekMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FDN0QsUUFBUSxFQUNSLE1BQU0sQ0FBQyxXQUFXLENBQ3JCLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUdGLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxpQkFBaUIsR0FDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUN6QyxRQUFRLEVBQ1IsVUFBVSxDQUFDLFdBQVcsRUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFDN0IsVUFBVSxDQUFDLHFCQUFxQixDQUNuQyxDQUFBO1lBR0wsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxPQUFNO1lBRWpELFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUMzRCxRQUFRLEVBQ1IsVUFBVSxDQUFDLFdBQVcsRUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFDN0IsVUFBVSxDQUFDLHFCQUFxQixDQUNuQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7UUFHRixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FDekQsUUFBUSxFQUNSLEtBQUssQ0FBQyxXQUFXLEVBQ2pCLEtBQUssQ0FBQyxLQUFLLENBQ2QsQ0FBQTtZQUdELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZO2dCQUFFLE9BQU07WUFFdkMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQ2pELFFBQVEsRUFDUixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsS0FBSyxDQUNkLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUdGLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQTtRQUc3QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ1gsV0FBMkIsRUFDM0IsTUFBbUI7UUFFbkIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQ1osV0FBMkIsRUFDM0IsT0FBc0I7UUFFdEIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNsQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDM0QsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUNkLFdBQTJCLEVBQzNCLG9CQUEwQyxFQUMxQyxvQkFBMEM7UUFFMUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDakUsQ0FBQyxDQUFDLG9CQUFvQjtZQUN0QixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsQ0FBQTtRQUNoRSxJQUFJLENBQUMsU0FBUztZQUNWLE1BQU0sSUFBSSxZQUFZLENBQ2xCLFdBQVcsb0JBQW9CLDJCQUEyQixLQUFLLENBQUMsSUFBSSxVQUFVLENBQ2pGLENBQUE7UUFFTCxJQUFJLFNBQVMsR0FBNEIsU0FBUyxDQUFBO1FBQ2xELElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDdEQsU0FBUyxHQUFHLG9CQUFvQixDQUFBO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ0osU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUM3QixTQUFTLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFBO1FBQ3pDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUNkLFdBQTJCLEVBQzNCLG9CQUEwQyxFQUMxQyxTQUFzQjtRQUV0QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDNUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztZQUNqRSxDQUFDLENBQUMsb0JBQW9CO1lBQ3RCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxDQUFBO1FBQ2hFLElBQUksQ0FBQyxTQUFTO1lBQ1YsTUFBTSxJQUFJLFlBQVksQ0FDbEIsV0FBVyxvQkFBb0IsMkJBQTJCLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FDakYsQ0FBQTtRQUVMLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQ2YsV0FBMkIsRUFDM0IsY0FBb0U7UUFFcEUsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNsQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN4QyxJQUNJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJO2dCQUMvQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUNqQyxDQUFDO2dCQUNDLFlBQVk7cUJBQ1AsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO3FCQUM3QyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDaEIsTUFBTSxVQUFVLEdBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQy9DLEtBQUssRUFDTCxNQUFNLENBQUMsV0FBVyxDQUNyQixDQUFBO29CQUVMLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUNyQixNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDdEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbEMsRUFDRCxDQUFDLENBQ0osQ0FBQTtvQkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7b0JBR3hELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDN0IsTUFBTSxDQUFDLElBQUk7NEJBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQy9DLFlBQVksRUFDWixNQUFNLENBQUMsV0FBVyxDQUNyQixDQUFBO29CQUNULENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUE7Z0JBRU4sWUFBWTtxQkFDUCxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7cUJBQ2pELE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO29CQUNwQixNQUFNLGNBQWMsR0FDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUN6QyxLQUFLLEVBQ0wsVUFBVSxDQUFDLFdBQVcsRUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFDN0IsVUFBVSxDQUFDLHFCQUFxQixDQUNuQyxDQUFBO29CQUVMLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUN6QixVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDMUIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbEMsRUFDRCxDQUFDLENBQ0osQ0FBQTtvQkFDRCxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdkIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDbEMsQ0FBQTtvQkFHRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7d0JBQ3JDLFVBQVUsQ0FBQyxJQUFJOzRCQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FDekMsWUFBWSxFQUNaLFVBQVUsQ0FBQyxXQUFXLEVBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQzdCLFVBQVUsQ0FBQyxxQkFBcUIsQ0FDbkMsQ0FBQTtvQkFDVCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFBO2dCQUVOLFlBQVk7cUJBQ1AsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO3FCQUM3QyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZixNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQ3BDLEtBQUssRUFDTCxLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsS0FBSyxDQUNkLENBQUE7b0JBRUwsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQ3BCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUNyQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNsQyxFQUNELENBQUMsQ0FDSixDQUFBO29CQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFHdkQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUMzQixLQUFLLENBQUMsSUFBSTs0QkFDTixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQ3BDLFlBQVksRUFDWixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsS0FBSyxDQUNkLENBQUE7b0JBQ1QsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQTtZQUNWLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDNUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDOUQsQ0FBQTtZQUNELElBQUksY0FBYztnQkFDZCxZQUFZLENBQUMsT0FBTyxDQUNoQixZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDL0MsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUE7UUFDdEMsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQ1osV0FBMkIsRUFDM0IsWUFBa0M7UUFFbEMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQ3RELENBQUMsQ0FBQyxZQUFZO1lBQ2QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUMxQyxJQUFJLENBQUMsTUFBTTtZQUNQLE1BQU0sSUFBSSxZQUFZLENBQ2xCLFdBQVcsWUFBWSw2QkFBNkIsS0FBSyxDQUFDLElBQUksR0FBRyxDQUNwRSxDQUFBO1FBRUwsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FDYixXQUEyQixFQUMzQixPQUFpQztRQUVqQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFHNUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2xDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUE0QixFQUFFLEVBQUU7WUFDN0MsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hELENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDcEMsSUFBSSxDQUFDLGNBQWM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDWCxXQUFXLE1BQU0sNkJBQTZCLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FDOUQsQ0FBQTtZQUVMLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDekMsWUFBWTtpQkFDUCxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7aUJBQ2pDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2hCLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FDOUMsQ0FBQTtZQUNMLFlBQVk7aUJBQ1AsaUJBQWlCLENBQUMsY0FBYyxDQUFDO2lCQUNqQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUN4RCxZQUFZO2lCQUNQLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztpQkFDckMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUMzRCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUNsQixXQUEyQixFQUMzQixXQUFxQjtRQUVyQixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFNUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2xDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDNUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBRTdDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDNUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQ25CLFdBQTJCLEVBQzNCLE9BQXNCO1FBRXRCLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBMkI7UUFDNUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNsQyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUU3QyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUN4QixXQUEyQixFQUMzQixnQkFBNkI7UUFFN0IsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx1QkFBdUIsQ0FDekIsV0FBMkIsRUFDM0IsaUJBQWdDO1FBRWhDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUc1QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDbEMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUMzQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FDckQsQ0FBQTtRQUNELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUN0QixXQUEyQixFQUMzQixZQUFrQztRQUVsQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUNoRSxDQUFDLENBQUMsWUFBWTtZQUNkLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQTtRQUN4RCxJQUFJLENBQUMsZ0JBQWdCO1lBQ2pCLE1BQU0sSUFBSSxZQUFZLENBQ2xCLHFEQUFxRCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQ3BFLENBQUE7UUFFTCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUN2QixXQUEyQixFQUMzQixpQkFBZ0M7UUFFaEMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRzVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNsQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQzNDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUN4RCxDQUFBO1FBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQ3ZCLFdBQTJCLEVBQzNCLGVBQTJCO1FBRTNCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUN4QixXQUEyQixFQUMzQixnQkFBOEI7UUFFOUIsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRzVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNsQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUN6QyxZQUFZLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQ25ELENBQUE7UUFDRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FDckIsV0FBMkIsRUFDM0IsV0FBZ0M7UUFFaEMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQzdELENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFBO1FBQ3RELElBQUksQ0FBQyxlQUFlO1lBQ2hCLE1BQU0sSUFBSSxZQUFZLENBQ2xCLG9EQUFvRCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQ25FLENBQUE7UUFFTCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FDdEIsV0FBMkIsRUFDM0IsZ0JBQThCO1FBRTlCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUc1QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDbEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FDekMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUN0RCxDQUFBO1FBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMseUJBQXlCLENBQzNCLFdBQTJCLEVBQzNCLG1CQUFtQztRQUVuQyxNQUFNLElBQUksWUFBWSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUM1QixXQUEyQixFQUMzQixvQkFBc0M7UUFFdEMsTUFBTSxJQUFJLFlBQVksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx1QkFBdUIsQ0FDekIsV0FBMkIsRUFDM0IsZUFBd0M7UUFFeEMsTUFBTSxJQUFJLFlBQVksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FDMUIsV0FBMkIsRUFDM0Isb0JBQXNDO1FBRXRDLE1BQU0sSUFBSSxZQUFZLENBQUMsZ0RBQWdELENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ2xCLFdBQTJCLEVBQzNCLFVBQTJCO1FBRTNCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUNuQixXQUEyQixFQUMzQixXQUE4QjtRQUU5QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFNUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2xDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUMvQixZQUFZLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUN6QyxDQUFBO1FBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNoQixXQUEyQixFQUMzQixnQkFBMEM7UUFFMUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNsRSxDQUFDLENBQUMsZ0JBQWdCO1lBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ2xFLElBQUksQ0FBQyxVQUFVO1lBQ1gsTUFBTSxJQUFJLFlBQVksQ0FDbEIsK0NBQStDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDOUQsQ0FBQTtRQUVMLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQ2pCLFdBQTJCLEVBQzNCLFdBQThCO1FBRTlCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUc1QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDbEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQy9CLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FDNUMsQ0FBQTtRQUVELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FDYixXQUEyQixFQUMzQixLQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7UUFHNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBRWxFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDckMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQ2YsV0FBMkIsRUFDM0IsT0FBcUI7UUFFckIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUN2QyxDQUFBO1FBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ1gsV0FBMkIsRUFDM0IsV0FBZ0M7UUFFaEMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFBO1FBQ3ZELElBQUksQ0FBQyxLQUFLO1lBQ04sTUFBTSxJQUFJLFlBQVksQ0FDbEIsa0JBQWtCLFdBQVcsMkJBQTJCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDdkUsQ0FBQTtRQUdMLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUVsRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzlDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDbkMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUNiLFdBQTJCLEVBQzNCLE9BQXFCO1FBRXJCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FDckMsQ0FBQTtRQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFpQjtRQUM5QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWlCO1FBQ2pDLElBQUksTUFBTSxHQUF1QixTQUFTLENBQUE7UUFDMUMsSUFDSSxRQUFRO1lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxRQUFRLENBQUMsRUFDL0QsQ0FBQztZQUNDLE1BQU07Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyRSxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFFN0MsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUE7UUFDM0QsSUFBSSxDQUFDLDBCQUEwQjtZQUFFLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFDOUQsSUFBSSxDQUFDO1lBQ0QsTUFBTSxvQkFBb0IsR0FBRyxNQUFNO2dCQUMvQixDQUFDLENBQUMsc0JBQXNCLE1BQU0sdUNBQXVDLE1BQU0seUNBQXlDO2dCQUNwSCxDQUFDLENBQUMsMEZBQTBGLENBQUE7WUFDaEcsTUFBTSxlQUFlLEdBQW9CLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDckQsb0JBQW9CLENBQ3ZCLENBQUE7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNyRCxDQUFBO1lBRUQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNO2dCQUNoQyxDQUFDLENBQUMsdUJBQXVCLE1BQU0sdUNBQXVDLE1BQU0sMEVBQTBFO2dCQUN0SixDQUFDLENBQUMsNEhBQTRILENBQUE7WUFDbEksTUFBTSxnQkFBZ0IsR0FBb0IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUN0RCxxQkFBcUIsQ0FDeEIsQ0FBQTtZQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FDdEQsQ0FBQTtZQUVELElBQUksQ0FBQywwQkFBMEI7Z0JBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUNuRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQztnQkFFRCxJQUFJLENBQUMsMEJBQTBCO29CQUMzQixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1lBQ3hDLENBQUM7WUFBQyxPQUFPLGFBQWEsRUFBRSxDQUFDLENBQUEsQ0FBQztZQUMxQixNQUFNLEtBQUssQ0FBQTtRQUNmLENBQUM7Z0JBQVMsQ0FBQztZQUNQLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQ2hELENBQUM7SUFDTCxDQUFDO0lBTVMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFvQjtRQUMxQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQTtRQUN4RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDWixPQUFPLEVBQUUsQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixTQUFTLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxTQUFTO2FBQzVCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7YUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2YsSUFBSSxLQUFLLEdBQUcsc0JBQXNCLElBQUksQ0FBQywyQkFBMkIsRUFBRSw2R0FDaEUsaUJBQWlCLENBQUMsSUFDdEIsR0FBRyxDQUFBO1FBQ0gsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDMUIsS0FBSyxJQUFJLHVCQUF1QixlQUFlLEdBQUcsQ0FBQTtRQUN0RCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtZQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNqQyxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDNUIsU0FBaUIsRUFDakIsWUFBK0I7UUFFL0IsSUFBSSxRQUFRLEdBQXVCLFNBQVMsQ0FBQTtRQUM1QyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDMUQsSUFDSSxNQUFNO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxNQUFNLENBQUMsRUFDN0QsQ0FBQztZQUNDLFFBQVE7Z0JBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRSxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUN4QixVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUM3QixzQkFDSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQzlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDZCxlQUFlLENBQ2xCLG9CQUFvQixZQUFZLFVBQzdCLFlBQVksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFDeEMsVUFBVSxTQUFTLElBQUksQ0FDMUIsQ0FBQTtRQUNELE9BQU8sR0FBRyxDQUFBO0lBQ2QsQ0FBQztJQUNTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLE1BQWM7UUFDL0QsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNwRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQTtRQUNoRSxPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBcUI7UUFFNUMsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxPQUFPLEVBQUUsQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLFFBQVEsR0FBdUQsRUFBRSxDQUFBO1FBQ3JFLElBQUksWUFBNkIsQ0FBQTtRQUVqQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDZCxNQUFNLFNBQVMsR0FBRyxzREFBc0QsQ0FBQTtZQUN4RSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRS9DLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUTtpQkFDNUIsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQztpQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2YsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDM0IsMkVBQTJFLGdCQUFnQixHQUFHLENBQ2pHLENBQUE7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsR0FBRyxDQUNQLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FDNUMsQ0FDSixDQUNKO2lCQUNJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNwQixZQUFZLEdBQUcsQ0FDWCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FDNUMsQ0FDSixDQUNKO2lCQUNJLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBR0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxDQUFBO1FBQ2IsQ0FBQztRQUdELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDZCxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUMzQixNQUFNLFNBQVMsR0FDWCxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLHVDQUF1QyxDQUMvQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQ3RCO2dCQUNHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsdUNBQXVDLENBQ2xELE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FDdEIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3hCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7WUFFekIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBRTFCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7WUFHMUQsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLEdBQ3ZDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUM7YUFDeEQsQ0FBQyxDQUFBO1lBR04sSUFBSSx1QkFBdUIsR0FBdUIsU0FBUyxDQUFBO1lBQzNELE1BQU0sUUFBUSxHQUFXLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN2QyxJQUFJLGtCQUFrQixHQUFHLFFBQVE7aUJBQzVCLFdBQVcsRUFBRTtpQkFDYixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDN0IsSUFBSSxrQkFBa0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1Qix1QkFBdUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNyQyxDQUFDLEVBQ0Qsa0JBQWtCLENBQ3JCLENBQUE7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3hELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2YsdUJBQXVCO3dCQUNuQix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7b0JBQ3pDLHVCQUF1Qjt3QkFDbkIsdUJBQXVCLENBQUMsTUFBTSxDQUMxQixDQUFDLEVBQ0QsdUJBQXVCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUMzQyxDQUFBO29CQUNMLHVCQUF1Qjt3QkFDbkIsdUJBQXVCLENBQUMsTUFBTSxDQUMxQix1QkFBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUMzQyxDQUFBO2dCQUNULENBQUM7cUJBQU0sSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsdUJBQXVCO3dCQUNuQix1QkFBdUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQzNDLHVCQUF1Qjt3QkFDbkIsdUJBQXVCLENBQUMsTUFBTSxDQUMxQixDQUFDLEVBQ0QsdUJBQXVCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUMzQyxDQUFBO29CQUNMLHVCQUF1Qjt3QkFDbkIsdUJBQXVCLENBQUMsTUFBTSxDQUMxQix1QkFBdUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUMzQyxDQUFBO2dCQUNULENBQUM7WUFDTCxDQUFDO1lBR0QsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzdCLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO2dCQUNyQyxXQUFXLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDbkMsV0FBVyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ2pELFdBQVcsQ0FBQyxPQUFPO29CQUNmLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJO3dCQUMvQixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUzt3QkFDaEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0JBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUE7Z0JBQ25CLFdBQVcsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFbEQsV0FBVyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUMxQyxXQUFXLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQSxDQUFDLDBDQUEwQztnQkFDbkUsV0FBVyxDQUFDLFdBQVc7b0JBQ25CLHVCQUF1QixLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzFCLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUE7Z0JBQ2hELENBQUM7Z0JBRUQsSUFDSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztvQkFDeEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDMUIsQ0FBQztvQkFDQyxXQUFXLENBQUMsYUFBYTt3QkFDckIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7b0JBRW5ELE1BQU0saUJBQWlCLEdBQ25CLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDO3dCQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7d0JBQ2pCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0I7d0JBQ3hDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtxQkFDekIsQ0FBQyxDQUFBO29CQUVOLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDNUIsaUJBQWlCLENBQUMsS0FBSyxFQUN2QixpQkFBaUIsQ0FBQyxVQUFVLENBQy9CLENBQUE7b0JBQ0QsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQyxXQUFXLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7b0JBQy9DLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixXQUFXLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtvQkFDakMsQ0FBQztnQkFDTCxDQUFDO2dCQUVELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFFakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FDdkIsSUFBSSxNQUFNLENBQ04sSUFBSTt3QkFDQSxXQUFXLENBQUMsSUFBSTt3QkFDaEIsOEZBQThGLENBQ3JHLENBQ0osQ0FBQTtvQkFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUVaLFdBQVcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQzs2QkFDMUIsTUFBTSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs2QkFDbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNyQixDQUFDO2dCQUNMLENBQUM7Z0JBR0QsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3ZDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2IsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQTtvQkFDakMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7b0JBQ3RDLElBQ0ksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUNwQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FDNUIsRUFDSCxDQUFDO3dCQUNDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FDZCxRQUFRLENBQUMsU0FBUyxDQUNkLEdBQUcsR0FBRyxDQUFDLEVBQ1AsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3RCLENBQ0osQ0FBQTt3QkFDRCxJQUFJLEdBQUcsRUFBRSxDQUFDOzRCQUNOLFdBQVcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFBOzRCQUNuQyxXQUFXLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQSxDQUFDLDJDQUEyQzt3QkFDM0UsQ0FBQztvQkFDTCxDQUFDO29CQUNELElBQ0ksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUN2QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FDNUIsRUFDSCxDQUFDO3dCQUNDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUNqQixJQUFJLFFBQVEsMkJBQTJCLENBQzFDLENBQUE7d0JBQ0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTt3QkFDbEMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ3hCLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7d0JBQ3ZDLENBQUM7d0JBQ0QsSUFDSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQ25DLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUM1QixFQUNILENBQUM7NEJBQ0MsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3hCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7NEJBQ25DLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxXQUFXLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQSxDQUFDLG9EQUFvRDtvQkFDcEYsQ0FBQztnQkFDTCxDQUFDO2dCQUVELE9BQU8sV0FBVyxDQUFBO1lBQ3RCLENBQUMsQ0FBQyxDQUNMLENBQUE7WUFHRCxJQUFJLFFBQVEsQ0FBQTtZQUNaLE1BQU0sVUFBVSxHQUlWLEVBQUUsQ0FBQTtZQUNSLE1BQU0sT0FBTyxHQUNULG1FQUFtRSxDQUFBO1lBQ3ZFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM3QyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNqQixPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzt5QkFDZixNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3lCQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUNsQixtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNuQyxDQUFDLENBQUE7WUFDTixDQUFDO1lBR0QsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUM1QyxhQUFhLEVBQ2IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FDdkMsQ0FBQTtZQUVELEtBQUssQ0FBQyxXQUFXLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUM5QyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNYLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQ3ZDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FDYixZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDdkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FDcEQsQ0FBQTtnQkFDRCxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUNsQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUN6QyxDQUFBO2dCQUNELE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FDNUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FDdkMsQ0FBQTtnQkFHRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUM3QixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ0gsRUFBRSxDQUFDLG1CQUFtQjtvQkFDbEIsVUFBVSxDQUFDLE9BQU8sQ0FBQztvQkFDdkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ1osQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNQLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3pDLENBQ1IsQ0FBQTtnQkFFRCxPQUFPLElBQUksZUFBZSxDQUFDO29CQUN2QixJQUFJLEVBQUUsU0FBVSxDQUFDLElBQUk7b0JBQ3JCLFdBQVcsRUFBRSxXQUFXO29CQUN4QixtQkFBbUIsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO29CQUN4QyxxQkFBcUIsRUFBRSxxQkFBcUI7b0JBQzVDLFFBQVEsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDO29CQUNqQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQztpQkFDcEMsQ0FBQyxDQUFBO1lBQ04sQ0FBQyxDQUNKLENBQUE7WUFHRCxJQUFJLGlCQUFpQixDQUFBO1lBQ3JCLE1BQU0sY0FBYyxHQUEwQyxFQUFFLENBQUE7WUFDaEUsTUFBTSxXQUFXLEdBQUcseUNBQXlDLENBQUE7WUFDN0QsT0FBTyxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDMUQsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQzt5QkFDeEIsTUFBTSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3lCQUMxQyxLQUFLLENBQUMsTUFBTSxDQUFDO2lCQUNyQixDQUFDLENBQUE7WUFDTixDQUFDO1lBR0QsTUFBTSxtQkFBbUIsR0FBRyxTQUFTO2lCQUNoQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUM7aUJBQzlDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNqQyxNQUFNLENBQ0gsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQ3hEO2lCQUNBLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7Z0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQzFCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssV0FBVyxDQUMvQyxDQUFBO2dCQUNELE1BQU0sVUFBVSxHQUFvQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQ2hELHNCQUFzQixPQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDN0MsQ0FBQTtnQkFDRCxNQUFNLFlBQVksR0FBRyxVQUFVO3FCQUMxQixJQUFJLENBQ0QsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FDdkIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUNwQztxQkFDQSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzVCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ3pDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3RCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDWixXQUFXLEtBQUssTUFBTSxDQUFDLElBQUksQ0FDbEMsQ0FBQTtvQkFDTCxDQUFDLENBQUMsQ0FBQTtvQkFDRixJQUFJLE1BQU07d0JBQUUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQ3RDLENBQUM7Z0JBR0QsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNqRCxPQUFPLE9BQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUN6QixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDbEQsQ0FBQTtnQkFDTCxDQUFDLENBQUMsQ0FBQTtnQkFFRixPQUFPLElBQUksV0FBVyxDQUFDO29CQUNuQixJQUFJLEVBQUUsWUFBWTt3QkFDZCxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUk7d0JBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FDL0MsS0FBSyxFQUNMLFlBQVksQ0FDZjtvQkFDUCxXQUFXLEVBQUUsWUFBWTtpQkFDNUIsQ0FBQyxDQUFBO1lBQ04sQ0FBQyxDQUFDLENBQUE7WUFDTixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM5QixtQkFBbUIsQ0FDdEIsQ0FBa0IsQ0FBQTtZQUduQixJQUFJLE1BQU0sQ0FBQTtZQUNWLE1BQU0sTUFBTSxHQUNSLGtEQUFrRCxDQUFBO1lBQ3RELE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUMxQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDYixJQUFJLFVBQVUsQ0FBQztvQkFDWCxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDZixVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDeEIsQ0FBQyxDQUNMLENBQUE7WUFDTCxDQUFDO1lBR0QsTUFBTSxlQUFlLEdBQUcsU0FBUztpQkFDNUIsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDO2lCQUM5QyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDakMsTUFBTSxDQUNILENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUN4RCxDQUFDLFNBQVM7aUJBQ1YsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQ3JELENBQUE7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtnQkFDckQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FDMUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQy9DLENBQUE7Z0JBQ0QsTUFBTSxVQUFVLEdBQW9CLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FDaEQsc0JBQXNCLE9BQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM3QyxDQUFBO2dCQUNELE1BQU0sWUFBWSxHQUFHLFVBQVU7cUJBQzFCLElBQUksQ0FDRCxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUN2QixRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3QixRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3BDO3FCQUNBLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLEdBQ2hCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDdEQsR0FBRyxPQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtnQkFFckIsTUFBTSxRQUFRLEdBQ1YsT0FBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUc7b0JBQzFCLE9BQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQzVCLE9BQU8sSUFBSSxVQUFVLENBQW9CO29CQUNyQyxLQUFLLEVBQUUsS0FBSztvQkFDWixJQUFJLEVBQUUsV0FBVztvQkFDakIsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7aUJBQzlDLENBQUMsQ0FBQTtZQUNOLENBQUMsQ0FBQyxDQUFBO1lBQ04sTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQ2xELEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDMUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ0wsQ0FBQTtZQUVqQixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sY0FBYyxDQUNwQixLQUFZLEVBQ1osaUJBQTJCLEVBQzNCLGNBQXdCO1FBRXhCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUN2QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDL0IsQ0FBQTtRQUNELE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FDeEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNQLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsQ0FDdEUsQ0FBQTtRQUNELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQzdDLElBQUksV0FBVyxJQUFJLGdCQUFnQjtZQUMvQixNQUFNLElBQUksWUFBWSxDQUNsQixnRUFBZ0UsQ0FDbkUsQ0FBQTtRQUVMLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU87YUFDbEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsRCxJQUFJLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FDckMsS0FBSyxDQUFDLElBQUksQ0FDYixLQUFLLGlCQUFpQixFQUFFLENBQUE7UUFFekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5RCxNQUFNLFlBQVksR0FBRyxjQUFjO1lBQy9CLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3ZELGFBQWEsRUFDYixFQUFFLENBQ0wsRUFBRTtZQUNMLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBR2hCLEtBQUssQ0FBQyxPQUFPO2FBQ1IsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ25DLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNwQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1AsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDL0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUM1QyxDQUFBO1lBQ0QsSUFBSSxDQUFDLGFBQWE7Z0JBQ2QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2QsSUFBSSxXQUFXLENBQUM7b0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUNyRCxLQUFLLEVBQ0wsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ2hCO29CQUNELFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUJBQzdCLENBQUMsQ0FDTCxDQUFBO1FBQ1QsQ0FBQyxDQUFDLENBQUE7UUFFTixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPO2lCQUMzQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDWixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSTtvQkFDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO29CQUNiLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FDL0MsWUFBWSxFQUNaLE1BQU0sQ0FBQyxXQUFXLENBQ3JCLENBQUE7Z0JBQ1AsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVc7cUJBQ2pDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQztxQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNmLE9BQU8sZUFBZSxVQUFVLGFBQWEsV0FBVyxHQUFHLENBQUE7WUFDL0QsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVmLEdBQUcsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFBO1FBQzVCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNO2lCQUN6QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDWCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSTtvQkFDeEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJO29CQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDOUMsWUFBWSxFQUNaLEtBQUssQ0FBQyxVQUFXLENBQ3BCLENBQUE7Z0JBQ1AsT0FBTyxlQUFlLFNBQVMsWUFBWSxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUE7WUFDbEUsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVmLEdBQUcsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFBO1FBQzNCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxXQUFXO2lCQUNuQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDWCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUM1QyxFQUFFLENBQUMsbUJBQW1CLENBQ3pCLENBQUE7Z0JBQ0QsSUFBSSxrQkFBa0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxLQUFLLENBQUE7Z0JBQ2hCLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUE7WUFDZixDQUFDLENBQUM7aUJBQ0QsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLEVBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FDM0MsRUFBRSxDQUFDLG1CQUFtQixDQUN6QixDQUFBO2dCQUNELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXO3FCQUM3QixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxHQUFHLENBQUM7cUJBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDZixJQUFJLENBQUMsRUFBRSxDQUFDLElBQUk7b0JBQ1IsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQ25ELFlBQVksRUFDWixFQUFFLENBQUMsV0FBVyxFQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQ3JCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FDM0IsQ0FBQTtnQkFDTCxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxxQkFBcUI7cUJBQ2pELEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQztxQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUVmLElBQUksVUFBVSxHQUFHLGVBQWUsRUFBRSxDQUFDLElBQUksa0JBQWtCLFdBQVcsaUJBQWlCLGVBQWUsTUFBTSxxQkFBcUIsR0FBRyxDQUFBO2dCQUNsSSxJQUFJLEVBQUUsQ0FBQyxRQUFRO29CQUFFLFVBQVUsSUFBSSxjQUFjLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtnQkFDMUQsSUFBSSxFQUFFLENBQUMsUUFBUTtvQkFBRSxVQUFVLElBQUksY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUE7Z0JBQzFELElBQUksRUFBRSxDQUFDLFVBQVU7b0JBQ2IsVUFBVSxJQUFJLGVBQWUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFBO2dCQUVoRCxPQUFPLFVBQVUsQ0FBQTtZQUNyQixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRWYsR0FBRyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUE7UUFDaEMsQ0FBQztRQUVELElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLFdBQVcsR0FBRyxjQUFjO2lCQUM3QixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDO2lCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDZixHQUFHLElBQUksa0JBQWtCLFdBQVcsR0FBRyxDQUFBO1FBQzNDLENBQUM7UUFFRCxHQUFHLElBQUksR0FBRyxDQUFBO1FBRVYsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsR0FBRyxJQUFJLGdCQUFnQixDQUFBO1FBQzNCLENBQUM7UUFFRCxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNPLFlBQVksQ0FDbEIsV0FBMkIsRUFDM0IsT0FBaUI7UUFFakIsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDbEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ2xCLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFDakIsTUFBTSxLQUFLLEdBQUcsT0FBTztZQUNqQixDQUFDLENBQUMsd0JBQXdCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEQsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFBO1FBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVTLGFBQWEsQ0FBQyxJQUFVO1FBQzlCLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksS0FBSyxDQUNaLGdCQUFnQixJQUFJLENBQUMsSUFBSSxRQUFRLElBQUk7aUJBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUMzQixRQUFRLEVBQUUsRUFBRSxDQUNwQixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxJQUFVO1FBQ3hDLE1BQU0sVUFBVSxHQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDckQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDakMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUk7WUFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLFVBQVU7U0FDcEIsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ08sV0FBVyxDQUFDLFVBQXlCO1FBQzNDLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQy9DLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUNqQixDQUFDLENBQUMsVUFBVSxDQUFBO1FBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxRQUFRLEdBQUcsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNPLHVCQUF1QixDQUFDLFVBQXlCO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO1lBQy9DLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUNqQixDQUFDLENBQUMsVUFBVSxDQUFBO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ2pDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQzVCLElBQUksRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNPLGNBQWMsQ0FBQyxLQUFZLEVBQUUsS0FBaUI7UUFDcEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVc7YUFDNUIsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDO2FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDN0QsT0FBTyxJQUFJLEtBQUssQ0FDWixVQUFVLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUNyQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ2xDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSyxDQUFDLFFBQVEsU0FBUyxNQUFNLE9BQU8sS0FDekQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzNDLEVBQUUsQ0FDTCxDQUFBO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sWUFBWSxDQUFDLFdBQWdDO1FBQ25ELElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNsQixDQUFDLENBQUMsV0FBVyxDQUFBO1FBQ2pCLE9BQU8sSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDTyxvQkFBb0IsQ0FDMUIsTUFBbUIsRUFDbkIsV0FBcUI7UUFFckIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFBO1FBQy9CLElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0MsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNKLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzVELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJO1lBQ1gsQ0FBQztnQkFDRyxXQUFXO29CQUNYLE1BQU0sQ0FBQyxJQUFJO29CQUNYLFFBQVE7b0JBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDbkQsS0FBSyxDQUFBO1FBQ2IsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsV0FBVztZQUFFLENBQUMsSUFBSSxjQUFjLENBQUE7UUFDekQsSUFDSSxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUk7WUFDM0IsTUFBTSxDQUFDLGtCQUFrQixLQUFLLFdBQVc7WUFHekMsQ0FBQyxJQUFJLGdCQUFnQixDQUFBO1FBQ3pCLElBQUksTUFBTSxDQUFDLFNBQVM7WUFBRSxDQUFDLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUE7UUFDekQsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLElBQUk7WUFBRSxDQUFDLElBQUksV0FBVyxDQUFBO1FBRWhELElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUMsSUFBSSxRQUFRLE1BQU0sQ0FBQyxZQUFZLEtBQzVCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQ2xELEVBQUUsQ0FBQTtRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLElBQUk7Z0JBQ3ZELENBQUMsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUE7UUFDaEQsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFBO0lBQ1osQ0FBQztJQUVTLEtBQUssQ0FBQyxhQUFhLENBQ3pCLFFBQWUsRUFDZixRQUFlLEVBQ2YsV0FBVyxHQUFHLElBQUk7UUFFbEIsTUFBTSxTQUFTLEdBQVksRUFBRSxDQUFBO1FBQzdCLE1BQU0sV0FBVyxHQUFZLEVBQUUsQ0FBQTtRQUcvQixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxDQUFDLENBQUMsQ0FBQTtRQUdGLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekQsUUFBUSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsR0FDM0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUN0QyxhQUFhLFlBQVksRUFBRSxDQUFBO1FBRzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFHN0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPO2lCQUNoQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztpQkFDekMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1lBRXhDLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPO2lCQUNoQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztpQkFDekMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1lBRXhDLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hELGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTztxQkFDNUIsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2YsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25DLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQ2hDLENBQUE7b0JBQ0QsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLGFBQWE7d0JBQUUsT0FBTyxLQUFLLENBQUE7b0JBQ3RELE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQTtnQkFDN0MsQ0FBQyxDQUFDO3FCQUNELEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtZQUM1QyxDQUFDO2lCQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZELGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTztxQkFDNUIsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2YsT0FBTyxDQUNILENBQUMsTUFBTSxDQUFDLGFBQWE7d0JBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDdkQsQ0FBQTtnQkFDTCxDQUFDLENBQUM7cUJBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1lBQzVDLENBQUM7WUFFRCxTQUFTLENBQUMsSUFBSSxDQUNWLElBQUksS0FBSyxDQUNMLGVBQWUsSUFBSSxDQUFDLFVBQVUsQ0FDMUIsUUFBUSxDQUFDLElBQUksQ0FDaEIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUNwQixJQUFJLENBQ1AsWUFBWSxjQUFjLENBQUMsSUFBSSxDQUM1QixJQUFJLENBQ1AsU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM3QyxDQUNKLENBQUE7WUFDRCxXQUFXLENBQUMsSUFBSSxDQUNaLElBQUksS0FBSyxDQUNMLGVBQWUsSUFBSSxDQUFDLFVBQVUsQ0FDMUIsUUFBUSxDQUFDLElBQUksQ0FDaEIsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUNwQixJQUFJLENBQ1AsWUFBWSxjQUFjLENBQUMsSUFBSSxDQUM1QixJQUFJLENBQ1AsU0FBUyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM3QyxDQUNKLENBQUE7UUFDTCxDQUFDO1FBR0QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFDM0MsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBR3JELFNBQVMsQ0FBQyxJQUFJLENBQ1YsSUFBSSxLQUFLLENBQ0wsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUMxQixRQUFRLENBQUMsSUFBSSxDQUNoQixjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDakQsQ0FDSixDQUFBO1FBQ0QsV0FBVyxDQUFDLElBQUksQ0FDWixJQUFJLEtBQUssQ0FDTCxlQUFlLElBQUksQ0FBQyxVQUFVLENBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUNqRCxDQUNKLENBQUE7UUFFRCxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFHN0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUUvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ1gsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQ2pELFFBQVEsRUFDUixLQUFLLENBQUMsV0FBVyxFQUNqQixLQUFLLENBQUMsS0FBSyxDQUNkLENBQUE7WUFDTCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDcEQsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFDLENBQUE7UUFJRixRQUFRLENBQUMsT0FBTzthQUNYLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2YsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQ2hDLENBQUE7WUFHRCxPQUFPLENBQ0gsTUFBTSxDQUFDLGFBQWE7Z0JBQ3BCLE1BQU0sQ0FBQyxZQUFZO2dCQUNuQixDQUFDLENBQUMsY0FBYztvQkFDWixDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWE7d0JBQzFCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3pDLENBQUE7UUFDTCxDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDcEIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGdCQUFnQjtnQkFDeEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ3BCLENBQUMsQ0FBQTtZQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWTthQUM3QixDQUFDLENBQUE7WUFFRixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDakMsQ0FBQyxDQUFDLENBQUE7UUFHTixRQUFRLENBQUMsT0FBTzthQUNYLE1BQU0sQ0FDSCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ1AsTUFBTSxDQUFDLGFBQWE7WUFDcEIsTUFBTSxDQUFDLFlBQVk7WUFDbkIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQzVEO2FBQ0EsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2dCQUM5QyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3BCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3hDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxZQUFZO2FBQzdCLENBQUMsQ0FBQTtZQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDcEIsQ0FBQyxDQUFBO1lBRUYsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2pDLENBQUMsQ0FBQyxDQUFBO1FBR04sUUFBUSxDQUFDLE9BQU87YUFDWCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQzthQUMvRCxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNoQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNGLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUk7Z0JBQ3RCLENBQUMsQ0FBQyxhQUFhO2dCQUNmLE1BQU0sQ0FBQyxhQUFhO2dCQUNwQixDQUFDLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQzdDLENBQUE7WUFFRCxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFNO1lBR3RCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7YUFDdkIsQ0FBQyxDQUFBO1lBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO2dCQUM5QyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ3BCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3hDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxZQUFZO2FBQzdCLENBQUMsQ0FBQTtZQUVGLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUczQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLEtBQUssRUFBRSxTQUFTLENBQUMsWUFBWTthQUNoQyxDQUFDLENBQUE7WUFFRixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDcEQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNwQixJQUFJLEVBQUUsaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDcEIsQ0FBQyxDQUFBO1lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1lBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUN2QyxDQUFDLENBQUMsQ0FBQTtRQUVOLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxjQUFjLENBQUMsU0FBaUI7UUFDdEMsT0FBTyxDQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQ0MsQ0FBQTtJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxVQUFVLENBQ2hCLE1BQTZCLEVBQzdCLGFBQXVCO1FBRXZCLE1BQU0sU0FBUyxHQUNYLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDN0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ2IsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUNoQixPQUFPLFNBQVM7YUFDWCxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQzthQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLENBQUM7Q0FDSjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseUdBQXlHIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IFF1ZXJ5UnVubmVyIH0gZnJvbSBcIi4uLy4uL3F1ZXJ5LXJ1bm5lci9RdWVyeVJ1bm5lclwiXG5pbXBvcnQgeyBPYmplY3RMaXRlcmFsIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9PYmplY3RMaXRlcmFsXCJcbmltcG9ydCB7IFRyYW5zYWN0aW9uTm90U3RhcnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yL1RyYW5zYWN0aW9uTm90U3RhcnRlZEVycm9yXCJcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlQ29sdW1uXCJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlXCJcbmltcG9ydCB7IFRhYmxlSW5kZXggfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVJbmRleFwiXG5pbXBvcnQgeyBUYWJsZUZvcmVpZ25LZXkgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVGb3JlaWduS2V5XCJcbmltcG9ydCB7IFZpZXcgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdmlldy9WaWV3XCJcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIi4uL1F1ZXJ5XCJcbmltcG9ydCB7IEFic3RyYWN0U3FsaXRlRHJpdmVyIH0gZnJvbSBcIi4vQWJzdHJhY3RTcWxpdGVEcml2ZXJcIlxuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgVGFibGVJbmRleE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvb3B0aW9ucy9UYWJsZUluZGV4T3B0aW9uc1wiXG5pbXBvcnQgeyBUYWJsZVVuaXF1ZSB9IGZyb20gXCIuLi8uLi9zY2hlbWEtYnVpbGRlci90YWJsZS9UYWJsZVVuaXF1ZVwiXG5pbXBvcnQgeyBCYXNlUXVlcnlSdW5uZXIgfSBmcm9tIFwiLi4vLi4vcXVlcnktcnVubmVyL0Jhc2VRdWVyeVJ1bm5lclwiXG5pbXBvcnQgeyBPcm1VdGlscyB9IGZyb20gXCIuLi8uLi91dGlsL09ybVV0aWxzXCJcbmltcG9ydCB7IFRhYmxlQ2hlY2sgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVDaGVja1wiXG5pbXBvcnQgeyBJc29sYXRpb25MZXZlbCB9IGZyb20gXCIuLi90eXBlcy9Jc29sYXRpb25MZXZlbFwiXG5pbXBvcnQgeyBUYWJsZUV4Y2x1c2lvbiB9IGZyb20gXCIuLi8uLi9zY2hlbWEtYnVpbGRlci90YWJsZS9UYWJsZUV4Y2x1c2lvblwiXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkFscmVhZHlTdGFydGVkRXJyb3IsIFR5cGVPUk1FcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvclwiXG5pbXBvcnQgeyBNZXRhZGF0YVRhYmxlVHlwZSB9IGZyb20gXCIuLi90eXBlcy9NZXRhZGF0YVRhYmxlVHlwZVwiXG5pbXBvcnQgeyBJbnN0YW5jZUNoZWNrZXIgfSBmcm9tIFwiLi4vLi4vdXRpbC9JbnN0YW5jZUNoZWNrZXJcIlxuXG4vKipcbiAqIFJ1bnMgcXVlcmllcyBvbiBhIHNpbmdsZSBzcWxpdGUgZGF0YWJhc2UgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3FsaXRlUXVlcnlSdW5uZXJcbiAgICBleHRlbmRzIEJhc2VRdWVyeVJ1bm5lclxuICAgIGltcGxlbWVudHMgUXVlcnlSdW5uZXJcbntcblxuXG5cblxuICAgIC8qKlxuICAgICAqIERhdGFiYXNlIGRyaXZlciB1c2VkIGJ5IGNvbm5lY3Rpb24uXG4gICAgICovXG4gICAgZHJpdmVyOiBBYnN0cmFjdFNxbGl0ZURyaXZlclxuXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uUHJvbWlzZTogUHJvbWlzZTxhbnk+IHwgbnVsbCA9IG51bGxcblxuXG5cblxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICB9XG5cblxuXG5cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMvdXNlcyBkYXRhYmFzZSBjb25uZWN0aW9uIGZyb20gdGhlIGNvbm5lY3Rpb24gcG9vbCB0byBwZXJmb3JtIGZ1cnRoZXIgb3BlcmF0aW9ucy5cbiAgICAgKiBSZXR1cm5zIG9idGFpbmVkIGRhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAgICovXG4gICAgY29ubmVjdCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZHJpdmVyLmRhdGFiYXNlQ29ubmVjdGlvbilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlcyB1c2VkIGRhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAgICogV2UganVzdCBjbGVhciBsb2FkZWQgdGFibGVzIGFuZCBzcWwgaW4gbWVtb3J5LCBiZWNhdXNlIHNxbGl0ZSBkbyBub3Qgc3VwcG9ydCBtdWx0aXBsZSBjb25uZWN0aW9ucyB0aHVzIHF1ZXJ5IHJ1bm5lcnMuXG4gICAgICovXG4gICAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5sb2FkZWRUYWJsZXMgPSBbXVxuICAgICAgICB0aGlzLmNsZWFyU3FsTWVtb3J5KClcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnRzIHRyYW5zYWN0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0VHJhbnNhY3Rpb24oaXNvbGF0aW9uTGV2ZWw/OiBJc29sYXRpb25MZXZlbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kcml2ZXIudHJhbnNhY3Rpb25TdXBwb3J0ID09PSBcIm5vbmVcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFRyYW5zYWN0aW9ucyBhcmVuJ3Qgc3VwcG9ydGVkIGJ5ICR7dGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGV9LmAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1RyYW5zYWN0aW9uQWN0aXZlICYmXG4gICAgICAgICAgICB0aGlzLmRyaXZlci50cmFuc2FjdGlvblN1cHBvcnQgPT09IFwic2ltcGxlXCJcbiAgICAgICAgKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uQWxyZWFkeVN0YXJ0ZWRFcnJvcigpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWwgJiZcbiAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsICE9PSBcIlJFQUQgVU5DT01NSVRURURcIiAmJlxuICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWwgIT09IFwiU0VSSUFMSVpBQkxFXCJcbiAgICAgICAgKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgU1FMaXRlIG9ubHkgc3VwcG9ydHMgU0VSSUFMSVpBQkxFIGFuZCBSRUFEIFVOQ09NTUlUVEVEIGlzb2xhdGlvbmAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgdGhpcy5pc1RyYW5zYWN0aW9uQWN0aXZlID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJCZWZvcmVUcmFuc2FjdGlvblN0YXJ0XCIpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5pc1RyYW5zYWN0aW9uQWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25EZXB0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb2xhdGlvbkxldmVsID09PSBcIlJFQUQgVU5DT01NSVRURURcIikge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiUFJBR01BIHJlYWRfdW5jb21taXR0ZWQgPSB0cnVlXCIpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIlBSQUdNQSByZWFkX3VuY29tbWl0dGVkID0gZmFsc2VcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiQkVHSU4gVFJBTlNBQ1RJT05cIilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoYFNBVkVQT0lOVCB0eXBlb3JtXyR7dGhpcy50cmFuc2FjdGlvbkRlcHRofWApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoICs9IDFcblxuICAgICAgICBhd2FpdCB0aGlzLmJyb2FkY2FzdGVyLmJyb2FkY2FzdChcIkFmdGVyVHJhbnNhY3Rpb25TdGFydFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgdHJhbnNhY3Rpb24uXG4gICAgICogRXJyb3Igd2lsbCBiZSB0aHJvd24gaWYgdHJhbnNhY3Rpb24gd2FzIG5vdCBzdGFydGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGNvbW1pdFRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSkgdGhyb3cgbmV3IFRyYW5zYWN0aW9uTm90U3RhcnRlZEVycm9yKClcblxuICAgICAgICBhd2FpdCB0aGlzLmJyb2FkY2FzdGVyLmJyb2FkY2FzdChcIkJlZm9yZVRyYW5zYWN0aW9uQ29tbWl0XCIpXG5cbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25EZXB0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgYFJFTEVBU0UgU0FWRVBPSU5UIHR5cGVvcm1fJHt0aGlzLnRyYW5zYWN0aW9uRGVwdGggLSAxfWAsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiQ09NTUlUXCIpXG4gICAgICAgICAgICB0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCAtPSAxXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJBZnRlclRyYW5zYWN0aW9uQ29tbWl0XCIpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm9sbGJhY2tzIHRyYW5zYWN0aW9uLlxuICAgICAqIEVycm9yIHdpbGwgYmUgdGhyb3duIGlmIHRyYW5zYWN0aW9uIHdhcyBub3Qgc3RhcnRlZC5cbiAgICAgKi9cbiAgICBhc3luYyByb2xsYmFja1RyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSkgdGhyb3cgbmV3IFRyYW5zYWN0aW9uTm90U3RhcnRlZEVycm9yKClcblxuICAgICAgICBhd2FpdCB0aGlzLmJyb2FkY2FzdGVyLmJyb2FkY2FzdChcIkJlZm9yZVRyYW5zYWN0aW9uUm9sbGJhY2tcIilcblxuICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRlcHRoID4gMSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICBgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHR5cGVvcm1fJHt0aGlzLnRyYW5zYWN0aW9uRGVwdGggLSAxfWAsXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFwiUk9MTEJBQ0tcIilcbiAgICAgICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlcHRoIC09IDFcblxuICAgICAgICBhd2FpdCB0aGlzLmJyb2FkY2FzdGVyLmJyb2FkY2FzdChcIkFmdGVyVHJhbnNhY3Rpb25Sb2xsYmFja1wiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgcmF3IGRhdGEgc3RyZWFtLlxuICAgICAqL1xuICAgIHN0cmVhbShcbiAgICAgICAgcXVlcnk6IHN0cmluZyxcbiAgICAgICAgcGFyYW1ldGVycz86IGFueVtdLFxuICAgICAgICBvbkVuZD86IEZ1bmN0aW9uLFxuICAgICAgICBvbkVycm9yPzogRnVuY3Rpb24sXG4gICAgKVxuLyogKi9cbi8qICovXG4gIFxuICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgU3RyZWFtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgc3FsaXRlIGRyaXZlci5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIGF2YWlsYWJsZSBkYXRhYmFzZSBuYW1lcyBpbmNsdWRpbmcgc3lzdGVtIGRhdGFiYXNlcy5cbiAgICAgKi9cbiAgICBhc3luYyBnZXREYXRhYmFzZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIGF2YWlsYWJsZSBzY2hlbWEgbmFtZXMgaW5jbHVkaW5nIHN5c3RlbSBzY2hlbWFzLlxuICAgICAqIElmIGRhdGFiYXNlIHBhcmFtZXRlciBzcGVjaWZpZWQsIHJldHVybnMgc2NoZW1hcyBvZiB0aGF0IGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFNjaGVtYXMoZGF0YWJhc2U/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGRhdGFiYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3QuXG4gICAgICovXG4gICAgYXN5bmMgaGFzRGF0YWJhc2UoZGF0YWJhc2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGN1cnJlbnRseSB1c2luZyBkYXRhYmFzZVxuICAgICAqL1xuICAgIGFzeW5jIGdldEN1cnJlbnREYXRhYmFzZSgpOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgc2NoZW1hIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3QuXG4gICAgICovXG4gICAgYXN5bmMgaGFzU2NoZW1hKHNjaGVtYTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGFibGUgc2NoZW1hc2ApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgY3VycmVudGx5IHVzaW5nIGRhdGFiYXNlIHNjaGVtYVxuICAgICAqL1xuICAgIGFzeW5jIGdldEN1cnJlbnRTY2hlbWEoKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRhYmxlIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3QgaW4gdGhlIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGhhc1RhYmxlKHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWUubmFtZVxuICAgICAgICAgICAgOiB0YWJsZU9yTmFtZVxuICAgICAgICBjb25zdCBzcWwgPSBgU0VMRUNUICogRlJPTSBcInNxbGl0ZV9tYXN0ZXJcIiBXSEVSRSBcInR5cGVcIiA9ICd0YWJsZScgQU5EIFwibmFtZVwiID0gJyR7dGFibGVOYW1lfSdgXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnkoc3FsKVxuICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA/IHRydWUgOiBmYWxzZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBjb2x1bW4gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBleGlzdCBpbiB0aGUgZ2l2ZW4gdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgaGFzQ29sdW1uKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgdGFibGVOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lLm5hbWVcbiAgICAgICAgICAgIDogdGFibGVPck5hbWVcbiAgICAgICAgY29uc3Qgc3FsID0gYFBSQUdNQSB0YWJsZV94aW5mbygke3RoaXMuZXNjYXBlUGF0aCh0YWJsZU5hbWUpfSlgXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IE9iamVjdExpdGVyYWxbXSA9IGF3YWl0IHRoaXMucXVlcnkoc3FsKVxuICAgICAgICByZXR1cm4gISFjb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uW1wibmFtZVwiXSA9PT0gY29sdW1uTmFtZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZURhdGFiYXNlKFxuICAgICAgICBkYXRhYmFzZTogc3RyaW5nLFxuICAgICAgICBpZk5vdEV4aXN0PzogYm9vbGVhbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgZGF0YWJhc2UuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcERhdGFiYXNlKGRhdGFiYXNlOiBzdHJpbmcsIGlmRXhpc3Q/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgdGFibGUgc2NoZW1hLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVNjaGVtYShcbiAgICAgICAgc2NoZW1hUGF0aDogc3RyaW5nLFxuICAgICAgICBpZk5vdEV4aXN0PzogYm9vbGVhbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgdGFibGUgc2NoZW1hLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BTY2hlbWEoc2NoZW1hUGF0aDogc3RyaW5nLCBpZkV4aXN0PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVRhYmxlKFxuICAgICAgICB0YWJsZTogVGFibGUsXG4gICAgICAgIGlmTm90RXhpc3Q6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICAgICAgY3JlYXRlRm9yZWlnbktleXM6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgICBjcmVhdGVJbmRpY2VzOiBib29sZWFuID0gdHJ1ZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXBRdWVyaWVzOiBRdWVyeVtdID0gW11cbiAgICAgICAgY29uc3QgZG93blF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuXG4gICAgICAgIGlmIChpZk5vdEV4aXN0KSB7XG4gICAgICAgICAgICBjb25zdCBpc1RhYmxlRXhpc3QgPSBhd2FpdCB0aGlzLmhhc1RhYmxlKHRhYmxlKVxuICAgICAgICAgICAgaWYgKGlzVGFibGVFeGlzdCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIH1cblxuICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlU3FsKHRhYmxlLCBjcmVhdGVGb3JlaWduS2V5cykpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5kcm9wVGFibGVTcWwodGFibGUpKVxuXG4gICAgICAgIGlmIChjcmVhdGVJbmRpY2VzKSB7XG4gICAgICAgICAgICB0YWJsZS5pbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWluZGV4Lm5hbWUpXG4gICAgICAgICAgICAgICAgICAgIGluZGV4Lm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuaW5kZXhOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LndoZXJlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbCh0YWJsZSwgaW5kZXgpKVxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5kcm9wSW5kZXhTcWwoaW5kZXgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1ucyA9IHRhYmxlLmNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmdlbmVyYXRlZFR5cGUgJiYgY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgKVxuXG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGdlbmVyYXRlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVRdWVyeSA9IHRoaXMuZGVsZXRlVHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICB0YWJsZTogdGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2goaW5zZXJ0UXVlcnkpXG4gICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKGRlbGV0ZVF1ZXJ5KVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUXVlcmllcyh1cFF1ZXJpZXMsIGRvd25RdWVyaWVzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wVGFibGUoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgaWZFeGlzdD86IGJvb2xlYW4sXG4gICAgICAgIGRyb3BGb3JlaWduS2V5czogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIGRyb3BJbmRpY2VzOiBib29sZWFuID0gdHJ1ZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGlmRXhpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzVGFibGVFeGlzdCA9IGF3YWl0IHRoaXMuaGFzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICBpZiAoIWlzVGFibGVFeGlzdCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZvcmVpZ25LZXlzOiBib29sZWFuID0gZHJvcEZvcmVpZ25LZXlzXG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgIGNvbnN0IHVwUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIGNvbnN0IGRvd25RdWVyaWVzOiBRdWVyeVtdID0gW11cblxuICAgICAgICBpZiAoZHJvcEluZGljZXMpIHtcbiAgICAgICAgICAgIHRhYmxlLmluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmRyb3BJbmRleFNxbChpbmRleCkpXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZUluZGV4U3FsKHRhYmxlLCBpbmRleCkpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5kcm9wVGFibGVTcWwodGFibGUsIGlmRXhpc3QpKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuY3JlYXRlVGFibGVTcWwodGFibGUsIGNyZWF0ZUZvcmVpZ25LZXlzKSlcblxuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmIGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgIClcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBnZW5lcmF0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVRdWVyeSA9IHRoaXMuZGVsZXRlVHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICB0YWJsZTogdGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSB0aGlzLmluc2VydFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGRlbGV0ZVF1ZXJ5KVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChpbnNlcnRRdWVyeSlcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXBRdWVyaWVzLCBkb3duUXVlcmllcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHZpZXcuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlVmlldyhcbiAgICAgICAgdmlldzogVmlldyxcbiAgICAgICAgc3luY1dpdGhNZXRhZGF0YTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB1cFF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICBjb25zdCBkb3duUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuY3JlYXRlVmlld1NxbCh2aWV3KSlcbiAgICAgICAgaWYgKHN5bmNXaXRoTWV0YWRhdGEpIHVwUXVlcmllcy5wdXNoKHRoaXMuaW5zZXJ0Vmlld0RlZmluaXRpb25TcWwodmlldykpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5kcm9wVmlld1NxbCh2aWV3KSlcbiAgICAgICAgaWYgKHN5bmNXaXRoTWV0YWRhdGEpXG4gICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZGVsZXRlVmlld0RlZmluaXRpb25TcWwodmlldykpXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXBRdWVyaWVzLCBkb3duUXVlcmllcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyB0aGUgdmlldy5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wVmlldyh0YXJnZXQ6IFZpZXcgfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgdmlld05hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNWaWV3KHRhcmdldCkgPyB0YXJnZXQubmFtZSA6IHRhcmdldFxuICAgICAgICBjb25zdCB2aWV3ID0gYXdhaXQgdGhpcy5nZXRDYWNoZWRWaWV3KHZpZXdOYW1lKVxuXG4gICAgICAgIGNvbnN0IHVwUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIGNvbnN0IGRvd25RdWVyaWVzOiBRdWVyeVtdID0gW11cbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5kZWxldGVWaWV3RGVmaW5pdGlvblNxbCh2aWV3KSlcbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5kcm9wVmlld1NxbCh2aWV3KSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmluc2VydFZpZXdEZWZpbml0aW9uU3FsKHZpZXcpKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuY3JlYXRlVmlld1NxbCh2aWV3KSlcbiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUXVlcmllcyh1cFF1ZXJpZXMsIGRvd25RdWVyaWVzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgdGhlIGdpdmVuIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIHJlbmFtZVRhYmxlKFxuICAgICAgICBvbGRUYWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIG5ld1RhYmxlTmFtZTogc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBvbGRUYWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKG9sZFRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyBvbGRUYWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKG9sZFRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBuZXdUYWJsZSA9IG9sZFRhYmxlLmNsb25lKClcblxuICAgICAgICBuZXdUYWJsZS5uYW1lID0gbmV3VGFibGVOYW1lXG5cblxuICAgICAgICBjb25zdCB1cCA9IG5ldyBRdWVyeShcbiAgICAgICAgICAgIGBBTFRFUiBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICBvbGRUYWJsZS5uYW1lLFxuICAgICAgICAgICAgKX0gUkVOQU1FIFRPICR7dGhpcy5lc2NhcGVQYXRoKG5ld1RhYmxlTmFtZSl9YCxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBkb3duID0gbmV3IFF1ZXJ5KFxuICAgICAgICAgICAgYEFMVEVSIFRBQkxFICR7dGhpcy5lc2NhcGVQYXRoKFxuICAgICAgICAgICAgICAgIG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICAgICl9IFJFTkFNRSBUTyAke3RoaXMuZXNjYXBlUGF0aChvbGRUYWJsZS5uYW1lKX1gLFxuICAgICAgICApXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXAsIGRvd24pXG5cblxuICAgICAgICBuZXdUYWJsZS51bmlxdWVzLmZvckVhY2goKHVuaXF1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2xkVW5pcXVlTmFtZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICBvbGRUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICBpZiAodW5pcXVlLm5hbWUgIT09IG9sZFVuaXF1ZU5hbWUpIHJldHVyblxuXG4gICAgICAgICAgICB1bmlxdWUubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICBuZXdUYWJsZSxcbiAgICAgICAgICAgICAgICB1bmlxdWUuY29sdW1uTmFtZXMsXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG5cblxuICAgICAgICBuZXdUYWJsZS5mb3JlaWduS2V5cy5mb3JFYWNoKChmb3JlaWduS2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbGRGb3JlaWduS2V5TmFtZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmZvcmVpZ25LZXlOYW1lKFxuICAgICAgICAgICAgICAgICAgICBvbGRUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZm9yZWlnbktleSksXG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkucmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICBpZiAoZm9yZWlnbktleS5uYW1lICE9PSBvbGRGb3JlaWduS2V5TmFtZSkgcmV0dXJuXG5cbiAgICAgICAgICAgIGZvcmVpZ25LZXkubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5mb3JlaWduS2V5TmFtZShcbiAgICAgICAgICAgICAgICBuZXdUYWJsZSxcbiAgICAgICAgICAgICAgICBmb3JlaWduS2V5LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKGZvcmVpZ25LZXkpLFxuICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkucmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3VGFibGUuaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2xkSW5kZXhOYW1lID0gdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmluZGV4TmFtZShcbiAgICAgICAgICAgICAgICBvbGRUYWJsZSxcbiAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICBpbmRleC53aGVyZSxcbiAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICBpZiAoaW5kZXgubmFtZSAhPT0gb2xkSW5kZXhOYW1lKSByZXR1cm5cblxuICAgICAgICAgICAgaW5kZXgubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5pbmRleE5hbWUoXG4gICAgICAgICAgICAgICAgbmV3VGFibGUsXG4gICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG5cblxuICAgICAgICBvbGRUYWJsZS5uYW1lID0gbmV3VGFibGUubmFtZVxuXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKG5ld1RhYmxlLCBvbGRUYWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbHVtbiBmcm9tIHRoZSBjb2x1bW4gaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZENvbHVtbihcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW46IFRhYmxlQ29sdW1uLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW5zKHRhYmxlISwgW2NvbHVtbl0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb2x1bW5zIGZyb20gdGhlIGNvbHVtbiBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgYWRkQ29sdW1ucyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiBjaGFuZ2VkVGFibGUuYWRkQ29sdW1uKGNvbHVtbikpXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgY29sdW1uIGluIHRoZSBnaXZlbiB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyByZW5hbWVDb2x1bW4oXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgb2xkVGFibGVDb2x1bW5Pck5hbWU6IFRhYmxlQ29sdW1uIHwgc3RyaW5nLFxuICAgICAgICBuZXdUYWJsZUNvbHVtbk9yTmFtZTogVGFibGVDb2x1bW4gfCBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgIGNvbnN0IG9sZENvbHVtbiA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlQ29sdW1uKG9sZFRhYmxlQ29sdW1uT3JOYW1lKVxuICAgICAgICAgICAgPyBvbGRUYWJsZUNvbHVtbk9yTmFtZVxuICAgICAgICAgICAgOiB0YWJsZS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gb2xkVGFibGVDb2x1bW5Pck5hbWUpXG4gICAgICAgIGlmICghb2xkQ29sdW1uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtvbGRUYWJsZUNvbHVtbk9yTmFtZX1cIiB3YXMgbm90IGZvdW5kIGluIHRoZSBcIiR7dGFibGUubmFtZX1cIiB0YWJsZS5gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIGxldCBuZXdDb2x1bW46IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNvbHVtbihuZXdUYWJsZUNvbHVtbk9yTmFtZSkpIHtcbiAgICAgICAgICAgIG5ld0NvbHVtbiA9IG5ld1RhYmxlQ29sdW1uT3JOYW1lXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdDb2x1bW4gPSBvbGRDb2x1bW4uY2xvbmUoKVxuICAgICAgICAgICAgbmV3Q29sdW1uLm5hbWUgPSBuZXdUYWJsZUNvbHVtbk9yTmFtZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlQ29sdW1uKHRhYmxlLCBvbGRDb2x1bW4sIG5ld0NvbHVtbilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGEgY29sdW1uIGluIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBjaGFuZ2VDb2x1bW4oXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgb2xkVGFibGVDb2x1bW5Pck5hbWU6IFRhYmxlQ29sdW1uIHwgc3RyaW5nLFxuICAgICAgICBuZXdDb2x1bW46IFRhYmxlQ29sdW1uLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBvbGRDb2x1bW4gPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNvbHVtbihvbGRUYWJsZUNvbHVtbk9yTmFtZSlcbiAgICAgICAgICAgID8gb2xkVGFibGVDb2x1bW5Pck5hbWVcbiAgICAgICAgICAgIDogdGFibGUuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG9sZFRhYmxlQ29sdW1uT3JOYW1lKVxuICAgICAgICBpZiAoIW9sZENvbHVtbilcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvbHVtbiBcIiR7b2xkVGFibGVDb2x1bW5Pck5hbWV9XCIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgXCIke3RhYmxlLm5hbWV9XCIgdGFibGUuYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLmNoYW5nZUNvbHVtbnModGFibGUsIFt7IG9sZENvbHVtbiwgbmV3Q29sdW1uIH1dKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYSBjb2x1bW4gaW4gdGhlIHRhYmxlLlxuICAgICAqIENoYW5nZWQgY29sdW1uIGxvb3NlcyBhbGwgaXRzIGtleXMgaW4gdGhlIGRiLlxuICAgICAqL1xuICAgIGFzeW5jIGNoYW5nZUNvbHVtbnMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY2hhbmdlZENvbHVtbnM6IHsgb2xkQ29sdW1uOiBUYWJsZUNvbHVtbjsgbmV3Q29sdW1uOiBUYWJsZUNvbHVtbiB9W10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgY2hhbmdlZENvbHVtbnMuZm9yRWFjaCgoY2hhbmdlZENvbHVtblNldCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQubmV3Q29sdW1uLm5hbWUgIT09XG4gICAgICAgICAgICAgICAgY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4ubmFtZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlXG4gICAgICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uVW5pcXVlcyhjaGFuZ2VkQ29sdW1uU2V0Lm9sZENvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHVuaXF1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUuY29sdW1uTmFtZXMuaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUuY29sdW1uTmFtZXMucHVzaChjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmlxdWUubmFtZSA9PT0gdW5pcXVlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5uYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGVcbiAgICAgICAgICAgICAgICAgICAgLmZpbmRDb2x1bW5Gb3JlaWduS2V5cyhjaGFuZ2VkQ29sdW1uU2V0Lm9sZENvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKGZvcmVpZ25LZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25LZXlOYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuZm9yZWlnbktleU5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChmb3JlaWduS2V5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5yZWZlcmVuY2VkQ29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LmNvbHVtbk5hbWVzLnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LmNvbHVtbk5hbWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQubmV3Q29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmVpZ25LZXkubmFtZSA9PT0gZm9yZWlnbktleU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5Lm5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuZm9yZWlnbktleU5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZm9yZWlnbktleSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlXG4gICAgICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uSW5kaWNlcyhjaGFuZ2VkQ29sdW1uU2V0Lm9sZENvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleE5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5pbmRleE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMuaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcy5wdXNoKGNoYW5nZWRDb2x1bW5TZXQubmV3Q29sdW1uLm5hbWUpXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Lm5hbWUgPT09IGluZGV4TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Lm5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuaW5kZXhOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2x1bW4gPSBjaGFuZ2VkVGFibGUuY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBjaGFuZ2VkQ29sdW1uU2V0Lm9sZENvbHVtbi5uYW1lLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsQ29sdW1uKVxuICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5jb2x1bW5zW1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGUuY29sdW1ucy5pbmRleE9mKG9yaWdpbmFsQ29sdW1uKVxuICAgICAgICAgICAgICAgIF0gPSBjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtblxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGNvbHVtbiBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcENvbHVtbihcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5Pck5hbWU6IFRhYmxlQ29sdW1uIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBjb2x1bW4gPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNvbHVtbihjb2x1bW5Pck5hbWUpXG4gICAgICAgICAgICA/IGNvbHVtbk9yTmFtZVxuICAgICAgICAgICAgOiB0YWJsZS5maW5kQ29sdW1uQnlOYW1lKGNvbHVtbk9yTmFtZSlcbiAgICAgICAgaWYgKCFjb2x1bW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBDb2x1bW4gXCIke2NvbHVtbk9yTmFtZX1cIiB3YXMgbm90IGZvdW5kIGluIHRhYmxlIFwiJHt0YWJsZS5uYW1lfVwiYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLmRyb3BDb2x1bW5zKHRhYmxlLCBbY29sdW1uXSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyB0aGUgY29sdW1ucyBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcENvbHVtbnMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uczogVGFibGVDb2x1bW5bXSB8IHN0cmluZ1tdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogVGFibGVDb2x1bW4gfCBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbkluc3RhbmNlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4oY29sdW1uKVxuICAgICAgICAgICAgICAgID8gY29sdW1uXG4gICAgICAgICAgICAgICAgOiB0YWJsZS5maW5kQ29sdW1uQnlOYW1lKGNvbHVtbilcbiAgICAgICAgICAgIGlmICghY29sdW1uSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtjb2x1bW59XCIgd2FzIG5vdCBmb3VuZCBpbiB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUucmVtb3ZlQ29sdW1uKGNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlXG4gICAgICAgICAgICAgICAgLmZpbmRDb2x1bW5VbmlxdWVzKGNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh1bmlxdWUpID0+XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5yZW1vdmVVbmlxdWVDb25zdHJhaW50KHVuaXF1ZSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlXG4gICAgICAgICAgICAgICAgLmZpbmRDb2x1bW5JbmRpY2VzKGNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpbmRleCkgPT4gY2hhbmdlZFRhYmxlLnJlbW92ZUluZGV4KGluZGV4KSlcbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uRm9yZWlnbktleXMoY29sdW1uSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGZrKSA9PiBjaGFuZ2VkVGFibGUucmVtb3ZlRm9yZWlnbktleShmaykpXG4gICAgICAgIH0pXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBwcmltYXJ5IGtleS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVQcmltYXJ5S2V5KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNvbHVtbk5hbWVzOiBzdHJpbmdbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGNoYW5nZWRUYWJsZS5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWVzLmZpbmQoKGNvbHVtbk5hbWUpID0+IGNvbHVtbk5hbWUgPT09IGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgICAgICBjb2x1bW4uaXNQcmltYXJ5ID0gdHJ1ZVxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuXG4gICAgICAgIHRhYmxlLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uTmFtZXMuZmluZCgoY29sdW1uTmFtZSkgPT4gY29sdW1uTmFtZSA9PT0gY29sdW1uLm5hbWUpKVxuICAgICAgICAgICAgICAgIGNvbHVtbi5pc1ByaW1hcnkgPSB0cnVlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBjb21wb3NpdGUgcHJpbWFyeSBrZXlzLlxuICAgICAqL1xuICAgIGFzeW5jIHVwZGF0ZVByaW1hcnlLZXlzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYSBwcmltYXJ5IGtleS5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wUHJpbWFyeUtleSh0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGNoYW5nZWRUYWJsZS5wcmltYXJ5Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1ByaW1hcnkgPSBmYWxzZVxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuXG4gICAgICAgIHRhYmxlLnByaW1hcnlDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLmlzUHJpbWFyeSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB1bmlxdWUgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVVbmlxdWVDb25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnQ6IFRhYmxlVW5pcXVlLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVVuaXF1ZUNvbnN0cmFpbnRzKHRhYmxlT3JOYW1lLCBbdW5pcXVlQ29uc3RyYWludF0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB1bmlxdWUgY29uc3RyYWludHMuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlVW5pcXVlQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgdW5pcXVlQ29uc3RyYWludHM6IFRhYmxlVW5pcXVlW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzLmZvckVhY2goKHVuaXF1ZUNvbnN0cmFpbnQpID0+XG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUuYWRkVW5pcXVlQ29uc3RyYWludCh1bmlxdWVDb25zdHJhaW50KSxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbiB1bmlxdWUgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wVW5pcXVlQ29uc3RyYWludChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICB1bmlxdWVPck5hbWU6IFRhYmxlVW5pcXVlIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCB1bmlxdWVDb25zdHJhaW50ID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVVbmlxdWUodW5pcXVlT3JOYW1lKVxuICAgICAgICAgICAgPyB1bmlxdWVPck5hbWVcbiAgICAgICAgICAgIDogdGFibGUudW5pcXVlcy5maW5kKCh1KSA9PiB1Lm5hbWUgPT09IHVuaXF1ZU9yTmFtZSlcbiAgICAgICAgaWYgKCF1bmlxdWVDb25zdHJhaW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgU3VwcGxpZWQgdW5pcXVlIGNvbnN0cmFpbnQgd2FzIG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlLm5hbWV9YCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLmRyb3BVbmlxdWVDb25zdHJhaW50cyh0YWJsZSwgW3VuaXF1ZUNvbnN0cmFpbnRdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gdW5pcXVlIGNvbnN0cmFpbnRzLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BVbmlxdWVDb25zdHJhaW50cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICB1bmlxdWVDb25zdHJhaW50czogVGFibGVVbmlxdWVbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgdW5pcXVlQ29uc3RyYWludHMuZm9yRWFjaCgodW5pcXVlQ29uc3RyYWludCkgPT5cbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5yZW1vdmVVbmlxdWVDb25zdHJhaW50KHVuaXF1ZUNvbnN0cmFpbnQpLFxuICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgY2hlY2sgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVDaGVja0NvbnN0cmFpbnQoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50OiBUYWJsZUNoZWNrLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUNoZWNrQ29uc3RyYWludHModGFibGVPck5hbWUsIFtjaGVja0NvbnN0cmFpbnRdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IGNoZWNrIGNvbnN0cmFpbnRzLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUNoZWNrQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50czogVGFibGVDaGVja1tdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzLmZvckVhY2goKGNoZWNrQ29uc3RyYWludCkgPT5cbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5hZGRDaGVja0NvbnN0cmFpbnQoY2hlY2tDb25zdHJhaW50KSxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBjaGVjayBjb25zdHJhaW50LlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BDaGVja0NvbnN0cmFpbnQoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY2hlY2tPck5hbWU6IFRhYmxlQ2hlY2sgfCBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgIGNvbnN0IGNoZWNrQ29uc3RyYWludCA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlQ2hlY2soY2hlY2tPck5hbWUpXG4gICAgICAgICAgICA/IGNoZWNrT3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLmNoZWNrcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNoZWNrT3JOYW1lKVxuICAgICAgICBpZiAoIWNoZWNrQ29uc3RyYWludClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN1cHBsaWVkIGNoZWNrIGNvbnN0cmFpbnQgd2FzIG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlLm5hbWV9YCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLmRyb3BDaGVja0NvbnN0cmFpbnRzKHRhYmxlLCBbY2hlY2tDb25zdHJhaW50XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBjaGVjayBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wQ2hlY2tDb25zdHJhaW50cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzOiBUYWJsZUNoZWNrW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGNoZWNrQ29uc3RyYWludHMuZm9yRWFjaCgoY2hlY2tDb25zdHJhaW50KSA9PlxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLnJlbW92ZUNoZWNrQ29uc3RyYWludChjaGVja0NvbnN0cmFpbnQpLFxuICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBleGNsdXNpb24gY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVFeGNsdXNpb25Db25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGV4Y2x1c2lvbkNvbnN0cmFpbnQ6IFRhYmxlRXhjbHVzaW9uLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKGBTcWxpdGUgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWludHMuYClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVFeGNsdXNpb25Db25zdHJhaW50cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBleGNsdXNpb25Db25zdHJhaW50czogVGFibGVFeGNsdXNpb25bXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgU3FsaXRlIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzLmApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgZXhjbHVzaW9uIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcEV4Y2x1c2lvbkNvbnN0cmFpbnQoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZXhjbHVzaW9uT3JOYW1lOiBUYWJsZUV4Y2x1c2lvbiB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgU3FsaXRlIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzLmApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgZXhjbHVzaW9uIGNvbnN0cmFpbnRzLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BFeGNsdXNpb25Db25zdHJhaW50cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBleGNsdXNpb25Db25zdHJhaW50czogVGFibGVFeGNsdXNpb25bXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgU3FsaXRlIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzLmApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBmb3JlaWduIGtleS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVGb3JlaWduS2V5KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGZvcmVpZ25LZXk6IFRhYmxlRm9yZWlnbktleSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVGb3JlaWduS2V5cyh0YWJsZU9yTmFtZSwgW2ZvcmVpZ25LZXldKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZm9yZWlnbiBrZXlzLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUZvcmVpZ25LZXlzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGZvcmVpZ25LZXlzOiBUYWJsZUZvcmVpZ25LZXlbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGZvcmVpZ25LZXlzLmZvckVhY2goKGZvcmVpZ25LZXkpID0+XG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUuYWRkRm9yZWlnbktleShmb3JlaWduS2V5KSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgZm9yZWlnbiBrZXkgZnJvbSB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcEZvcmVpZ25LZXkoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZm9yZWlnbktleU9yTmFtZTogVGFibGVGb3JlaWduS2V5IHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBmb3JlaWduS2V5ID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVGb3JlaWduS2V5KGZvcmVpZ25LZXlPck5hbWUpXG4gICAgICAgICAgICA/IGZvcmVpZ25LZXlPck5hbWVcbiAgICAgICAgICAgIDogdGFibGUuZm9yZWlnbktleXMuZmluZCgoZmspID0+IGZrLm5hbWUgPT09IGZvcmVpZ25LZXlPck5hbWUpXG4gICAgICAgIGlmICghZm9yZWlnbktleSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN1cHBsaWVkIGZvcmVpZ24ga2V5IHdhcyBub3QgZm91bmQgaW4gdGFibGUgJHt0YWJsZS5uYW1lfWAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wRm9yZWlnbktleXModGFibGVPck5hbWUsIFtmb3JlaWduS2V5XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhIGZvcmVpZ24ga2V5cyBmcm9tIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wRm9yZWlnbktleXMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZm9yZWlnbktleXM6IFRhYmxlRm9yZWlnbktleVtdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBmb3JlaWduS2V5cy5mb3JFYWNoKChmb3JlaWduS2V5KSA9PlxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLnJlbW92ZUZvcmVpZ25LZXkoZm9yZWlnbktleSksXG4gICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluZGV4LlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZUluZGV4KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGluZGV4OiBUYWJsZUluZGV4LFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgaWYgKCFpbmRleC5uYW1lKSBpbmRleC5uYW1lID0gdGhpcy5nZW5lcmF0ZUluZGV4TmFtZSh0YWJsZSwgaW5kZXgpXG5cbiAgICAgICAgY29uc3QgdXAgPSB0aGlzLmNyZWF0ZUluZGV4U3FsKHRhYmxlLCBpbmRleClcbiAgICAgICAgY29uc3QgZG93biA9IHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwLCBkb3duKVxuICAgICAgICB0YWJsZS5hZGRJbmRleChpbmRleClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluZGljZXNcbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJbmRpY2VzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGluZGljZXM6IFRhYmxlSW5kZXhbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBpbmRpY2VzLm1hcCgoaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUluZGV4KHRhYmxlT3JOYW1lLCBpbmRleCksXG4gICAgICAgIClcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYW4gaW5kZXggZnJvbSB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcEluZGV4KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGluZGV4T3JOYW1lOiBUYWJsZUluZGV4IHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBpbmRleCA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlSW5kZXgoaW5kZXhPck5hbWUpXG4gICAgICAgICAgICA/IGluZGV4T3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLmluZGljZXMuZmluZCgoaSkgPT4gaS5uYW1lID09PSBpbmRleE9yTmFtZSlcbiAgICAgICAgaWYgKCFpbmRleClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN1cHBsaWVkIGluZGV4ICR7aW5kZXhPck5hbWV9IHdhcyBub3QgZm91bmQgaW4gdGFibGUgJHt0YWJsZS5uYW1lfWAsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICBpZiAoIWluZGV4Lm5hbWUpIGluZGV4Lm5hbWUgPSB0aGlzLmdlbmVyYXRlSW5kZXhOYW1lKHRhYmxlLCBpbmRleClcblxuICAgICAgICBjb25zdCB1cCA9IHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KVxuICAgICAgICBjb25zdCBkb3duID0gdGhpcy5jcmVhdGVJbmRleFNxbCh0YWJsZSwgaW5kZXgpXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXAsIGRvd24pXG4gICAgICAgIHRhYmxlLnJlbW92ZUluZGV4KGluZGV4KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGFuIGluZGljZXMgZnJvbSB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcEluZGljZXMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgaW5kaWNlczogVGFibGVJbmRleFtdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IGluZGljZXMubWFwKChpbmRleCkgPT5cbiAgICAgICAgICAgIHRoaXMuZHJvcEluZGV4KHRhYmxlT3JOYW1lLCBpbmRleCksXG4gICAgICAgIClcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCB0YWJsZSBjb250ZW50cy5cbiAgICAgKiBOb3RlOiB0aGlzIG9wZXJhdGlvbiB1c2VzIFNRTCdzIFRSVU5DQVRFIHF1ZXJ5IHdoaWNoIGNhbm5vdCBiZSByZXZlcnRlZCBpbiB0cmFuc2FjdGlvbnMuXG4gICAgICovXG4gICAgYXN5bmMgY2xlYXJUYWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KGBERUxFVEUgRlJPTSAke3RoaXMuZXNjYXBlUGF0aCh0YWJsZU5hbWUpfWApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgdGFibGVzIGZyb20gdGhlIGN1cnJlbnRseSBjb25uZWN0ZWQgZGF0YWJhc2UuXG4gICAgICovXG4gICAgYXN5bmMgY2xlYXJEYXRhYmFzZShkYXRhYmFzZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgZGJQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YWJhc2UgJiZcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VIYW5kbGVCeVJlbGF0aXZlUGF0aChkYXRhYmFzZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkYlBhdGggPVxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VIYW5kbGVCeVJlbGF0aXZlUGF0aChkYXRhYmFzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMucXVlcnkoYFBSQUdNQSBmb3JlaWduX2tleXMgPSBPRkZgKVxuXG4gICAgICAgIGNvbnN0IGlzQW5vdGhlclRyYW5zYWN0aW9uQWN0aXZlID0gdGhpcy5pc1RyYW5zYWN0aW9uQWN0aXZlXG4gICAgICAgIGlmICghaXNBbm90aGVyVHJhbnNhY3Rpb25BY3RpdmUpIGF3YWl0IHRoaXMuc3RhcnRUcmFuc2FjdGlvbigpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RWaWV3RHJvcHNRdWVyeSA9IGRiUGF0aFxuICAgICAgICAgICAgICAgID8gYFNFTEVDVCAnRFJPUCBWSUVXIFwiJHtkYlBhdGh9XCIuXCInIHx8IG5hbWUgfHwgJ1wiOycgYXMgcXVlcnkgRlJPTSBcIiR7ZGJQYXRofVwiLlwic3FsaXRlX21hc3RlclwiIFdIRVJFIFwidHlwZVwiID0gJ3ZpZXcnYFxuICAgICAgICAgICAgICAgIDogYFNFTEVDVCAnRFJPUCBWSUVXIFwiJyB8fCBuYW1lIHx8ICdcIjsnIGFzIHF1ZXJ5IEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndmlldydgXG4gICAgICAgICAgICBjb25zdCBkcm9wVmlld1F1ZXJpZXM6IE9iamVjdExpdGVyYWxbXSA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgc2VsZWN0Vmlld0Ryb3BzUXVlcnksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBkcm9wVmlld1F1ZXJpZXMubWFwKChxKSA9PiB0aGlzLnF1ZXJ5KHFbXCJxdWVyeVwiXSkpLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZURyb3BzUXVlcnkgPSBkYlBhdGhcbiAgICAgICAgICAgICAgICA/IGBTRUxFQ1QgJ0RST1AgVEFCTEUgXCIke2RiUGF0aH1cIi5cIicgfHwgbmFtZSB8fCAnXCI7JyBhcyBxdWVyeSBGUk9NIFwiJHtkYlBhdGh9XCIuXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnIEFORCBcIm5hbWVcIiAhPSAnc3FsaXRlX3NlcXVlbmNlJ2BcbiAgICAgICAgICAgICAgICA6IGBTRUxFQ1QgJ0RST1AgVEFCTEUgXCInIHx8IG5hbWUgfHwgJ1wiOycgYXMgcXVlcnkgRlJPTSBcInNxbGl0ZV9tYXN0ZXJcIiBXSEVSRSBcInR5cGVcIiA9ICd0YWJsZScgQU5EIFwibmFtZVwiICE9ICdzcWxpdGVfc2VxdWVuY2UnYFxuICAgICAgICAgICAgY29uc3QgZHJvcFRhYmxlUXVlcmllczogT2JqZWN0TGl0ZXJhbFtdID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICBzZWxlY3RUYWJsZURyb3BzUXVlcnksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBkcm9wVGFibGVRdWVyaWVzLm1hcCgocSkgPT4gdGhpcy5xdWVyeShxW1wicXVlcnlcIl0pKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKCFpc0Fub3RoZXJUcmFuc2FjdGlvbkFjdGl2ZSkgYXdhaXQgdGhpcy5jb21taXRUcmFuc2FjdGlvbigpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpc0Fub3RoZXJUcmFuc2FjdGlvbkFjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKClcbiAgICAgICAgICAgIH0gY2F0Y2ggKHJvbGxiYWNrRXJyb3IpIHt9XG4gICAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShgUFJBR01BIGZvcmVpZ25fa2V5cyA9IE9OYClcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRWaWV3cyh2aWV3TmFtZXM/OiBzdHJpbmdbXSk6IFByb21pc2U8Vmlld1tdPiB7XG4gICAgICAgIGNvbnN0IGhhc1RhYmxlID0gYXdhaXQgdGhpcy5oYXNUYWJsZSh0aGlzLmdldFR5cGVvcm1NZXRhZGF0YVRhYmxlTmFtZSgpKVxuICAgICAgICBpZiAoIWhhc1RhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmlld05hbWVzKSB7XG4gICAgICAgICAgICB2aWV3TmFtZXMgPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgdmlld05hbWVzU3RyaW5nID0gdmlld05hbWVzXG4gICAgICAgICAgICAubWFwKChuYW1lKSA9PiBcIidcIiArIG5hbWUgKyBcIidcIilcbiAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgbGV0IHF1ZXJ5ID0gYFNFTEVDVCBcInRcIi4qIEZST00gXCIke3RoaXMuZ2V0VHlwZW9ybU1ldGFkYXRhVGFibGVOYW1lKCl9XCIgXCJ0XCIgSU5ORVIgSk9JTiBcInNxbGl0ZV9tYXN0ZXJcIiBzIE9OIFwic1wiLlwibmFtZVwiID0gXCJ0XCIuXCJuYW1lXCIgQU5EIFwic1wiLlwidHlwZVwiID0gJ3ZpZXcnIFdIRVJFIFwidFwiLlwidHlwZVwiID0gJyR7XG4gICAgICAgICAgICBNZXRhZGF0YVRhYmxlVHlwZS5WSUVXXG4gICAgICAgIH0nYFxuICAgICAgICBpZiAodmlld05hbWVzU3RyaW5nLmxlbmd0aCA+IDApXG4gICAgICAgICAgICBxdWVyeSArPSBgIEFORCBcInRcIi5cIm5hbWVcIiBJTiAoJHt2aWV3TmFtZXNTdHJpbmd9KWBcbiAgICAgICAgY29uc3QgZGJWaWV3cyA9IGF3YWl0IHRoaXMucXVlcnkocXVlcnkpXG4gICAgICAgIHJldHVybiBkYlZpZXdzLm1hcCgoZGJWaWV3OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVmlldygpXG4gICAgICAgICAgICB2aWV3Lm5hbWUgPSBkYlZpZXdbXCJuYW1lXCJdXG4gICAgICAgICAgICB2aWV3LmV4cHJlc3Npb24gPSBkYlZpZXdbXCJ2YWx1ZVwiXVxuICAgICAgICAgICAgcmV0dXJuIHZpZXdcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZFRhYmxlUmVjb3JkcyhcbiAgICAgICAgdGFibGVQYXRoOiBzdHJpbmcsXG4gICAgICAgIHRhYmxlT3JJbmRleDogXCJ0YWJsZVwiIHwgXCJpbmRleFwiLFxuICAgICkge1xuICAgICAgICBsZXQgZGF0YWJhc2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBbc2NoZW1hLCB0YWJsZU5hbWVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aCh0YWJsZVBhdGgpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHNjaGVtYSAmJlxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0QXR0YWNoZWREYXRhYmFzZVBhdGhSZWxhdGl2ZUJ5SGFuZGxlKHNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkYXRhYmFzZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0QXR0YWNoZWREYXRhYmFzZVBhdGhSZWxhdGl2ZUJ5SGFuZGxlKHNjaGVtYSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgYFNFTEVDVCAke2RhdGFiYXNlID8gYCcke2RhdGFiYXNlfSdgIDogbnVsbH0gYXMgZGF0YWJhc2UsICR7XG4gICAgICAgICAgICAgICAgc2NoZW1hID8gYCcke3NjaGVtYX0nYCA6IG51bGxcbiAgICAgICAgICAgIH0gYXMgc2NoZW1hLCAqIEZST00gJHtcbiAgICAgICAgICAgICAgICBzY2hlbWEgPyBgXCIke3NjaGVtYX1cIi5gIDogXCJcIlxuICAgICAgICAgICAgfSR7dGhpcy5lc2NhcGVQYXRoKFxuICAgICAgICAgICAgICAgIGBzcWxpdGVfbWFzdGVyYCxcbiAgICAgICAgICAgICl9IFdIRVJFIFwidHlwZVwiID0gJyR7dGFibGVPckluZGV4fScgQU5EIFwiJHtcbiAgICAgICAgICAgICAgICB0YWJsZU9ySW5kZXggPT09IFwidGFibGVcIiA/IFwibmFtZVwiIDogXCJ0YmxfbmFtZVwiXG4gICAgICAgICAgICB9XCIgSU4gKCcke3RhYmxlTmFtZX0nKWAsXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZFByYWdtYVJlY29yZHModGFibGVQYXRoOiBzdHJpbmcsIHByYWdtYTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IFssIHRhYmxlTmFtZV0gPSB0aGlzLnNwbGl0VGFibGVQYXRoKHRhYmxlUGF0aClcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5xdWVyeShgUFJBR01BICR7cHJhZ21hfShcIiR7dGFibGVOYW1lfVwiKWApXG4gICAgICAgIHJldHVybiByZXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBhbGwgdGFibGVzICh3aXRoIGdpdmVuIG5hbWVzKSBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgY3JlYXRlcyBhIFRhYmxlIGZyb20gdGhlbS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgbG9hZFRhYmxlcyh0YWJsZU5hbWVzPzogc3RyaW5nW10pOiBQcm9taXNlPFRhYmxlW10+IHtcblxuICAgICAgICBpZiAodGFibGVOYW1lcyAmJiB0YWJsZU5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGJUYWJsZXM6IHsgZGF0YWJhc2U/OiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgc3FsOiBzdHJpbmcgfVtdID0gW11cbiAgICAgICAgbGV0IGRiSW5kaWNlc0RlZjogT2JqZWN0TGl0ZXJhbFtdXG5cbiAgICAgICAgaWYgKCF0YWJsZU5hbWVzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZXNTcWwgPSBgU0VMRUNUICogRlJPTSBcInNxbGl0ZV9tYXN0ZXJcIiBXSEVSRSBcInR5cGVcIiA9ICd0YWJsZSdgXG4gICAgICAgICAgICBkYlRhYmxlcy5wdXNoKC4uLihhd2FpdCB0aGlzLnF1ZXJ5KHRhYmxlc1NxbCkpKVxuXG4gICAgICAgICAgICBjb25zdCB0YWJsZU5hbWVzU3RyaW5nID0gZGJUYWJsZXNcbiAgICAgICAgICAgICAgICAubWFwKCh7IG5hbWUgfSkgPT4gYCcke25hbWV9J2ApXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgZGJJbmRpY2VzRGVmID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICBgU0VMRUNUICogRlJPTSBcInNxbGl0ZV9tYXN0ZXJcIiBXSEVSRSBcInR5cGVcIiA9ICdpbmRleCcgQU5EIFwidGJsX25hbWVcIiBJTiAoJHt0YWJsZU5hbWVzU3RyaW5nfSlgLFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGJUYWJsZXMgPSAoXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZXMubWFwKCh0YWJsZU5hbWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRUYWJsZVJlY29yZHModGFibGVOYW1lLCBcInRhYmxlXCIpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIHJlcykgPT4gWy4uLmFjYywgLi4ucmVzXSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgZGJJbmRpY2VzRGVmID0gKFxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAodGFibGVOYW1lcyA/PyBbXSkubWFwKCh0YWJsZU5hbWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRUYWJsZVJlY29yZHModGFibGVOYW1lLCBcImluZGV4XCIpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIHJlcykgPT4gWy4uLmFjYywgLi4ucmVzXSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoZGJUYWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuXG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZGJUYWJsZXMubWFwKGFzeW5jIChkYlRhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVQYXRoID1cbiAgICAgICAgICAgICAgICAgICAgZGJUYWJsZVtcImRhdGFiYXNlXCJdICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VIYW5kbGVCeVJlbGF0aXZlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiVGFibGVbXCJkYXRhYmFzZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYlRhYmxlW1wiZGF0YWJhc2VcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9LiR7ZGJUYWJsZVtcIm5hbWVcIl19YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBkYlRhYmxlW1wibmFtZVwiXVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3FsID0gZGJUYWJsZVtcInNxbFwiXVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgd2l0aG91dFJvd2lkID0gc3FsLmluY2x1ZGVzKFwiV0lUSE9VVCBST1dJRFwiKVxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKHsgbmFtZTogdGFibGVQYXRoLCB3aXRob3V0Um93aWQgfSlcblxuXG4gICAgICAgICAgICAgICAgY29uc3QgW2RiQ29sdW1ucywgZGJJbmRpY2VzLCBkYkZvcmVpZ25LZXlzXTogT2JqZWN0TGl0ZXJhbFtdW10gPVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcmFnbWFSZWNvcmRzKHRhYmxlUGF0aCwgYHRhYmxlX3hpbmZvYCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcmFnbWFSZWNvcmRzKHRhYmxlUGF0aCwgYGluZGV4X2xpc3RgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFByYWdtYVJlY29yZHModGFibGVQYXRoLCBgZm9yZWlnbl9rZXlfbGlzdGApLFxuICAgICAgICAgICAgICAgICAgICBdKVxuXG5cbiAgICAgICAgICAgICAgICBsZXQgYXV0b0luY3JlbWVudENvbHVtbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlU3FsOiBzdHJpbmcgPSBkYlRhYmxlW1wic3FsXCJdXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9JbmNyZW1lbnRJbmRleCA9IHRhYmxlU3FsXG4gICAgICAgICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKFwiQVVUT0lOQ1JFTUVOVFwiKVxuICAgICAgICAgICAgICAgIGlmIChhdXRvSW5jcmVtZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID0gdGFibGVTcWwuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tYSA9IGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLmxhc3RJbmRleE9mKFwiLFwiKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmFja2V0ID0gYXV0b0luY3JlbWVudENvbHVtbk5hbWUubGFzdEluZGV4T2YoXCIoXCIpXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tYSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5zdWJzdHIoY29tbWEpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5sYXN0SW5kZXhPZignXCInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5pbmRleE9mKCdcIicpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnJhY2tldCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5zdWJzdHIoYnJhY2tldClcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5zdWJzdHIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLmxhc3RJbmRleE9mKCdcIicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5zdWJzdHIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLmluZGV4T2YoJ1wiJykgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgdGFibGUuY29sdW1ucyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICBkYkNvbHVtbnMubWFwKGFzeW5jIChkYkNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4ubmFtZSA9IGRiQ29sdW1uW1wibmFtZVwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4udHlwZSA9IGRiQ29sdW1uW1widHlwZVwiXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5kZWZhdWx0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkNvbHVtbltcImRmbHRfdmFsdWVcIl0gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkNvbHVtbltcImRmbHRfdmFsdWVcIl0gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRiQ29sdW1uW1wiZGZsdF92YWx1ZVwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uaXNOdWxsYWJsZSA9IGRiQ29sdW1uW1wibm90bnVsbFwiXSA9PT0gMFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5pc1ByaW1hcnkgPSBkYkNvbHVtbltcInBrXCJdID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uY29tbWVudCA9IFwiXCIgLy8gU1FMaXRlIGRvZXMgbm90IHN1cHBvcnQgY29sdW1uIGNvbW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5pc0dlbmVyYXRlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUgPT09IGRiQ29sdW1uW1wibmFtZVwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlQ29sdW1uLmlzR2VuZXJhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uZ2VuZXJhdGlvblN0cmF0ZWd5ID0gXCJpbmNyZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJoaWRkZW5cIl0gPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkNvbHVtbltcImhpZGRlblwiXSA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uZ2VuZXJhdGVkVHlwZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiQ29sdW1uW1wiaGlkZGVuXCJdID09PSAyID8gXCJWSVJUVUFMXCIgOiBcIlNUT1JFRFwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc0V4cHJlc3Npb25RdWVyeSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNFeHByZXNzaW9uUXVlcnkucXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzRXhwcmVzc2lvblF1ZXJ5LnBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzWzBdICYmIHJlc3VsdHNbMF0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uYXNFeHByZXNzaW9uID0gcmVzdWx0c1swXS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmFzRXhwcmVzc2lvbiA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbHVtbi50eXBlID09PSBcInZhcmNoYXJcIikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW51bU1hdGNoID0gc3FsLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLm5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiKVxcXCIgdmFyY2hhciBDSEVDS1xcXFxzKlxcXFwoXFxcXHMqXFxcIlxcXFwxXFxcIlxcXFxzK0lOXFxcXHMqXFxcXCgoJ1teJ10rJyg/OlxcXFxzKixcXFxccyonW14nXSsnKSspXFxcXHMqXFxcXClcXFxccypcXFxcKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW51bU1hdGNoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uZW51bSA9IGVudW1NYXRjaFsyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnN0cigxLCBlbnVtTWF0Y2hbMl0ubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChcIicsJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcG9zID0gdGFibGVDb2x1bW4udHlwZS5pbmRleE9mKFwiKFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVHlwZSA9IHRhYmxlQ29sdW1uLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVR5cGUgPSBmdWxsVHlwZS5zdWJzdHIoMCwgcG9zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLmRyaXZlci53aXRoTGVuZ3RoQ29sdW1uVHlwZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wpID0+IGNvbCA9PT0gZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxlbiA9IHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFR5cGUuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFR5cGUubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4ubGVuZ3RoID0gbGVuLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnR5cGUgPSBkYXRhVHlwZSAvLyByZW1vdmUgdGhlIGxlbmd0aCBwYXJ0IGZyb20gdGhlIGRhdGF0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIXRoaXMuZHJpdmVyLndpdGhQcmVjaXNpb25Db2x1bW5UeXBlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbCkgPT4gY29sID09PSBkYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXiR7ZGF0YVR5cGV9XFxcXCgoXFxcXGQrKSw/XFxcXHM/KFxcXFxkKyk/XFxcXClgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmdWxsVHlwZS5tYXRjaChyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4ucHJlY2lzaW9uID0gK21hdGNoZXNbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIXRoaXMuZHJpdmVyLndpdGhTY2FsZUNvbHVtblR5cGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbCkgPT4gY29sID09PSBkYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uc2NhbGUgPSArbWF0Y2hlc1syXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnR5cGUgPSBkYXRhVHlwZSAvLyByZW1vdmUgdGhlIHByZWNpc2lvbi9zY2FsZSBwYXJ0IGZyb20gdGhlIGRhdGF0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgICAgICAgICBsZXQgZmtSZXN1bHRcbiAgICAgICAgICAgICAgICBjb25zdCBma01hcHBpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBzdHJpbmdbXVxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkVGFibGVOYW1lOiBzdHJpbmdcbiAgICAgICAgICAgICAgICB9W10gPSBbXVxuICAgICAgICAgICAgICAgIGNvbnN0IGZrUmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAvQ09OU1RSQUlOVCBcIihbXlwiXSopXCIgRk9SRUlHTiBLRVkgP1xcKCguKj8pXFwpIFJFRkVSRU5DRVMgXCIoW15cIl0qKVwiL2dcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGZrUmVzdWx0ID0gZmtSZWdleC5leGVjKHNxbCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZrTWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBma1Jlc3VsdFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGZrUmVzdWx0WzJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnN0cigxLCBma1Jlc3VsdFsyXS5sZW5ndGggLSAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChgXCIsIFwiYCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkVGFibGVOYW1lOiBma1Jlc3VsdFszXSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlRm9yZWlnbktleUNvbnN0cmFpbnRzID0gT3JtVXRpbHMudW5pcShcbiAgICAgICAgICAgICAgICAgICAgZGJGb3JlaWduS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgKGRiRm9yZWlnbktleSkgPT4gZGJGb3JlaWduS2V5W1wiaWRcIl0sXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgdGFibGUuZm9yZWlnbktleXMgPSB0YWJsZUZvcmVpZ25LZXlDb25zdHJhaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChmb3JlaWduS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvd25Gb3JlaWduS2V5cyA9IGRiRm9yZWlnbktleXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYkZvcmVpZ25LZXkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiRm9yZWlnbktleVtcImlkXCJdID09PSBmb3JlaWduS2V5W1wiaWRcIl0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJGb3JlaWduS2V5W1widGFibGVcIl0gPT09IGZvcmVpZ25LZXlbXCJ0YWJsZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gb3duRm9yZWlnbktleXMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYkZvcmVpZ25LZXkpID0+IGRiRm9yZWlnbktleVtcImZyb21cIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VkQ29sdW1uTmFtZXMgPSBvd25Gb3JlaWduS2V5cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRiRm9yZWlnbktleSkgPT4gZGJGb3JlaWduS2V5W1widG9cIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmtNYXBwaW5nID0gZmtNYXBwaW5ncy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQucmVmZXJlbmNlZFRhYmxlTmFtZSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXlbXCJ0YWJsZVwiXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5jb2x1bW5zLmV2ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5pbmRleE9mKGNvbHVtbikgIT09IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlRm9yZWlnbktleSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmtNYXBwaW5nIS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzOiBjb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkVGFibGVOYW1lOiBmb3JlaWduS2V5W1widGFibGVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZENvbHVtbk5hbWVzOiByZWZlcmVuY2VkQ29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25EZWxldGU6IGZvcmVpZ25LZXlbXCJvbl9kZWxldGVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VcGRhdGU6IGZvcmVpZ25LZXlbXCJvbl91cGRhdGVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICAgICAgbGV0IHVuaXF1ZVJlZ2V4UmVzdWx0XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pcXVlTWFwcGluZ3M6IHsgbmFtZTogc3RyaW5nOyBjb2x1bW5zOiBzdHJpbmdbXSB9W10gPSBbXVxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZVJlZ2V4ID0gL0NPTlNUUkFJTlQgXCIoW15cIl0qKVwiIFVOSVFVRSA/XFwoKC4qPylcXCkvZ1xuICAgICAgICAgICAgICAgIHdoaWxlICgodW5pcXVlUmVnZXhSZXN1bHQgPSB1bmlxdWVSZWdleC5leGVjKHNxbCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZU1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdW5pcXVlUmVnZXhSZXN1bHRbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiB1bmlxdWVSZWdleFJlc3VsdFsyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMSwgdW5pcXVlUmVnZXhSZXN1bHRbMl0ubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoYFwiLCBcImApLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVVbmlxdWVQcm9taXNlcyA9IGRiSW5kaWNlc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkYkluZGV4KSA9PiBkYkluZGV4W1wib3JpZ2luXCJdID09PSBcInVcIilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAubWFwKGFzeW5jIChkYkluZGV4TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGJJbmRleCA9IGRiSW5kaWNlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYkluZGV4KSA9PiBkYkluZGV4W1wibmFtZVwiXSA9PT0gZGJJbmRleE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleEluZm9zOiBPYmplY3RMaXRlcmFsW10gPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBQUkFHTUEgaW5kZXhfaW5mbyhcIiR7ZGJJbmRleCFbXCJuYW1lXCJdfVwiKWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleENvbHVtbnMgPSBpbmRleEluZm9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleEluZm8xLCBpbmRleEluZm8yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXhJbmZvMVtcInNlcW5vXCJdKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpbmRleEluZm8yW1wic2Vxbm9cIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChpbmRleEluZm8pID0+IGluZGV4SW5mb1tcIm5hbWVcIl0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhDb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRhYmxlLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWluZGV4Q29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4Q29sdW1uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q29sdW1uID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbikgY29sdW1uLmlzVW5pcXVlID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTWFwcGluZyA9IHVuaXF1ZU1hcHBpbmdzLmZpbmQoKG1hcHBpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZyEuY29sdW1ucy5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbikgPT4gaW5kZXhDb2x1bW5zLmluZGV4T2YoY29sdW1uKSAhPT0gLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZVVuaXF1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZm91bmRNYXBwaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm91bmRNYXBwaW5nLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kudW5pcXVlQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczogaW5kZXhDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB0YWJsZS51bmlxdWVzID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICB0YWJsZVVuaXF1ZVByb21pc2VzLFxuICAgICAgICAgICAgICAgICkpIGFzIFRhYmxlVW5pcXVlW11cblxuXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4cCA9XG4gICAgICAgICAgICAgICAgICAgIC9DT05TVFJBSU5UIFwiKFteXCJdKilcIiBDSEVDSyA/KFxcKC4qP1xcKSkoWyxdfFspXSQpL2dcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ2V4cC5leGVjKHNxbCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmNoZWNrcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRhYmxlQ2hlY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlc3VsdFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiByZXN1bHRbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kaWNlc1Byb21pc2VzID0gZGJJbmRpY2VzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGRiSW5kZXgpID0+IGRiSW5kZXhbXCJvcmlnaW5cIl0gPT09IFwiY1wiKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChkYkluZGV4KSA9PiBkYkluZGV4W1wibmFtZVwiXSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICApIC8vIHVucWl1ZVxuICAgICAgICAgICAgICAgICAgICAubWFwKGFzeW5jIChkYkluZGV4TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhEZWYgPSBkYkluZGljZXNEZWYuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJJbmRleERlZikgPT4gZGJJbmRleERlZltcIm5hbWVcIl0gPT09IGRiSW5kZXhOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gL1dIRVJFICguKikvLmV4ZWMoaW5kZXhEZWYhW1wic3FsXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGJJbmRleCA9IGRiSW5kaWNlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYkluZGV4KSA9PiBkYkluZGV4W1wibmFtZVwiXSA9PT0gZGJJbmRleE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleEluZm9zOiBPYmplY3RMaXRlcmFsW10gPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBQUkFHTUEgaW5kZXhfaW5mbyhcIiR7ZGJJbmRleCFbXCJuYW1lXCJdfVwiKWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleENvbHVtbnMgPSBpbmRleEluZm9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleEluZm8xLCBpbmRleEluZm8yKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXhJbmZvMVtcInNlcW5vXCJdKSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChpbmRleEluZm8yW1wic2Vxbm9cIl0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChpbmRleEluZm8pID0+IGluZGV4SW5mb1tcIm5hbWVcIl0pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYkluZGV4UGF0aCA9IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiVGFibGVbXCJkYXRhYmFzZVwiXSA/IGAke2RiVGFibGVbXCJkYXRhYmFzZVwiXX0uYCA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0ke2RiSW5kZXghW1wibmFtZVwiXX1gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVW5pcXVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkluZGV4IVtcInVuaXF1ZVwiXSA9PT0gXCIxXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkluZGV4IVtcInVuaXF1ZVwiXSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUluZGV4KDxUYWJsZUluZGV4T3B0aW9ucz57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGRiSW5kZXhQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzOiBpbmRleENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmlxdWU6IGlzVW5pcXVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlOiBjb25kaXRpb24gPyBjb25kaXRpb25bMV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBhd2FpdCBQcm9taXNlLmFsbChpbmRpY2VzUHJvbWlzZXMpXG4gICAgICAgICAgICAgICAgdGFibGUuaW5kaWNlcyA9IGluZGljZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoaW5kZXgpID0+ICEhaW5kZXgsXG4gICAgICAgICAgICAgICAgKSBhcyBUYWJsZUluZGV4W11cblxuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZVxuICAgICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgY3JlYXRlIHRhYmxlIHNxbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGFibGVTcWwoXG4gICAgICAgIHRhYmxlOiBUYWJsZSxcbiAgICAgICAgY3JlYXRlRm9yZWlnbktleXM/OiBib29sZWFuLFxuICAgICAgICB0ZW1wb3JhcnlUYWJsZT86IGJvb2xlYW4sXG4gICAgKTogUXVlcnkge1xuICAgICAgICBjb25zdCBwcmltYXJ5Q29sdW1ucyA9IHRhYmxlLmNvbHVtbnMuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmlzUHJpbWFyeSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBoYXNBdXRvSW5jcmVtZW50ID0gcHJpbWFyeUNvbHVtbnMuZmluZChcbiAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmlzR2VuZXJhdGVkICYmIGNvbHVtbi5nZW5lcmF0aW9uU3RyYXRlZ3kgPT09IFwiaW5jcmVtZW50XCIsXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc2tpcFByaW1hcnkgPSBwcmltYXJ5Q29sdW1ucy5sZW5ndGggPiAxXG4gICAgICAgIGlmIChza2lwUHJpbWFyeSAmJiBoYXNBdXRvSW5jcmVtZW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgU3FsaXRlIGRvZXMgbm90IHN1cHBvcnQgQVVUT0lOQ1JFTUVOVCBvbiBjb21wb3NpdGUgcHJpbWFyeSBrZXlgLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb25zID0gdGFibGUuY29sdW1uc1xuICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB0aGlzLmJ1aWxkQ3JlYXRlQ29sdW1uU3FsKGNvbHVtbiwgc2tpcFByaW1hcnkpKVxuICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICBjb25zdCBbZGF0YWJhc2VdID0gdGhpcy5zcGxpdFRhYmxlUGF0aCh0YWJsZS5uYW1lKVxuICAgICAgICBsZXQgc3FsID0gYENSRUFURSBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgIHRhYmxlLm5hbWUsXG4gICAgICAgICl9ICgke2NvbHVtbkRlZmluaXRpb25zfWBcblxuICAgICAgICBsZXQgW2RhdGFiYXNlTmV3LCB0YWJsZU5hbWVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aCh0YWJsZS5uYW1lKVxuICAgICAgICBjb25zdCBuZXdUYWJsZU5hbWUgPSB0ZW1wb3JhcnlUYWJsZVxuICAgICAgICAgICAgPyBgJHtkYXRhYmFzZU5ldyA/IGAke2RhdGFiYXNlTmV3fS5gIDogXCJcIn0ke3RhYmxlTmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgL150ZW1wb3JhcnlfLyxcbiAgICAgICAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgOiB0YWJsZS5uYW1lXG5cblxuICAgICAgICB0YWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pc1VuaXF1ZSlcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1VuaXF1ZUV4aXN0ID0gdGFibGUudW5pcXVlcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAodW5pcXVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzWzBdID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuaXF1ZUV4aXN0KVxuICAgICAgICAgICAgICAgICAgICB0YWJsZS51bmlxdWVzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGFibGVVbmlxdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW4ubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczogW2NvbHVtbi5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0YWJsZS51bmlxdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZXNTcWwgPSB0YWJsZS51bmlxdWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodW5pcXVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSB1bmlxdWUubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB1bmlxdWUubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kudW5pcXVlQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUuY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZXMgPSB1bmlxdWUuY29sdW1uTmFtZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbk5hbWUpID0+IGBcIiR7Y29sdW1uTmFtZX1cImApXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgQ09OU1RSQUlOVCBcIiR7dW5pcXVlTmFtZX1cIiBVTklRVUUgKCR7Y29sdW1uTmFtZXN9KWBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcblxuICAgICAgICAgICAgc3FsICs9IGAsICR7dW5pcXVlc1NxbH1gXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFibGUuY2hlY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrc1NxbCA9IHRhYmxlLmNoZWNrc1xuICAgICAgICAgICAgICAgIC5tYXAoKGNoZWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrTmFtZSA9IGNoZWNrLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2submFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuY2hlY2tDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrLmV4cHJlc3Npb24hLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgQ09OU1RSQUlOVCBcIiR7Y2hlY2tOYW1lfVwiIENIRUNLICgke2NoZWNrLmV4cHJlc3Npb259KWBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcblxuICAgICAgICAgICAgc3FsICs9IGAsICR7Y2hlY2tzU3FsfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YWJsZS5mb3JlaWduS2V5cy5sZW5ndGggPiAwICYmIGNyZWF0ZUZvcmVpZ25LZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JlaWduS2V5c1NxbCA9IHRhYmxlLmZvcmVpZ25LZXlzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3JlZmVyZW5jZWREYXRhYmFzZV0gPSB0aGlzLnNwbGl0VGFibGVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmsucmVmZXJlbmNlZFRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlZERhdGFiYXNlICE9PSBkYXRhYmFzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoKGZrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIHJlZmVyZW5jZWRUYWJsZV0gPSB0aGlzLnNwbGl0VGFibGVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmsucmVmZXJlbmNlZFRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IGZrLmNvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiBgXCIke2NvbHVtbk5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZrLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBmay5uYW1lID0gdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmZvcmVpZ25LZXlOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmay5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChmayksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmsucmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VkQ29sdW1uTmFtZXMgPSBmay5yZWZlcmVuY2VkQ29sdW1uTmFtZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbk5hbWUpID0+IGBcIiR7Y29sdW1uTmFtZX1cImApXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBgQ09OU1RSQUlOVCBcIiR7ZmsubmFtZX1cIiBGT1JFSUdOIEtFWSAoJHtjb2x1bW5OYW1lc30pIFJFRkVSRU5DRVMgXCIke3JlZmVyZW5jZWRUYWJsZX1cIiAoJHtyZWZlcmVuY2VkQ29sdW1uTmFtZXN9KWBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZrLm9uRGVsZXRlKSBjb25zdHJhaW50ICs9IGAgT04gREVMRVRFICR7Zmsub25EZWxldGV9YFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmsub25VcGRhdGUpIGNvbnN0cmFpbnQgKz0gYCBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX1gXG4gICAgICAgICAgICAgICAgICAgIGlmIChmay5kZWZlcnJhYmxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludCArPSBgIERFRkVSUkFCTEUgJHtmay5kZWZlcnJhYmxlfWBcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RyYWludFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuXG4gICAgICAgICAgICBzcWwgKz0gYCwgJHtmb3JlaWduS2V5c1NxbH1gXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJpbWFyeUNvbHVtbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZXMgPSBwcmltYXJ5Q29sdW1uc1xuICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW4ubmFtZX1cImApXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgc3FsICs9IGAsIFBSSU1BUlkgS0VZICgke2NvbHVtbk5hbWVzfSlgXG4gICAgICAgIH1cblxuICAgICAgICBzcWwgKz0gYClgXG5cbiAgICAgICAgaWYgKHRhYmxlLndpdGhvdXRSb3dpZCkge1xuICAgICAgICAgICAgc3FsICs9IFwiIFdJVEhPVVQgUk9XSURcIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShzcWwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGRyb3AgdGFibGUgc3FsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkcm9wVGFibGVTcWwoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgaWZFeGlzdD86IGJvb2xlYW4sXG4gICAgKTogUXVlcnkge1xuICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWUubmFtZVxuICAgICAgICAgICAgOiB0YWJsZU9yTmFtZVxuICAgICAgICBjb25zdCBxdWVyeSA9IGlmRXhpc3RcbiAgICAgICAgICAgID8gYERST1AgVEFCTEUgSUYgRVhJU1RTICR7dGhpcy5lc2NhcGVQYXRoKHRhYmxlTmFtZSl9YFxuICAgICAgICAgICAgOiBgRFJPUCBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aCh0YWJsZU5hbWUpfWBcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShxdWVyeSlcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVmlld1NxbCh2aWV3OiBWaWV3KTogUXVlcnkge1xuICAgICAgICBpZiAodHlwZW9mIHZpZXcuZXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShgQ1JFQVRFIFZJRVcgXCIke3ZpZXcubmFtZX1cIiBBUyAke3ZpZXcuZXhwcmVzc2lvbn1gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICBgQ1JFQVRFIFZJRVcgXCIke3ZpZXcubmFtZX1cIiBBUyAke3ZpZXdcbiAgICAgICAgICAgICAgICAgICAgLmV4cHJlc3Npb24odGhpcy5jb25uZWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuZ2V0UXVlcnkoKX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluc2VydFZpZXdEZWZpbml0aW9uU3FsKHZpZXc6IFZpZXcpOiBRdWVyeSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPVxuICAgICAgICAgICAgdHlwZW9mIHZpZXcuZXhwcmVzc2lvbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gdmlldy5leHByZXNzaW9uLnRyaW0oKVxuICAgICAgICAgICAgICAgIDogdmlldy5leHByZXNzaW9uKHRoaXMuY29ubmVjdGlvbikuZ2V0UXVlcnkoKVxuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuVklFVyxcbiAgICAgICAgICAgIG5hbWU6IHZpZXcubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBleHByZXNzaW9uLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBkcm9wIHZpZXcgc3FsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkcm9wVmlld1NxbCh2aWV3T3JQYXRoOiBWaWV3IHwgc3RyaW5nKTogUXVlcnkge1xuICAgICAgICBjb25zdCB2aWV3TmFtZSA9IEluc3RhbmNlQ2hlY2tlci5pc1ZpZXcodmlld09yUGF0aClcbiAgICAgICAgICAgID8gdmlld09yUGF0aC5uYW1lXG4gICAgICAgICAgICA6IHZpZXdPclBhdGhcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShgRFJPUCBWSUVXIFwiJHt2aWV3TmFtZX1cImApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHJlbW92ZSB2aWV3IHNxbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVsZXRlVmlld0RlZmluaXRpb25TcWwodmlld09yUGF0aDogVmlldyB8IHN0cmluZyk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3Qgdmlld05hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNWaWV3KHZpZXdPclBhdGgpXG4gICAgICAgICAgICA/IHZpZXdPclBhdGgubmFtZVxuICAgICAgICAgICAgOiB2aWV3T3JQYXRoXG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5WSUVXLFxuICAgICAgICAgICAgbmFtZTogdmlld05hbWUsXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGNyZWF0ZSBpbmRleCBzcWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUluZGV4U3FsKHRhYmxlOiBUYWJsZSwgaW5kZXg6IFRhYmxlSW5kZXgpOiBRdWVyeSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBpbmRleC5jb2x1bW5OYW1lc1xuICAgICAgICAgICAgLm1hcCgoY29sdW1uTmFtZSkgPT4gYFwiJHtjb2x1bW5OYW1lfVwiYClcbiAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgY29uc3QgW2RhdGFiYXNlLCB0YWJsZU5hbWVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aCh0YWJsZS5uYW1lKVxuICAgICAgICByZXR1cm4gbmV3IFF1ZXJ5KFxuICAgICAgICAgICAgYENSRUFURSAke2luZGV4LmlzVW5pcXVlID8gXCJVTklRVUUgXCIgOiBcIlwifUlOREVYICR7XG4gICAgICAgICAgICAgICAgZGF0YWJhc2UgPyBgXCIke2RhdGFiYXNlfVwiLmAgOiBcIlwiXG4gICAgICAgICAgICB9JHt0aGlzLmVzY2FwZVBhdGgoaW5kZXgubmFtZSEpfSBPTiBcIiR7dGFibGVOYW1lfVwiICgke2NvbHVtbnN9KSAke1xuICAgICAgICAgICAgICAgIGluZGV4LndoZXJlID8gXCJXSEVSRSBcIiArIGluZGV4LndoZXJlIDogXCJcIlxuICAgICAgICAgICAgfWAsXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgZHJvcCBpbmRleCBzcWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRyb3BJbmRleFNxbChpbmRleE9yTmFtZTogVGFibGVJbmRleCB8IHN0cmluZyk6IFF1ZXJ5IHtcbiAgICAgICAgbGV0IGluZGV4TmFtZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlSW5kZXgoaW5kZXhPck5hbWUpXG4gICAgICAgICAgICA/IGluZGV4T3JOYW1lLm5hbWVcbiAgICAgICAgICAgIDogaW5kZXhPck5hbWVcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShgRFJPUCBJTkRFWCAke3RoaXMuZXNjYXBlUGF0aChpbmRleE5hbWUhKX1gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhIHF1ZXJ5IGZvciBjcmVhdGUgY29sdW1uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBidWlsZENyZWF0ZUNvbHVtblNxbChcbiAgICAgICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICAgICAgc2tpcFByaW1hcnk/OiBib29sZWFuLFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGxldCBjID0gJ1wiJyArIGNvbHVtbi5uYW1lICsgJ1wiJ1xuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzQ29sdW1uTWV0YWRhdGEoY29sdW1uKSkge1xuICAgICAgICAgICAgYyArPSBcIiBcIiArIHRoaXMuZHJpdmVyLm5vcm1hbGl6ZVR5cGUoY29sdW1uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYyArPSBcIiBcIiArIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIuY3JlYXRlRnVsbFR5cGUoY29sdW1uKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi5lbnVtKVxuICAgICAgICAgICAgYyArPVxuICAgICAgICAgICAgICAgICcgQ0hFQ0soIFwiJyArXG4gICAgICAgICAgICAgICAgY29sdW1uLm5hbWUgK1xuICAgICAgICAgICAgICAgICdcIiBJTiAoJyArXG4gICAgICAgICAgICAgICAgY29sdW1uLmVudW0ubWFwKCh2YWwpID0+IFwiJ1wiICsgdmFsICsgXCInXCIpLmpvaW4oXCIsXCIpICtcbiAgICAgICAgICAgICAgICBcIikgKVwiXG4gICAgICAgIGlmIChjb2x1bW4uaXNQcmltYXJ5ICYmICFza2lwUHJpbWFyeSkgYyArPSBcIiBQUklNQVJZIEtFWVwiXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbHVtbi5pc0dlbmVyYXRlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29sdW1uLmdlbmVyYXRpb25TdHJhdGVneSA9PT0gXCJpbmNyZW1lbnRcIlxuICAgICAgICApXG5cbiAgICAgICAgICAgIGMgKz0gXCIgQVVUT0lOQ1JFTUVOVFwiXG4gICAgICAgIGlmIChjb2x1bW4uY29sbGF0aW9uKSBjICs9IFwiIENPTExBVEUgXCIgKyBjb2x1bW4uY29sbGF0aW9uXG4gICAgICAgIGlmIChjb2x1bW4uaXNOdWxsYWJsZSAhPT0gdHJ1ZSkgYyArPSBcIiBOT1QgTlVMTFwiXG5cbiAgICAgICAgaWYgKGNvbHVtbi5hc0V4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGMgKz0gYCBBUyAoJHtjb2x1bW4uYXNFeHByZXNzaW9ufSkgJHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uZ2VuZXJhdGVkVHlwZSA/IGNvbHVtbi5nZW5lcmF0ZWRUeXBlIDogXCJWSVJUVUFMXCJcbiAgICAgICAgICAgIH1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmRlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4uZGVmYXVsdCAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICBjICs9IFwiIERFRkFVTFQgKFwiICsgY29sdW1uLmRlZmF1bHQgKyBcIilcIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVjcmVhdGVUYWJsZShcbiAgICAgICAgbmV3VGFibGU6IFRhYmxlLFxuICAgICAgICBvbGRUYWJsZTogVGFibGUsXG4gICAgICAgIG1pZ3JhdGVEYXRhID0gdHJ1ZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXBRdWVyaWVzOiBRdWVyeVtdID0gW11cbiAgICAgICAgY29uc3QgZG93blF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuXG5cbiAgICAgICAgb2xkVGFibGUuaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5kcm9wSW5kZXhTcWwoaW5kZXgpKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZUluZGV4U3FsKG9sZFRhYmxlLCBpbmRleCkpXG4gICAgICAgIH0pXG5cblxuICAgICAgICBsZXQgW2RhdGFiYXNlTmV3LCB0YWJsZU5hbWVOZXddID0gdGhpcy5zcGxpdFRhYmxlUGF0aChuZXdUYWJsZS5uYW1lKVxuICAgICAgICBsZXQgWywgdGFibGVOYW1lT2xkXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgob2xkVGFibGUubmFtZSlcbiAgICAgICAgbmV3VGFibGUubmFtZSA9IHRhYmxlTmFtZU5ldyA9IGAke1xuICAgICAgICAgICAgZGF0YWJhc2VOZXcgPyBgJHtkYXRhYmFzZU5ld30uYCA6IFwiXCJcbiAgICAgICAgfXRlbXBvcmFyeV8ke3RhYmxlTmFtZU5ld31gXG5cblxuICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlU3FsKG5ld1RhYmxlLCB0cnVlLCB0cnVlKSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmRyb3BUYWJsZVNxbChuZXdUYWJsZSkpXG5cblxuICAgICAgICBpZiAobWlncmF0ZURhdGEpIHtcbiAgICAgICAgICAgIGxldCBuZXdDb2x1bW5OYW1lcyA9IG5ld1RhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uZ2VuZXJhdGVkVHlwZSlcbiAgICAgICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1uLm5hbWV9XCJgKVxuXG4gICAgICAgICAgICBsZXQgb2xkQ29sdW1uTmFtZXMgPSBvbGRUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmdlbmVyYXRlZFR5cGUpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBgXCIke2NvbHVtbi5uYW1lfVwiYClcblxuICAgICAgICAgICAgaWYgKG9sZENvbHVtbk5hbWVzLmxlbmd0aCA8IG5ld0NvbHVtbk5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG5ld0NvbHVtbk5hbWVzID0gbmV3VGFibGUuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZENvbHVtbiA9IG9sZFRhYmxlLmNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5uYW1lID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRDb2x1bW4gJiYgb2xkQ29sdW1uLmdlbmVyYXRlZFR5cGUpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFjb2x1bW4uZ2VuZXJhdGVkVHlwZSAmJiBvbGRDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBgXCIke2NvbHVtbi5uYW1lfVwiYClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkQ29sdW1uTmFtZXMubGVuZ3RoID4gbmV3Q29sdW1uTmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb2xkQ29sdW1uTmFtZXMgPSBvbGRUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZS5jb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW4ubmFtZX1cImApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICAgICAgYElOU0VSVCBJTlRPICR7dGhpcy5lc2NhcGVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKX0oJHtuZXdDb2x1bW5OYW1lcy5qb2luKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICApfSkgU0VMRUNUICR7b2xkQ29sdW1uTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgKX0gRlJPTSAke3RoaXMuZXNjYXBlUGF0aChvbGRUYWJsZS5uYW1lKX1gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICAgICAgYElOU0VSVCBJTlRPICR7dGhpcy5lc2NhcGVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKX0oJHtvbGRDb2x1bW5OYW1lcy5qb2luKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIFwiLFxuICAgICAgICAgICAgICAgICAgICApfSkgU0VMRUNUICR7bmV3Q29sdW1uTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgKX0gRlJPTSAke3RoaXMuZXNjYXBlUGF0aChuZXdUYWJsZS5uYW1lKX1gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcFRhYmxlU3FsKG9sZFRhYmxlKSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlU3FsKG9sZFRhYmxlLCB0cnVlKSlcblxuXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFF1ZXJ5KFxuICAgICAgICAgICAgICAgIGBBTFRFUiBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICApfSBSRU5BTUUgVE8gJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lT2xkKX1gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFF1ZXJ5KFxuICAgICAgICAgICAgICAgIGBBTFRFUiBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICApfSBSRU5BTUUgVE8gJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lTmV3KX1gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKVxuXG4gICAgICAgIG5ld1RhYmxlLm5hbWUgPSBvbGRUYWJsZS5uYW1lXG5cblxuICAgICAgICBuZXdUYWJsZS5pbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG5cbiAgICAgICAgICAgIGlmICghaW5kZXgubmFtZSlcbiAgICAgICAgICAgICAgICBpbmRleC5uYW1lID0gdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmluZGV4TmFtZShcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICBpbmRleC53aGVyZSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZUluZGV4U3FsKG5ld1RhYmxlLCBpbmRleCkpXG4gICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KSlcbiAgICAgICAgfSlcblxuXG5cbiAgICAgICAgb2xkVGFibGUuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGFibGVDb2x1bW4gPSBuZXdUYWJsZS5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmFzRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgICAgICAgICAoIW5ld1RhYmxlQ29sdW1uIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoIW5ld1RhYmxlQ29sdW1uLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbmV3VGFibGVDb2x1bW4uYXNFeHByZXNzaW9uKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKGluc2VydFF1ZXJ5KVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIG5ld1RhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmFzRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhb2xkVGFibGUuY29sdW1ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5uYW1lKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRRdWVyeSA9IHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IG5ld1RhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBuZXdUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2goaW5zZXJ0UXVlcnkpXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICBuZXdUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmIGNvbHVtbi5hc0V4cHJlc3Npb24pXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkQ29sdW1uID0gb2xkVGFibGUuY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMubmFtZSA9PT0gY29sdW1uLm5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZ2VuZXJhdGVkVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuYXNFeHByZXNzaW9uICE9PSBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIGlmICghb2xkQ29sdW1uKSByZXR1cm5cblxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBvbGRUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBvbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSB0aGlzLmluc2VydFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBuZXdUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGRlbGV0ZVF1ZXJ5KVxuICAgICAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGluc2VydFF1ZXJ5KVxuXG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnRJbnNlcnRRdWVyeSA9IHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IG5ld1RhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG9sZENvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb2xkQ29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJ0RGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBvbGRUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChyZXZlcnRJbnNlcnRRdWVyeSlcbiAgICAgICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKHJldmVydERlbGV0ZVF1ZXJ5KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwUXVlcmllcywgZG93blF1ZXJpZXMpXG4gICAgICAgIHRoaXMucmVwbGFjZUNhY2hlZFRhYmxlKG9sZFRhYmxlLCBuZXdUYWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0YWJsZVBhdGggZS5nLiBcIm15REIubXlUYWJsZVwiLCBcIm15VGFibGVcIlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzcGxpdFRhYmxlUGF0aCh0YWJsZVBhdGg6IHN0cmluZyk6IFtzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZ10ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGFibGVQYXRoLmluZGV4T2YoXCIuXCIpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gdGFibGVQYXRoLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgICAgIDogW3VuZGVmaW5lZCwgdGFibGVQYXRoXVxuICAgICAgICApIGFzIFtzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmluZ11cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIGdpdmVuIHRhYmxlIG9yIHZpZXcgcGF0aC4gVG9sZXJhdGVzIGxlYWRpbmcvdHJhaWxpbmcgZG90c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBlc2NhcGVQYXRoKFxuICAgICAgICB0YXJnZXQ6IFRhYmxlIHwgVmlldyB8IHN0cmluZyxcbiAgICAgICAgZGlzYWJsZUVzY2FwZT86IGJvb2xlYW4sXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGFibGVOYW1lID1cbiAgICAgICAgICAgIEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhcmdldCkgfHwgSW5zdGFuY2VDaGVja2VyLmlzVmlldyh0YXJnZXQpXG4gICAgICAgICAgICAgICAgPyB0YXJnZXQubmFtZVxuICAgICAgICAgICAgICAgIDogdGFyZ2V0XG4gICAgICAgIHJldHVybiB0YWJsZU5hbWVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFwuK3xcXC4rJC9nLCBcIlwiKVxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLm1hcCgoaSkgPT4gKGRpc2FibGVFc2NhcGUgPyBpIDogYFwiJHtpfVwiYCkpXG4gICAgICAgICAgICAuam9pbihcIi5cIilcbiAgICB9XG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uLXR5cGVvcm0gbGliL3R5cGVvcm0vZHJpdmVyL3NxbGl0ZS1hYnN0cmFjdC9BYnN0cmFjdFNxbGl0ZVF1ZXJ5UnVubmVyLnRzIl19