sonamu 0.7.11 → 0.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/config.d.ts +10 -6
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +2 -1
- package/dist/api/sonamu.d.ts +4 -0
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +49 -5
- package/dist/bin/cli.js +118 -170
- package/dist/database/base-model.d.ts +10 -50
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +19 -84
- package/dist/database/base-model.types.d.ts +4 -4
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/base-model.types.js +1 -1
- package/dist/database/db.d.ts +1 -0
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +24 -13
- package/dist/database/puri-subset.test-d.js +1 -1
- package/dist/database/puri-subset.types.d.ts +1 -0
- package/dist/database/puri-subset.types.d.ts.map +1 -1
- package/dist/database/puri-subset.types.js +2 -2
- package/dist/database/puri.d.ts +82 -3
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +180 -14
- package/dist/database/puri.types.d.ts +33 -6
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/database/puri.types.test-d.js +1 -1
- package/dist/entity/entity-manager.d.ts +5 -4
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +8 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +33 -2
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +53 -22
- package/dist/naite/messaging-types.d.ts.map +1 -1
- package/dist/naite/messaging-types.js +1 -1
- package/dist/naite/naite.js +2 -2
- package/dist/stream/sse.d.ts +2 -6
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +9 -3
- package/dist/syncer/api-parser.d.ts.map +1 -1
- package/dist/syncer/api-parser.js +7 -2
- package/dist/syncer/file-patterns.d.ts +1 -1
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +6 -5
- package/dist/syncer/module-loader.d.ts +5 -0
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +17 -1
- package/dist/syncer/syncer.d.ts +5 -1
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +28 -19
- package/dist/tasks/decorator.d.ts +26 -0
- package/dist/tasks/decorator.d.ts.map +1 -0
- package/dist/tasks/decorator.js +28 -0
- package/dist/tasks/step-wrapper.d.ts +18 -0
- package/dist/tasks/step-wrapper.d.ts.map +1 -0
- package/dist/tasks/step-wrapper.js +38 -0
- package/dist/tasks/workflow-manager.d.ts +40 -0
- package/dist/tasks/workflow-manager.d.ts.map +1 -0
- package/dist/tasks/workflow-manager.js +193 -0
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +7 -3
- package/dist/types/types.d.ts +26 -10
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +15 -2
- package/dist/ui/ai-api.d.ts +1 -0
- package/dist/ui/ai-api.d.ts.map +1 -0
- package/dist/ui/ai-api.js +50 -0
- package/dist/ui/ai-client.d.ts +1 -0
- package/dist/ui/ai-client.d.ts.map +1 -0
- package/dist/ui/ai-client.js +438 -0
- package/dist/ui/api.d.ts +3 -0
- package/dist/ui/api.d.ts.map +1 -0
- package/dist/ui/api.js +680 -0
- package/dist/ui-web/assets/brand-icons-Cu_C0hZ4.svg +1008 -0
- package/dist/ui-web/assets/brand-icons-F3SPCeH1.woff +0 -0
- package/dist/ui-web/assets/brand-icons-XL9sxUpA.woff2 +0 -0
- package/dist/ui-web/assets/brand-icons-sqJ2Pg7a.eot +0 -0
- package/dist/ui-web/assets/brand-icons-ubhWoxly.ttf +0 -0
- package/dist/ui-web/assets/flags-DOLqOU7Y.png +0 -0
- package/dist/ui-web/assets/icons-BOCtAERH.woff +0 -0
- package/dist/ui-web/assets/icons-CHzK1VD9.eot +0 -0
- package/dist/ui-web/assets/icons-D29ZQHHw.ttf +0 -0
- package/dist/ui-web/assets/icons-Du6TOHnR.woff2 +0 -0
- package/dist/ui-web/assets/icons-RwhydX30.svg +1518 -0
- package/dist/ui-web/assets/index-CpaB9P6g.css +1 -0
- package/dist/ui-web/assets/index-J9MCfjCd.js +95 -0
- package/dist/ui-web/assets/outline-icons-BfdLr8tr.svg +366 -0
- package/dist/ui-web/assets/outline-icons-DD8jm0uy.ttf +0 -0
- package/dist/ui-web/assets/outline-icons-DInHoiqI.woff2 +0 -0
- package/dist/ui-web/assets/outline-icons-LX8adJ4n.eot +0 -0
- package/dist/ui-web/assets/outline-icons-aQ88nltS.woff +0 -0
- package/dist/ui-web/assets/provider-utils_false-BKJD46kk.js +1 -0
- package/dist/ui-web/assets/provider-utils_false-Bu5lmX18.js +1 -0
- package/dist/ui-web/index.html +13 -0
- package/dist/ui-web/vite.svg +1 -0
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +10 -2
- package/dist/utils/model.d.ts +9 -2
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +16 -1
- package/dist/utils/type-utils.d.ts.map +1 -1
- package/dist/utils/type-utils.js +3 -1
- package/dist/vector/embedding.d.ts +2 -5
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +9 -13
- package/dist/vector/types.d.ts.map +1 -1
- package/dist/vector/types.js +1 -1
- package/package.json +9 -5
- package/src/api/config.ts +15 -11
- package/src/api/sonamu.ts +60 -6
- package/src/bin/cli.ts +57 -119
- package/src/database/base-model.ts +21 -128
- package/src/database/base-model.types.ts +3 -4
- package/src/database/db.ts +28 -18
- package/src/database/puri-subset.test-d.ts +1 -0
- package/src/database/puri-subset.types.ts +2 -0
- package/src/database/puri.ts +238 -27
- package/src/database/puri.types.test-d.ts +1 -1
- package/src/database/puri.types.ts +49 -6
- package/src/entity/entity-manager.ts +9 -0
- package/src/index.ts +1 -1
- package/src/migration/code-generation.ts +40 -1
- package/src/migration/postgresql-schema-reader.ts +53 -22
- package/src/naite/messaging-types.ts +43 -44
- package/src/naite/naite.ts +1 -1
- package/src/shared/app.shared.ts.txt +13 -0
- package/src/shared/web.shared.ts.txt +13 -0
- package/src/stream/sse.ts +15 -3
- package/src/syncer/api-parser.ts +6 -1
- package/src/syncer/file-patterns.ts +11 -9
- package/src/syncer/module-loader.ts +35 -0
- package/src/syncer/syncer.ts +34 -21
- package/src/tasks/decorator.ts +71 -0
- package/src/tasks/step-wrapper.ts +84 -0
- package/src/tasks/workflow-manager.ts +330 -0
- package/src/template/implementations/generated.template.ts +19 -6
- package/src/types/types.ts +20 -4
- package/src/ui/ai-api.ts +60 -0
- package/src/ui/ai-client.ts +499 -0
- package/src/ui/api.ts +786 -0
- package/src/utils/formatter.ts +8 -1
- package/src/utils/model.ts +26 -2
- package/src/utils/type-utils.ts +2 -0
- package/src/vector/embedding.ts +10 -14
- package/src/vector/types.ts +1 -2
- package/dist/vector/vector-search.d.ts +0 -47
- package/dist/vector/vector-search.d.ts.map +0 -1
- package/dist/vector/vector-search.js +0 -176
- package/src/vector/vector-search.ts +0 -261
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
/** biome-ignore-all lint/suspicious/noExplicitAny: Puri의 타입은 개별 모델에서 확정되므로 BaseModel에서는 any를 허용함 */ import { group, isObject, omit, set } from "radashi";
|
|
2
2
|
import { Sonamu } from "../api/index.js";
|
|
3
|
-
import { EntityManager } from "../entity/entity-manager.js";
|
|
4
3
|
import { getJoinTables, getTableNamesFromWhere } from "../utils/sql-parser.js";
|
|
5
4
|
import { chunk } from "../utils/utils.js";
|
|
6
|
-
import { VectorSearch } from "../vector/vector-search.js";
|
|
7
5
|
import { DB } from "./db.js";
|
|
8
6
|
import { Puri } from "./puri.js";
|
|
9
7
|
import { PuriWrapper } from "./puri-wrapper.js";
|
|
@@ -36,83 +34,7 @@ import { UpsertBuilder } from "./upsert-builder.js";
|
|
|
36
34
|
const db = this.getDB(which);
|
|
37
35
|
return new PuriWrapper(db, new UpsertBuilder());
|
|
38
36
|
}
|
|
39
|
-
// VectorSearch 인스턴스 캐시
|
|
40
|
-
_vectorSearch = null;
|
|
41
|
-
/**
|
|
42
|
-
* 벡터 검색 인스턴스 반환
|
|
43
|
-
* - 기본 provider: voyage
|
|
44
|
-
* - 기본 dimensions: 1024 (DEFAULT_VECTOR_CONFIG 사용)
|
|
45
|
-
*/ getVector() {
|
|
46
|
-
if (this._vectorSearch) {
|
|
47
|
-
return this._vectorSearch;
|
|
48
|
-
}
|
|
49
|
-
const entity = EntityManager.get(this.modelName);
|
|
50
|
-
this._vectorSearch = new VectorSearch(this.getDB("w"), entity.table);
|
|
51
|
-
return this._vectorSearch;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* 벡터 검색 (코사인 유사도)
|
|
55
|
-
* @param query - 검색어
|
|
56
|
-
* @param options - 검색 옵션
|
|
57
|
-
*/ async vectorSearch(query, options = {}) {
|
|
58
|
-
const entity = EntityManager.get(this.modelName);
|
|
59
|
-
const vectorProp = entity.getVectorColumn();
|
|
60
|
-
if (!vectorProp) {
|
|
61
|
-
throw new Error(`${this.modelName} Entity에 vector 컬럼이 정의되지 않았습니다.`);
|
|
62
|
-
}
|
|
63
|
-
const vs = new VectorSearch(this.getDB("w"), entity.table);
|
|
64
|
-
return vs.search(query, options.provider ?? "voyage", {
|
|
65
|
-
...options,
|
|
66
|
-
embeddingColumn: options.embeddingColumn ?? vectorProp.name
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* 하이브리드 검색 (Vector + FTS)
|
|
71
|
-
* @param query - 검색어
|
|
72
|
-
* @param options - 검색 옵션
|
|
73
|
-
*/ async hybridSearch(query, options = {}) {
|
|
74
|
-
const entity = EntityManager.get(this.modelName);
|
|
75
|
-
const vectorProp = entity.getVectorColumn();
|
|
76
|
-
if (!vectorProp) {
|
|
77
|
-
throw new Error(`${this.modelName} Entity에 vector 컬럼이 정의되지 않았습니다.`);
|
|
78
|
-
}
|
|
79
|
-
const vs = new VectorSearch(this.getDB("w"), entity.table);
|
|
80
|
-
return vs.hybridSearch(query, options.provider ?? "voyage", {
|
|
81
|
-
...options,
|
|
82
|
-
embeddingColumn: options.embeddingColumn ?? vectorProp.name
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* 단일 레코드에 임베딩 저장
|
|
87
|
-
* @param id - 레코드 ID
|
|
88
|
-
* @param text - 임베딩할 텍스트
|
|
89
|
-
* @param options - provider, embeddingColumn 옵션
|
|
90
|
-
*/ async saveEmbedding(id, text, options = {}) {
|
|
91
|
-
const entity = EntityManager.get(this.modelName);
|
|
92
|
-
const vectorProp = entity.getVectorColumn(options.embeddingColumn);
|
|
93
|
-
if (!vectorProp) {
|
|
94
|
-
throw new Error(`${this.modelName} Entity에 vector 컬럼이 정의되지 않았습니다.`);
|
|
95
|
-
}
|
|
96
|
-
const { provider = "voyage" } = options;
|
|
97
|
-
const vs = this.getVector();
|
|
98
|
-
return vs.saveEmbedding(id, text, provider, vectorProp.name);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* 여러 레코드에 임베딩 일괄 저장
|
|
102
|
-
* @param items - { id, text } 배열
|
|
103
|
-
* @param options - provider, embeddingColumn, onProgress 옵션
|
|
104
|
-
*/ async saveEmbeddingsBatch(items, options = {}) {
|
|
105
|
-
const entity = EntityManager.get(this.modelName);
|
|
106
|
-
const vectorProp = entity.getVectorColumn(options.embeddingColumn);
|
|
107
|
-
if (!vectorProp) {
|
|
108
|
-
throw new Error(`${this.modelName} Entity에 vector 컬럼이 정의되지 않았습니다.`);
|
|
109
|
-
}
|
|
110
|
-
const { provider = "voyage", onProgress } = options;
|
|
111
|
-
const vs = this.getVector();
|
|
112
|
-
return vs.saveEmbeddingsBatch(items, provider, vectorProp.name, onProgress);
|
|
113
|
-
}
|
|
114
37
|
async destroy() {
|
|
115
|
-
this._vectorSearch = null;
|
|
116
38
|
return DB.destroy();
|
|
117
39
|
}
|
|
118
40
|
async getInsertedIds(wdb, rows, tableName, unqKeyFields, chunkSize = 500) {
|
|
@@ -173,17 +95,30 @@ import { UpsertBuilder } from "./upsert-builder.js";
|
|
|
173
95
|
throw new Error("loaderQueries is not defined");
|
|
174
96
|
}
|
|
175
97
|
const { num, page } = queryParams;
|
|
176
|
-
// COUNT 쿼리 실행
|
|
98
|
+
// COUNT 쿼리 실행 (queryMode: list일 때는 0 리턴)
|
|
177
99
|
const total = await this.executeCountQuery(qb, queryParams, debug, optimizeCountQuery);
|
|
100
|
+
if (queryParams?.queryMode === "count") {
|
|
101
|
+
return {
|
|
102
|
+
total
|
|
103
|
+
};
|
|
104
|
+
}
|
|
178
105
|
// LIST 쿼리 실행
|
|
179
106
|
const computedRows = await this.executeListQuery(subset, qb, queryParams, num, page, debug);
|
|
180
107
|
// Enhancer 적용
|
|
181
108
|
const enhancer = params.enhancers?.[subset];
|
|
182
109
|
const rows = await Promise.all(computedRows.map((row)=>enhancer?.(row) ?? row));
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
110
|
+
if (queryParams.queryMode === "list") {
|
|
111
|
+
// 리스트만 리턴
|
|
112
|
+
return {
|
|
113
|
+
rows
|
|
114
|
+
};
|
|
115
|
+
} else {
|
|
116
|
+
// 둘다 리턴
|
|
117
|
+
return {
|
|
118
|
+
rows,
|
|
119
|
+
total
|
|
120
|
+
};
|
|
121
|
+
}
|
|
187
122
|
}
|
|
188
123
|
/**
|
|
189
124
|
* COUNT 쿼리 실행 (내부 메서드)
|
|
@@ -313,4 +248,4 @@ import { UpsertBuilder } from "./upsert-builder.js";
|
|
|
313
248
|
}
|
|
314
249
|
export const BaseModel = new BaseModelClass();
|
|
315
250
|
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuXG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgZ3JvdXAsIGlzT2JqZWN0LCBvbWl0LCBzZXQgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEpvaW5UYWJsZXMsIGdldFRhYmxlTmFtZXNGcm9tV2hlcmUgfSBmcm9tIFwiLi4vdXRpbHMvc3FsLXBhcnNlclwiO1xuaW1wb3J0IHsgY2h1bmsgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRW1iZWRkaW5nSXRlbSxcbiAgRW1iZWRkaW5nUHJvdmlkZXIsXG4gIEh5YnJpZFNlYXJjaE9wdGlvbnMsXG4gIEh5YnJpZFNlYXJjaFJlc3VsdCxcbiAgUHJvZ3Jlc3NDYWxsYmFjayxcbiAgVmVjdG9yU2VhcmNoT3B0aW9ucyxcbiAgVmVjdG9yU2VhcmNoUmVzdWx0LFxufSBmcm9tIFwiLi4vdmVjdG9yL3R5cGVzXCI7XG5pbXBvcnQgeyBWZWN0b3JTZWFyY2ggfSBmcm9tIFwiLi4vdmVjdG9yL3ZlY3Rvci1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIHtcbiAgRW5oYW5jZXJNYXAsXG4gIEV4ZWN1dGVTdWJzZXRRdWVyeVJlc3VsdCxcbiAgUmVzb2x2ZVN1YnNldEludGVyc2VjdGlvbixcbiAgVW5pb25FeHRyYWN0ZWRUVGFibGVzLFxufSBmcm9tIFwiLi9iYXNlLW1vZGVsLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERCUHJlc2V0IH0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IEluZmVyQWxsU3Vic2V0cywgUHVyaUxvYWRlclF1ZXJpZXMsIFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgeyBQdXJpV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHVibGljIG1vZGVsTmFtZTogc3RyaW5nID0gXCJVbmtub3duXCI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHN1YnNldFF1ZXJpZXM/OiBUU3Vic2V0UXVlcmllcyxcbiAgICBwcm90ZWN0ZWQgbG9hZGVyUXVlcmllcz86IFRMb2FkZXJRdWVyaWVzLFxuICApIHt9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgcmV0dXJuIERCLmdldERCKHdoaWNoKTtcbiAgfVxuXG4gIGdldFB1cmkod2hpY2g6IERCUHJlc2V0KTogUHVyaVdyYXBwZXIge1xuICAgIC8vIO2KuOuenOyereyFmCDsu6jthY3siqTtirjsl5DshJwg7Yq4656c7J6t7IWYIO2ajeuTnVxuICAgIGNvbnN0IHRyeCA9IERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmdldFRyYW5zYWN0aW9uKHdoaWNoKTtcbiAgICBpZiAodHJ4KSB7XG4gICAgICByZXR1cm4gdHJ4O1xuICAgIH1cblxuICAgIC8vIO2KuOuenOyereyFmOydtCDsl4bsnLzrqbQg7IOI66Gc7Jq0IFB1cmlXcmFwcGVyIOuwmO2ZmFxuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQih3aGljaCk7XG4gICAgcmV0dXJuIG5ldyBQdXJpV3JhcHBlcihkYiwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gIH1cblxuICAvLyBWZWN0b3JTZWFyY2gg7J247Iqk7YS07IqkIOy6kOyLnFxuICBwcml2YXRlIF92ZWN0b3JTZWFyY2g6IFZlY3RvclNlYXJjaDxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIOuyoe2EsCDqsoDsg4kg7J247Iqk7YS07IqkIOuwmO2ZmFxuICAgKiAtIOq4sOuzuCBwcm92aWRlcjogdm95YWdlXG4gICAqIC0g6riw67O4IGRpbWVuc2lvbnM6IDEwMjQgKERFRkFVTFRfVkVDVE9SX0NPTkZJRyDsgqzsmqkpXG4gICAqL1xuICBnZXRWZWN0b3I8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOiBWZWN0b3JTZWFyY2g8VD4ge1xuICAgIGlmICh0aGlzLl92ZWN0b3JTZWFyY2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl92ZWN0b3JTZWFyY2ggYXMgVmVjdG9yU2VhcmNoPFQ+O1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIHRoaXMuX3ZlY3RvclNlYXJjaCA9IG5ldyBWZWN0b3JTZWFyY2g8VD4odGhpcy5nZXREQihcIndcIiksIGVudGl0eS50YWJsZSk7XG5cbiAgICByZXR1cm4gdGhpcy5fdmVjdG9yU2VhcmNoIGFzIFZlY3RvclNlYXJjaDxUPjtcbiAgfVxuXG4gIC8qKlxuICAgKiDrsqHthLAg6rKA7IOJICjsvZTsgqzsnbgg7Jyg7IKs64+EKVxuICAgKiBAcGFyYW0gcXVlcnkgLSDqsoDsg4nslrRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSDqsoDsg4kg7Ji17IWYXG4gICAqL1xuICBhc3luYyB2ZWN0b3JTZWFyY2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFZlY3RvclNlYXJjaE9wdGlvbnMgJiB7IHByb3ZpZGVyPzogRW1iZWRkaW5nUHJvdmlkZXIgfSA9IHt9LFxuICApOiBQcm9taXNlPFZlY3RvclNlYXJjaFJlc3VsdDxUPltdPiB7XG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQodGhpcy5tb2RlbE5hbWUpO1xuICAgIGNvbnN0IHZlY3RvclByb3AgPSBlbnRpdHkuZ2V0VmVjdG9yQ29sdW1uKCk7XG4gICAgaWYgKCF2ZWN0b3JQcm9wKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5tb2RlbE5hbWV9IEVudGl0eeyXkCB2ZWN0b3Ig7Lus65+87J20IOygleydmOuQmOyngCDslYrslZjsirXri4jri6QuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdnMgPSBuZXcgVmVjdG9yU2VhcmNoPFQ+KHRoaXMuZ2V0REIoXCJ3XCIpLCBlbnRpdHkudGFibGUpO1xuICAgIHJldHVybiB2cy5zZWFyY2gocXVlcnksIG9wdGlvbnMucHJvdmlkZXIgPz8gXCJ2b3lhZ2VcIiwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGVtYmVkZGluZ0NvbHVtbjogb3B0aW9ucy5lbWJlZGRpbmdDb2x1bW4gPz8gdmVjdG9yUHJvcC5uYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOydtOu4jOumrOuTnCDqsoDsg4kgKFZlY3RvciArIEZUUylcbiAgICogQHBhcmFtIHF1ZXJ5IC0g6rKA7IOJ7Ja0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0g6rKA7IOJIOyYteyFmFxuICAgKi9cbiAgYXN5bmMgaHlicmlkU2VhcmNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zOiBIeWJyaWRTZWFyY2hPcHRpb25zICYgeyBwcm92aWRlcj86IEVtYmVkZGluZ1Byb3ZpZGVyIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxIeWJyaWRTZWFyY2hSZXN1bHQ8VD5bXT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcbiAgICBjb25zdCB2ZWN0b3JQcm9wID0gZW50aXR5LmdldFZlY3RvckNvbHVtbigpO1xuICAgIGlmICghdmVjdG9yUHJvcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubW9kZWxOYW1lfSBFbnRpdHnsl5AgdmVjdG9yIOy7rOufvOydtCDsoJXsnZjrkJjsp4Ag7JWK7JWY7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHZzID0gbmV3IFZlY3RvclNlYXJjaDxUPih0aGlzLmdldERCKFwid1wiKSwgZW50aXR5LnRhYmxlKTtcbiAgICByZXR1cm4gdnMuaHlicmlkU2VhcmNoKHF1ZXJ5LCBvcHRpb25zLnByb3ZpZGVyID8/IFwidm95YWdlXCIsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBlbWJlZGRpbmdDb2x1bW46IG9wdGlvbnMuZW1iZWRkaW5nQ29sdW1uID8/IHZlY3RvclByb3AubmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDri6jsnbwg66CI7L2U65Oc7JeQIOyehOuyoOuUqSDsoIDsnqVcbiAgICogQHBhcmFtIGlkIC0g66CI7L2U65OcIElEXG4gICAqIEBwYXJhbSB0ZXh0IC0g7J6E67Kg65Sp7ZWgIO2FjeyKpO2KuFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHByb3ZpZGVyLCBlbWJlZGRpbmdDb2x1bW4g7Ji17IWYXG4gICAqL1xuICBhc3luYyBzYXZlRW1iZWRkaW5nKFxuICAgIGlkOiBudW1iZXIsXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgcHJvdmlkZXI/OiBFbWJlZGRpbmdQcm92aWRlcjsgZW1iZWRkaW5nQ29sdW1uPzogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQodGhpcy5tb2RlbE5hbWUpO1xuICAgIGNvbnN0IHZlY3RvclByb3AgPSBlbnRpdHkuZ2V0VmVjdG9yQ29sdW1uKG9wdGlvbnMuZW1iZWRkaW5nQ29sdW1uKTtcbiAgICBpZiAoIXZlY3RvclByb3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsTmFtZX0gRW50aXR57JeQIHZlY3RvciDsu6zrn7zsnbQg7KCV7J2Y65CY7KeAIOyViuyVmOyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3ZpZGVyID0gXCJ2b3lhZ2VcIiB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB2cyA9IHRoaXMuZ2V0VmVjdG9yKCk7XG4gICAgcmV0dXJuIHZzLnNhdmVFbWJlZGRpbmcoaWQsIHRleHQsIHByb3ZpZGVyLCB2ZWN0b3JQcm9wLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyXrOufrCDroIjsvZTrk5zsl5Ag7J6E67Kg65SpIOydvOq0hCDsoIDsnqVcbiAgICogQHBhcmFtIGl0ZW1zIC0geyBpZCwgdGV4dCB9IOuwsOyXtFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIHByb3ZpZGVyLCBlbWJlZGRpbmdDb2x1bW4sIG9uUHJvZ3Jlc3Mg7Ji17IWYXG4gICAqL1xuICBhc3luYyBzYXZlRW1iZWRkaW5nc0JhdGNoKFxuICAgIGl0ZW1zOiBFbWJlZGRpbmdJdGVtW10sXG4gICAgb3B0aW9uczoge1xuICAgICAgcHJvdmlkZXI/OiBFbWJlZGRpbmdQcm92aWRlcjtcbiAgICAgIGVtYmVkZGluZ0NvbHVtbj86IHN0cmluZztcbiAgICAgIG9uUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIH0gPSB7fSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQodGhpcy5tb2RlbE5hbWUpO1xuICAgIGNvbnN0IHZlY3RvclByb3AgPSBlbnRpdHkuZ2V0VmVjdG9yQ29sdW1uKG9wdGlvbnMuZW1iZWRkaW5nQ29sdW1uKTtcbiAgICBpZiAoIXZlY3RvclByb3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsTmFtZX0gRW50aXR57JeQIHZlY3RvciDsu6zrn7zsnbQg7KCV7J2Y65CY7KeAIOyViuyVmOyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb3ZpZGVyID0gXCJ2b3lhZ2VcIiwgb25Qcm9ncmVzcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB2cyA9IHRoaXMuZ2V0VmVjdG9yKCk7XG4gICAgcmV0dXJuIHZzLnNhdmVFbWJlZGRpbmdzQmF0Y2goaXRlbXMsIHByb3ZpZGVyLCB2ZWN0b3JQcm9wLm5hbWUsIG9uUHJvZ3Jlc3MpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICB0aGlzLl92ZWN0b3JTZWFyY2ggPSBudWxsO1xuICAgIHJldHVybiBEQi5kZXN0cm95KCk7XG4gIH1cblxuICBhc3luYyBnZXRJbnNlcnRlZElkcyhcbiAgICB3ZGI6IEtuZXgsXG4gICAgcm93czogVW5rbm93bkRCUmVjb3JkW10sXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgdW5xS2V5RmllbGRzOiBzdHJpbmdbXSxcbiAgICBjaHVua1NpemU6IG51bWJlciA9IDUwMCxcbiAgKSB7XG4gICAgaWYgKCF3ZGIpIHtcbiAgICAgIHdkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIH1cblxuICAgIGxldCB1bnFLZXlzOiBzdHJpbmdbXTtcbiAgICBsZXQgd2hlcmVJbkZpZWxkOiBzdHJpbmcgfCBLbmV4LlJhdztcbiAgICBsZXQgc2VsZWN0RmllbGQ6IHN0cmluZztcblxuICAgIGlmICh1bnFLZXlGaWVsZHMubGVuZ3RoID4gMSkge1xuICAgICAgd2hlcmVJbkZpZWxkID0gd2RiLnJhdyhgQ09OQ0FUX1dTKCdfJywgJyR7dW5xS2V5RmllbGRzLmpvaW4oXCIsXCIpfScpYCk7XG4gICAgICBzZWxlY3RGaWVsZCA9IGAke3doZXJlSW5GaWVsZH0gYXMgdG1wVWlkYDtcbiAgICAgIHVucUtleXMgPSByb3dzLm1hcCgocm93KSA9PiB1bnFLZXlGaWVsZHMubWFwKChmaWVsZCkgPT4gcm93W2ZpZWxkXSkuam9pbihcIl9cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGVyZUluRmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICBzZWxlY3RGaWVsZCA9IHVucUtleUZpZWxkc1swXTtcbiAgICAgIHVucUtleXMgPSByb3dzLm1hcCgocm93KSA9PiByb3dbdW5xS2V5RmllbGRzWzBdXSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGxldCByZXN1bHRJZHM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtcyBvZiBjaHVuayh1bnFLZXlzLCBjaHVua1NpemUpKSB7XG4gICAgICBjb25zdCBkYlJvd3MgPSBhd2FpdCB3ZGIodGFibGVOYW1lKVxuICAgICAgICAuc2VsZWN0KFwiaWRcIiwgd2RiLnJhdyhzZWxlY3RGaWVsZCkpXG4gICAgICAgIC53aGVyZUluKHdoZXJlSW5GaWVsZCBhcyBzdHJpbmcsIGl0ZW1zKTtcbiAgICAgIHJlc3VsdElkcyA9IHJlc3VsdElkcy5jb25jYXQoXG4gICAgICAgIGRiUm93cy5tYXAoKGRiUm93OiBVbmtub3duREJSZWNvcmQpID0+IHBhcnNlSW50KFN0cmluZyhkYlJvdy5pZCkpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiDtirnsoJUg7ISc67iM7IWL7JeQIOuMgO2VnCDsv7zrpqwg67mM642UIO2ajeuTnVxuICAgKlxuICAgKiBAcmV0dXJucyBxYiAtIOy/vOumrCDruYzrjZQgKOyhsOqxtCDstpTqsIDsmqkpXG4gICAqIEByZXR1cm5zIG9uU3Vic2V0IC0g7Yq57KCVIOyEnOu4jOyFiyDsoITsmqkg7YOA7J6F7J20IO2VhOyalO2VoCDrlYwg7IKs7JqpXG4gICAqL1xuICBnZXRTdWJzZXRRdWVyaWVzPFQgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFQpIHtcbiAgICBpZiAoIXRoaXMuc3Vic2V0UXVlcmllcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3Vic2V0UXVlcmllcyBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBwdXJpV3JhcHBlciA9IG5ldyBQdXJpV3JhcHBlcih0aGlzLmdldERCKFwiclwiKSwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gICAgY29uc3QgcWIgPSB0aGlzLnN1YnNldFF1ZXJpZXNbc3Vic2V0XT8uKHB1cmlXcmFwcGVyKTtcblxuICAgIC8vIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiDri6jsnbwg7YWM7J2067iUIOy7rOufvCDsoJHqt7wg67Cp7KeA7JqpIOuniOy7pFxuICAgIHR5cGUgUUJUYWJsZXMgPSBVbmlvbkV4dHJhY3RlZFRUYWJsZXM8VFN1YnNldEtleSwgVFN1YnNldFF1ZXJpZXM+ICYge1xuICAgICAgTm9uQWxsb3dlZEFzU2luZ2xlVGFibGU6IHsgX19mdWxsdGV4dF9fOiB0cnVlIH07XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBxYjogcWIgYXMgdW5rbm93biBhcyBQdXJpPERhdGFiYXNlU2NoZW1hRXh0ZW5kLCBRQlRhYmxlcywge30+LFxuICAgICAgb25TdWJzZXQ6ICgoX3N1YnNldDogVFN1YnNldEtleSB8IHJlYWRvbmx5IFRTdWJzZXRLZXlbXSkgPT4gcWIpIGFzIHtcbiAgICAgICAgLy8g64uo7J28IO2CpFxuICAgICAgICA8UyBleHRlbmRzIFRTdWJzZXRLZXk+KHN1YnNldDogUyk6IFJldHVyblR5cGU8VFN1YnNldFF1ZXJpZXNbU10+O1xuICAgICAgICAvLyDtgqQg67Cw7Je0IC0+IOq1kOynke2VqSDrsJjtmZhcbiAgICAgICAgPEFyciBleHRlbmRzIHJlYWRvbmx5IFRTdWJzZXRLZXlbXT4oXG4gICAgICAgICAgc3Vic2V0czogWy4uLkFycl0sXG4gICAgICAgICk6IFJlc29sdmVTdWJzZXRJbnRlcnNlY3Rpb248QXJyLCBUU3Vic2V0UXVlcmllcz47XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZXIg6rCd7LK0IOyDneyEsSDtl6ztjbxcbiAgICog7YOA7J6FIOqygOymnSDrsI8g7LaU66Gg7J2EIOuPhOyZgOykjFxuICAgKi9cbiAgY3JlYXRlRW5oYW5jZXJzPFQgZXh0ZW5kcyBUU3Vic2V0S2V5PihcbiAgICBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFQsIEluZmVyQWxsU3Vic2V0czxUU3Vic2V0UXVlcmllcywgVExvYWRlclF1ZXJpZXM+LCBUU3Vic2V0TWFwcGluZz4sXG4gICkge1xuICAgIHJldHVybiBlbmhhbmNlcnM7XG4gIH1cblxuICAvKipcbiAgICog7ISc67iM7IWLIOy/vOumrCDsi6TtlolcbiAgICpcbiAgICogMS4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDIuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiAzLiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA0LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gID4oXG4gICAgcGFyYW1zOiB7XG4gICAgICBzdWJzZXQ6IFQ7XG4gICAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PjtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBudW06IG51bWJlcjtcbiAgICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgICBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiO1xuICAgICAgfTtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgIG9wdGltaXplQ291bnRRdWVyeT86IGJvb2xlYW47XG4gICAgfSAmIEVuaGFuY2VyUGFyYW08VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+LFxuICApOiBQcm9taXNlPEV4ZWN1dGVTdWJzZXRRdWVyeVJlc3VsdDxUU3Vic2V0TWFwcGluZywgVD4+IHtcbiAgICBjb25zdCB7IHN1YnNldCwgcWIsIHBhcmFtczogcXVlcnlQYXJhbXMsIGRlYnVnID0gZmFsc2UsIG9wdGltaXplQ291bnRRdWVyeSA9IGZhbHNlIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMubG9hZGVyUXVlcmllcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibG9hZGVyUXVlcmllcyBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG51bSwgcGFnZSB9ID0gcXVlcnlQYXJhbXM7XG5cbiAgICAvLyBDT1VOVCDsv7zrpqwg7Iuk7ZaJXG4gICAgY29uc3QgdG90YWwgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDb3VudFF1ZXJ5KHFiLCBxdWVyeVBhcmFtcywgZGVidWcsIG9wdGltaXplQ291bnRRdWVyeSk7XG5cbiAgICAvLyBMSVNUIOy/vOumrCDsi6TtlolcbiAgICBjb25zdCBjb21wdXRlZFJvd3MgPSBhd2FpdCB0aGlzLmV4ZWN1dGVMaXN0UXVlcnkoc3Vic2V0LCBxYiwgcXVlcnlQYXJhbXMsIG51bSwgcGFnZSwgZGVidWcpO1xuXG4gICAgLy8gRW5oYW5jZXIg7KCB7JqpXG4gICAgY29uc3QgZW5oYW5jZXIgPSAocGFyYW1zIGFzIGFueSkuZW5oYW5jZXJzPy5bc3Vic2V0XTtcbiAgICBjb25zdCByb3dzID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29tcHV0ZWRSb3dzLm1hcCgocm93KSA9PiBlbmhhbmNlcj8uKHJvdykgPz8gcm93KSxcbiAgICApKSBhcyBUU3Vic2V0TWFwcGluZ1tUXVtdO1xuXG4gICAgcmV0dXJuIHsgcm93cywgdG90YWwgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsZWZ0Sm9pblRhYmxlcyA9IGdldEpvaW5UYWJsZXMocGFyc2VkUXVlcnksIFtcIkxFRlQgSk9JTlwiXSk7XG4gICAgICBjb25zdCB3aGVyZVRhYmxlcyA9IGdldFRhYmxlTmFtZXNGcm9tV2hlcmUocGFyc2VkUXVlcnkpO1xuXG4gICAgICBjb25zdCB0YWJsZXNUb1JlbW92ZSA9IGxlZnRKb2luVGFibGVzLmZpbHRlcigoaikgPT4gIXdoZXJlVGFibGVzLmluY2x1ZGVzKGopKTtcbiAgICAgIHRhYmxlc1RvUmVtb3ZlLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgIGNvdW50UHVyaS5jbGVhckpvaW4odGFibGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ09VTlQoKinroZwg7KCE7LK0IOugiOy9lOuTnCDsiJjrpbwg6rOE7IKwXG4gICAgLy8gVE9ETzogcWLsnZggRElTVElOQ1TqsIAg7J6I64qUIOqyveyasCDsspjrpqztlbTslbwg7ZWoXG4gICAgY29uc3QgY291bnRSZXN1bHQ6IHsgdG90YWw/OiBudW1iZXIgfSA9IGF3YWl0IGNvdW50UHVyaVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHsgdG90YWw6IFB1cmkucmF3TnVtYmVyKGBDT1VOVCgqKTo6aW50ZWdlcmApIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY291bnRQdXJpLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0Py50b3RhbCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExJU1Qg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RRdWVyeTxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgbnVtOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKHBhcmFtcy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ZWRRYiA9ICgoKSA9PiB7XG4gICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBxYi5saW1pdChudW0pLm9mZnNldChudW0gKiAocGFnZSAtIDEpKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGxldCB1bmxvYWRlZFJvd3MgPSAoYXdhaXQgbGltaXRlZFFiKSBhcyBhbnlbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgcWIuZGVidWcoKTtcbiAgICB9XG5cbiAgICAvLyDroZzrjZQg7LKY66asXG4gICAgY29uc3QgbG9hZGVycyA9ICh0aGlzLmxvYWRlclF1ZXJpZXMgYXMgYW55KVtzdWJzZXRdO1xuICAgIGlmIChsb2FkZXJzICYmIEFycmF5LmlzQXJyYXkobG9hZGVycykpIHtcbiAgICAgIHVubG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnModW5sb2FkZWRSb3dzLCBsb2FkZXJzLCBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKHJvd3M6IGFueVtdLCBsb2FkZXJzOiBhbnlbXSwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCByZXNvbHZlTG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IHsgYXMsIHJlZklkLCBxYjogcmVzb2x2ZUxvYWRlclFiRm4sIGxvYWRlcnM6IG5lc3RlZExvYWRlcnMgfSA9IHJlc29sdmVMb2FkZXI7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVMb2FkZXJRYiA9IHJlc29sdmVMb2FkZXJRYkZuKFxuICAgICAgICBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpLFxuICAgICAgICByb3dzLm1hcCgocm93KSA9PiByb3dbcmVmSWRdKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICByZXNvbHZlTG9hZGVyUWIuZGVidWcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxvYWRlZFJvd3MgPSAoYXdhaXQgcmVzb2x2ZUxvYWRlclFiKSBhcyBhbnlbXTtcblxuICAgICAgLy8g7KSR7LKpIGxvYWRlcnPqsIAg7J6I7Jy866m0IOyerOq3gCDsspjrpqxcbiAgICAgIGlmIChuZXN0ZWRMb2FkZXJzICYmIG5lc3RlZExvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyhsb2FkZWRSb3dzLCBuZXN0ZWRMb2FkZXJzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+IH1cbiAgOiB7IGVuaGFuY2VyczogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+IH07XG5cbnR5cGUgUmVxdWlyZWRFbmhhbmNlcktleXM8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55Pixcbj4gPSB7XG4gIFtLIGluIFRTdWJzZXRLZXldOiBUQ29tcHV0ZWRSZXN1bHRzW0tdIGV4dGVuZHMgVFN1YnNldE1hcHBpbmdbS10gPyBuZXZlciA6IEs7XG59W1RTdWJzZXRLZXldO1xuXG5leHBvcnQgY29uc3QgQmFzZU1vZGVsID0gbmV3IEJhc2VNb2RlbENsYXNzKCk7XG4iXSwibmFtZXMiOlsiZ3JvdXAiLCJpc09iamVjdCIsIm9taXQiLCJzZXQiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiZ2V0Sm9pblRhYmxlcyIsImdldFRhYmxlTmFtZXNGcm9tV2hlcmUiLCJjaHVuayIsIlZlY3RvclNlYXJjaCIsIkRCIiwiUHVyaSIsIlB1cmlXcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsIkJhc2VNb2RlbENsYXNzIiwibW9kZWxOYW1lIiwic3Vic2V0UXVlcmllcyIsImxvYWRlclF1ZXJpZXMiLCJnZXREQiIsIndoaWNoIiwiZ2V0UHVyaSIsInRyeCIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsImdldFRyYW5zYWN0aW9uIiwiZGIiLCJfdmVjdG9yU2VhcmNoIiwiZ2V0VmVjdG9yIiwiZW50aXR5IiwiZ2V0IiwidGFibGUiLCJ2ZWN0b3JTZWFyY2giLCJxdWVyeSIsIm9wdGlvbnMiLCJ2ZWN0b3JQcm9wIiwiZ2V0VmVjdG9yQ29sdW1uIiwiRXJyb3IiLCJ2cyIsInNlYXJjaCIsInByb3ZpZGVyIiwiZW1iZWRkaW5nQ29sdW1uIiwibmFtZSIsImh5YnJpZFNlYXJjaCIsInNhdmVFbWJlZGRpbmciLCJpZCIsInRleHQiLCJzYXZlRW1iZWRkaW5nc0JhdGNoIiwiaXRlbXMiLCJvblByb2dyZXNzIiwiZGVzdHJveSIsImdldEluc2VydGVkSWRzIiwid2RiIiwicm93cyIsInRhYmxlTmFtZSIsInVucUtleUZpZWxkcyIsImNodW5rU2l6ZSIsInVucUtleXMiLCJ3aGVyZUluRmllbGQiLCJzZWxlY3RGaWVsZCIsImxlbmd0aCIsInJhdyIsImpvaW4iLCJtYXAiLCJyb3ciLCJmaWVsZCIsInJlc3VsdElkcyIsImRiUm93cyIsInNlbGVjdCIsIndoZXJlSW4iLCJjb25jYXQiLCJkYlJvdyIsInBhcnNlSW50IiwiU3RyaW5nIiwiZ2V0U3Vic2V0UXVlcmllcyIsInN1YnNldCIsInB1cmlXcmFwcGVyIiwicWIiLCJvblN1YnNldCIsIl9zdWJzZXQiLCJjcmVhdGVFbmhhbmNlcnMiLCJlbmhhbmNlcnMiLCJleGVjdXRlU3Vic2V0UXVlcnkiLCJwYXJhbXMiLCJxdWVyeVBhcmFtcyIsImRlYnVnIiwib3B0aW1pemVDb3VudFF1ZXJ5IiwibnVtIiwicGFnZSIsInRvdGFsIiwiZXhlY3V0ZUNvdW50UXVlcnkiLCJjb21wdXRlZFJvd3MiLCJleGVjdXRlTGlzdFF1ZXJ5IiwiZW5oYW5jZXIiLCJQcm9taXNlIiwiYWxsIiwicXVlcnlNb2RlIiwiY291bnRQdXJpIiwiY2xvbmUiLCJjbGVhciIsImRlZmF1bHQiLCJTcWxQYXJzZXIiLCJwYXJzZXIiLCJQYXJzZXIiLCJwYXJzZWRRdWVyeSIsImFzdGlmeSIsInRvUXVlcnkiLCJkYXRhYmFzZSIsImNvbmZpZyIsImxlZnRKb2luVGFibGVzIiwid2hlcmVUYWJsZXMiLCJ0YWJsZXNUb1JlbW92ZSIsImZpbHRlciIsImoiLCJpbmNsdWRlcyIsImZvckVhY2giLCJjbGVhckpvaW4iLCJjb3VudFJlc3VsdCIsInJhd051bWJlciIsImZpcnN0IiwibGltaXRlZFFiIiwibGltaXQiLCJvZmZzZXQiLCJ1bmxvYWRlZFJvd3MiLCJsb2FkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwicHJvY2Vzc0xvYWRlcnMiLCJoeWRyYXRlIiwicmVzb2x2ZUxvYWRlciIsImFzIiwicmVmSWQiLCJyZXNvbHZlTG9hZGVyUWJGbiIsIm5lc3RlZExvYWRlcnMiLCJyZXNvbHZlTG9hZGVyUWIiLCJsb2FkZWRSb3dzIiwic3ViUm93R3JvdXBzIiwiciIsIm5lc3RlZEtleXMiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZ3JvdXBzIiwiZ3JvdXBCeSIsInNwbGl0IiwibnVsbEtleXMiLCJlbnRyaWVzIiwiZ3JvdXBLZXkiLCJmaWVsZHMiLCJpZEZpZWxkIiwiZXZlcnkiLCJoeWRyYXRlZCIsInJlZHVj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
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuXG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgZ3JvdXAsIGlzT2JqZWN0LCBvbWl0LCBzZXQgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVzdWx0IH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hRXh0ZW5kLCBTb25hbXVRdWVyeU1vZGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEpvaW5UYWJsZXMsIGdldFRhYmxlTmFtZXNGcm9tV2hlcmUgfSBmcm9tIFwiLi4vdXRpbHMvc3FsLXBhcnNlclwiO1xuaW1wb3J0IHsgY2h1bmsgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRW5oYW5jZXJNYXAsXG4gIFJlc29sdmVTdWJzZXRJbnRlcnNlY3Rpb24sXG4gIFVuaW9uRXh0cmFjdGVkVFRhYmxlcyxcbn0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBJbmZlckFsbFN1YnNldHMsIFB1cmlMb2FkZXJRdWVyaWVzLCBQdXJpU3Vic2V0Rm4gfSBmcm9tIFwiLi9wdXJpLXN1YnNldC50eXBlc1wiO1xuaW1wb3J0IHsgUHVyaVdyYXBwZXIgfSBmcm9tIFwiLi9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IFVwc2VydEJ1aWxkZXIgfSBmcm9tIFwiLi91cHNlcnQtYnVpbGRlclwiO1xuXG50eXBlIFVua25vd25EQlJlY29yZCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIOuqqOuToCBNb2RlbCDtgbTrnpjsiqTsnZgg6riw67O4IO2BtOuemOyKpFxuICpcbiAqIEB0ZW1wbGF0ZSBUU3Vic2V0S2V5IC0g7ISc67iM7IWLIO2CpCDsnKDri4jsmKggKOyYiDogXCJBXCIgfCBcIlBcIiB8IFwiU1NcIilcbiAqIEB0ZW1wbGF0ZSBUU3Vic2V0TWFwcGluZyAtIOyEnOu4jOyFi+uzhCDstZzsooUg6rKw6rO8IO2DgOyehSDrp6TtlZFcbiAqIEB0ZW1wbGF0ZSBUU3Vic2V0UXVlcmllcyAtIOyEnOu4jOyFiyDsv7zrpqwg7ZWo7IiYIOqwneyytFxuICogQHRlbXBsYXRlIFRMb2FkZXJRdWVyaWVzIC0g7ISc67iM7IWL67OEIOuhnOuNlCDsv7zrpqwg67Cw7Je0IOqwneyytFxuICovXG5leHBvcnQgY2xhc3MgQmFzZU1vZGVsQ2xhc3M8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gbmV2ZXIsXG4gIFRTdWJzZXRRdWVyaWVzIGV4dGVuZHMgUmVjb3JkPFRTdWJzZXRLZXksIFB1cmlTdWJzZXRGbj4gPSBuZXZlcixcbiAgVExvYWRlclF1ZXJpZXMgZXh0ZW5kcyBQdXJpTG9hZGVyUXVlcmllczxUU3Vic2V0S2V5PiA9IG5ldmVyLFxuPiB7XG4gIHB1YmxpYyBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93blwiO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzdWJzZXRRdWVyaWVzPzogVFN1YnNldFF1ZXJpZXMsXG4gICAgcHJvdGVjdGVkIGxvYWRlclF1ZXJpZXM/OiBUTG9hZGVyUXVlcmllcyxcbiAgKSB7fVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2h1bmsodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxULCBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPiwgVFN1YnNldE1hcHBpbmc+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIOy/vOumrCDsi6TtlokgKHBhZ2luYXRpb24g7KCB7JqpKVxuICAgKiAyLiDroZzrjZQg7Iuk7ZaJICgxOk4sIE46TSDqtIDqs4Qg642w7J207YSwIOuhnOuUqSlcbiAgICogMy4gSHlkcmF0ZSAoZmxhdCDihpIg7KSR7LKpIOqwneyytClcbiAgICogNC4gRW5oYW5jZXIg7KCB7JqpICh2aXJ0dWFsIO2VhOuTnCDqs4TsgrApXG4gICAqL1xuICBhc3luYyBleGVjdXRlU3Vic2V0UXVlcnk8XG4gICAgVCBleHRlbmRzIFRTdWJzZXRLZXksXG4gICAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIEluZmVyQWxsU3Vic2V0czxUU3Vic2V0UXVlcmllcywgVExvYWRlclF1ZXJpZXM+LFxuICAgIExQIGV4dGVuZHMge1xuICAgICAgbnVtPzogbnVtYmVyO1xuICAgICAgcGFnZT86IG51bWJlcjtcbiAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICB9LFxuICA+KFxuICAgIHBhcmFtczoge1xuICAgICAgc3Vic2V0OiBUO1xuICAgICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT47XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbnVtOiBudW1iZXI7XG4gICAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgfTtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgIG9wdGltaXplQ291bnRRdWVyeT86IGJvb2xlYW47XG4gICAgfSAmIEVuaGFuY2VyUGFyYW08VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbnVtLCBwYWdlIH0gPSBxdWVyeVBhcmFtcztcblxuICAgIC8vIENPVU5UIOy/vOumrCDsi6TtlokgKHF1ZXJ5TW9kZTogbGlzdOydvCDrlYzripQgMCDrpqzthLQpXG4gICAgY29uc3QgdG90YWwgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDb3VudFF1ZXJ5KHFiLCBxdWVyeVBhcmFtcywgZGVidWcsIG9wdGltaXplQ291bnRRdWVyeSk7XG5cbiAgICBpZiAocXVlcnlQYXJhbXM/LnF1ZXJ5TW9kZSA9PT0gXCJjb3VudFwiKSB7XG4gICAgICByZXR1cm4geyB0b3RhbCB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9XG5cbiAgICAvLyBMSVNUIOy/vOumrCDsi6TtlolcbiAgICBjb25zdCBjb21wdXRlZFJvd3MgPSBhd2FpdCB0aGlzLmV4ZWN1dGVMaXN0UXVlcnkoc3Vic2V0LCBxYiwgcXVlcnlQYXJhbXMsIG51bSwgcGFnZSwgZGVidWcpO1xuXG4gICAgLy8gRW5oYW5jZXIg7KCB7JqpXG4gICAgY29uc3QgZW5oYW5jZXIgPSAocGFyYW1zIGFzIGFueSkuZW5oYW5jZXJzPy5bc3Vic2V0XTtcbiAgICBjb25zdCByb3dzID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29tcHV0ZWRSb3dzLm1hcCgocm93KSA9PiBlbmhhbmNlcj8uKHJvdykgPz8gcm93KSxcbiAgICApKSBhcyBUU3Vic2V0TWFwcGluZ1tUXVtdO1xuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIC8vIOumrOyKpO2KuOunjCDrpqzthLRcbiAgICAgIHJldHVybiB7IHJvd3MgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOuRmOuLpCDrpqzthLRcbiAgICAgIHJldHVybiB7IHJvd3MsIHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsZWZ0Sm9pblRhYmxlcyA9IGdldEpvaW5UYWJsZXMocGFyc2VkUXVlcnksIFtcIkxFRlQgSk9JTlwiXSk7XG4gICAgICBjb25zdCB3aGVyZVRhYmxlcyA9IGdldFRhYmxlTmFtZXNGcm9tV2hlcmUocGFyc2VkUXVlcnkpO1xuXG4gICAgICBjb25zdCB0YWJsZXNUb1JlbW92ZSA9IGxlZnRKb2luVGFibGVzLmZpbHRlcigoaikgPT4gIXdoZXJlVGFibGVzLmluY2x1ZGVzKGopKTtcbiAgICAgIHRhYmxlc1RvUmVtb3ZlLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgIGNvdW50UHVyaS5jbGVhckpvaW4odGFibGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ09VTlQoKinroZwg7KCE7LK0IOugiOy9lOuTnCDsiJjrpbwg6rOE7IKwXG4gICAgLy8gVE9ETzogcWLsnZggRElTVElOQ1TqsIAg7J6I64qUIOqyveyasCDsspjrpqztlbTslbwg7ZWoXG4gICAgY29uc3QgY291bnRSZXN1bHQ6IHsgdG90YWw/OiBudW1iZXIgfSA9IGF3YWl0IGNvdW50UHVyaVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHsgdG90YWw6IFB1cmkucmF3TnVtYmVyKGBDT1VOVCgqKTo6aW50ZWdlcmApIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY291bnRQdXJpLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0Py50b3RhbCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExJU1Qg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RRdWVyeTxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgbnVtOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKHBhcmFtcy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ZWRRYiA9ICgoKSA9PiB7XG4gICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBxYi5saW1pdChudW0pLm9mZnNldChudW0gKiAocGFnZSAtIDEpKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGxldCB1bmxvYWRlZFJvd3MgPSAoYXdhaXQgbGltaXRlZFFiKSBhcyBhbnlbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgcWIuZGVidWcoKTtcbiAgICB9XG5cbiAgICAvLyDroZzrjZQg7LKY66asXG4gICAgY29uc3QgbG9hZGVycyA9ICh0aGlzLmxvYWRlclF1ZXJpZXMgYXMgYW55KVtzdWJzZXRdO1xuICAgIGlmIChsb2FkZXJzICYmIEFycmF5LmlzQXJyYXkobG9hZGVycykpIHtcbiAgICAgIHVubG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnModW5sb2FkZWRSb3dzLCBsb2FkZXJzLCBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKHJvd3M6IGFueVtdLCBsb2FkZXJzOiBhbnlbXSwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCByZXNvbHZlTG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IHsgYXMsIHJlZklkLCBxYjogcmVzb2x2ZUxvYWRlclFiRm4sIGxvYWRlcnM6IG5lc3RlZExvYWRlcnMgfSA9IHJlc29sdmVMb2FkZXI7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVMb2FkZXJRYiA9IHJlc29sdmVMb2FkZXJRYkZuKFxuICAgICAgICBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpLFxuICAgICAgICByb3dzLm1hcCgocm93KSA9PiByb3dbcmVmSWRdKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICByZXNvbHZlTG9hZGVyUWIuZGVidWcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxvYWRlZFJvd3MgPSAoYXdhaXQgcmVzb2x2ZUxvYWRlclFiKSBhcyBhbnlbXTtcblxuICAgICAgLy8g7KSR7LKpIGxvYWRlcnPqsIAg7J6I7Jy866m0IOyerOq3gCDsspjrpqxcbiAgICAgIGlmIChuZXN0ZWRMb2FkZXJzICYmIG5lc3RlZExvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyhsb2FkZWRSb3dzLCBuZXN0ZWRMb2FkZXJzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+IH1cbiAgOiB7IGVuaGFuY2VyczogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+IH07XG5cbnR5cGUgUmVxdWlyZWRFbmhhbmNlcktleXM8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55Pixcbj4gPSB7XG4gIFtLIGluIFRTdWJzZXRLZXldOiBUQ29tcHV0ZWRSZXN1bHRzW0tdIGV4dGVuZHMgVFN1YnNldE1hcHBpbmdbS10gPyBuZXZlciA6IEs7XG59W1RTdWJzZXRLZXldO1xuXG5leHBvcnQgY29uc3QgQmFzZU1vZGVsID0gbmV3IEJhc2VNb2RlbENsYXNzKCk7XG4iXSwibmFtZXMiOlsiZ3JvdXAiLCJpc09iamVjdCIsIm9taXQiLCJzZXQiLCJTb25hbXUiLCJnZXRKb2luVGFibGVzIiwiZ2V0VGFibGVOYW1lc0Zyb21XaGVyZSIsImNodW5rIiwiREIiLCJQdXJpIiwiUHVyaVdyYXBwZXIiLCJVcHNlcnRCdWlsZGVyIiwiQmFzZU1vZGVsQ2xhc3MiLCJtb2RlbE5hbWUiLCJzdWJzZXRRdWVyaWVzIiwibG9hZGVyUXVlcmllcyIsImdldERCIiwid2hpY2giLCJnZXRQdXJpIiwidHJ4IiwiZ2V0VHJhbnNhY3Rpb25Db250ZXh0IiwiZ2V0VHJhbnNhY3Rpb24iLCJkYiIsImRlc3Ryb3kiLCJnZXRJbnNlcnRlZElkcyIsIndkYiIsInJvd3MiLCJ0YWJsZU5hbWUiLCJ1bnFLZXlGaWVsZHMiLCJjaHVua1NpemUiLCJ1bnFLZXlzIiwid2hlcmVJbkZpZWxkIiwic2VsZWN0RmllbGQiLCJsZW5ndGgiLCJyYXciLCJqb2luIiwibWFwIiwicm93IiwiZmllbGQiLCJyZXN1bHRJZHMiLCJpdGVtcyIsImRiUm93cyIsInNlbGVjdCIsIndoZXJlSW4iLCJjb25jYXQiLCJkYlJvdyIsInBhcnNlSW50IiwiU3RyaW5nIiwiaWQiLCJnZXRTdWJzZXRRdWVyaWVzIiwic3Vic2V0IiwiRXJyb3IiLCJwdXJpV3JhcHBlciIsInFiIiwib25TdWJzZXQiLCJfc3Vic2V0IiwiY3JlYXRlRW5oYW5jZXJzIiwiZW5oYW5jZXJzIiwiZXhlY3V0ZVN1YnNldFF1ZXJ5IiwicGFyYW1zIiwicXVlcnlQYXJhbXMiLCJkZWJ1ZyIsIm9wdGltaXplQ291bnRRdWVyeSIsIm51bSIsInBhZ2UiLCJ0b3RhbCIsImV4ZWN1dGVDb3VudFF1ZXJ5IiwicXVlcnlNb2RlIiwiY29tcHV0ZWRSb3dzIiwiZXhlY3V0ZUxpc3RRdWVyeSIsImVuaGFuY2VyIiwiUHJvbWlzZSIsImFsbCIsImNvdW50UHVyaSIsImNsb25lIiwiY2xlYXIiLCJkZWZhdWx0IiwiU3FsUGFyc2VyIiwicGFyc2VyIiwiUGFyc2VyIiwicGFyc2VkUXVlcnkiLCJhc3RpZnkiLCJ0b1F1ZXJ5IiwiZGF0YWJhc2UiLCJjb25maWciLCJsZWZ0Sm9pblRhYmxlcyIsIndoZXJlVGFibGVzIiwidGFibGVzVG9SZW1vdmUiLCJmaWx0ZXIiLCJqIiwiaW5jbHVkZXMiLCJmb3JFYWNoIiwidGFibGUiLCJjbGVhckpvaW4iLCJjb3VudFJlc3VsdCIsInJhd051bWJlciIsImZpcnN0IiwibGltaXRlZFFiIiwibGltaXQiLCJvZmZzZXQiLCJ1bmxvYWRlZFJvd3MiLCJsb2FkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwicHJvY2Vzc0xvYWRlcnMiLCJoeWRyYXRlIiwicmVzb2x2ZUxvYWRlciIsImFzIiwicmVmSWQiLCJyZXNvbHZlTG9hZGVyUWJGbiIsIm5lc3RlZExvYWRlcnMiLCJyZXNvbHZlTG9hZGVyUWIiLCJsb2FkZWRSb3dzIiwic3ViUm93R3JvdXBzIiwiciIsIm5lc3RlZEtleXMiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZ3JvdXBzIiwiZ3JvdXBCeSIsInNwbGl0IiwibnVsbEtleXMiLCJlbnRyaWVzIiwiZ3JvdXBLZXkiLCJmaWVsZHMiLCJpZEZpZWxkIiwiZXZlcnkiLCJoeWRyYXRlZCIsInJlZHVjZSIsInBhcnRzIiwib2JqUGF0aCIsInNsaWNlIiwicGFydCIsIm51bGxLZXkiLCJCYXNlTW9kZWwiXSwibWFwcGluZ3MiOiJBQUFBLGtHQUFrRyxHQUdsRyxTQUFTQSxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxHQUFHLFFBQVEsVUFBVTtBQUVyRCxTQUFTQyxNQUFNLFFBQVEsa0JBQVM7QUFFaEMsU0FBU0MsYUFBYSxFQUFFQyxzQkFBc0IsUUFBUSx5QkFBc0I7QUFDNUUsU0FBU0MsS0FBSyxRQUFRLG9CQUFpQjtBQU92QyxTQUFTQyxFQUFFLFFBQVEsVUFBTztBQUMxQixTQUFTQyxJQUFJLFFBQVEsWUFBUztBQUU5QixTQUFTQyxXQUFXLFFB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
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* BaseModelClass에서 사용하는 타입 유틸리티들.
|
|
6
6
|
* Enhancer, SubsetQuery 교집합 등 Model 계층에서 필요한 타입 정의.
|
|
7
7
|
*/
|
|
8
|
+
import type { ListResult } from "..";
|
|
8
9
|
import type { DatabaseSchemaExtend } from "../types/types";
|
|
9
10
|
import type { Puri } from "./puri";
|
|
10
11
|
import type { PuriSubsetFn } from "./puri-subset.types";
|
|
@@ -86,9 +87,8 @@ export type ExecuteSubsetQueryParams<TSubsetKey extends string, TComputedResults
|
|
|
86
87
|
/**
|
|
87
88
|
* executeSubsetQuery 반환 타입
|
|
88
89
|
*/
|
|
89
|
-
export type ExecuteSubsetQueryResult<TSubsetMapping extends Record<string, any>, T extends string
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
};
|
|
90
|
+
export type ExecuteSubsetQueryResult<TSubsetMapping extends Record<string, any>, T extends string, LP extends {
|
|
91
|
+
queryMode?: "list" | "count" | "both";
|
|
92
|
+
}> = ListResult<LP, TSubsetMapping[T]>;
|
|
93
93
|
export {};
|
|
94
94
|
//# sourceMappingURL=base-model.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-model.types.d.ts","sourceRoot":"","sources":["../../src/database/base-model.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base-model.types.d.ts","sourceRoot":"","sources":["../../src/database/base-model.types.ts"],"names":[],"mappings":"AAAA,oGAAoG;AAEpG;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7F;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAC/B,UAAU,SAAS,MAAM,EACzB,cAAc,SAAS,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IACrD,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAM9D;;GAEG;AACH,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CACrF,oBAAoB,EACpB,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EACrC,GAAG,CACJ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,CACnC,IAAI,SAAS,SAAS,MAAM,EAAE,EAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,IACnD,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,MAAM,EAAE,GAAG,MAAM,IAAI,SAAS,MAAM,EAAE,CAAC,GACxE,IAAI,SAAS,EAAE,GACb,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GACzB,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GACtF,KAAK,CAAC;AAMV;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,SAAS,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,SAAS,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE/F;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,CAC9B,UAAU,SAAS,MAAM,EACzB,gBAAgB,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAChD,cAAc,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAC5C;KACD,CAAC,IAAI,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;CAC7E,CAAC,UAAU,CAAC,CAAC;AAEd;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,CACrB,UAAU,SAAS,MAAM,EACzB,gBAAgB,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAChD,cAAc,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAC5C;KAED,CAAC,IAAI,UAAU,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,UAAU,CACzF,gBAAgB,CAAC,CAAC,CAAC,EACnB,cAAc,CAAC,CAAC,CAAC,CAClB;CACF,GAAG;KAED,CAAC,IAAI,UAAU,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,UAAU,CACxF,gBAAgB,CAAC,CAAC,CAAC,EACnB,cAAc,CAAC,CAAC,CAAC,CAClB;CACF,CAAC;AAMF;;GAEG;AACH,MAAM,MAAM,4BAA4B,CAAC,UAAU,SAAS,MAAM,IAAI;IACpE,MAAM,EAAE,UAAU,CAAC;IACnB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxB,MAAM,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;KACvC,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,CAClC,UAAU,SAAS,MAAM,EACzB,gBAAgB,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAChD,cAAc,SAAS,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAC9C,CAAC,SAAS,UAAU,IAClB,4BAA4B,CAAC,CAAC,CAAC,GACjC,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACjF;IAAE,SAAS,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;CAAE,GACzE;IAAE,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;CAAE,CAAC,CAAC;AAEhF;;GAEG;AACH,MAAM,MAAM,wBAAwB,CAClC,cAAc,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1C,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;CAAE,IAClD,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* executeSubsetQuery 반환 타입
|
|
8
8
|
*/ export { };
|
|
9
9
|
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuXG4vKipcbiAqIEJhc2VNb2RlbCDtg4DsnoUg7Iuc7Iqk7YWcXG4gKlxuICogQmFzZU1vZGVsQ2xhc3Psl5DshJwg7IKs7Jqp7ZWY64qUIO2DgOyehSDsnKDti7jrpqzti7Drk6QuXG4gKiBFbmhhbmNlciwgU3Vic2V0UXVlcnkg6rWQ7KeR7ZWpIOuTsSBNb2RlbCDqs4TsuLXsl5DshJwg7ZWE7JqU7ZWcIO2DgOyehSDsoJXsnZguXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBMaXN0UmVzdWx0IH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hRXh0ZW5kIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFB1cmkg7YWM7J2067iUIOy2lOy2nCDsnKDti7jrpqzti7Bcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQdXJpIOyduOyKpO2EtOyKpOyXkOyEnCBUVGFibGVzIO2DgOyehSDstpTstpxcbiAqL1xuZXhwb3J0IHR5cGUgRXh0cmFjdFB1cmlUYWJsZXM8VD4gPSBUIGV4dGVuZHMgUHVyaTxhbnksIGluZmVyIFRUYWJsZXMsIGFueT4gPyBUVGFibGVzIDogbmV2ZXI7XG5cbi8qKlxuICogU3Vic2V0UXVlcmllc+yXkOyEnCDrqqjrk6AgVFRhYmxlc+ydmCDsnKDri4jsmKgg7LaU7LacXG4gKiBnZXRTdWJzZXRRdWVyaWVz7J2YIHFiIO2DgOyehSDsoJXsnZjsl5Ag7IKs7JqpXG4gKi9cbmV4cG9ydCB0eXBlIFVuaW9uRXh0cmFjdGVkVFRhYmxlczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSBFeHRyYWN0UHVyaVRhYmxlczxSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1RTdWJzZXRLZXldPj47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFN1YnNldCDqtZDsp5Htlakg6rOE7IKwIChvblN1YnNldCDrqZTshJzrk5zsmqkpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICog65GQIFB1cmnsnZgg7YWM7J2067iUIOq1kOynke2VqeydhCDqsIDsp4Qg7IOI66Gc7Jq0IFB1cmkg7IOd7ISxXG4gKi9cbnR5cGUgTWVyZ2VQdXJpVGFibGVzPEEsIEIsIFRBID0gRXh0cmFjdFB1cmlUYWJsZXM8QT4sIFRCID0gRXh0cmFjdFB1cmlUYWJsZXM8Qj4+ID0gUHVyaTxcbiAgRGF0YWJhc2VTY2hlbWFFeHRlbmQsXG4gIFBpY2s8VEEsIEV4dHJhY3Q8a2V5b2YgVEEsIGtleW9mIFRCPj4sXG4gIGFueVxuPjtcblxuLyoqXG4gKiDshJzruIzshYsg7YKkIOuwsOyXtOydhCDsiJztmoztlZjrqbAg7YWM7J2067iUIOq1kOynke2VqSBQdXJpIOqzhOyCsFxuICpcbiAqIG9uU3Vic2V0KFsnQScsICdQJ10p7JmAIOqwmeydtCDsl6zrn6wgc3Vic2V07J2EIOyngOygle2WiOydhCDrlYwsXG4gKiDqs7XthrXsnLzroZwg7IKs7JqpIOqwgOuKpe2VnCDthYzsnbTruJTrp4wg7Y+s7ZWo65CcIFB1cmkg7YOA7J6FIOuwmO2ZmFxuICovXG5leHBvcnQgdHlwZSBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPFxuICBLZXlzIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW10sXG4gIFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55KSA9PiBhbnk+LFxuPiA9IEtleXMgZXh0ZW5kcyBbaW5mZXIgSGVhZCBleHRlbmRzIHN0cmluZywgLi4uaW5mZXIgVGFpbCBleHRlbmRzIHN0cmluZ1tdXVxuICA/IFRhaWwgZXh0ZW5kcyBbXVxuICAgID8gUmV0dXJuVHlwZTxRdWVyaWVzW0hlYWRdPlxuICAgIDogTWVyZ2VQdXJpVGFibGVzPFJldHVyblR5cGU8UXVlcmllc1tIZWFkXT4sIFJlc29sdmVTdWJzZXRJbnRlcnNlY3Rpb248VGFpbCwgUXVlcmllcz4+XG4gIDogbmV2ZXI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVuaGFuY2VyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICog64uo7J28IEVuaGFuY2VyIO2VqOyImCDtg4DsnoVcbiAqIGNvbXB1dGVkIOqysOqzvOulvCDrsJvslYQg7LWc7KKFIG1hcHBpbmcg7YOA7J6F7Jy866GcIOuzgO2ZmFxuICovXG5leHBvcnQgdHlwZSBFbmhhbmNlckZuPFRDb21wdXRlZCwgVE1hcHBpbmc+ID0gKHJvdzogVENvbXB1dGVkKSA9PiBUTWFwcGluZyB8IFByb21pc2U8VE1hcHBpbmc+O1xuXG4vKipcbiAqIEVuaGFuY2Vy6rCAIO2VhOyImOyduCBTdWJzZXRLZXkg7LaU7LacXG4gKlxuICogQ29tcHV0ZWRSZXN1bHRzW0td6rCAIFN1YnNldE1hcHBpbmdbS13sl5Ag7ZWg64u5IOu2iOqwgOuKpe2VmOuptCDtlbTri7kgS+uKlCDtlYTsiJhcbiAqICjspoksIHZpcnR1YWwg7ZWE65OcIOuTsSDstpTqsIAg67OA7ZmY7J20IO2VhOyalO2VnCDqsr3smrApXG4gKi9cbmV4cG9ydCB0eXBlIFJlcXVpcmVkRW5oYW5jZXJLZXlzPFxuICBUU3Vic2V0S2V5IGV4dGVuZHMgc3RyaW5nLFxuICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgUmVjb3JkPFRTdWJzZXRLZXksIGFueT4sXG4gIFRTdWJzZXRNYXBwaW5nIGV4dGVuZHMgUmVjb3JkPFRTdWJzZXRLZXksIGFueT4sXG4+ID0ge1xuICBbSyBpbiBUU3Vic2V0S2V5XTogVENvbXB1dGVkUmVzdWx0c1tLXSBleHRlbmRzIFRTdWJzZXRNYXBwaW5nW0tdID8gbmV2ZXIgOiBLO1xufVtUU3Vic2V0S2V5XTtcblxuLyoqXG4gKiBFbmhhbmNlciDqsJ3ssrQg7YOA7J6FIOygleydmFxuICpcbiAqIC0gQ29tcHV0ZWRSZXN1bHRzW0td6rCAIFN1YnNldE1hcHBpbmdbS13sl5AgYXNzaWduYWJsZe2VmOuptCDihpIgZW5oYW5jZXIg7ISg7YOd7KCBXG4gKiAtIOq3uOugh+yngCDslYrsnLzrqbQg4oaSIGVuaGFuY2VyIO2VhOyImFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyB2aXJ0dWFsIO2VhOuTnCBlbXBsb3llZV9jb3VudOqwgCDsnojripQg6rK97JqwXG4gKiB0eXBlIENvbXB1dGVkID0geyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVxuICogdHlwZSBNYXBwaW5nID0geyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtcGxveWVlX2NvdW50OiBudW1iZXIgfVxuICogLy8g4oaSIEVuaGFuY2VyIO2VhOyImCAoZW1wbG95ZWVfY291bnQg6rOE7IKwIO2VhOyalClcbiAqL1xuZXhwb3J0IHR5cGUgRW5oYW5jZXJNYXA8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55Pixcbj4gPSB7XG4gIC8vIENvbXB1dGVk6rCAIE1hcHBpbmfsl5Ag7Zi47ZmY65CY66m0IOyEoO2DneyggVxuICBbSyBpbiBUU3Vic2V0S2V5IGFzIFRDb21wdXRlZFJlc3VsdHNbS10gZXh0ZW5kcyBUU3Vic2V0TWFwcGluZ1tLXSA/IEsgOiBuZXZlcl0/OiBFbmhhbmNlckZuPFxuICAgIFRDb21wdXRlZFJlc3VsdHNbS10sXG4gICAgVFN1YnNldE1hcHBpbmdbS11cbiAgPjtcbn0gJiB7XG4gIC8vIO2YuO2ZmOuQmOyngCDslYrsnLzrqbQg7ZWE7IiYXG4gIFtLIGluIFRTdWJzZXRLZXkgYXMgVENvbXB1dGVkUmVzdWx0c1tLXSBleHRlbmRzIFRTdWJzZXRNYXBwaW5nW0tdID8gbmV2ZXIgOiBLXTogRW5oYW5jZXJGbjxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzW0tdLFxuICAgIFRTdWJzZXRNYXBwaW5nW0tdXG4gID47XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBleGVjdXRlU3Vic2V0UXVlcnlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBleGVjdXRlU3Vic2V0UXVlcnkg6riw67O4IO2MjOudvOuvuO2EsFxuICovXG5leHBvcnQgdHlwZSBFeGVjdXRlU3Vic2V0UXVlcnlCYXNlUGFyYW1zPFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBzdWJzZXQ6IFRTdWJzZXRLZXk7XG4gIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICBwYXJhbXM6IHtcbiAgICBudW0/OiBudW1iZXI7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiO1xuICB9O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIG9wdGltaXplQ291bnRRdWVyeT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIGV4ZWN1dGVTdWJzZXRRdWVyeSDtjIzrnbzrr7jthLAgKEVuaGFuY2VyIO2PrO2VqClcbiAqXG4gKiBSZXF1aXJlZEVuaGFuY2VyS2V5c+qwgCDsl4bsnLzrqbQgZW5oYW5jZXJzIOyEoO2DneyggSwg7J6I7Jy866m0IO2VhOyImFxuICovXG5leHBvcnQgdHlwZSBFeGVjdXRlU3Vic2V0UXVlcnlQYXJhbXM8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVCBleHRlbmRzIFRTdWJzZXRLZXksXG4+ID0gRXhlY3V0ZVN1YnNldFF1ZXJ5QmFzZVBhcmFtczxUPiAmXG4gIChbUmVxdWlyZWRFbmhhbmNlcktleXM8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+XSBleHRlbmRzIFtuZXZlcl1cbiAgICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+IH1cbiAgICA6IHsgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz4gfSk7XG5cbi8qKlxuICogZXhlY3V0ZVN1YnNldFF1ZXJ5IOuwmO2ZmCDtg4DsnoVcbiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0ZVN1YnNldFF1ZXJ5UmVzdWx0PFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIFQgZXh0ZW5kcyBzdHJpbmcsXG4gIExQIGV4dGVuZHMgeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4+ID0gTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtHQUFrRyxHQUVsRzs7Ozs7Q0FLQyxHQTZJRDs7Q0FFQyxHQUNELFdBSXNDIn0=
|
package/dist/database/db.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare class DBClass {
|
|
|
18
18
|
runWithTransaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
19
19
|
getTransactionContext(): TransactionContext;
|
|
20
20
|
getDB(which: DBPreset): Knex;
|
|
21
|
+
getDBConfig(which: DBPreset): Knex.Config;
|
|
21
22
|
destroy(): Promise<void>;
|
|
22
23
|
generateDBConfig(config: SonamuConfig["database"]): SonamuDBConfig;
|
|
23
24
|
testTransaction: Knex.Transaction | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAa,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;CAC/B,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IAEZ,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAa,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;CAC/B,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IAEZ,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAgC5B,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IA2BnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWvB,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,cAAc;IAiElE,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAQ;IACjD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAKlD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
|
package/dist/database/db.js
CHANGED
|
@@ -35,22 +35,33 @@ export class DBClass {
|
|
|
35
35
|
}
|
|
36
36
|
const instanceName = which === "w" ? "wdb" : "rdb";
|
|
37
37
|
if (!this[instanceName]) {
|
|
38
|
-
|
|
39
|
-
switch(process.env.NODE_ENV ?? "development"){
|
|
40
|
-
case "development":
|
|
41
|
-
case "staging":
|
|
42
|
-
config = which === "w" ? dbConfig.development_master : dbConfig.development_slave ?? dbConfig.development_master;
|
|
43
|
-
break;
|
|
44
|
-
case "production":
|
|
45
|
-
config = which === "w" ? dbConfig.production_master : dbConfig.production_slave ?? dbConfig.production_master;
|
|
46
|
-
break;
|
|
47
|
-
default:
|
|
48
|
-
throw new Error(`현재 ENV ${process.env.NODE_ENV}에는 설정 가능한 DB설정이 없습니다.`);
|
|
49
|
-
}
|
|
38
|
+
const config = this.getDBConfig(which);
|
|
50
39
|
this[instanceName] = knex(config);
|
|
51
40
|
}
|
|
52
41
|
return this[instanceName];
|
|
53
42
|
}
|
|
43
|
+
getDBConfig(which) {
|
|
44
|
+
const dbConfig = Sonamu.dbConfig;
|
|
45
|
+
if (process.env.NODE_ENV === "test") {
|
|
46
|
+
return {
|
|
47
|
+
...dbConfig.test,
|
|
48
|
+
// 단일 풀
|
|
49
|
+
pool: {
|
|
50
|
+
min: 1,
|
|
51
|
+
max: 1
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
switch(process.env.NODE_ENV ?? "development"){
|
|
56
|
+
case "development":
|
|
57
|
+
case "staging":
|
|
58
|
+
return which === "w" ? dbConfig.development_master : dbConfig.development_slave ?? dbConfig.development_master;
|
|
59
|
+
case "production":
|
|
60
|
+
return which === "w" ? dbConfig.production_master : dbConfig.production_slave ?? dbConfig.production_master;
|
|
61
|
+
default:
|
|
62
|
+
throw new Error(`현재 ENV ${process.env.NODE_ENV}에는 설정 가능한 DB설정이 없습니다.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
54
65
|
async destroy() {
|
|
55
66
|
if (this.wdb !== undefined) {
|
|
56
67
|
await this.wdb.destroy();
|
|
@@ -126,4 +137,4 @@ export class DBClass {
|
|
|
126
137
|
}
|
|
127
138
|
export const DB = new DBClass();
|
|
128
139
|
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9kYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gXCJhc3luY19ob29rc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb25maWcsIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIERCUHJlc2V0ID0gXCJ3XCIgfCBcInJcIjtcblxuZXhwb3J0IHR5cGUgU29uYW11REJDb25maWcgPSB7XG4gIGRldmVsb3BtZW50X21hc3RlcjogS25leC5Db25maWc7XG4gIGRldmVsb3BtZW50X3NsYXZlOiBLbmV4LkNvbmZpZztcbiAgdGVzdDogS25leC5Db25maWc7XG4gIGZpeHR1cmVfcmVtb3RlOiBLbmV4LkNvbmZpZztcbiAgcHJvZHVjdGlvbl9tYXN0ZXI6IEtuZXguQ29uZmlnO1xuICBwcm9kdWN0aW9uX3NsYXZlOiBLbmV4LkNvbmZpZztcbn07XG5cbmV4cG9ydCBjbGFzcyBEQkNsYXNzIHtcbiAgcHJpdmF0ZSB3ZGI/OiBLbmV4O1xuICBwcml2YXRlIHJkYj86IEtuZXg7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvbjxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5ydW4obmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCkgPz8gbmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgY29uc3QgZGJDb25maWcgPSBTb25hbXUuZGJDb25maWc7XG5cbiAgICAvLyDthYzsiqTtirgg7Yq4656c7J6t7IWYIOqyqeumrFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0ga25leCh7XG4gICAgICAgICAgLi4uZGJDb25maWcudGVzdCxcbiAgICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgICAgcG9vbDoge1xuICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy53ZGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VOYW1lID0gd2hpY2ggPT09IFwid1wiID8gXCJ3ZGJcIiA6IFwicmRiXCI7XG5cbiAgICBpZiAoIXRoaXNbaW5zdGFuY2VOYW1lXSkge1xuICAgICAgbGV0IGNvbmZpZzogS25leC5Db25maWc7XG4gICAgICBzd2l0Y2ggKHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICBjYXNlIFwiZGV2ZWxvcG1lbnRcIjpcbiAgICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgICBjb25maWcgPVxuICAgICAgICAgICAgd2hpY2ggPT09IFwid1wiXG4gICAgICAgICAgICAgID8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyXG4gICAgICAgICAgICAgIDogKGRiQ29uZmlnLmRldmVsb3BtZW50X3NsYXZlID8/IGRiQ29uZmlnLmRldmVsb3BtZW50X21hc3Rlcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICAgICAgY29uZmlnID1cbiAgICAgICAgICAgIHdoaWNoID09PSBcIndcIlxuICAgICAgICAgICAgICA/IGRiQ29uZmlnLnByb2R1Y3Rpb25fbWFzdGVyXG4gICAgICAgICAgICAgIDogKGRiQ29uZmlnLnByb2R1Y3Rpb25fc2xhdmUgPz8gZGJDb25maWcucHJvZHVjdGlvbl9tYXN0ZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7ZiE7J6sIEVOViAke3Byb2Nlc3MuZW52Lk5PREVfRU5WfeyXkOuKlCDshKTsoJUg6rCA64ql7ZWcIERC7ISk7KCV7J20IOyXhuyKteuLiOuLpC5gKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbaW5zdGFuY2VOYW1lXSA9IGtuZXgoY29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tpbnN0YW5jZU5hbWVdO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVEQkNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZ1tcImRhdGFiYXNlXCJdKTogU29uYW11REJDb25maWcge1xuICAgIGNvbnN0IGRlZmF1bHRLbmV4Q29uZmlnOiBQYXJ0aWFsPERhdGFiYXNlQ29uZmlnPiA9IGFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgY2xpZW50OiBcInBnXCIsXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiA1LFxuICAgICAgICB9LFxuICAgICAgICBtaWdyYXRpb25zOiB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBcIi4vc3JjL21pZ3JhdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGRhdGFiYXNlOiBjb25maWcubmFtZSxcbiAgICAgICAgICAuLi5jb25maWcuZGVmYXVsdE9wdGlvbnM/LmNvbm5lY3Rpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29uZmlnLmRlZmF1bHRPcHRpb25zLFxuICAgICk7XG5cbiAgICAvLyDroZzsu6wg7ZmY6rK9IOyEpOyglVxuICAgIGNvbnN0IHRlc3Q6IERhdGFiYXNlQ29uZmlnID0gYXNzaWduKGRlZmF1bHRLbmV4Q29uZmlnLCB7XG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIGRhdGFiYXNlOiBgJHtjb25maWcubmFtZX1fdGVzdGAsXG4gICAgICAgIC4uLmNvbmZpZy5kZWZhdWx0T3B0aW9ucz8uY29ubmVjdGlvbixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyDqsJzrsJwg7ZmY6rK9IOyEpOyglVxuICAgIGNvbnN0IGRldk1hc3Rlck9wdGlvbnMgPSBjb25maWcuZW52aXJvbm1lbnRzPy5kZXZlbG9wbWVudDtcbiAgICBjb25zdCBkZXZTbGF2ZU9wdGlvbnMgPSBjb25maWcuZW52aXJvbm1lbnRzPy5kZXZlbG9wbWVudF9zbGF2ZTtcbiAgICBjb25zdCBkZXZlbG9wbWVudF9tYXN0ZXIgPSBhc3NpZ24oZGVmYXVsdEtuZXhDb25maWcsIGRldk1hc3Rlck9wdGlvbnMgPz8ge30pO1xuICAgIGNvbnN0IGRldmVsb3BtZW50X3NsYXZlID0gYXNzaWduKFxuICAgICAgYXNzaWduKGRlZmF1bHRLbmV4Q29uZmlnLCBkZXZNYXN0ZXJPcHRpb25zID8/IHt9KSxcbiAgICAgIGRldlNsYXZlT3B0aW9ucyA/PyB7fSxcbiAgICApO1xuICAgIC8vIE5PVEU6IGZpeHR1cmUgcmVtb3Rl64qUIGRlZmF1bHQgY29ubmVjdGlvbuydmCBEQuulvCBvdmVycmlkZe2VtOyEoCDslYjrkKguXG4gICAgY29uc3QgZml4dHVyZV9yZW1vdGUgPSBhc3NpZ24oXG4gICAgICBhc3NpZ24oYXNzaWduKGRlZmF1bHRLbmV4Q29uZmlnLCBkZXZNYXN0ZXJPcHRpb25zID8/IHt9KSwge1xuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgZGF0YWJhc2U6IGAke2NvbmZpZy5uYW1lfV9maXh0dXJlX3JlbW90ZWAsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnJlbW90ZV9maXh0dXJlID8/IHt9LFxuICAgICk7XG5cbiAgICAvLyDtlITroZzrjZXshZgg7ZmY6rK9IOyEpOyglVxuICAgIGNvbnN0IHByb2RNYXN0ZXJPcHRpb25zID0gY29uZmlnLmVudmlyb25tZW50cz8ucHJvZHVjdGlvbiA/PyB7fTtcbiAgICBjb25zdCBwcm9kU2xhdmVPcHRpb25zID0gY29uZmlnLmVudmlyb25tZW50cz8ucHJvZHVjdGlvbl9zbGF2ZSA/PyB7fTtcbiAgICBjb25zdCBwcm9kdWN0aW9uX21hc3RlciA9IGFzc2lnbihkZWZhdWx0S25leENvbmZpZywgcHJvZE1hc3Rlck9wdGlvbnMpO1xuICAgIGNvbnN0IHByb2R1Y3Rpb25fc2xhdmUgPSBhc3NpZ24oXG4gICAgICBhc3NpZ24oZGVmYXVsdEtuZXhDb25maWcsIHByb2RNYXN0ZXJPcHRpb25zKSxcbiAgICAgIHByb2RTbGF2ZU9wdGlvbnMgPz8ge30sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZXN0LFxuICAgICAgZml4dHVyZV9yZW1vdGUsXG4gICAgICBkZXZlbG9wbWVudF9tYXN0ZXIsXG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZSxcbiAgICAgIHByb2R1Y3Rpb25fbWFzdGVyLFxuICAgICAgcHJvZHVjdGlvbl9zbGF2ZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGVzdCDtmZjqsr3sl5DshJwg7Yq4656c7J6t7IWYIOyCrOyaqVxuICBwdWJsaWMgdGVzdFRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGFzeW5jIGNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPEtuZXguVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIHRoaXMudGVzdFRyYW5zYWN0aW9uID0gYXdhaXQgZGIudHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gIH1cbiAgYXN5bmMgY2xlYXJUZXN0VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50ZXN0VHJhbnNhY3Rpb24/LnJvbGxiYWNrKCk7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBudWxsO1xuICB9XG4gIGFzeW5jIGdldFRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8S25leD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgcmV0dXJuIGRiO1xuICB9XG59XG5leHBvcnQgY29uc3QgREIgPSBuZXcgREJDbGFzcygpO1xuIl0sIm5hbWVzIjpbIkFzeW5jTG9jYWxTdG9yYWdlIiwia25leCIsImFzc2lnbiIsIlNvbmFtdSIsIlRyYW5zYWN0aW9uQ29udGV4dCIsIkRCQ2xhc3MiLCJ3ZGIiLCJyZGIiLCJ0cmFuc2FjdGlvblN0b3JhZ2UiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJjYWxsYmFjayIsInJ1biIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsImdldFN0b3JlIiwiZ2V0REIiLCJ3aGljaCIsImRiQ29uZmlnIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidGVzdFRyYW5zYWN0aW9uIiwidGVzdCIsInBvb2wiLCJtaW4iLCJtYXgiLCJpbnN0YW5jZU5hbWUiLCJjb25maWciLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJkZXZlbG9wbWVudF9zbGF2ZSIsInByb2R1Y3Rpb25fbWFzdGVyIiwicHJvZHVjdGlvbl9zbGF2ZSIsIkVycm9yIiwiZGVzdHJveSIsInVuZGVmaW5lZCIsImdlbmVyYXRlREJDb25maWciLCJkZWZhdWx0S25leENvbmZpZyIsImNsaWVudCIsIm1pZ3JhdGlvbnMiLCJkaXJlY3RvcnkiLCJjb25uZWN0aW9uIiwiZGF0YWJhc2UiLCJuYW1lIiwiZGVmYXVsdE9wdGlvbnMiLCJkZXZNYXN0ZXJPcHRpb25zIiwiZW52aXJvbm1lbnRzIiwiZGV2ZWxvcG1lbnQiLCJkZXZTbGF2ZU9wdGlvbnMiLCJmaXh0dXJlX3JlbW90ZSIsInJlbW90ZV9maXh0dXJlIiwicHJvZE1hc3Rlck9wdGlvbnMiLCJwcm9kdWN0aW9uIiwicHJvZFNsYXZlT3B0aW9ucyIsImNyZWF0ZVRlc3RUcmFuc2FjdGlvbiIsImRiIiwidHJhbnNhY3Rpb24iLCJjbGVhclRlc3RUcmFuc2FjdGlvbiIsInJvbGxiYWNrIiwiZ2V0VGVzdENvbm5lY3Rpb24iLCJEQiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsaUJBQWlCLFFBQVEsY0FBYztBQUNoRCxPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLE1BQU0sUUFBUSxVQUFVO0FBRWpDLFNBQVNDLE1BQU0sUUFBUSxrQkFBUztBQUVoQyxTQUFTQyxrQkFBa0IsUUFBUSwyQkFBd0I7QUFhM0QsT0FBTyxNQUFNQztJQUNIQyxJQUFXO0lBQ1hDLElBQVc7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
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9kYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY0xvY2FsU3RvcmFnZSB9IGZyb20gXCJhc3luY19ob29rc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb25maWcsIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbmV4cG9ydCB0eXBlIERCUHJlc2V0ID0gXCJ3XCIgfCBcInJcIjtcblxuZXhwb3J0IHR5cGUgU29uYW11REJDb25maWcgPSB7XG4gIGRldmVsb3BtZW50X21hc3RlcjogS25leC5Db25maWc7XG4gIGRldmVsb3BtZW50X3NsYXZlOiBLbmV4LkNvbmZpZztcbiAgdGVzdDogS25leC5Db25maWc7XG4gIGZpeHR1cmVfcmVtb3RlOiBLbmV4LkNvbmZpZztcbiAgcHJvZHVjdGlvbl9tYXN0ZXI6IEtuZXguQ29uZmlnO1xuICBwcm9kdWN0aW9uX3NsYXZlOiBLbmV4LkNvbmZpZztcbn07XG5cbmV4cG9ydCBjbGFzcyBEQkNsYXNzIHtcbiAgcHJpdmF0ZSB3ZGI/OiBLbmV4O1xuICBwcml2YXRlIHJkYj86IEtuZXg7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvbjxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5ydW4obmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCkgPz8gbmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgY29uc3QgZGJDb25maWcgPSBTb25hbXUuZGJDb25maWc7XG5cbiAgICAvLyDthYzsiqTtirgg7Yq4656c7J6t7IWYIOqyqeumrFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0ga25leCh7XG4gICAgICAgICAgLi4uZGJDb25maWcudGVzdCxcbiAgICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgICAgcG9vbDoge1xuICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy53ZGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VOYW1lID0gd2hpY2ggPT09IFwid1wiID8gXCJ3ZGJcIiA6IFwicmRiXCI7XG5cbiAgICBpZiAoIXRoaXNbaW5zdGFuY2VOYW1lXSkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXREQkNvbmZpZyh3aGljaCk7XG4gICAgICB0aGlzW2luc3RhbmNlTmFtZV0gPSBrbmV4KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbaW5zdGFuY2VOYW1lXTtcbiAgfVxuXG4gIGdldERCQ29uZmlnKHdoaWNoOiBEQlByZXNldCk6IEtuZXguQ29uZmlnIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGNhc2UgXCJkZXZlbG9wbWVudFwiOlxuICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgcmV0dXJuIHdoaWNoID09PSBcIndcIlxuICAgICAgICAgID8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcuZGV2ZWxvcG1lbnRfc2xhdmUgPz8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyKTtcbiAgICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICAgIHJldHVybiB3aGljaCA9PT0gXCJ3XCJcbiAgICAgICAgICA/IGRiQ29uZmlnLnByb2R1Y3Rpb25fbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcucHJvZHVjdGlvbl9zbGF2ZSA/PyBkYkNvbmZpZy5wcm9kdWN0aW9uX21hc3Rlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCBFTlYgJHtwcm9jZXNzLmVudi5OT0RFX0VOVn3sl5DripQg7ISk7KCVIOqwgOuKpe2VnCBEQuyEpOygleydtCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVEQkNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZ1tcImRhdGFiYXNlXCJdKTogU29uYW11REJDb25maWcge1xuICAgIGNvbnN0IGRlZmF1bHRLbmV4Q29uZmlnOiBQYXJ0aWFsPERhdGFiYXNlQ29uZmlnPiA9IGFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgY2xpZW50OiBcInBnXCIsXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiA1LFxuICAgICAgICB9LFxuICAgICAgICBtaWdyYXRpb25zOiB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBcIi4vc3JjL21pZ3JhdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGRhdGFiYXNlOiBjb25maWcubmFtZSxcbiAgICAgICAgICAuLi5jb25maWcuZGVmYXVsdE9wdGlvbnM/LmNvbm5lY3Rpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29uZmlnLmRlZmF1bHRPcHRpb25zLFxuICAgICk7XG5cbiAgICAvLyDroZzsu6wg7ZmY6rK9IOyEpOyglVxuICAgIGNvbnN0IHRlc3Q6IERhdGFiYXNlQ29uZmlnID0gYXNzaWduKGRlZmF1bHRLbmV4Q29uZmlnLCB7XG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIGRhdGFiYXNlOiBgJHtjb25maWcubmFtZX1fdGVzdGAsXG4gICAgICAgIC4uLmNvbmZpZy5kZWZhdWx0T3B0aW9ucz8uY29ubmVjdGlvbixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyDqsJzrsJwg7ZmY6rK9IOyEpOyglVxuICAgIGNvbnN0IGRldk1hc3Rlck9wdGlvbnMgPSBjb25maWcuZW52aXJvbm1lbnRzPy5kZXZlbG9wbWVudDtcbiAgICBjb25zdCBkZXZTbGF2ZU9wdGlvbnMgPSBjb25maWcuZW52aXJvbm1lbnRzPy5kZXZlbG9wbWVudF9zbGF2ZTtcbiAgICBjb25zdCBkZXZlbG9wbWVudF9tYXN0ZXIgPSBhc3NpZ24oZGVmYXVsdEtuZXhDb25maWcsIGRldk1hc3Rlck9wdGlvbnMgPz8ge30pO1xuICAgIGNvbnN0IGRldmVsb3BtZW50X3NsYXZlID0gYXNzaWduKFxuICAgICAgYXNzaWduKGRlZmF1bHRLbmV4Q29uZmlnLCBkZXZNYXN0ZXJPcHRpb25zID8/IHt9KSxcbiAgICAgIGRldlNsYXZlT3B0aW9ucyA/PyB7fSxcbiAgICApO1xuICAgIC8vIE5PVEU6IGZpeHR1cmUgcmVtb3Rl64qUIGRlZmF1bHQgY29ubmVjdGlvbuydmCBEQuulvCBvdmVycmlkZe2VtOyEoCDslYjrkKguXG4gICAgY29uc3QgZml4dHVyZV9yZW1vdGUgPSBhc3NpZ24oXG4gICAgICBhc3NpZ24oYXNzaWduKGRlZmF1bHRLbmV4Q29uZmlnLCBkZXZNYXN0ZXJPcHRpb25zID8/IHt9KSwge1xuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgZGF0YWJhc2U6IGAke2NvbmZpZy5uYW1lfV9maXh0dXJlX3JlbW90ZWAsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnJlbW90ZV9maXh0dXJlID8/IHt9LFxuICAgICk7XG5cbiAgICAvLyDtlITroZzrjZXshZgg7ZmY6rK9IOyEpOyglVxuICAgIGNvbnN0IHByb2RNYXN0ZXJPcHRpb25zID0gY29uZmlnLmVudmlyb25tZW50cz8ucHJvZHVjdGlvbiA/PyB7fTtcbiAgICBjb25zdCBwcm9kU2xhdmVPcHRpb25zID0gY29uZmlnLmVudmlyb25tZW50cz8ucHJvZHVjdGlvbl9zbGF2ZSA/PyB7fTtcbiAgICBjb25zdCBwcm9kdWN0aW9uX21hc3RlciA9IGFzc2lnbihkZWZhdWx0S25leENvbmZpZywgcHJvZE1hc3Rlck9wdGlvbnMpO1xuICAgIGNvbnN0IHByb2R1Y3Rpb25fc2xhdmUgPSBhc3NpZ24oXG4gICAgICBhc3NpZ24oZGVmYXVsdEtuZXhDb25maWcsIHByb2RNYXN0ZXJPcHRpb25zKSxcbiAgICAgIHByb2RTbGF2ZU9wdGlvbnMgPz8ge30sXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZXN0LFxuICAgICAgZml4dHVyZV9yZW1vdGUsXG4gICAgICBkZXZlbG9wbWVudF9tYXN0ZXIsXG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZSxcbiAgICAgIHByb2R1Y3Rpb25fbWFzdGVyLFxuICAgICAgcHJvZHVjdGlvbl9zbGF2ZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGVzdCDtmZjqsr3sl5DshJwg7Yq4656c7J6t7IWYIOyCrOyaqVxuICBwdWJsaWMgdGVzdFRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGFzeW5jIGNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPEtuZXguVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIHRoaXMudGVzdFRyYW5zYWN0aW9uID0gYXdhaXQgZGIudHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gIH1cbiAgYXN5bmMgY2xlYXJUZXN0VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50ZXN0VHJhbnNhY3Rpb24/LnJvbGxiYWNrKCk7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBudWxsO1xuICB9XG4gIGFzeW5jIGdldFRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8S25leD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgcmV0dXJuIGRiO1xuICB9XG59XG5leHBvcnQgY29uc3QgREIgPSBuZXcgREJDbGFzcygpO1xuIl0sIm5hbWVzIjpbIkFzeW5jTG9jYWxTdG9yYWdlIiwia25leCIsImFzc2lnbiIsIlNvbmFtdSIsIlRyYW5zYWN0aW9uQ29udGV4dCIsIkRCQ2xhc3MiLCJ3ZGIiLCJyZGIiLCJ0cmFuc2FjdGlvblN0b3JhZ2UiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJjYWxsYmFjayIsInJ1biIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsImdldFN0b3JlIiwiZ2V0REIiLCJ3aGljaCIsImRiQ29uZmlnIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidGVzdFRyYW5zYWN0aW9uIiwidGVzdCIsInBvb2wiLCJtaW4iLCJtYXgiLCJpbnN0YW5jZU5hbWUiLCJjb25maWciLCJnZXREQkNvbmZpZyIsImRldmVsb3BtZW50X21hc3RlciIsImRldmVsb3BtZW50X3NsYXZlIiwicHJvZHVjdGlvbl9tYXN0ZXIiLCJwcm9kdWN0aW9uX3NsYXZlIiwiRXJyb3IiLCJkZXN0cm95IiwidW5kZWZpbmVkIiwiZ2VuZXJhdGVEQkNvbmZpZyIsImRlZmF1bHRLbmV4Q29uZmlnIiwiY2xpZW50IiwibWlncmF0aW9ucyIsImRpcmVjdG9yeSIsImNvbm5lY3Rpb24iLCJkYXRhYmFzZSIsIm5hbWUiLCJkZWZhdWx0T3B0aW9ucyIsImRldk1hc3Rlck9wdGlvbnMiLCJlbnZpcm9ubWVudHMiLCJkZXZlbG9wbWVudCIsImRldlNsYXZlT3B0aW9ucyIsImZpeHR1cmVfcmVtb3RlIiwicmVtb3RlX2ZpeHR1cmUiLCJwcm9kTWFzdGVyT3B0aW9ucyIsInByb2R1Y3Rpb24iLCJwcm9kU2xhdmVPcHRpb25zIiwiY3JlYXRlVGVzdFRyYW5zYWN0aW9uIiwiZGIiLCJ0cmFuc2FjdGlvbiIsImNsZWFyVGVzdFRyYW5zYWN0aW9uIiwicm9sbGJh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
|
|
@@ -78,4 +78,4 @@ describe("InferAllSubsets", ()=>{
|
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
80
|
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXN1YnNldC50ZXN0LWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hRXh0ZW5kIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IEh5ZHJhdGUsIEluZmVyQWxsU3Vic2V0cywgTG9hZGVyc1Jlc3VsdCB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5cbnR5cGUgTW9ja1B1cmk8VD4gPSBQdXJpPERhdGFiYXNlU2NoZW1hRXh0ZW5kLCBhbnksIFQ+O1xuXG5kZXNjcmliZShcIkh5ZHJhdGVcIiwgKCkgPT4ge1xuICBpdChcImZsYXQg6rCd7LK066W8IOq3uOuMgOuhnCDsnKDsp4DtlZzri6QgKF9fIOyXhuuKlCDqsr3smrApXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0geyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8SHlkcmF0ZTxJbnB1dD4+KCk7XG4gIH0pO1xuXG4gIGl0KFwi64uo7J28IGRlcHRo7J2YIF9fIO2CpOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHsgaWQ6IG51bWJlcjsgdXNlcl9fbmFtZTogc3RyaW5nOyB1c2VyX19lbWFpbDogc3RyaW5nIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9O1xuICAgIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi64uk7KSRIGRlcHRo7J2YIF9fIO2CpOulvCDsnqzqt4DsoIHsnLzroZwg7KSR7LKpIOqwneyytOuhnCDrs4DtmZjtlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcl9fcHJvZmlsZV9fYmlvOiBzdHJpbmc7XG4gICAgICB1c2VyX19wcm9maWxlX19hdmF0YXI6IHN0cmluZztcbiAgICAgIHVzZXJfX25hbWU6IHN0cmluZztcbiAgICB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcjoge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHByb2ZpbGU6IHsgYmlvOiBzdHJpbmc7IGF2YXRhcjogc3RyaW5nIH07XG4gICAgICB9O1xuICAgIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi7Jes65+sIOq0gOqzhOulvCDrj5nsi5zsl5Ag7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXI7XG4gICAgICB1c2VyX19uYW1lOiBzdHJpbmc7XG4gICAgICBwb3N0X19pZDogbnVtYmVyO1xuICAgICAgcG9zdF9fdGl0bGU6IHN0cmluZztcbiAgICB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcjogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfTtcbiAgICAgIHBvc3Q6IHsgaWQ6IG51bWJlcjsgdGl0bGU6IHN0cmluZyB9O1xuICAgIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi67mIIOqwneyytOulvCDsspjrpqztlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7fTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e30+KCk7XG4gIH0pO1xuXG4gIGl0KFwibnVsbGFibGUg7ZWE65Oc6rCAIOyeiOuKlCDspJHssqkg6rCd7LK066W8IOyymOumrO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyX19pZDogbnVtYmVyIHwgbnVsbDtcbiAgICAgIHVzZXJfX25hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgaWQ6IG51bWJlciB8IG51bGw7IG5hbWU6IHN0cmluZyB8IG51bGwgfTtcbiAgICB9PigpO1xuICB9KTtcblxuICBpdChcIuuPmeydvO2VnCBwcmVmaXjrpbwg6rCA7KeEIOyXrOufrCDtlYTrk5zrpbwg7Jis67CU66W06rKMIOq3uOujue2ZlO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyX19pZDogbnVtYmVyO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nO1xuICAgICAgdXNlcl9jb3VudDogbnVtYmVyO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgdXNlcl9jb3VudDogbnVtYmVyO1xuICAgIH0+KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTG9hZGVyc1Jlc3VsdFwiLCAoKSA9PiB7XG4gIGl0KFwi64uo7J28IOuhnOuNlOydmCDqsrDqs7wg7YOA7J6F7J2EIOyDneyEse2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBNb2NrTG9hZGVyUWIgPSAoXG4gICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuXG4gICAgdHlwZSBMb2FkZXJzID0gW1xuICAgICAge1xuICAgICAgICBhczogXCJwb3N0c1wiO1xuICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICBxYjogTW9ja0xvYWRlclFiO1xuICAgICAgfSxcbiAgICBdO1xuICAgIHR5cGUgUmVzdWx0ID0gTG9hZGVyc1Jlc3VsdDxMb2FkZXJzPjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcInBvc3RzXCIpO1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8eyBwb3N0czogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nIH1bXSB9PigpO1xuICB9KTtcblxuICBpdChcIuykkeyyqSDroZzrjZTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIENvbW1lbnRMb2FkZXJRYiA9IChcbiAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IGNvbnRlbnQ6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcblxuICAgIHR5cGUgUG9zdExvYWRlclFiID0gKFxuICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgdGl0bGU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcblxuICAgIHR5cGUgTG9hZGVycyA9IFtcbiAgICAgIHtcbiAgICAgICAgYXM6IFwicG9zdHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgICAgcWI6IFBvc3RMb2FkZXJRYjtcbiAgICAgICAgbG9hZGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFzOiBcImNvbW1lbnRzXCI7XG4gICAgICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICAgICAgcWI6IENvbW1lbnRMb2FkZXJRYjtcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICBdO1xuICAgIHR5cGUgUmVzdWx0ID0gTG9hZGVyc1Jlc3VsdDxMb2FkZXJzPjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcInBvc3RzXCIpO1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgcG9zdHM6IHsgaWQ6IG51bWJlcjsgdGl0bGU6IHN0cmluZzsgY29tbWVudHM6IHsgaWQ6IG51bWJlcjsgY29udGVudDogc3RyaW5nIH1bXSB9W107XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLsl6zrn6wg66Gc642U66W8IOyymOumrO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBQcm9qZWN0TG9hZGVyID0ge1xuICAgICAgYXM6IFwicHJvamVjdHNcIjtcbiAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICBxYjogKFxuICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgIH07XG4gICAgdHlwZSBEZXBhcnRtZW50TG9hZGVyID0ge1xuICAgICAgYXM6IFwiZGVwYXJ0bWVudFwiO1xuICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgIHFiOiAoXG4gICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGNvbXBhbnlfbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgIH07XG4gICAgdHlwZSBFbXBsb3llZUxvYWRlciA9IHtcbiAgICAgIGFzOiBcImVtcGxveWVlc1wiO1xuICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgIHFiOiAoXG4gICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBlbXBsb3llZV9udW1iZXI6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgIGxvYWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFzOiBcInVzZXJcIjtcbiAgICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICAgIHFiOiAoXG4gICAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH07XG5cbiAgICB0eXBlIExvYWRlcnMgPSBbUHJvamVjdExvYWRlciwgRGVwYXJ0bWVudExvYWRlciwgRW1wbG95ZWVMb2FkZXJdO1xuICAgIHR5cGUgUmVzdWx0ID0gTG9hZGVyc1Jlc3VsdDxMb2FkZXJzPjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcInByb2plY3RzXCIpO1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwiZW1wbG95ZWVzXCIpO1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwiZGVwYXJ0bWVudFwiKTtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIHByb2plY3RzOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W107XG4gICAgICBkZXBhcnRtZW50OiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgY29tcGFueV9uYW1lOiBzdHJpbmcgfVtdO1xuICAgICAgZW1wbG95ZWVzOiB7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIGVtcGxveWVlX251bWJlcjogc3RyaW5nO1xuICAgICAgICB1c2VyOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9W107XG4gICAgICB9W107XG4gICAgfT4oKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJJbmZlckFsbFN1YnNldHNcIiwgKCkgPT4ge1xuICBkZXNjcmliZShcIuyEnOu4jOyFi+ydtCDtlZjrgpjsnbgg6rK97JqwXCIsICgpID0+IHtcbiAgICBpdChcIuuhnOuNlCDsl4bsnbQg6riw67O4IFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICB1c2VyX19uYW1lOiBzdHJpbmc7XG4gICAgICAgIHVzZXJfX2VtYWlsOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fY29tcGFueV9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldFF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFN1YnNldEZuQTtcbiAgICAgIH07XG5cbiAgICAgIC8vIExvYWRlclF1ZXJ5XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtdO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVzdWx0XG4gICAgICB0eXBlIFJlc3VsdCA9IEluZmVyQWxsU3Vic2V0czxTdWJzZXRRdWVyaWVzLCBMb2FkZXJRdWVyaWVzPjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJBXCIpO1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdC5BKS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgdXNlcjogeyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfTtcbiAgICAgICAgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmc7IGNvbXBhbnk6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgIH0+KCk7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0LkEuZGVwYXJ0bWVudC5jb21wYW55KS50b0VxdWFsVHlwZU9mPHsgbmFtZTogc3RyaW5nIH0+KCk7XG4gICAgfSk7XG5cbiAgICBpdChcIuuhnOuNlOulvCDtj6ztlajtlZwgU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIGNvbXBhbnlfX2lkOiBudW1iZXI7XG4gICAgICAgIGNvbXBhbnlfX25hbWU6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9faWQ6IG51bWJlcjtcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldFF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFN1YnNldEZuQTtcbiAgICAgIH07XG5cbiAgICAgIC8vIExvYWRlclF1ZXJ5XG4gICAgICB0eXBlIENvbXBhbnlEZXBhcnRtZW50c0xvYWRlciA9IHtcbiAgICAgICAgYXM6IFwiY29tcGFueV9fZGVwYXJ0bWVudHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiY29tcGFueV9faWRcIjtcbiAgICAgICAgcWI6IChcbiAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgIH07XG4gICAgICB0eXBlIERlcGFydG1lbnRQcm9qZWN0c0xvYWRlciA9IHtcbiAgICAgICAgYXM6IFwiZGVwYXJ0bWVudF9fcHJvamVjdHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiZGVwYXJ0bWVudF9faWRcIjtcbiAgICAgICAgcWI6IChcbiAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICB9O1xuICAgICAgdHlwZSBMb2FkZXJRdWVyaWVzID0ge1xuICAgICAgICBBOiBbQ29tcGFueURlcGFydG1lbnRzTG9hZGVyLCBEZXBhcnRtZW50UHJvamVjdHNMb2FkZXJdO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVzdWx0XG4gICAgICB0eXBlIFJlc3VsdCA9IEluZmVyQWxsU3Vic2V0czxTdWJzZXRRdWVyaWVzLCBMb2FkZXJRdWVyaWVzPjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJBXCIpO1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICAgIEE6IHtcbiAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgIGNvbXBhbnk6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBkZXBhcnRtZW50czogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdIH07XG4gICAgICAgICAgZGVwYXJ0bWVudDoge1xuICAgICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHByb2plY3RzOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfVtdO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PigpO1xuICAgIH0pO1xuXG4gICAgaXQoXCLspJHssqkg66Gc642U66W8IO2PrO2VqO2VnCBTdWJzZXQg6rKw6rO866W8IOy2lOuhoO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgICAvLyBTdWJzZXRRdWVyeVxuICAgICAgdHlwZSBTdWJzZXRGbkEgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgY29tcGFueV9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldFF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFN1YnNldEZuQTtcbiAgICAgIH07XG5cbiAgICAgIC8vIExvYWRlclF1ZXJ5XG4gICAgICB0eXBlIENvbXBhbnlEZXBhcnRtZW50c0xvYWRlciA9IHtcbiAgICAgICAgYXM6IFwiY29tcGFueV9fZGVwYXJ0bWVudHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiY29tcGFueV9faWRcIjtcbiAgICAgICAgcWI6IChcbiAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgbG9hZGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFzOiBcInByb2plY3RzXCI7XG4gICAgICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICAgICAgcWI6IChcbiAgICAgICAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH07XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtDb21wYW55RGVwYXJ0bWVudHNMb2FkZXJdO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVzdWx0XG4gICAgICB0eXBlIFJlc3VsdCA9IEluZmVyQWxsU3Vic2V0czxTdWJzZXRRdWVyaWVzLCBMb2FkZXJRdWVyaWVzPjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICAgIEE6IHtcbiAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgIGNvbXBhbnk6IHtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGRlcGFydG1lbnRzOiB7XG4gICAgICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9W107XG4gICAgICAgICAgICB9W107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwi7ISc67iM7IWL7J20IOyXrOufrCDqsJzsnbgg6rK97JqwXCIsICgpID0+IHtcbiAgICBpdChcIuuhnOuNlCDsl4bsnbQg6riw67O4IFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblAgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0Rm5TUyA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgICBQOiBTdWJzZXRGblA7XG4gICAgICAgIFNTOiBTdWJzZXRGblNTO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW107XG4gICAgICAgIFA6IFtdO1xuICAgICAgICBTUzogW107XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmc7IGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgICAgUDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgICAgU1M6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG4gICAgICB9PigpO1xuICAgIH0pO1xuXG4gICAgaXQoXCLroZzrjZTrpbwg7Y+s7ZWo7ZWcIFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblAgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0Rm5TUyA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgICBQOiBTdWJzZXRGblA7XG4gICAgICAgIFNTOiBTdWJzZXRGblNTO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgUHJvamVjdExvYWRlciA9IHtcbiAgICAgICAgYXM6IFwicHJvamVjdHNcIjtcbiAgICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgICAgcWI6IChcbiAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgICAgIGxvYWRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhczogXCJ0YWdzXCI7XG4gICAgICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICAgICAgcWI6IChcbiAgICAgICAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfTtcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW1Byb2plY3RMb2FkZXJdO1xuICAgICAgICBQOiBbXTtcbiAgICAgICAgU1M6IFtdO1xuICAgICAgfTtcblxuICAgICAgLy8gUmVzdWx0XG4gICAgICB0eXBlIFJlc3VsdCA9IEluZmVyQWxsU3Vic2V0czxTdWJzZXRRdWVyaWVzLCBMb2FkZXJRdWVyaWVzPjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICAgIEE6IHtcbiAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgICAgIGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH07XG4gICAgICAgICAgcHJvamVjdHM6IHtcbiAgICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgICAgICAgIHRhZ3M6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXTtcbiAgICAgICAgICB9W107XG4gICAgICAgIH07XG4gICAgICAgIFA6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBkZXBhcnRtZW50OiB7IG5hbWU6IHN0cmluZyB9IH07XG4gICAgICAgIFNTOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9O1xuICAgICAgfT4oKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImV4cGVjdFR5cGVPZiIsIml0IiwicmVzdWx0IiwidG9FcXVhbFR5cGVPZiIsInRvSGF2ZVByb3BlcnR5IiwiQSIsImRlcGFydG1lbnQiLCJjb21wYW55Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLEVBQUVDLFlBQVksRUFBRUMsRUFBRSxRQUFRLFNBQVM7QUFRcERGLFNBQVMsV0FBVztJQUNsQkUsR0FBRyxnQ0FBZ0M7UUFJakMsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO0lBQ3BDO0lBRUFGLEdBQUcsK0JBQStCO1FBSWhDLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtJQUlwQztJQUVBRixHQUFHLHFDQUFxQztRQVN0QyxNQUFNQyxTQUFTLENBQUM7UUFDaEJGLGFBQWFFLFFBQVFDLGFBQWE7SUFPcEM7SUFFQUYsR0FBRyxtQkFBbUI7UUFVcEIsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO0lBS3BDO0lBRUFGLEdBQUcsY0FBYztRQUlmLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtJQUNwQztJQUVBRixHQUFHLCtCQUErQjtRQVFoQyxNQUFNQyxTQUFTLENBQUM7UUFDaEJGLGFBQWFFLFFBQVFDLGFBQWE7SUFJcEM7SUFFQUYsR0FBRyxvQ0FBb0M7UUFTckMsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO0lBS3BDO0FBQ0Y7QUFFQUosU0FBUyxpQkFBaUI7SUFDeEJFLEdBQUcsc0JBQXNCO1FBZXZCLE1BQU1DLFNBQVMsQ0FBQztRQUNoQkYsYUFBYUUsUUFBUUUsY0FBYyxDQUFDO1FBQ3BDSixhQUFhRSxRQUFRQyxhQUFhO0lBQ3BDO0lBRUFGLEdBQUcsZUFBZTtRQTJCaEIsTUFBTUMsU0FBUyxDQUFDO1FBQ2hCRixhQUFhRSxRQUFRRSxjQUFjLENBQUM7UUFDcENKLGFBQWFFLFFBQVFDLGFBQWE7SUFHcEM7SUFFQUYsR0FBRyxlQUFlO1FBdUNoQixNQUFNQyxTQUFTLENBQUM7UUFDaEJGLGFBQWFFLFFBQVFFLGNBQWMsQ0FBQztRQUNwQ0osYUFBYUUsUUFBUUUsY0FBYyxDQUFDO1FBQ3BDSixhQUFhRSxRQUFRRSxjQUFjLENBQUM7UUFDcENKLGFBQWFFLFFBQVFDLGFBQWE7SUFTcEM7QUFDRjtBQUVBSixTQUFTLG1CQUFtQjtJQUMxQkEsU0FBUyxlQUFlO1FBQ3RCRSxHQUFHLDRCQUE0QjtZQXFCN0IsTUFBTUMsU0FBUyxDQUFDO1lBQ2hCRixhQUFhRSxRQUFRRSxjQUFjLENBQUM7WUFDcENKLGFBQWFFLE9BQU9HLENBQUMsRUFBRUYsYUFBYTtZQUtwQ0gsYUFBYUUsT0FBT0csQ0FBQyxDQUFDQyxVQUFVLENBQUNDLE9BQU8sRUFBRUosYUFBYTtRQUN6RDtRQUVBRixHQUFHLDJCQUEyQjtZQXFDNUIsTUFBTUMsU0FBUyxDQUFDO1lBQ2hCRixhQUFhRSxRQUFRRSxjQUFjLENBQUM7WUFDcENKLGFBQWFFLFFBQVFDLGFBQWE7UUFXcEM7UUFFQUYsR0FBRyw4QkFBOEI7WUFvQy9CLE1BQU1DLFNBQVMsQ0FBQztZQUNoQkYsYUFBYUUsUUFBUUMsYUFBYTtRQWFwQztJQUNGO0lBRUFKLFNBQVMsaUJBQWlCO1FBQ3hCRSxHQUFHLDRCQUE0QjtZQW1DN0IsTUFBTUMsU0FBUyxDQUFDO1lBQ2hCRixhQUFhRSxRQUFRQyxhQUFhO1FBS3BDO1FBRUFGLEdBQUcsMkJBQTJCO1lBcUQ1QixNQUFNQyxTQUFTLENBQUM7WUFDaEJGLGFBQWFFLFFBQVFDLGFBQWE7UUFnQnBDO0lBQ0Y7QUFDRiJ9
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXN1YnNldC50ZXN0LWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdFR5cGVPZiwgaXQgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hRXh0ZW5kIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmkgfSBmcm9tIFwiLi9wdXJpXCI7XG5pbXBvcnQgdHlwZSB7IEh5ZHJhdGUsIEluZmVyQWxsU3Vic2V0cywgTG9hZGVyc1Jlc3VsdCB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFB1cmlXcmFwcGVyIH0gZnJvbSBcIi4vcHVyaS13cmFwcGVyXCI7XG5cbi8qKiBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFB1cmkgU3Vic2V0IO2DgOyehSDsi5zsiqTthZzsl5DshJwgYW5566W8IO2XiOyaqe2VqCAqL1xudHlwZSBNb2NrUHVyaTxUPiA9IFB1cmk8RGF0YWJhc2VTY2hlbWFFeHRlbmQsIGFueSwgVD47XG5cbmRlc2NyaWJlKFwiSHlkcmF0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiZmxhdCDqsJ3ssrTrpbwg6re464yA66GcIOycoOyngO2VnOuLpCAoX18g7JeG64qUIOqyveyasClcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjxIeWRyYXRlPElucHV0Pj4oKTtcbiAgfSk7XG5cbiAgaXQoXCLri6jsnbwgZGVwdGjsnZggX18g7YKk66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmY7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0geyBpZDogbnVtYmVyOyB1c2VyX19uYW1lOiBzdHJpbmc7IHVzZXJfX2VtYWlsOiBzdHJpbmcgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLri6TspJEgZGVwdGjsnZggX18g7YKk66W8IOyerOq3gOyggeycvOuhnCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyX19wcm9maWxlX19iaW86IHN0cmluZztcbiAgICAgIHVzZXJfX3Byb2ZpbGVfX2F2YXRhcjogc3RyaW5nO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgcHJvZmlsZTogeyBiaW86IHN0cmluZzsgYXZhdGFyOiBzdHJpbmcgfTtcbiAgICAgIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLsl6zrn6wg6rSA6rOE66W8IOuPmeyLnOyXkCDsspjrpqztlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgSW5wdXQgPSB7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcl9faWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX25hbWU6IHN0cmluZztcbiAgICAgIHBvc3RfX2lkOiBudW1iZXI7XG4gICAgICBwb3N0X190aXRsZTogc3RyaW5nO1xuICAgIH07XG4gICAgdHlwZSBSZXN1bHQgPSBIeWRyYXRlPElucHV0PjtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgIGlkOiBudW1iZXI7XG4gICAgICB1c2VyOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgcG9zdDogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nIH07XG4gICAgfT4oKTtcbiAgfSk7XG5cbiAgaXQoXCLruYgg6rCd7LK066W8IOyymOumrO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgdHlwZSBJbnB1dCA9IHt9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7fT4oKTtcbiAgfSk7XG5cbiAgaXQoXCJudWxsYWJsZSDtlYTrk5zqsIAg7J6I64qUIOykkeyyqSDqsJ3ssrTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXIgfCBudWxsO1xuICAgICAgdXNlcl9fbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICAgIHR5cGUgUmVzdWx0ID0gSHlkcmF0ZTxJbnB1dD47XG5cbiAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBpZDogbnVtYmVyO1xuICAgICAgdXNlcjogeyBpZDogbnVtYmVyIHwgbnVsbDsgbmFtZTogc3RyaW5nIHwgbnVsbCB9O1xuICAgIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi64+Z7J287ZWcIHByZWZpeOulvCDqsIDsp4Qg7Jes65+sIO2VhOuTnOulvCDsmKzrsJTrpbTqsowg6re466O57ZmU7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIElucHV0ID0ge1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXJfX2lkOiBudW1iZXI7XG4gICAgICB1c2VyX19uYW1lOiBzdHJpbmc7XG4gICAgICB1c2VyX2NvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgICB0eXBlIFJlc3VsdCA9IEh5ZHJhdGU8SW5wdXQ+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIHVzZXI6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH07XG4gICAgICB1c2VyX2NvdW50OiBudW1iZXI7XG4gICAgfT4oKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJMb2FkZXJzUmVzdWx0XCIsICgpID0+IHtcbiAgaXQoXCLri6jsnbwg66Gc642U7J2YIOqysOqzvCDtg4DsnoXsnYQg7IOd7ISx7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIE1vY2tMb2FkZXJRYiA9IChcbiAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IHRpdGxlOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG5cbiAgICB0eXBlIExvYWRlcnMgPSBbXG4gICAgICB7XG4gICAgICAgIGFzOiBcInBvc3RzXCI7XG4gICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgIHFiOiBNb2NrTG9hZGVyUWI7XG4gICAgICB9LFxuICAgIF07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicG9zdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7IHBvc3RzOiB7IGlkOiBudW1iZXI7IHRpdGxlOiBzdHJpbmcgfVtdIH0+KCk7XG4gIH0pO1xuXG4gIGl0KFwi7KSR7LKpIOuhnOuNlOulvCDsspjrpqztlZzri6RcIiwgKCkgPT4ge1xuICAgIHR5cGUgQ29tbWVudExvYWRlclFiID0gKFxuICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgY29udGVudDogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuXG4gICAgdHlwZSBQb3N0TG9hZGVyUWIgPSAoXG4gICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuXG4gICAgdHlwZSBMb2FkZXJzID0gW1xuICAgICAge1xuICAgICAgICBhczogXCJwb3N0c1wiO1xuICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICBxYjogUG9zdExvYWRlclFiO1xuICAgICAgICBsb2FkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXM6IFwiY29tbWVudHNcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogQ29tbWVudExvYWRlclFiO1xuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIF07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicG9zdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9FcXVhbFR5cGVPZjx7XG4gICAgICBwb3N0czogeyBpZDogbnVtYmVyOyB0aXRsZTogc3RyaW5nOyBjb21tZW50czogeyBpZDogbnVtYmVyOyBjb250ZW50OiBzdHJpbmcgfVtdIH1bXTtcbiAgICB9PigpO1xuICB9KTtcblxuICBpdChcIuyXrOufrCDroZzrjZTrpbwg7LKY66as7ZWc64ukXCIsICgpID0+IHtcbiAgICB0eXBlIFByb2plY3RMb2FkZXIgPSB7XG4gICAgICBhczogXCJwcm9qZWN0c1wiO1xuICAgICAgcmVmSWQ6IFwiaWRcIjtcbiAgICAgIHFiOiAoXG4gICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICBmcm9tSWRzOiBudW1iZXJbXSxcbiAgICAgICkgPT4gTW9ja1B1cmk8eyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgfTtcbiAgICB0eXBlIERlcGFydG1lbnRMb2FkZXIgPSB7XG4gICAgICBhczogXCJkZXBhcnRtZW50XCI7XG4gICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgcWI6IChcbiAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgY29tcGFueV9uYW1lOiBzdHJpbmc7IHJlZklkOiBudW1iZXIgfT47XG4gICAgfTtcbiAgICB0eXBlIEVtcGxveWVlTG9hZGVyID0ge1xuICAgICAgYXM6IFwiZW1wbG95ZWVzXCI7XG4gICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgcWI6IChcbiAgICAgICAgcWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4sXG4gICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IGVtcGxveWVlX251bWJlcjogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgbG9hZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXM6IFwidXNlclwiO1xuICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgcWI6IChcbiAgICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICAgICAgKSA9PiBNb2NrUHVyaTx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfTtcblxuICAgIHR5cGUgTG9hZGVycyA9IFtQcm9qZWN0TG9hZGVyLCBEZXBhcnRtZW50TG9hZGVyLCBFbXBsb3llZUxvYWRlcl07XG4gICAgdHlwZSBSZXN1bHQgPSBMb2FkZXJzUmVzdWx0PExvYWRlcnM+O1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge30gYXMgUmVzdWx0O1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvSGF2ZVByb3BlcnR5KFwicHJvamVjdHNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJlbXBsb3llZXNcIik7XG4gICAgZXhwZWN0VHlwZU9mKHJlc3VsdCkudG9IYXZlUHJvcGVydHkoXCJkZXBhcnRtZW50XCIpO1xuICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXTtcbiAgICAgIGRlcGFydG1lbnQ6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBjb21wYW55X25hbWU6IHN0cmluZyB9W107XG4gICAgICBlbXBsb3llZXM6IHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgZW1wbG95ZWVfbnVtYmVyOiBzdHJpbmc7XG4gICAgICAgIHVzZXI6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH1bXTtcbiAgICAgIH1bXTtcbiAgICB9PigpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkluZmVyQWxsU3Vic2V0c1wiLCAoKSA9PiB7XG4gIGRlc2NyaWJlKFwi7ISc67iM7IWL7J20IO2VmOuCmOyduCDqsr3smrBcIiwgKCkgPT4ge1xuICAgIGl0KFwi66Gc642UIOyXhuydtCDquLDrs7ggU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIHVzZXJfX25hbWU6IHN0cmluZztcbiAgICAgICAgdXNlcl9fZW1haWw6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19jb21wYW55X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW107XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcIkFcIik7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0LkEpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICB1c2VyOiB7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9O1xuICAgICAgICBkZXBhcnRtZW50OiB7IG5hbWU6IHN0cmluZzsgY29tcGFueTogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgfT4oKTtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQuQS5kZXBhcnRtZW50LmNvbXBhbnkpLnRvRXF1YWxUeXBlT2Y8eyBuYW1lOiBzdHJpbmcgfT4oKTtcbiAgICB9KTtcblxuICAgIGl0KFwi66Gc642U66W8IO2PrO2VqO2VnCBTdWJzZXQg6rKw6rO866W8IOy2lOuhoO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgICAvLyBTdWJzZXRRdWVyeVxuICAgICAgdHlwZSBTdWJzZXRGbkEgPSAocWJXcmFwcGVyOiBQdXJpV3JhcHBlcjxEYXRhYmFzZVNjaGVtYUV4dGVuZD4pID0+IE1vY2tQdXJpPHtcbiAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgY29tcGFueV9faWQ6IG51bWJlcjtcbiAgICAgICAgY29tcGFueV9fbmFtZTogc3RyaW5nO1xuICAgICAgICBkZXBhcnRtZW50X19pZDogbnVtYmVyO1xuICAgICAgICBkZXBhcnRtZW50X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgQ29tcGFueURlcGFydG1lbnRzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJjb21wYW55X19kZXBhcnRtZW50c1wiO1xuICAgICAgICByZWZJZDogXCJjb21wYW55X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgfTtcbiAgICAgIHR5cGUgRGVwYXJ0bWVudFByb2plY3RzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJkZXBhcnRtZW50X19wcm9qZWN0c1wiO1xuICAgICAgICByZWZJZDogXCJkZXBhcnRtZW50X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgIH07XG4gICAgICB0eXBlIExvYWRlclF1ZXJpZXMgPSB7XG4gICAgICAgIEE6IFtDb21wYW55RGVwYXJ0bWVudHNMb2FkZXIsIERlcGFydG1lbnRQcm9qZWN0c0xvYWRlcl07XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0hhdmVQcm9wZXJ0eShcIkFcIik7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgY29tcGFueTogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnRzOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W10gfTtcbiAgICAgICAgICBkZXBhcnRtZW50OiB7XG4gICAgICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgcHJvamVjdHM6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9W107XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG5cbiAgICBpdChcIuykkeyyqSDroZzrjZTrpbwg7Y+s7ZWo7ZWcIFN1YnNldCDqsrDqs7zrpbwg7LaU66Gg7ZWc64ukXCIsICgpID0+IHtcbiAgICAgIC8vIFN1YnNldFF1ZXJ5XG4gICAgICB0eXBlIFN1YnNldEZuQSA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBjb21wYW55X19uYW1lOiBzdHJpbmc7XG4gICAgICB9PjtcbiAgICAgIHR5cGUgU3Vic2V0UXVlcmllcyA9IHtcbiAgICAgICAgQTogU3Vic2V0Rm5BO1xuICAgICAgfTtcblxuICAgICAgLy8gTG9hZGVyUXVlcnlcbiAgICAgIHR5cGUgQ29tcGFueURlcGFydG1lbnRzTG9hZGVyID0ge1xuICAgICAgICBhczogXCJjb21wYW55X19kZXBhcnRtZW50c1wiO1xuICAgICAgICByZWZJZDogXCJjb21wYW55X19pZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgICBsb2FkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXM6IFwicHJvamVjdHNcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogKFxuICAgICAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfTtcbiAgICAgIHR5cGUgTG9hZGVyUXVlcmllcyA9IHtcbiAgICAgICAgQTogW0NvbXBhbnlEZXBhcnRtZW50c0xvYWRlcl07XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgY29tcGFueToge1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgZGVwYXJ0bWVudHM6IHtcbiAgICAgICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICBwcm9qZWN0czogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH1bXTtcbiAgICAgICAgICAgIH1bXTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCLshJzruIzshYvsnbQg7Jes65+sIOqwnOyduCDqsr3smrBcIiwgKCkgPT4ge1xuICAgIGl0KFwi66Gc642UIOyXhuydtCDquLDrs7ggU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldEZuUCA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblNTID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRRdWVyaWVzID0ge1xuICAgICAgICBBOiBTdWJzZXRGbkE7XG4gICAgICAgIFA6IFN1YnNldEZuUDtcbiAgICAgICAgU1M6IFN1YnNldEZuU1M7XG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkZXJRdWVyeVxuICAgICAgdHlwZSBMb2FkZXJRdWVyaWVzID0ge1xuICAgICAgICBBOiBbXTtcbiAgICAgICAgUDogW107XG4gICAgICAgIFNTOiBbXTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc3VsdFxuICAgICAgdHlwZSBSZXN1bHQgPSBJbmZlckFsbFN1YnNldHM8U3Vic2V0UXVlcmllcywgTG9hZGVyUXVlcmllcz47XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIFJlc3VsdDtcbiAgICAgIGV4cGVjdFR5cGVPZihyZXN1bHQpLnRvRXF1YWxUeXBlT2Y8e1xuICAgICAgICBBOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZW1haWw6IHN0cmluZzsgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgICBQOiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZzsgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfSB9O1xuICAgICAgICBTUzogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcbiAgICAgIH0+KCk7XG4gICAgfSk7XG5cbiAgICBpdChcIuuhnOuNlOulvCDtj6ztlajtlZwgU3Vic2V0IOqysOqzvOulvCDstpTroaDtlZzri6RcIiwgKCkgPT4ge1xuICAgICAgLy8gU3Vic2V0UXVlcnlcbiAgICAgIHR5cGUgU3Vic2V0Rm5BID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgZGVwYXJ0bWVudF9fbmFtZTogc3RyaW5nO1xuICAgICAgfT47XG4gICAgICB0eXBlIFN1YnNldEZuUCA9IChxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPikgPT4gTW9ja1B1cmk8e1xuICAgICAgICBpZDogbnVtYmVyO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlcGFydG1lbnRfX25hbWU6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRGblNTID0gKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+KSA9PiBNb2NrUHVyaTx7XG4gICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZW1haWw6IHN0cmluZztcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZztcbiAgICAgIH0+O1xuICAgICAgdHlwZSBTdWJzZXRRdWVyaWVzID0ge1xuICAgICAgICBBOiBTdWJzZXRGbkE7XG4gICAgICAgIFA6IFN1YnNldEZuUDtcbiAgICAgICAgU1M6IFN1YnNldEZuU1M7XG4gICAgICB9O1xuXG4gICAgICAvLyBMb2FkZXJRdWVyeVxuICAgICAgdHlwZSBQcm9qZWN0TG9hZGVyID0ge1xuICAgICAgICBhczogXCJwcm9qZWN0c1wiO1xuICAgICAgICByZWZJZDogXCJpZFwiO1xuICAgICAgICBxYjogKFxuICAgICAgICAgIHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LFxuICAgICAgICAgIGZyb21JZHM6IG51bWJlcltdLFxuICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgcmVmSWQ6IG51bWJlciB9PjtcbiAgICAgICAgbG9hZGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFzOiBcInRhZ3NcIjtcbiAgICAgICAgICAgIHJlZklkOiBcImlkXCI7XG4gICAgICAgICAgICBxYjogKFxuICAgICAgICAgICAgICBxYldyYXBwZXI6IFB1cmlXcmFwcGVyPERhdGFiYXNlU2NoZW1hRXh0ZW5kPixcbiAgICAgICAgICAgICAgZnJvbUlkczogbnVtYmVyW10sXG4gICAgICAgICAgICApID0+IE1vY2tQdXJpPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyByZWZJZDogbnVtYmVyIH0+O1xuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9O1xuICAgICAgdHlwZSBMb2FkZXJRdWVyaWVzID0ge1xuICAgICAgICBBOiBbUHJvamVjdExvYWRlcl07XG4gICAgICAgIFA6IFtdO1xuICAgICAgICBTUzogW107XG4gICAgICB9O1xuXG4gICAgICAvLyBSZXN1bHRcbiAgICAgIHR5cGUgUmVzdWx0ID0gSW5mZXJBbGxTdWJzZXRzPFN1YnNldFF1ZXJpZXMsIExvYWRlclF1ZXJpZXM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyBSZXN1bHQ7XG4gICAgICBleHBlY3RUeXBlT2YocmVzdWx0KS50b0VxdWFsVHlwZU9mPHtcbiAgICAgICAgQToge1xuICAgICAgICAgIGlkOiBudW1iZXI7XG4gICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICAgICAgZGVwYXJ0bWVudDogeyBuYW1lOiBzdHJpbmcgfTtcbiAgICAgICAgICBwcm9qZWN0czoge1xuICAgICAgICAgICAgaWQ6IG51bWJlcjtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgICAgICAgdGFnczogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfVtdO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgICAgUDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IGRlcGFydG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfTtcbiAgICAgICAgU1M6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG4gICAgICB9PigpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiZXhwZWN0VHlwZU9mIiwiaXQiLCJyZXN1bHQiLCJ0b0VxdWFsVHlwZU9mIiwidG9IYXZlUHJvcGVydHkiLCJB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
|