sonamu 0.7.11 → 0.7.12
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 -3
- 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 +36 -2
- package/dist/bin/cli.js +121 -117
- 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.js +5 -1
- 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 +3 -0
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +12 -2
- 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 +27 -11
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +15 -2
- 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 +3 -7
- package/dist/vector/types.d.ts.map +1 -1
- package/dist/vector/types.js +1 -1
- package/package.json +5 -3
- package/src/api/config.ts +15 -8
- package/src/api/sonamu.ts +43 -2
- package/src/bin/cli.ts +58 -54
- 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 +4 -0
- package/src/syncer/file-patterns.ts +11 -9
- package/src/syncer/module-loader.ts +35 -0
- package/src/syncer/syncer.ts +14 -0
- 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/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 +2 -8
- 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
|
@@ -150,34 +150,65 @@ class PostgreSQLSchemaReaderClass {
|
|
|
150
150
|
if (columns.length === 0) {
|
|
151
151
|
throw new Error(`Table not found: ${tableName}`);
|
|
152
152
|
}
|
|
153
|
-
// Indexes 조회
|
|
153
|
+
// Indexes 조회 (PGroonga 표현식 인덱스 포함)
|
|
154
154
|
const indexesQuery = `
|
|
155
155
|
SELECT
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
156
|
+
i.relname AS index_name,
|
|
157
|
+
CASE
|
|
158
|
+
WHEN am.amname = 'pgroonga' AND u.attnum = 0 THEN
|
|
159
|
+
regexp_replace(
|
|
160
|
+
regexp_replace(
|
|
161
|
+
TRIM(pgroonga_col.column_expr),
|
|
162
|
+
'::text',
|
|
163
|
+
'',
|
|
164
|
+
'g'
|
|
165
|
+
),
|
|
166
|
+
'[()]',
|
|
167
|
+
'',
|
|
168
|
+
'g'
|
|
169
|
+
)
|
|
170
|
+
ELSE a.attname
|
|
171
|
+
END AS column_name,
|
|
172
|
+
ix.indisunique AS is_unique,
|
|
173
|
+
ix.indisprimary AS is_primary,
|
|
174
|
+
am.amname AS index_type,
|
|
175
|
+
COALESCE((u.opt & 2) = 2, FALSE) AS nulls_first,
|
|
176
|
+
CASE
|
|
177
|
+
WHEN (u.opt & 1) = 1 THEN 'DESC'
|
|
178
|
+
ELSE 'ASC'
|
|
179
|
+
END AS sort_order,
|
|
180
|
+
ix.indnullsnotdistinct AS nulls_not_distinct
|
|
169
181
|
FROM pg_class t
|
|
170
182
|
JOIN pg_index ix ON t.oid = ix.indrelid
|
|
171
183
|
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
172
184
|
JOIN pg_am am ON i.relam = am.oid
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
185
|
+
JOIN LATERAL unnest(ix.indkey, ix.indoption)
|
|
186
|
+
WITH ORDINALITY AS u(attnum, opt, ord) ON true
|
|
187
|
+
LEFT JOIN pg_attribute a ON a.attrelid = t.oid
|
|
188
|
+
AND a.attnum = u.attnum
|
|
189
|
+
AND u.attnum > 0
|
|
190
|
+
LEFT JOIN LATERAL (
|
|
191
|
+
SELECT
|
|
192
|
+
unnest(
|
|
193
|
+
CASE
|
|
194
|
+
WHEN pg_get_expr(ix.indexprs, ix.indrelid) ~ '^ARRAY\\[' THEN
|
|
195
|
+
string_to_array(
|
|
196
|
+
regexp_replace(
|
|
197
|
+
pg_get_expr(ix.indexprs, ix.indrelid),
|
|
198
|
+
'^ARRAY\\[(.*)\\]$',
|
|
199
|
+
'\\1'
|
|
200
|
+
),
|
|
201
|
+
', '
|
|
202
|
+
)
|
|
203
|
+
ELSE
|
|
204
|
+
ARRAY[pg_get_expr(ix.indexprs, ix.indrelid)]
|
|
205
|
+
END
|
|
206
|
+
) as column_expr
|
|
207
|
+
) pgroonga_col ON am.amname = 'pgroonga' AND u.attnum = 0
|
|
177
208
|
WHERE t.relname = ?
|
|
178
|
-
|
|
179
|
-
ORDER BY i.relname,
|
|
180
|
-
|
|
209
|
+
AND (u.attnum > 0 OR (am.amname = 'pgroonga' AND u.attnum = 0))
|
|
210
|
+
ORDER BY i.relname, u.ord;
|
|
211
|
+
`;
|
|
181
212
|
const indexes = (await compareDB.raw(indexesQuery, [
|
|
182
213
|
tableName
|
|
183
214
|
])).rows;
|
|
@@ -345,4 +376,4 @@ class PostgreSQLSchemaReaderClass {
|
|
|
345
376
|
}
|
|
346
377
|
export const PostgreSQLSchemaReader = new PostgreSQLSchemaReaderClass();
|
|
347
378
|
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGdyb3VwIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWlncmF0aW9uQ29sdW1uLFxuICBNaWdyYXRpb25Gb3JlaWduLFxuICBNaWdyYXRpb25JbmRleCxcbiAgTWlncmF0aW9uU2V0LFxuICBSZWxhdGlvbk9uLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgUGdDb2x1bW4gPSB7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGRhdGFfdHlwZTogc3RyaW5nO1xuICB1ZHRfbmFtZTogc3RyaW5nO1xuICBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGg6IG51bWJlciB8IG51bGw7XG4gIG51bWVyaWNfcHJlY2lzaW9uOiBudW1iZXIgfCBudWxsO1xuICBudW1lcmljX3NjYWxlOiBudW1iZXIgfCBudWxsO1xuICBpc19udWxsYWJsZTogc3RyaW5nO1xuICBjb2x1bW5fZGVmYXVsdDogc3RyaW5nIHwgbnVsbDtcbiAgaXNfZ2VuZXJhdGVkOiBzdHJpbmc7IC8vICdzJyA9IFNUT1JFRCwgJ3YnID0gVklSVFVBTCwgJycgPSBub25lXG4gIGdlbmVyYXRpb25fZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUGdJbmRleCA9IHtcbiAgaW5kZXhfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBpc191bmlxdWU6IGJvb2xlYW47XG4gIGlzX3ByaW1hcnk6IGJvb2xlYW47XG4gIGluZGV4X3R5cGU6IHN0cmluZztcbiAgbnVsbHNfZmlyc3Q6IGJvb2xlYW47XG4gIHNvcnRfb3JkZXI6IFwiQVNDXCIgfCBcIkRFU0NcIjtcbiAgbnVsbHNfbm90X2Rpc3RpbmN0OiBib29sZWFuO1xufTtcblxudHlwZSBQZ0ZvcmVpZ24gPSB7XG4gIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBmb3JlaWduX3RhYmxlX25hbWU6IHN0cmluZztcbiAgZm9yZWlnbl9jb2x1bW5fbmFtZTogc3RyaW5nO1xuICB1cGRhdGVfcnVsZTogc3RyaW5nO1xuICBkZWxldGVfcnVsZTogc3RyaW5nO1xufTtcblxuY2xhc3MgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzIHtcbiAgLyoqXG4gICAqIERC7JeQ7IScIO2FjOydtOu4lCDsoJXrs7Trpbwg7J297Ja07IScIE1pZ3JhdGlvblNldOydhCDrp4zrk6TslrTsmLXri4jri6QuXG4gICAqIEBwYXJhbSBjb21wYXJlREIgS25leCDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIHRhYmxlIO2FjOydtOu4lCDsnbTrpoRcbiAgICogQHJldHVybnMgTWlncmF0aW9uU2V0IOqwneyytFxuICAgKi9cbiAgYXN5bmMgZ2V0TWlncmF0aW9uU2V0RnJvbURCKGNvbXBhcmVEQjogS25leCwgdGFibGU6IHN0cmluZyk6IFByb21pc2U8TWlncmF0aW9uU2V0IHwgbnVsbD4ge1xuICAgIGxldCBkYkNvbHVtbnM6IFBnQ29sdW1uW10sIGRiSW5kZXhlczogUGdJbmRleFtdLCBkYkZvcmVpZ25zOiBQZ0ZvcmVpZ25bXTtcbiAgICB0cnkge1xuICAgICAgW2RiQ29sdW1ucywgZGJJbmRleGVzLCBkYkZvcmVpZ25zXSA9IGF3YWl0IHRoaXMucmVhZFRhYmxlKGNvbXBhcmVEQiwgdGFibGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKFwiVGFibGUgbm90IGZvdW5kXCIpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9ucyDsobDtmoxcbiAgICBjb25zdCB2ZWN0b3JEaW1lbnNpb25zID0gYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gICAgY29uc3QgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBkYkNvbHVtbnMubWFwKChkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGJDb2xUeXBlID0gdGhpcy5yZXNvbHZlREJDb2xUeXBlKGRiQ29sdW1uKTtcblxuICAgICAgLy8gdmVjdG9yIO2DgOyeheyduCDqsr3smrAgZGltZW5zaW9ucyDshKTsoJVcbiAgICAgIGlmIChkYkNvbFR5cGUudHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgICAgICBkYkNvbFR5cGUuZGltZW5zaW9ucyA9IHZlY3RvckRpbWVuc2lvbnNbZGJDb2x1bW4uY29sdW1uX25hbWVdID8/IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRiQ29sdW1uLmNvbHVtbl9uYW1lLFxuICAgICAgICBudWxsYWJsZTogZGJDb2x1bW4uaXNfbnVsbGFibGUgPT09IFwiWUVTXCIsXG4gICAgICAgIC4uLmRiQ29sVHlwZSxcbiAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsspjrpqxcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb2x1bW4uaXNfZ2VuZXJhdGVkID09PSBcInNcIiB8fCBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwidlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiID8gXCJTVE9SRURcIiA6IFwiVklSVFVBTFwiLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGRiQ29sdW1uLmdlbmVyYXRpb25fZXhwcmVzc2lvbiA/PyBcIlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KSgpLFxuICAgICAgICAvLyBEZWZhdWx0IOqwkiDsspjrpqwgKEdlbmVyYXRlZCBDb2x1bW7snbQg7JWE64uMIOqyveyasOunjClcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIGRlZmF1bHQg6rCS7J20IOyXhuydjFxuICAgICAgICAgIGlmIChkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiIHx8IGRiQ29sdW1uLmlzX2dlbmVyYXRlZCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgZGVmYXVsdCDqsJIg7KCV66asIChuZXh0dmFsLCBDVVJSRU5UX1RJTUVTVEFNUCDrk7EpXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQ7XG5cbiAgICAgICAgICAgIC8vIG5leHR2YWwg7KCc6rGwIChTRVJJQUwg7YOA7J6FKVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZS5zdGFydHNXaXRoKFwibmV4dHZhbChcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDtg4DsnoUg7LqQ7Iqk7YyFIOygnOqxsCAo7JiIOiAnMSc6OmludGVnZXIg4oaSIDEpXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUucmVwbGFjZSgvOjpbXFx3XFxzXSskL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAvLyDrlLDsmLTtkZzqsIAgc2luZ2xlIHF1b3Rl7J24IOqyveyasCBkb3VibGUgcXVvdGXroZwg67OA7ZmYXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIGRlZmF1bHRWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnJlcGxhY2VBbGwoXCInXCIsICdcIicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkZWZhdWx0VG86IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSkoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBQUklNQVJZIEtFWeyZgCBmb3JlaWduIGtleeyaqSDsnbjrjbHsiqQg7KCc7Jm4XG4gICAgY29uc3QgZGJJbmRleGVzR3JvdXAgPSBncm91cChcbiAgICAgIGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgICAgIChkYkluZGV4KSA9PlxuICAgICAgICAgICFkYkluZGV4LmlzX3ByaW1hcnkgJiZcbiAgICAgICAgICAhZGJGb3JlaWducy5maW5kKChkYkZvcmVpZ24pID0+IGRiSW5kZXguaW5kZXhfbmFtZS5pbmNsdWRlcyhkYkZvcmVpZ24uY29uc3RyYWludF9uYW1lKSksXG4gICAgICApLFxuICAgICAgKGRiSW5kZXgpID0+IGRiSW5kZXguaW5kZXhfbmFtZSxcbiAgICApO1xuXG4gICAgLy8gaW5kZXhlcyDsspjrpqxcbiAgICBjb25zdCBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdID0gT2JqZWN0LmtleXMoZGJJbmRleGVzR3JvdXApLm1hcCgoaW5kZXhOYW1lKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IGRiSW5kZXhlc0dyb3VwW2luZGV4TmFtZV07XG4gICAgICBhc3NlcnQoY3VycmVudEluZGV4ZXMpO1xuXG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gY3VycmVudEluZGV4ZXNbMF07XG4gICAgICBjb25zdCB0eXBlID0gZmlyc3RJbmRleC5pc191bmlxdWUgPyBcInVuaXF1ZVwiIDogXCJpbmRleFwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBuYW1lOiBpbmRleE5hbWUsXG4gICAgICAgIGNvbHVtbnM6IGN1cnJlbnRJbmRleGVzLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGlkeC5jb2x1bW5fbmFtZSxcbiAgICAgICAgICBudWxsc0ZpcnN0OiBpZHgubnVsbHNfZmlyc3QsXG4gICAgICAgICAgc29ydE9yZGVyOiBpZHguc29ydF9vcmRlcixcbiAgICAgICAgfSkpLFxuICAgICAgICBudWxsc05vdERpc3RpbmN0OiBmaXJzdEluZGV4Lm51bGxzX25vdF9kaXN0aW5jdCxcbiAgICAgICAgdXNpbmc6IGZpcnN0SW5kZXguaW5kZXhfdHlwZSBhcyBcImJ0cmVlXCIgfCBcImhhc2hcIiB8IFwiZ2luXCIgfCBcImdpc3RcIiB8IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBmb3JlaWducyDsspjrpqxcbiAgICBjb25zdCBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdID0gZGJGb3JlaWducy5tYXAoKGRiRm9yZWlnbikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogW2RiRm9yZWlnbi5jb2x1bW5fbmFtZV0sXG4gICAgICAgIHRvOiBgJHtkYkZvcmVpZ24uZm9yZWlnbl90YWJsZV9uYW1lfS4ke2RiRm9yZWlnbi5mb3JlaWduX2NvbHVtbl9uYW1lfWAsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLm1hcENvbnN0cmFpbnRBY3Rpb24oZGJGb3JlaWduLnVwZGF0ZV9ydWxlKSxcbiAgICAgICAgb25EZWxldGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihkYkZvcmVpZ24uZGVsZXRlX3J1bGUpLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YWJsZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBpbmRleGVzLFxuICAgICAgZm9yZWlnbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0Z3JlU1FM7J2YIGNvbnN0cmFpbnQgYWN0aW9u7J2EIEtuZXgg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBtYXBDb25zdHJhaW50QWN0aW9uKGFjdGlvbjogc3RyaW5nKTogUmVsYXRpb25PbiB7XG4gICAgY29uc3QgYWN0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbk9uPiA9IHtcbiAgICAgIFwiTk8gQUNUSU9OXCI6IFwiTk8gQUNUSU9OXCIsXG4gICAgICBSRVNUUklDVDogXCJSRVNUUklDVFwiLFxuICAgICAgQ0FTQ0FERTogXCJDQVNDQURFXCIsXG4gICAgICBcIlNFVCBOVUxMXCI6IFwiU0VUIE5VTExcIixcbiAgICAgIFwiU0VUIERFRkFVTFRcIjogXCJTRVQgREVGQVVMVFwiLFxuICAgIH07XG4gICAgcmV0dXJuIGFjdGlvbk1hcFthY3Rpb25dID8/IFwiTk8gQUNUSU9OXCI7XG4gIH1cblxuICAvKipcbiAgICog6riw7KG0IO2FjOydtOu4lCDsnb3slrTshJwgY29scywgaW5kZXhlcywgZm9yZWlnbnMg67CY7ZmYXG4gICAqL1xuICBhc3luYyByZWFkVGFibGUoXG4gICAgY29tcGFyZURCOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPFtQZ0NvbHVtbltdLCBQZ0luZGV4W10sIFBnRm9yZWlnbltdXT4ge1xuICAgIC8vIENvbHVtbnMg7KGw7ZqMIChHZW5lcmF0ZWQgQ29sdW1uIOygleuztCDtj6ztlagpXG4gICAgY29uc3QgY29sdW1uc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGMuY29sdW1uX25hbWUsXG4gICAgICAgIGMuZGF0YV90eXBlLFxuICAgICAgICBjLnVkdF9uYW1lLFxuICAgICAgICBjLmNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCxcbiAgICAgICAgYy5udW1lcmljX3ByZWNpc2lvbixcbiAgICAgICAgYy5udW1lcmljX3NjYWxlLFxuICAgICAgICBjLmlzX251bGxhYmxlLFxuICAgICAgICBjLmNvbHVtbl9kZWZhdWx0LFxuICAgICAgICBDT0FMRVNDRShhLmF0dGdlbmVyYXRlZCwgJycpIGFzIGlzX2dlbmVyYXRlZCxcbiAgICAgICAgYy5nZW5lcmF0aW9uX2V4cHJlc3Npb25cbiAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgY1xuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0bmFtZSA9IGMuY29sdW1uX25hbWVcbiAgICAgICAgQU5EIGEuYXR0cmVsaWQgPSAoXG4gICAgICAgICAgU0VMRUNUIG9pZCBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSBjLnRhYmxlX25hbWVcbiAgICAgICAgICBBTkQgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGMudGFibGVfc2NoZW1hKVxuICAgICAgICApXG4gICAgICBXSEVSRSBjLnRhYmxlX25hbWUgPSA/XG4gICAgICAgIEFORCBjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgICBPUkRFUiBCWSBjLm9yZGluYWxfcG9zaXRpb25cbiAgICBgO1xuICAgIGNvbnN0IGNvbHVtbnMgPSAoYXdhaXQgY29tcGFyZURCLnJhdyhjb2x1bW5zUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cyBhcyBQZ0NvbHVtbltdO1xuICAgIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBub3QgZm91bmQ6ICR7dGFibGVOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIEluZGV4ZXMg7KGw7ZqMXG4gICAgY29uc3QgaW5kZXhlc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGkucmVsbmFtZSBhcyBpbmRleF9uYW1lLFxuICAgICAgICBhLmF0dG5hbWUgYXMgY29sdW1uX25hbWUsXG4gICAgICAgIGl4LmluZGlzdW5pcXVlIGFzIGlzX3VuaXF1ZSxcbiAgICAgICAgaXguaW5kaXNwcmltYXJ5IGFzIGlzX3ByaW1hcnksXG4gICAgICAgIGFtLmFtbmFtZSBhcyBpbmRleF90eXBlLFxuICAgICAgICAtLSBOVUxMUyBGSVJTVC9MQVNUIO2ZleyduCAo67mE7Yq4IOyXsOyCsClcbiAgICAgICAgKG9wdCAmIDIpID0gMiBBUyBudWxsc19maXJzdCxcbiAgICAgICAgLS0gQVNDL0RFU0Mg7ZmV7J24XG4gICAgICAgIENBU0UgXG4gICAgICAgICAgICBXSEVOIChvcHQgJiAxKSA9IDEgVEhFTiAnREVTQydcbiAgICAgICAgICAgIEVMU0UgJ0FTQydcbiAgICAgICAgRU5EIEFTIHNvcnRfb3JkZXIsXG4gICAgICAgIGl4LmluZG51bGxzbm90ZGlzdGluY3QgQVMgbnVsbHNfbm90X2Rpc3RpbmN0XG4gICAgICBGUk9NIHBnX2NsYXNzIHRcbiAgICAgIEpPSU4gcGdfaW5kZXggaXggT04gdC5vaWQgPSBpeC5pbmRyZWxpZFxuICAgICAgSk9JTiBwZ19jbGFzcyBpIE9OIGkub2lkID0gaXguaW5kZXhyZWxpZFxuICAgICAgSk9JTiBwZ19hbSBhbSBPTiBpLnJlbGFtID0gYW0ub2lkXG4gICAgICAgIEpPSU4gTEFURVJBTCB1bm5lc3QoaXguaW5ka2V5LCBpeC5pbmRvcHRpb24pXG4gICAgICAgICAgICBXSVRIIE9SRElOQUxJVFkgQVMgdShhdHRudW0sIG9wdCwgb3JkKSBPTiB0cnVlXG4gICAgICAgIC0tIHVubmVzdOyXkOyEnCDrgpjsmKggYXR0bnVt7Jy866GcIOyngeygkSDsobDsnbhcbiAgICAgIEpPSU4gcGdfYXR0cmlidXRlIGEgT04gYS5hdHRyZWxpZCA9IHQub2lkIEFORCBhLmF0dG51bSA9IHUuYXR0bnVtXG4gICAgICBXSEVSRSB0LnJlbG5hbWUgPSA/XG4gICAgICAgIEFORCBhLmF0dG51bSA9IEFOWShpeC5pbmRrZXkpXG4gICAgICBPUkRFUiBCWSBpLnJlbG5hbWUsIGFycmF5X3Bvc2l0aW9uKGl4LmluZGtleSwgYS5hdHRudW0pXG4gICAgYDtcbiAgICBjb25zdCBpbmRleGVzID0gKGF3YWl0IGNvbXBhcmVEQi5yYXcoaW5kZXhlc1F1ZXJ5LCBbdGFibGVOYW1lXSkpLnJvd3M7XG5cbiAgICAvLyBGb3JlaWduIEtleXMg7KGw7ZqMXG4gICAgY29uc3QgZm9yZWlnbnNRdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICB0Yy5jb25zdHJhaW50X25hbWUsXG4gICAgICAgIGtjdS5jb2x1bW5fbmFtZSxcbiAgICAgICAgY2N1LnRhYmxlX25hbWUgQVMgZm9yZWlnbl90YWJsZV9uYW1lLFxuICAgICAgICBjY3UuY29sdW1uX25hbWUgQVMgZm9yZWlnbl9jb2x1bW5fbmFtZSxcbiAgICAgICAgcmMudXBkYXRlX3J1bGUsXG4gICAgICAgIHJjLmRlbGV0ZV9ydWxlXG4gICAgICBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZV9jb25zdHJhaW50cyBBUyB0Y1xuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEua2V5X2NvbHVtbl91c2FnZSBBUyBrY3VcbiAgICAgICAgT04gdGMuY29uc3RyYWludF9uYW1lID0ga2N1LmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgdGMudGFibGVfc2NoZW1hID0ga2N1LnRhYmxlX3NjaGVtYVxuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEuY29uc3RyYWludF9jb2x1bW5fdXNhZ2UgQVMgY2N1XG4gICAgICAgIE9OIGNjdS5jb25zdHJhaW50X25hbWUgPSB0Yy5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIGNjdS50YWJsZV9zY2hlbWEgPSB0Yy50YWJsZV9zY2hlbWFcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLnJlZmVyZW50aWFsX2NvbnN0cmFpbnRzIEFTIHJjXG4gICAgICAgIE9OIHJjLmNvbnN0cmFpbnRfbmFtZSA9IHRjLmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgcmMuY29uc3RyYWludF9zY2hlbWEgPSB0Yy50YWJsZV9zY2hlbWFcbiAgICAgIFdIRVJFIHRjLmNvbnN0cmFpbnRfdHlwZSA9ICdGT1JFSUdOIEtFWSdcbiAgICAgICAgQU5EIHRjLnRhYmxlX25hbWUgPSA/XG4gICAgYDtcbiAgICBjb25zdCBmb3JlaWducyA9IChhd2FpdCBjb21wYXJlREIucmF3KGZvcmVpZ25zUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cztcblxuICAgIHJldHVybiBbY29sdW1ucywgaW5kZXhlcywgZm9yZWlnbnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9uc+ulvCDsobDtmoztlanri4jri6QuXG4gICAqIHBnX2F0dHJpYnV0ZeydmCBhdHR0eXBtb2Tsl5DshJwg7LCo7JuQIOyImOulvCDstpTstpztlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFZlY3RvckRpbWVuc2lvbnMoXG4gICAgY29tcGFyZURCOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICBhLmF0dG5hbWUgYXMgY29sdW1uX25hbWUsXG4gICAgICAgIGEuYXR0dHlwbW9kIGFzIGRpbWVuc2lvbnNcbiAgICAgIEZST00gcGdfYXR0cmlidXRlIGFcbiAgICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBhLmF0dHJlbGlkID0gYy5vaWRcbiAgICAgIEpPSU4gcGdfdHlwZSB0IE9OIGEuYXR0dHlwaWQgPSB0Lm9pZFxuICAgICAgV0hFUkUgYy5yZWxuYW1lID0gP1xuICAgICAgICBBTkQgdC50eXBuYW1lID0gJ3ZlY3RvcidcbiAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgIGA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29tcGFyZURCLnJhdyhxdWVyeSwgW3RhYmxlTmFtZV0pO1xuICAgIGNvbnN0IGRpbWVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByZXN1bHQucm93cykge1xuICAgICAgLy8gYXR0dHlwbW9k7JeQ7IScIOyLpOygnCBkaW1lbnNpb25zIOqwkiDstpTstpxcbiAgICAgIGRpbWVuc2lvbnNbcm93LmNvbHVtbl9uYW1lXSA9IHJvdy5kaW1lbnNpb25zID4gMCA/IHJvdy5kaW1lbnNpb25zIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogUG9zdGdyZVNRTCDsu6zrn7wg7YOA7J6F7J2EIOu2hOyEne2VmOyXrCBNaWdyYXRpb25Db2x1bW4g6rCd7LK066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICovXG4gIHJlc29sdmVEQkNvbFR5cGUoXG4gICAgZGJDb2x1bW46IFBnQ29sdW1uLFxuICApOiBQaWNrPFxuICAgIE1pZ3JhdGlvbkNvbHVtbixcbiAgICBcInR5cGVcIiB8IFwibGVuZ3RoXCIgfCBcInByZWNpc2lvblwiIHwgXCJzY2FsZVwiIHwgXCJudW1iZXJUeXBlXCIgfCBcImRpbWVuc2lvbnNcIlxuICA+IHtcbiAgICBjb25zdCB7XG4gICAgICB1ZHRfbmFtZTogX3VkdF9uYW1lLFxuICAgICAgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgbnVtZXJpY19wcmVjaXNpb24sXG4gICAgICBudW1lcmljX3NjYWxlLFxuICAgIH0gPSBkYkNvbHVtbjtcblxuICAgIGNvbnN0IHsgdWR0X25hbWUsIHNpbmdsZU9yQXJyYXkgfSA9ICgoKSA9PiB7XG4gICAgICBpZiAoX3VkdF9uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdWR0X25hbWU6IF91ZHRfbmFtZS5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgc2luZ2xlT3JBcnJheTogXCJbXVwiIGFzIGNvbnN0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWR0X25hbWU6IF91ZHRfbmFtZSxcbiAgICAgICAgc2luZ2xlT3JBcnJheTogXCJcIiBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIC8vIFVVSURcbiAgICBpZiAodWR0X25hbWUgPT09IFwidXVpZFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgdXVpZCR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gSW50ZWdlciB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJpbnQ0XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBpbnRlZ2VyJHtzaW5nbGVPckFycmF5fWAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcImludDhcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGJpZ0ludGVnZXIke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIFN0cmluZyB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ2YXJjaGFyXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGBzdHJpbmcke3NpbmdsZU9yQXJyYXl9YCxcbiAgICAgICAgLi4uKGNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCAmJiB7XG4gICAgICAgICAgbGVuZ3RoOiBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYHN0cmluZyR7c2luZ2xlT3JBcnJheX1gIH07IC8vIFN0cmluZ1Byb3Agd2l0aG91dCBsZW5ndGhcbiAgICB9XG5cbiAgICAvLyBOdW1iZXJPck51bWVyaWMgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwibnVtZXJpY1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgbnVtYmVyT3JOdW1lcmljJHtzaW5nbGVPckFycmF5fWAsXG4gICAgICAgIG51bWJlclR5cGU6IFwibnVtZXJpY1wiLFxuICAgICAgICAuLi4obnVtZXJpY19wcmVjaXNpb24gIT09IG51bGwgJiZcbiAgICAgICAgICBudW1lcmljX3NjYWxlICE9PSBudWxsICYmIHtcbiAgICAgICAgICAgIHByZWNpc2lvbjogbnVtZXJpY19wcmVjaXNpb24sXG4gICAgICAgICAgICBzY2FsZTogbnVtZXJpY19zY2FsZSxcbiAgICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJmbG9hdDRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLCBudW1iZXJUeXBlOiBcInJlYWxcIiB9O1xuICAgIH1cbiAgICBpZiAodWR0X25hbWUgPT09IFwiZmxvYXQ4XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBudW1iZXJPck51bWVyaWMke3NpbmdsZU9yQXJyYXl9YCwgbnVtYmVyVHlwZTogXCJkb3VibGUgcHJlY2lzaW9uXCIgfTtcbiAgICB9XG5cbiAgICAvLyBCb29sZWFuXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImJvb2xcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGJvb2xlYW4ke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIFRpbWVzdGFtcHogdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwidGltZXN0YW1wdHpcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGRhdGUke3NpbmdsZU9yQXJyYXl9YCB9OyAvLyBEYXRlUHJvcCDihpIgdGltZXN0YW1wdHpcbiAgICB9XG5cbiAgICAvLyBKU09OXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImpzb25cIiB8fCB1ZHRfbmFtZSA9PT0gXCJqc29uYlwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImpzb25cIiB9O1xuICAgIH1cblxuICAgIC8vIFZlY3RvciAocGd2ZWN0b3IpXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInZlY3RvclwiKSB7XG4gICAgICAvLyB2ZWN0b3Ig7YOA7J6F7J2YIOywqOybkCDsiJjripQgY29sdW1uX2RlZmF1bHTrgpgg67OE64+EIOy/vOumrOuhnCDtmZXsnbjtlbTslbwg7ZWoXG4gICAgICAvLyDtmITsnqzripQg6riw67O46rCSIDDsnLzroZwg7ISk7KCVICjsi6TsoJwgZGltZW5zaW9uc+uKlCBnZXRNaWdyYXRpb25TZXRGcm9tRELsl5DshJwg67OE64+EIOy/vOumrOuhnCDtmZXsnbgpXG4gICAgICByZXR1cm4geyB0eXBlOiBgdmVjdG9yJHtzaW5nbGVPckFycmF5fWAsIGRpbWVuc2lvbnM6IDAgfTtcbiAgICB9XG5cbiAgICAvLyB0c3ZlY3RvciAoUG9zdGdyZVNRTCDsoITrrLgg6rKA7IOJ7JqpIO2DgOyehSlcbiAgICBpZiAodWR0X25hbWUgPT09IFwidHN2ZWN0b3JcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0c3ZlY3RvclwiIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgOuKpe2VnCBQb3N0Z3JlU1FMIOy7rOufvCDtg4DsnoU6ICR7dWR0X25hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgPSBuZXcgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiZ3JvdXAiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyQ2xhc3MiLCJnZXRNaWdyYXRpb25TZXRGcm9tREIiLCJjb21wYXJlREIiLCJ0YWJsZSIsImRiQ29sdW1ucyIsImRiSW5kZXhlcyIsImRiRm9yZWlnbnMiLCJyZWFkVGFibGUiLCJlIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJjb25zb2xlIiwiZXJyb3IiLCJ2ZWN0b3JEaW1lbnNpb25zIiwiZ2V0VmVjdG9yRGltZW5zaW9ucyIsImNvbHVtbnMiLCJtYXAiLCJkYkNvbHVtbiIsImRiQ29sVHlwZSIsInJlc29sdmVEQkNvbFR5cGUiLCJ0eXBlIiwiZGltZW5zaW9ucyIsImNvbHVtbl9uYW1lIiwibmFtZSIsIm51bGxhYmxlIiwiaXNfbnVsbGFibGUiLCJpc19nZW5lcmF0ZWQiLCJnZW5lcmF0ZWQiLCJleHByZXNzaW9uIiwiZ2VuZXJhdGlvbl9leHByZXNzaW9uIiwiY29sdW1uX2RlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImVuZHNXaXRoIiwicmVwbGFjZUFsbCIsImRlZmF1bHRUbyIsImRiSW5kZXhlc0dyb3VwIiwiZmlsdGVyIiwiZGJJbmRleCIsImlzX3ByaW1hcnkiLCJmaW5kIiwiZGJGb3JlaWduIiwiaW5kZXhfbmFtZSIsImNvbnN0cmFpbnRfbmFtZSIsImluZGV4ZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhOYW1lIiwiY3VycmVudEluZGV4ZXMiLCJmaXJzdEluZGV4IiwiaXNfdW5pcXVlIiwiaWR4IiwibnVsbHNGaXJzdCIsIm51bGxzX2ZpcnN0Iiwic29ydE9yZGVyIiwic29ydF9vcmRlciIsIm51bGxzTm90RGlzdGluY3QiLCJudWxsc19ub3RfZGlzdGluY3QiLCJ1c2luZyIsImluZGV4X3R5cGUiLCJmb3JlaWducyIsInRvIiwiZm9yZWlnbl90YWJsZV9uYW1lIiwiZm9yZWlnbl9jb2x1bW5fbmFtZSIsIm9uVXBkYXRlIiwibWFwQ29uc3RyYWludEFjdGlvbiIsInVwZGF0ZV9ydWxlIiwib25EZWxldGUiLCJkZWxldGVfcnVsZSIsImFjdGlvbiIsImFjdGlvbk1hcCIsIlJFU1RSSUNUIiwiQ0FTQ0FERSIsInRhYmxlTmFtZSIsImNvbHVtbnNRdWVyeSIsInJhdyIsInJvd3MiLCJsZW5ndGgiLCJpbmRleGVzUXVlcnkiLCJmb3JlaWduc1F1ZXJ5IiwicXVlcnkiLCJyZXN1bHQiLCJyb3ciLCJ1ZHRfbmFtZSIsIl91ZHRfbmFtZSIsImNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCIsIm51bWVyaWNfcHJlY2lzaW9uIiwibnVtZXJpY19zY2FsZSIsInNpbmdsZU9yQXJyYXkiLCJzdWJzdHJpbmciLCJudW1iZXJUeXBlIiwicHJlY2lzaW9uIiwic2NhbGUiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFFNUIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUEwQ2hDLE1BQU1DO0lBQ0o7Ozs7O0dBS0MsR0FDRCxNQUFNQyxzQkFBc0JDLFNBQWUsRUFBRUMsS0FBYSxFQUFnQztRQUN4RixJQUFJQyxXQUF1QkMsV0FBc0JDO1FBQ2pELElBQUk7WUFDRixDQUFDRixXQUFXQyxXQUFXQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsV0FBV0M7UUFDdkUsRUFBRSxPQUFPSyxHQUFZO1lBQ25CLElBQUlBLGFBQWFDLFNBQVNELEVBQUVFLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLG9CQUFvQjtnQkFDL0QsT0FBTztZQUNUO1lBQ0FDLFFBQVFDLEtBQUssQ0FBQ0w7WUFDZCxPQUFPO1FBQ1Q7UUFFQSwyQkFBMkI7UUFDM0IsTUFBTU0sbUJBQW1CLE1BQU0sSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ2IsV0FBV0M7UUFFbkUsTUFBTWEsVUFBNkJaLFVBQVVhLEdBQUcsQ0FBQyxDQUFDQztZQUNoRCxNQUFNQyxZQUFZLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNGO1lBRXhDLDhCQUE4QjtZQUM5QixJQUFJQyxVQUFVRSxJQUFJLEtBQUssVUFBVTtnQkFDL0JGLFVBQVVHLFVBQVUsR0FBR1IsZ0JBQWdCLENBQUNJLFNBQVNLLFdBQVcsQ0FBQyxJQUFJO1lBQ25FO1lBRUEsT0FBTztnQkFDTEMsTUFBTU4sU0FBU0ssV0FBVztnQkFDMUJFLFVBQVVQLFNBQVNRLFdBQVcsS0FBSztnQkFDbkMsR0FBR1AsU0FBUztnQkFDWixzQkFBc0I7Z0JBQ3RCLEdBQUcsQUFBQyxDQUFB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
|
|
379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGdyb3VwIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWlncmF0aW9uQ29sdW1uLFxuICBNaWdyYXRpb25Gb3JlaWduLFxuICBNaWdyYXRpb25JbmRleCxcbiAgTWlncmF0aW9uU2V0LFxuICBSZWxhdGlvbk9uLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgUGdDb2x1bW4gPSB7XG4gIGNvbHVtbl9uYW1lOiBzdHJpbmc7XG4gIGRhdGFfdHlwZTogc3RyaW5nO1xuICB1ZHRfbmFtZTogc3RyaW5nO1xuICBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGg6IG51bWJlciB8IG51bGw7XG4gIG51bWVyaWNfcHJlY2lzaW9uOiBudW1iZXIgfCBudWxsO1xuICBudW1lcmljX3NjYWxlOiBudW1iZXIgfCBudWxsO1xuICBpc19udWxsYWJsZTogc3RyaW5nO1xuICBjb2x1bW5fZGVmYXVsdDogc3RyaW5nIHwgbnVsbDtcbiAgaXNfZ2VuZXJhdGVkOiBzdHJpbmc7IC8vICdzJyA9IFNUT1JFRCwgJ3YnID0gVklSVFVBTCwgJycgPSBub25lXG4gIGdlbmVyYXRpb25fZXhwcmVzc2lvbjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUGdJbmRleCA9IHtcbiAgaW5kZXhfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBpc191bmlxdWU6IGJvb2xlYW47XG4gIGlzX3ByaW1hcnk6IGJvb2xlYW47XG4gIGluZGV4X3R5cGU6IHN0cmluZztcbiAgbnVsbHNfZmlyc3Q6IGJvb2xlYW47XG4gIHNvcnRfb3JkZXI6IFwiQVNDXCIgfCBcIkRFU0NcIjtcbiAgbnVsbHNfbm90X2Rpc3RpbmN0OiBib29sZWFuO1xufTtcblxudHlwZSBQZ0ZvcmVpZ24gPSB7XG4gIGNvbnN0cmFpbnRfbmFtZTogc3RyaW5nO1xuICBjb2x1bW5fbmFtZTogc3RyaW5nO1xuICBmb3JlaWduX3RhYmxlX25hbWU6IHN0cmluZztcbiAgZm9yZWlnbl9jb2x1bW5fbmFtZTogc3RyaW5nO1xuICB1cGRhdGVfcnVsZTogc3RyaW5nO1xuICBkZWxldGVfcnVsZTogc3RyaW5nO1xufTtcblxuY2xhc3MgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzIHtcbiAgLyoqXG4gICAqIERC7JeQ7IScIO2FjOydtOu4lCDsoJXrs7Trpbwg7J297Ja07IScIE1pZ3JhdGlvblNldOydhCDrp4zrk6TslrTsmLXri4jri6QuXG4gICAqIEBwYXJhbSBjb21wYXJlREIgS25leCDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIHRhYmxlIO2FjOydtOu4lCDsnbTrpoRcbiAgICogQHJldHVybnMgTWlncmF0aW9uU2V0IOqwneyytFxuICAgKi9cbiAgYXN5bmMgZ2V0TWlncmF0aW9uU2V0RnJvbURCKGNvbXBhcmVEQjogS25leCwgdGFibGU6IHN0cmluZyk6IFByb21pc2U8TWlncmF0aW9uU2V0IHwgbnVsbD4ge1xuICAgIGxldCBkYkNvbHVtbnM6IFBnQ29sdW1uW10sIGRiSW5kZXhlczogUGdJbmRleFtdLCBkYkZvcmVpZ25zOiBQZ0ZvcmVpZ25bXTtcbiAgICB0cnkge1xuICAgICAgW2RiQ29sdW1ucywgZGJJbmRleGVzLCBkYkZvcmVpZ25zXSA9IGF3YWl0IHRoaXMucmVhZFRhYmxlKGNvbXBhcmVEQiwgdGFibGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKFwiVGFibGUgbm90IGZvdW5kXCIpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9ucyDsobDtmoxcbiAgICBjb25zdCB2ZWN0b3JEaW1lbnNpb25zID0gYXdhaXQgdGhpcy5nZXRWZWN0b3JEaW1lbnNpb25zKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gICAgY29uc3QgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBkYkNvbHVtbnMubWFwKChkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZGJDb2xUeXBlID0gdGhpcy5yZXNvbHZlREJDb2xUeXBlKGRiQ29sdW1uKTtcblxuICAgICAgLy8gdmVjdG9yIO2DgOyeheyduCDqsr3smrAgZGltZW5zaW9ucyDshKTsoJVcbiAgICAgIGlmIChkYkNvbFR5cGUudHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgICAgICBkYkNvbFR5cGUuZGltZW5zaW9ucyA9IHZlY3RvckRpbWVuc2lvbnNbZGJDb2x1bW4uY29sdW1uX25hbWVdID8/IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRiQ29sdW1uLmNvbHVtbl9uYW1lLFxuICAgICAgICBudWxsYWJsZTogZGJDb2x1bW4uaXNfbnVsbGFibGUgPT09IFwiWUVTXCIsXG4gICAgICAgIC4uLmRiQ29sVHlwZSxcbiAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsspjrpqxcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICBpZiAoZGJDb2x1bW4uaXNfZ2VuZXJhdGVkID09PSBcInNcIiB8fCBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwidlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiID8gXCJTVE9SRURcIiA6IFwiVklSVFVBTFwiLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGRiQ29sdW1uLmdlbmVyYXRpb25fZXhwcmVzc2lvbiA/PyBcIlwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9KSgpLFxuICAgICAgICAvLyBEZWZhdWx0IOqwkiDsspjrpqwgKEdlbmVyYXRlZCBDb2x1bW7snbQg7JWE64uMIOqyveyasOunjClcbiAgICAgICAgLi4uKCgpID0+IHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIGRlZmF1bHQg6rCS7J20IOyXhuydjFxuICAgICAgICAgIGlmIChkYkNvbHVtbi5pc19nZW5lcmF0ZWQgPT09IFwic1wiIHx8IGRiQ29sdW1uLmlzX2dlbmVyYXRlZCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFBvc3RncmVTUUwgZGVmYXVsdCDqsJIg7KCV66asIChuZXh0dmFsLCBDVVJSRU5UX1RJTUVTVEFNUCDrk7EpXG4gICAgICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gZGJDb2x1bW4uY29sdW1uX2RlZmF1bHQ7XG5cbiAgICAgICAgICAgIC8vIG5leHR2YWwg7KCc6rGwIChTRVJJQUwg7YOA7J6FKVxuICAgICAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZS5zdGFydHNXaXRoKFwibmV4dHZhbChcIikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDtg4DsnoUg7LqQ7Iqk7YyFIOygnOqxsCAo7JiIOiAnMSc6OmludGVnZXIg4oaSIDEpXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUucmVwbGFjZSgvOjpbXFx3XFxzXSskL2csIFwiXCIpO1xuXG4gICAgICAgICAgICAvLyDrlLDsmLTtkZzqsIAgc2luZ2xlIHF1b3Rl7J24IOqyveyasCBkb3VibGUgcXVvdGXroZwg67OA7ZmYXG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIGRlZmF1bHRWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnJlcGxhY2VBbGwoXCInXCIsICdcIicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkZWZhdWx0VG86IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfSkoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBQUklNQVJZIEtFWeyZgCBmb3JlaWduIGtleeyaqSDsnbjrjbHsiqQg7KCc7Jm4XG4gICAgY29uc3QgZGJJbmRleGVzR3JvdXAgPSBncm91cChcbiAgICAgIGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgICAgIChkYkluZGV4KSA9PlxuICAgICAgICAgICFkYkluZGV4LmlzX3ByaW1hcnkgJiZcbiAgICAgICAgICAhZGJGb3JlaWducy5maW5kKChkYkZvcmVpZ24pID0+IGRiSW5kZXguaW5kZXhfbmFtZS5pbmNsdWRlcyhkYkZvcmVpZ24uY29uc3RyYWludF9uYW1lKSksXG4gICAgICApLFxuICAgICAgKGRiSW5kZXgpID0+IGRiSW5kZXguaW5kZXhfbmFtZSxcbiAgICApO1xuXG4gICAgLy8gaW5kZXhlcyDsspjrpqxcbiAgICBjb25zdCBpbmRleGVzOiBNaWdyYXRpb25JbmRleFtdID0gT2JqZWN0LmtleXMoZGJJbmRleGVzR3JvdXApLm1hcCgoaW5kZXhOYW1lKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXhlcyA9IGRiSW5kZXhlc0dyb3VwW2luZGV4TmFtZV07XG4gICAgICBhc3NlcnQoY3VycmVudEluZGV4ZXMpO1xuXG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gY3VycmVudEluZGV4ZXNbMF07XG4gICAgICBjb25zdCB0eXBlID0gZmlyc3RJbmRleC5pc191bmlxdWUgPyBcInVuaXF1ZVwiIDogXCJpbmRleFwiO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBuYW1lOiBpbmRleE5hbWUsXG4gICAgICAgIGNvbHVtbnM6IGN1cnJlbnRJbmRleGVzLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGlkeC5jb2x1bW5fbmFtZSxcbiAgICAgICAgICBudWxsc0ZpcnN0OiBpZHgubnVsbHNfZmlyc3QsXG4gICAgICAgICAgc29ydE9yZGVyOiBpZHguc29ydF9vcmRlcixcbiAgICAgICAgfSkpLFxuICAgICAgICBudWxsc05vdERpc3RpbmN0OiBmaXJzdEluZGV4Lm51bGxzX25vdF9kaXN0aW5jdCxcbiAgICAgICAgdXNpbmc6IGZpcnN0SW5kZXguaW5kZXhfdHlwZSBhcyBcImJ0cmVlXCIgfCBcImhhc2hcIiB8IFwiZ2luXCIgfCBcImdpc3RcIiB8IFwicGdyb29uZ2FcIiB8IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBmb3JlaWducyDsspjrpqxcbiAgICBjb25zdCBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdID0gZGJGb3JlaWducy5tYXAoKGRiRm9yZWlnbikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogW2RiRm9yZWlnbi5jb2x1bW5fbmFtZV0sXG4gICAgICAgIHRvOiBgJHtkYkZvcmVpZ24uZm9yZWlnbl90YWJsZV9uYW1lfS4ke2RiRm9yZWlnbi5mb3JlaWduX2NvbHVtbl9uYW1lfWAsXG4gICAgICAgIG9uVXBkYXRlOiB0aGlzLm1hcENvbnN0cmFpbnRBY3Rpb24oZGJGb3JlaWduLnVwZGF0ZV9ydWxlKSxcbiAgICAgICAgb25EZWxldGU6IHRoaXMubWFwQ29uc3RyYWludEFjdGlvbihkYkZvcmVpZ24uZGVsZXRlX3J1bGUpLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YWJsZSxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBpbmRleGVzLFxuICAgICAgZm9yZWlnbnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0Z3JlU1FM7J2YIGNvbnN0cmFpbnQgYWN0aW9u7J2EIEtuZXgg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBtYXBDb25zdHJhaW50QWN0aW9uKGFjdGlvbjogc3RyaW5nKTogUmVsYXRpb25PbiB7XG4gICAgY29uc3QgYWN0aW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbk9uPiA9IHtcbiAgICAgIFwiTk8gQUNUSU9OXCI6IFwiTk8gQUNUSU9OXCIsXG4gICAgICBSRVNUUklDVDogXCJSRVNUUklDVFwiLFxuICAgICAgQ0FTQ0FERTogXCJDQVNDQURFXCIsXG4gICAgICBcIlNFVCBOVUxMXCI6IFwiU0VUIE5VTExcIixcbiAgICAgIFwiU0VUIERFRkFVTFRcIjogXCJTRVQgREVGQVVMVFwiLFxuICAgIH07XG4gICAgcmV0dXJuIGFjdGlvbk1hcFthY3Rpb25dID8/IFwiTk8gQUNUSU9OXCI7XG4gIH1cblxuICAvKipcbiAgICog6riw7KG0IO2FjOydtOu4lCDsnb3slrTshJwgY29scywgaW5kZXhlcywgZm9yZWlnbnMg67CY7ZmYXG4gICAqL1xuICBhc3luYyByZWFkVGFibGUoXG4gICAgY29tcGFyZURCOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPFtQZ0NvbHVtbltdLCBQZ0luZGV4W10sIFBnRm9yZWlnbltdXT4ge1xuICAgIC8vIENvbHVtbnMg7KGw7ZqMIChHZW5lcmF0ZWQgQ29sdW1uIOygleuztCDtj6ztlagpXG4gICAgY29uc3QgY29sdW1uc1F1ZXJ5ID0gYFxuICAgICAgU0VMRUNUXG4gICAgICAgIGMuY29sdW1uX25hbWUsXG4gICAgICAgIGMuZGF0YV90eXBlLFxuICAgICAgICBjLnVkdF9uYW1lLFxuICAgICAgICBjLmNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCxcbiAgICAgICAgYy5udW1lcmljX3ByZWNpc2lvbixcbiAgICAgICAgYy5udW1lcmljX3NjYWxlLFxuICAgICAgICBjLmlzX251bGxhYmxlLFxuICAgICAgICBjLmNvbHVtbl9kZWZhdWx0LFxuICAgICAgICBDT0FMRVNDRShhLmF0dGdlbmVyYXRlZCwgJycpIGFzIGlzX2dlbmVyYXRlZCxcbiAgICAgICAgYy5nZW5lcmF0aW9uX2V4cHJlc3Npb25cbiAgICAgIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgY1xuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0bmFtZSA9IGMuY29sdW1uX25hbWVcbiAgICAgICAgQU5EIGEuYXR0cmVsaWQgPSAoXG4gICAgICAgICAgU0VMRUNUIG9pZCBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSBjLnRhYmxlX25hbWVcbiAgICAgICAgICBBTkQgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGMudGFibGVfc2NoZW1hKVxuICAgICAgICApXG4gICAgICBXSEVSRSBjLnRhYmxlX25hbWUgPSA/XG4gICAgICAgIEFORCBjLnRhYmxlX3NjaGVtYSA9ICdwdWJsaWMnXG4gICAgICBPUkRFUiBCWSBjLm9yZGluYWxfcG9zaXRpb25cbiAgICBgO1xuICAgIGNvbnN0IGNvbHVtbnMgPSAoYXdhaXQgY29tcGFyZURCLnJhdyhjb2x1bW5zUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cyBhcyBQZ0NvbHVtbltdO1xuICAgIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBub3QgZm91bmQ6ICR7dGFibGVOYW1lfWApO1xuICAgIH1cblxuICAgIC8vIEluZGV4ZXMg7KGw7ZqMIChQR3Jvb25nYSDtkZztmITsi50g7J24642x7IqkIO2PrO2VqClcbiAgICBjb25zdCBpbmRleGVzUXVlcnkgPSBgXG4gICAgICBTRUxFQ1RcbiAgICAgICAgICBpLnJlbG5hbWUgQVMgaW5kZXhfbmFtZSxcbiAgICAgICAgICBDQVNFXG4gICAgICAgICAgICAgIFdIRU4gYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwIFRIRU5cbiAgICAgICAgICAgICAgICAgIHJlZ2V4cF9yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4cF9yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBUUklNKHBncm9vbmdhX2NvbC5jb2x1bW5fZXhwciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc6OnRleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAnWygpXScsXG4gICAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICAgJ2cnXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIEVMU0UgYS5hdHRuYW1lXG4gICAgICAgICAgRU5EIEFTIGNvbHVtbl9uYW1lLFxuICAgICAgICAgIGl4LmluZGlzdW5pcXVlIEFTIGlzX3VuaXF1ZSxcbiAgICAgICAgICBpeC5pbmRpc3ByaW1hcnkgQVMgaXNfcHJpbWFyeSxcbiAgICAgICAgICBhbS5hbW5hbWUgQVMgaW5kZXhfdHlwZSxcbiAgICAgICAgICBDT0FMRVNDRSgodS5vcHQgJiAyKSA9IDIsIEZBTFNFKSBBUyBudWxsc19maXJzdCxcbiAgICAgICAgICBDQVNFIFxuICAgICAgICAgICAgICBXSEVOICh1Lm9wdCAmIDEpID0gMSBUSEVOICdERVNDJ1xuICAgICAgICAgICAgICBFTFNFICdBU0MnXG4gICAgICAgICAgRU5EIEFTIHNvcnRfb3JkZXIsXG4gICAgICAgICAgaXguaW5kbnVsbHNub3RkaXN0aW5jdCBBUyBudWxsc19ub3RfZGlzdGluY3RcbiAgICAgIEZST00gcGdfY2xhc3MgdFxuICAgICAgSk9JTiBwZ19pbmRleCBpeCBPTiB0Lm9pZCA9IGl4LmluZHJlbGlkXG4gICAgICBKT0lOIHBnX2NsYXNzIGkgT04gaS5vaWQgPSBpeC5pbmRleHJlbGlkXG4gICAgICBKT0lOIHBnX2FtIGFtIE9OIGkucmVsYW0gPSBhbS5vaWRcbiAgICAgIEpPSU4gTEFURVJBTCB1bm5lc3QoaXguaW5ka2V5LCBpeC5pbmRvcHRpb24pXG4gICAgICAgICAgV0lUSCBPUkRJTkFMSVRZIEFTIHUoYXR0bnVtLCBvcHQsIG9yZCkgT04gdHJ1ZVxuICAgICAgTEVGVCBKT0lOIHBnX2F0dHJpYnV0ZSBhIE9OIGEuYXR0cmVsaWQgPSB0Lm9pZCBcbiAgICAgICAgICBBTkQgYS5hdHRudW0gPSB1LmF0dG51bSBcbiAgICAgICAgICBBTkQgdS5hdHRudW0gPiAwXG4gICAgICBMRUZUIEpPSU4gTEFURVJBTCAoXG4gICAgICAgICAgU0VMRUNUIFxuICAgICAgICAgICAgICB1bm5lc3QoXG4gICAgICAgICAgICAgICAgICBDQVNFIFxuICAgICAgICAgICAgICAgICAgICAgIFdIRU4gcGdfZ2V0X2V4cHIoaXguaW5kZXhwcnMsIGl4LmluZHJlbGlkKSB+ICdeQVJSQVlcXFxcWycgVEhFTlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdG9fYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdleHBfcmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZXhwcihpeC5pbmRleHBycywgaXguaW5kcmVsaWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeQVJSQVlcXFxcWyguKilcXFxcXSQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXFxcMSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBFTFNFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZW3BnX2dldF9leHByKGl4LmluZGV4cHJzLCBpeC5pbmRyZWxpZCldXG4gICAgICAgICAgICAgICAgICBFTkRcbiAgICAgICAgICAgICAgKSBhcyBjb2x1bW5fZXhwclxuICAgICAgKSBwZ3Jvb25nYV9jb2wgT04gYW0uYW1uYW1lID0gJ3Bncm9vbmdhJyBBTkQgdS5hdHRudW0gPSAwXG4gICAgICBXSEVSRSB0LnJlbG5hbWUgPSA/XG4gICAgICAgICAgQU5EICh1LmF0dG51bSA+IDAgT1IgKGFtLmFtbmFtZSA9ICdwZ3Jvb25nYScgQU5EIHUuYXR0bnVtID0gMCkpXG4gICAgICBPUkRFUiBCWSBpLnJlbG5hbWUsIHUub3JkO1xuYDtcbiAgICBjb25zdCBpbmRleGVzID0gKGF3YWl0IGNvbXBhcmVEQi5yYXcoaW5kZXhlc1F1ZXJ5LCBbdGFibGVOYW1lXSkpLnJvd3M7XG5cbiAgICAvLyBGb3JlaWduIEtleXMg7KGw7ZqMXG4gICAgY29uc3QgZm9yZWlnbnNRdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICB0Yy5jb25zdHJhaW50X25hbWUsXG4gICAgICAgIGtjdS5jb2x1bW5fbmFtZSxcbiAgICAgICAgY2N1LnRhYmxlX25hbWUgQVMgZm9yZWlnbl90YWJsZV9uYW1lLFxuICAgICAgICBjY3UuY29sdW1uX25hbWUgQVMgZm9yZWlnbl9jb2x1bW5fbmFtZSxcbiAgICAgICAgcmMudXBkYXRlX3J1bGUsXG4gICAgICAgIHJjLmRlbGV0ZV9ydWxlXG4gICAgICBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZV9jb25zdHJhaW50cyBBUyB0Y1xuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEua2V5X2NvbHVtbl91c2FnZSBBUyBrY3VcbiAgICAgICAgT04gdGMuY29uc3RyYWludF9uYW1lID0ga2N1LmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgdGMudGFibGVfc2NoZW1hID0ga2N1LnRhYmxlX3NjaGVtYVxuICAgICAgSk9JTiBpbmZvcm1hdGlvbl9zY2hlbWEuY29uc3RyYWludF9jb2x1bW5fdXNhZ2UgQVMgY2N1XG4gICAgICAgIE9OIGNjdS5jb25zdHJhaW50X25hbWUgPSB0Yy5jb25zdHJhaW50X25hbWVcbiAgICAgICAgQU5EIGNjdS50YWJsZV9zY2hlbWEgPSB0Yy50YWJsZV9zY2hlbWFcbiAgICAgIEpPSU4gaW5mb3JtYXRpb25fc2NoZW1hLnJlZmVyZW50aWFsX2NvbnN0cmFpbnRzIEFTIHJjXG4gICAgICAgIE9OIHJjLmNvbnN0cmFpbnRfbmFtZSA9IHRjLmNvbnN0cmFpbnRfbmFtZVxuICAgICAgICBBTkQgcmMuY29uc3RyYWludF9zY2hlbWEgPSB0Yy50YWJsZV9zY2hlbWFcbiAgICAgIFdIRVJFIHRjLmNvbnN0cmFpbnRfdHlwZSA9ICdGT1JFSUdOIEtFWSdcbiAgICAgICAgQU5EIHRjLnRhYmxlX25hbWUgPSA/XG4gICAgYDtcbiAgICBjb25zdCBmb3JlaWducyA9IChhd2FpdCBjb21wYXJlREIucmF3KGZvcmVpZ25zUXVlcnksIFt0YWJsZU5hbWVdKSkucm93cztcblxuICAgIHJldHVybiBbY29sdW1ucywgaW5kZXhlcywgZm9yZWlnbnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIHZlY3RvciDsu6zrn7zsnZggZGltZW5zaW9uc+ulvCDsobDtmoztlanri4jri6QuXG4gICAqIHBnX2F0dHJpYnV0ZeydmCBhdHR0eXBtb2Tsl5DshJwg7LCo7JuQIOyImOulvCDstpTstpztlanri4jri6QuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFZlY3RvckRpbWVuc2lvbnMoXG4gICAgY29tcGFyZURCOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIFNFTEVDVFxuICAgICAgICBhLmF0dG5hbWUgYXMgY29sdW1uX25hbWUsXG4gICAgICAgIGEuYXR0dHlwbW9kIGFzIGRpbWVuc2lvbnNcbiAgICAgIEZST00gcGdfYXR0cmlidXRlIGFcbiAgICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBhLmF0dHJlbGlkID0gYy5vaWRcbiAgICAgIEpPSU4gcGdfdHlwZSB0IE9OIGEuYXR0dHlwaWQgPSB0Lm9pZFxuICAgICAgV0hFUkUgYy5yZWxuYW1lID0gP1xuICAgICAgICBBTkQgdC50eXBuYW1lID0gJ3ZlY3RvcidcbiAgICAgICAgQU5EIGEuYXR0bnVtID4gMFxuICAgIGA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29tcGFyZURCLnJhdyhxdWVyeSwgW3RhYmxlTmFtZV0pO1xuICAgIGNvbnN0IGRpbWVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByZXN1bHQucm93cykge1xuICAgICAgLy8gYXR0dHlwbW9k7JeQ7IScIOyLpOygnCBkaW1lbnNpb25zIOqwkiDstpTstpxcbiAgICAgIGRpbWVuc2lvbnNbcm93LmNvbHVtbl9uYW1lXSA9IHJvdy5kaW1lbnNpb25zID4gMCA/IHJvdy5kaW1lbnNpb25zIDogMDtcbiAgICB9XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogUG9zdGdyZVNRTCDsu6zrn7wg7YOA7J6F7J2EIOu2hOyEne2VmOyXrCBNaWdyYXRpb25Db2x1bW4g6rCd7LK066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICovXG4gIHJlc29sdmVEQkNvbFR5cGUoXG4gICAgZGJDb2x1bW46IFBnQ29sdW1uLFxuICApOiBQaWNrPFxuICAgIE1pZ3JhdGlvbkNvbHVtbixcbiAgICBcInR5cGVcIiB8IFwibGVuZ3RoXCIgfCBcInByZWNpc2lvblwiIHwgXCJzY2FsZVwiIHwgXCJudW1iZXJUeXBlXCIgfCBcImRpbWVuc2lvbnNcIlxuICA+IHtcbiAgICBjb25zdCB7XG4gICAgICB1ZHRfbmFtZTogX3VkdF9uYW1lLFxuICAgICAgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoLFxuICAgICAgbnVtZXJpY19wcmVjaXNpb24sXG4gICAgICBudW1lcmljX3NjYWxlLFxuICAgIH0gPSBkYkNvbHVtbjtcblxuICAgIGNvbnN0IHsgdWR0X25hbWUsIHNpbmdsZU9yQXJyYXkgfSA9ICgoKSA9PiB7XG4gICAgICBpZiAoX3VkdF9uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdWR0X25hbWU6IF91ZHRfbmFtZS5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgc2luZ2xlT3JBcnJheTogXCJbXVwiIGFzIGNvbnN0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdWR0X25hbWU6IF91ZHRfbmFtZSxcbiAgICAgICAgc2luZ2xlT3JBcnJheTogXCJcIiBhcyBjb25zdCxcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIC8vIFVVSURcbiAgICBpZiAodWR0X25hbWUgPT09IFwidXVpZFwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBgdXVpZCR7c2luZ2xlT3JBcnJheX1gIH07XG4gICAgfVxuXG4gICAgLy8gSW50ZWdlciB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJpbnQ0XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBpbnRlZ2VyJHtzaW5nbGVPckFycmF5fWAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcImludDhcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGJpZ0ludGVnZXIke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIFN0cmluZyB0eXBlc1xuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJ2YXJjaGFyXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IGBzdHJpbmcke3NpbmdsZU9yQXJyYXl9YCxcbiAgICAgICAgLi4uKGNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCAmJiB7XG4gICAgICAgICAgbGVuZ3RoOiBjaGFyYWN0ZXJfbWF4aW11bV9sZW5ndGgsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHVkdF9uYW1lID09PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYHN0cmluZyR7c2luZ2xlT3JBcnJheX1gIH07IC8vIFN0cmluZ1Byb3Agd2l0aG91dCBsZW5ndGhcbiAgICB9XG5cbiAgICAvLyBOdW1iZXJPck51bWVyaWMgdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwibnVtZXJpY1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBgbnVtYmVyT3JOdW1lcmljJHtzaW5nbGVPckFycmF5fWAsXG4gICAgICAgIG51bWJlclR5cGU6IFwibnVtZXJpY1wiLFxuICAgICAgICAuLi4obnVtZXJpY19wcmVjaXNpb24gIT09IG51bGwgJiZcbiAgICAgICAgICBudW1lcmljX3NjYWxlICE9PSBudWxsICYmIHtcbiAgICAgICAgICAgIHByZWNpc2lvbjogbnVtZXJpY19wcmVjaXNpb24sXG4gICAgICAgICAgICBzY2FsZTogbnVtZXJpY19zY2FsZSxcbiAgICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh1ZHRfbmFtZSA9PT0gXCJmbG9hdDRcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYG51bWJlck9yTnVtZXJpYyR7c2luZ2xlT3JBcnJheX1gLCBudW1iZXJUeXBlOiBcInJlYWxcIiB9O1xuICAgIH1cbiAgICBpZiAodWR0X25hbWUgPT09IFwiZmxvYXQ4XCIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IGBudW1iZXJPck51bWVyaWMke3NpbmdsZU9yQXJyYXl9YCwgbnVtYmVyVHlwZTogXCJkb3VibGUgcHJlY2lzaW9uXCIgfTtcbiAgICB9XG5cbiAgICAvLyBCb29sZWFuXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImJvb2xcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGJvb2xlYW4ke3NpbmdsZU9yQXJyYXl9YCB9O1xuICAgIH1cblxuICAgIC8vIFRpbWVzdGFtcHogdHlwZXNcbiAgICBpZiAodWR0X25hbWUgPT09IFwidGltZXN0YW1wdHpcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogYGRhdGUke3NpbmdsZU9yQXJyYXl9YCB9OyAvLyBEYXRlUHJvcCDihpIgdGltZXN0YW1wdHpcbiAgICB9XG5cbiAgICAvLyBKU09OXG4gICAgaWYgKHVkdF9uYW1lID09PSBcImpzb25cIiB8fCB1ZHRfbmFtZSA9PT0gXCJqc29uYlwiKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImpzb25cIiB9O1xuICAgIH1cblxuICAgIC8vIFZlY3RvciAocGd2ZWN0b3IpXG4gICAgaWYgKHVkdF9uYW1lID09PSBcInZlY3RvclwiKSB7XG4gICAgICAvLyB2ZWN0b3Ig7YOA7J6F7J2YIOywqOybkCDsiJjripQgY29sdW1uX2RlZmF1bHTrgpgg67OE64+EIOy/vOumrOuhnCDtmZXsnbjtlbTslbwg7ZWoXG4gICAgICAvLyDtmITsnqzripQg6riw67O46rCSIDDsnLzroZwg7ISk7KCVICjsi6TsoJwgZGltZW5zaW9uc+uKlCBnZXRNaWdyYXRpb25TZXRGcm9tRELsl5DshJwg67OE64+EIOy/vOumrOuhnCDtmZXsnbgpXG4gICAgICByZXR1cm4geyB0eXBlOiBgdmVjdG9yJHtzaW5nbGVPckFycmF5fWAsIGRpbWVuc2lvbnM6IDAgfTtcbiAgICB9XG5cbiAgICAvLyB0c3ZlY3RvciAoUG9zdGdyZVNRTCDsoITrrLgg6rKA7IOJ7JqpIO2DgOyehSlcbiAgICBpZiAodWR0X25hbWUgPT09IFwidHN2ZWN0b3JcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0c3ZlY3RvclwiIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgOuKpe2VnCBQb3N0Z3JlU1FMIOy7rOufvCDtg4DsnoU6ICR7dWR0X25hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgPSBuZXcgUG9zdGdyZVNRTFNjaGVtYVJlYWRlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiZ3JvdXAiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyQ2xhc3MiLCJnZXRNaWdyYXRpb25TZXRGcm9tREIiLCJjb21wYXJlREIiLCJ0YWJsZSIsImRiQ29sdW1ucyIsImRiSW5kZXhlcyIsImRiRm9yZWlnbnMiLCJyZWFkVGFibGUiLCJlIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJjb25zb2xlIiwiZXJyb3IiLCJ2ZWN0b3JEaW1lbnNpb25zIiwiZ2V0VmVjdG9yRGltZW5zaW9ucyIsImNvbHVtbnMiLCJtYXAiLCJkYkNvbHVtbiIsImRiQ29sVHlwZSIsInJlc29sdmVEQkNvbFR5cGUiLCJ0eXBlIiwiZGltZW5zaW9ucyIsImNvbHVtbl9uYW1lIiwibmFtZSIsIm51bGxhYmxlIiwiaXNfbnVsbGFibGUiLCJpc19nZW5lcmF0ZWQiLCJnZW5lcmF0ZWQiLCJleHByZXNzaW9uIiwiZ2VuZXJhdGlvbl9leHByZXNzaW9uIiwiY29sdW1uX2RlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImVuZHNXaXRoIiwicmVwbGFjZUFsbCIsImRlZmF1bHRUbyIsImRiSW5kZXhlc0dyb3VwIiwiZmlsdGVyIiwiZGJJbmRleCIsImlzX3ByaW1hcnkiLCJmaW5kIiwiZGJGb3JlaWduIiwiaW5kZXhfbmFtZSIsImNvbnN0cmFpbnRfbmFtZSIsImluZGV4ZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5kZXhOYW1lIiwiY3VycmVudEluZGV4ZXMiLCJmaXJzdEluZGV4IiwiaXNfdW5pcXVlIiwiaWR4IiwibnVsbHNGaXJzdCIsIm51bGxzX2ZpcnN0Iiwic29ydE9yZGVyIiwic29ydF9vcmRlciIsIm51bGxzTm90RGlzdGluY3QiLCJudWxsc19ub3RfZGlzdGluY3QiLCJ1c2luZyIsImluZGV4X3R5cGUiLCJmb3JlaWducyIsInRvIiwiZm9yZWlnbl90YWJsZV9uYW1lIiwiZm9yZWlnbl9jb2x1bW5fbmFtZSIsIm9uVXBkYXRlIiwibWFwQ29uc3RyYWludEFjdGlvbiIsInVwZGF0ZV9ydWxlIiwib25EZWxldGUiLCJkZWxldGVfcnVsZSIsImFjdGlvbiIsImFjdGlvbk1hcCIsIlJFU1RSSUNUIiwiQ0FTQ0FERSIsInRhYmxlTmFtZSIsImNvbHVtbnNRdWVyeSIsInJhdyIsInJvd3MiLCJsZW5ndGgiLCJpbmRleGVzUXVlcnkiLCJmb3JlaWduc1F1ZXJ5IiwicXVlcnkiLCJyZXN1bHQiLCJyb3ciLCJ1ZHRfbmFtZSIsIl91ZHRfbmFtZSIsImNoYXJhY3Rlcl9tYXhpbXVtX2xlbmd0aCIsIm51bWVyaWNfcHJlY2lzaW9uIiwibnVtZXJpY19zY2FsZSIsInNpbmdsZU9yQXJyYXkiLCJzdWJzdHJpbmciLCJudW1iZXJUeXBlIiwicHJlY2lzaW9uIiwic2NhbGUiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFFNUIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUEwQ2hDLE1BQU1DO0lBQ0o7Ozs7O0dBS0MsR0FDRCxNQUFNQyxzQkFBc0JDLFNBQWUsRUFBRUMsS0FBYSxFQUFnQztRQUN4RixJQUFJQyxXQUF1QkMsV0FBc0JDO1FBQ2pELElBQUk7WUFDRixDQUFDRixXQUFXQyxXQUFXQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsV0FBV0M7UUFDdkUsRUFBRSxPQUFPSyxHQUFZO1lBQ25CLElBQUlBLGFBQWFDLFNBQVNELEVBQUVFLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLG9CQUFvQjtnQkFDL0QsT0FBTztZQUNUO1lBQ0FDLFFBQVFDLEtBQUssQ0FBQ0w7WUFDZCxPQUFPO1FBQ1Q7UUFFQSwyQkFBMkI7UUFDM0IsTUFBTU0sbUJBQW1CLE1BQU0s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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging-types.d.ts","sourceRoot":"","sources":["../../src/naite/messaging-types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,yBAAiB,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"messaging-types.d.ts","sourceRoot":"","sources":["../../src/naite/messaging-types.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,yBAAiB,mBAAmB,CAAC;IACnC,KAAY,oBAAoB,GAAG;QACjC,IAAI,EAAE,WAAW,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,KAAY,sBAAsB,GAAG;QACnC,IAAI,EAAE,aAAa,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,UAAU,CAAC;IAEf,KAAY,kBAAkB,GAAG;QAC/B,IAAI,EAAE,SAAS,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,KAAY,YAAY,GAAG,oBAAoB,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;IAE9F,KAAY,UAAU,GAAG;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,GAAG,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IAEF,KAAY,SAAS,GAAG;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,KAAY,UAAU,GAAG;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH"}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* 이 파일은 cartanova-ai/sonamu와 cartanova-ai/vscode-sonamu에서 공통으로 사용됩니다.
|
|
5
5
|
*/ export { };
|
|
6
6
|
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYWl0ZS9tZXNzYWdpbmctdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogTmFpdGXripQgZXhwZWN07JmAIO2YuOydke2VmOuPhOuhnSBhbnnrpbwg7ZeI7Jqp7ZWoXG5cbi8qKlxuICogU29uYW11IGV4dGVuc2lvbuqzvCDqs7XsnKDtlZjripQgTmFpdGUg66mU7Iuc7KeVIOq0gOugqCDtg4DsnoUg7KCV7J2Y65Ok7J6F64uI64ukLlxuICog7J20IO2MjOydvOydgCBjYXJ0YW5vdmEtYWkvc29uYW117JmAIGNhcnRhbm92YS1haS92c2NvZGUtc29uYW117JeQ7IScIOqzte2GteycvOuhnCDsgqzsmqnrkKnri4jri6QuXG4gKi9cbmV4cG9ydCBuYW1lc3BhY2UgTmFpdGVNZXNzYWdpbmdUeXBlcyB7XG4gIGV4cG9ydCB0eXBlIE5haXRlUnVuU3RhcnRNZXNzYWdlID0ge1xuICAgIHR5cGU6IFwicnVuL3N0YXJ0XCI7XG4gICAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTmFpdGVUZXN0UmVzdWx0TWVzc2FnZSA9IHtcbiAgICB0eXBlOiBcInRlc3QvcmVzdWx0XCI7XG4gICAgcmVjZWl2ZWRBdDogc3RyaW5nO1xuICB9ICYgVGVzdFJlc3VsdDtcblxuICBleHBvcnQgdHlwZSBOYWl0ZVJ1bkVuZE1lc3NhZ2UgPSB7XG4gICAgdHlwZTogXCJydW4vZW5kXCI7XG4gICAgZW5kZWRBdDogc3RyaW5nO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIE5haXRlTWVzc2FnZSA9IE5haXRlUnVuU3RhcnRNZXNzYWdlIHwgTmFpdGVUZXN0UmVzdWx0TWVzc2FnZSB8IE5haXRlUnVuRW5kTWVzc2FnZTtcblxuICBleHBvcnQgdHlwZSBOYWl0ZVRyYWNlID0ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgZmlsZVBhdGg6IHN0cmluZztcbiAgICBsaW5lTnVtYmVyOiBudW1iZXI7XG4gICAgYXQ6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBUZXN0RXJyb3IgPSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHN0YWNrPzogc3RyaW5nO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFRlc3RSZXN1bHQgPSB7XG4gICAgc3VpdGVOYW1lOiBzdHJpbmc7XG4gICAgc3VpdGVGaWxlUGF0aD86IHN0cmluZztcbiAgICB0ZXN0TmFtZTogc3RyaW5nO1xuICAgIHRlc3RGaWxlUGF0aDogc3RyaW5nO1xuICAgIHRlc3RMaW5lOiBudW1iZXI7XG4gICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgZHVyYXRpb246IG51bWJlcjtcbiAgICBlcnJvcj86IFRlc3RFcnJvcjtcbiAgICB0cmFjZXM6IE5haXRlVHJhY2VbXTtcbiAgICByZWNlaXZlZEF0OiBzdHJpbmc7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0ZBQWdGO0FBRWhGOzs7Q0FHQyxHQUNELFdBMkNDIn0=
|
package/dist/naite/naite.js
CHANGED
|
@@ -266,7 +266,7 @@ export class NaiteClass {
|
|
|
266
266
|
// 이로 인해 "직렬화 가능한 값들만 허용"하는 제약이 생깁니다.
|
|
267
267
|
//
|
|
268
268
|
// 이 제약을 의식하여 Naite.t에 직렬화 가능한 값만 넘기게 할 수도 있었지만, 그렇게 하면 불편해질 것 같아서 하지 않았습니다.
|
|
269
|
-
// 따라서 현재 Naite.t는 모든 값을 받을 수 있게 되어 있습니다.
|
|
269
|
+
// 따라서 현재 Naite.t는 모든 값을 받을 수 있게 되어 있습니다.
|
|
270
270
|
// 대신 이렇게(getAllTraces) 그 값들을 빼낼 때 JSON.stringify를 사용하여 강제로 직렬화 가능하게 만들었습니다,,
|
|
271
271
|
for (const trace of traces){
|
|
272
272
|
const check = isSerializable(trace.data);
|
|
@@ -313,4 +313,4 @@ export class NaiteClass {
|
|
|
313
313
|
}
|
|
314
314
|
export const Naite = new NaiteClass();
|
|
315
315
|
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYWl0ZS9uYWl0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogTmFpdGXripQgZXhwZWN07JmAIO2YuOydke2VmOuPhOuhnSBhbnnrpbwg7ZeI7Jqp7ZWoICovXG5cbmltcG9ydCB7IGdldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJpc29uT3BlcmF0b3IgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgaXNTZXJpYWxpemFibGUgfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0LXV0aWxzXCI7XG5cbi8vIFN0YWNrRnJhbWUg7YOA7J6FXG5pbnRlcmZhY2UgU3RhY2tGcmFtZSB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZmlsZVBhdGg6IHN0cmluZzsgLy8gXCIvVXNlcnMvLi4uL3N5bmNlci50c1wiIOuYkOuKlCBcIm5vZGU6aW50ZXJuYWwvLi4uXCJcbiAgbGluZU51bWJlcjogbnVtYmVyOyAvLyBUUyDtjIzsnbwg6riw7KSAIOudvOyduCDrsojtmLhcbn1cblxuLy8gTmFpdGVUcmFjZSDtg4DsnoVcbmludGVyZmFjZSBOYWl0ZVRyYWNlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbiAgc3RhY2s6IFN0YWNrRnJhbWVbXTsgLy8g7L2c7Iqk7YOdIOygleuztFxuICBhdDogRGF0ZTtcbn1cblxuLy8gTmFpdGUudOqwgCDsoIDsnqXrkJjripQg7YOA7J6FICjtla3sg4Eg67Cw7Je066GcIO2GteydvClcbmV4cG9ydCB0eXBlIE5haXRlU3RvcmUgPSBNYXA8c3RyaW5nLCBOYWl0ZVRyYWNlW10+O1xuXG4vKipcbiAqIOy9nOyKpO2DneydhCDtjIzsi7HtlZjsl6wgU3RhY2tGcmFtZSDrsLDsl7TroZwg67CY7ZmYXG4gKiAtIGV4dHJhY3RDYWxsU3RhY2sg7J6Q7Iug6rO8IE5haXRlLnTripQg7KCc7Jm4XG4gKiAtIHJ1bldpdGhDb250ZXh0L3J1bldpdGhNb2NrQ29udGV4dCDrsJzqsqwg7IucIOqxsOq4sOyEnCDsooXro4xcbiAqIC0gbm9kZTog64K067aAIOqyveuhnOuKlCDtj6ztlajtlZjrkJgsIGxpbmVOdW1iZXLripQgcGF0aOyXkCA6IO2PrO2VqCDsi5wg67aZ7J207KeAIOyViuydjFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q2FsbFN0YWNrKCk6IFN0YWNrRnJhbWVbXSB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIGlmICghc3RhY2spIHJldHVybiBbXTtcblxuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuXG4gIC8vIOy9nOyKpO2DnSDqtazsobA6XG4gIC8vIFswXTogXCJFcnJvclwiXG4gIC8vIFsxXTogXCJhdCBleHRyYWN0Q2FsbFN0YWNrXCJcbiAgLy8gWzJdOiBcImF0IE5haXRlLnRcIlxuICAvLyBbM106IOyLpOygnCDtmLjstpwg7JyE7LmY67aA7YSwIOyLnOyekVxuICBjb25zdCBmcmFtZXMgPSBsaW5lc1xuICAgIC5zbGljZSgzKVxuICAgIC5tYXAocGFyc2VTdGFja0ZyYW1lKVxuICAgIC5maWx0ZXIoKGZyYW1lKTogZnJhbWUgaXMgU3RhY2tGcmFtZSA9PiBmcmFtZSAhPT0gbnVsbCk7XG5cbiAgLy8gcnVuV2l0aENvbnRleHQg6rOE7Je0IO2VqOyImCDrsJzqsqwg7IucIOqxsOq4sOyEnCDsnpDrpbTquLBcbiAgY29uc3QgY29udGV4dEluZGV4ID0gZnJhbWVzLmZpbmRJbmRleChcbiAgICAoZikgPT5cbiAgICAgIGYuZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhcInJ1bldpdGhDb250ZXh0XCIpIHx8IGYuZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhcInJ1bldpdGhNb2NrQ29udGV4dFwiKSxcbiAgKTtcblxuICByZXR1cm4gY29udGV4dEluZGV4ID49IDAgPyBmcmFtZXMuc2xpY2UoMCwgY29udGV4dEluZGV4ICsgMSkgOiBmcmFtZXM7XG59XG5cbi8qKlxuICog7L2c7Iqk7YOdIO2VnCDspITsnYQg7YyM7IuxXG4gKiDtmJXsi50xOiBcImF0IEZ1bmN0aW9uTmFtZSAoZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXIpXCJcbiAqIO2YleyLnTI6IFwiYXQgZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXJcIiAo7J2166qFIO2VqOyImC/rqqjrk4gg66CI67KoKVxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWNrRnJhbWUobGluZTogc3RyaW5nKTogU3RhY2tGcmFtZSB8IG51bGwge1xuICAvLyDtjKjthLQxOiBcImF0IEZ1bmN0aW9uTmFtZSAoZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXIpXCJcbiAgY29uc3QgbWF0Y2hXaXRoRnVuYyA9IGxpbmUubWF0Y2goL2F0XFxzKyguKz8pXFxzK1xcKCguKz8pOihcXGQrKTpcXGQrXFwpLyk7XG4gIGlmIChtYXRjaFdpdGhGdW5jKSB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gbWF0Y2hXaXRoRnVuY1sxXTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoV2l0aEZ1bmNbMl07XG4gICAgY29uc3QgbGluZU51bWJlclN0ciA9IG1hdGNoV2l0aEZ1bmNbM107XG5cbiAgICAvLyBmaWxlUGF0aOyXkCDsnbTrr7ggOuqwgCDtj6ztlajrkJjslrQg7J6I7Jy866m0ICjsmIg6IFwibm9kZTppbnRlcm5hbC8uLi5cIilcbiAgICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICByZXR1cm4geyBmdW5jdGlvbk5hbWUsIGZpbGVQYXRoLCBsaW5lTnVtYmVyOiAwIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgbGluZU51bWJlcjogTnVtYmVyLnBhcnNlSW50KGxpbmVOdW1iZXJTdHIsIDEwKSxcbiAgICB9O1xuICB9XG5cbiAgLy8g7Yyo7YS0MjogXCJhdCBmaWxlUGF0aDpsaW5lTnVtYmVyOmNvbHVtbk51bWJlclwiICjtlajsiJjrqoUg7JeG7J2MKVxuICBjb25zdCBtYXRjaE5vRnVuYyA9IGxpbmUubWF0Y2goL2F0XFxzKyguKz8pOihcXGQrKTpcXGQrJC8pO1xuICBpZiAobWF0Y2hOb0Z1bmMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoTm9GdW5jWzFdO1xuICAgIGNvbnN0IGxpbmVOdW1iZXJTdHIgPSBtYXRjaE5vRnVuY1syXTtcblxuICAgIHJldHVybiB7XG4gICAgICBmdW5jdGlvbk5hbWU6IG51bGwsXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIGxpbmVOdW1iZXI6IE51bWJlci5wYXJzZUludChsaW5lTnVtYmVyU3RyLCAxMCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHdpbGRjYXJkIO2MqO2EtCDrp6Tsua1cbiAqIOyYiOyLnDpcbiAqIC0gXCJzeW5jZXI6KlwiIOKGkiBcInN5bmNlcjphXCIsIFwic3luY2VyOmE6YlwiIOuqqOuRkCDrp6Tsua1cbiAqIC0gXCJzeW5jZXI6Kjp1c2VyXCIg4oaSIFwic3luY2VyOnJlbmRlclRlbXBsYXRlOnVzZXJcIiDrp6Tsua1cbiAqIC0gXCJzeW5jZXI6cmVuZGVyVGVtcGxhdGU6KlwiIOKGkiBcInN5bmNlcjpyZW5kZXJUZW1wbGF0ZTpzZXJ2aWNlXCIg66ek7LmtXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNQYXR0ZXJuKGtleTogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5UGFydHMgPSBrZXkuc3BsaXQoXCI6XCIpO1xuICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KFwiOlwiKTtcblxuICAvLyDrp4jsp4Drp4nsnbQgKiDihpIgcHJlZml4IOunpOy5rSAo6ri47J20IOustOq0gClcbiAgLy8g7JiIOiBcInN5bmNlcjoqXCLripQgXCJzeW5jZXI6YVwiLCBcInN5bmNlcjphOmJcIiDrqqjrkZAg66ek7LmtXG4gIGlmIChwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdID09PSBcIipcIikge1xuICAgIGNvbnN0IHByZWZpeFBhcnRzID0gcGF0dGVyblBhcnRzLnNsaWNlKDAsIC0xKTtcbiAgICAvLyBwcmVmaXjqsIAg66qo65GQIOydvOy5mO2VmOuKlOyngCDtmZXsnbhcbiAgICByZXR1cm4gcHJlZml4UGFydHMuZXZlcnkoKHBhcnQsIGkpID0+IHBhcnQgPT09IGtleVBhcnRzW2ldKTtcbiAgfVxuXG4gIC8vIOq4uOydtOqwgCDqsJnslYTslbwg7ZWoXG4gIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSBrZXlQYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyDqsIEg7YyM7Yq46rCAICog65iQ64qUIOygle2Zle2eiCDsnbzsuZhcbiAgcmV0dXJuIHBhdHRlcm5QYXJ0cy5ldmVyeSgocGFydCwgaSkgPT4gcGFydCA9PT0gXCIqXCIgfHwgcGFydCA9PT0ga2V5UGFydHNbaV0pO1xufVxuXG4vKipcbiAqIE5haXRlUXVlcnkg7YG0656Y7IqkXG4gKiDssrTsnbTri53snYQg7Ya17ZWcIHRyYWNlIO2VhO2EsOungSDrsI8g7KGw7ZqMXG4gKi9cbmV4cG9ydCBjbGFzcyBOYWl0ZVF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFjZXM6IE5haXRlVHJhY2VbXSkge31cblxuICAvKipcbiAgICog7YyM7J2866qF7Jy866GcIO2VhO2EsOungVxuICAgKiBAcGFyYW0gZmlsZU5hbWUg7YyM7J2866qFICjsmIg6IFwic3luY2VyLnRlc3QudHNcIilcbiAgICovXG4gIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodCkgPT5cbiAgICAgIHQuc3RhY2suc29tZSgoZnJhbWUpID0+IGZyYW1lLmZpbGVQYXRoLmVuZHNXaXRoKGAvJHtmaWxlTmFtZX1gKSksXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkoZmlsdGVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VqOyImOuqheycvOuhnCDtlYTthLDrp4FcbiAgICogQHBhcmFtIGZ1bmNOYW1lIO2VqOyImOuqhSAoaW5jbHVkZXMg7LK07YGsKVxuICAgKiBAcGFyYW0gb3B0aW9ucy5mcm9tICdkaXJlY3QnID0g7KeB7KCRIO2YuOy2nOunjCwgJ2luZGlyZWN0JyA9IOqwhOygkSDtmLjstpzrp4wsICdib3RoJyA9IOuqqOuRkFxuICAgKi9cbiAgZnJvbUZ1bmN0aW9uKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBmcm9tOiBcImRpcmVjdFwiIHwgXCJpbmRpcmVjdFwiIHwgXCJib3RoXCIgfSA9IHsgZnJvbTogXCJib3RoXCIgfSxcbiAgKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLnRyYWNlcy5maWx0ZXIoKHQpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmZyb20gPT09IFwiZGlyZWN0XCIpIHtcbiAgICAgICAgLy8gc3RhY2tbMF3rp4wg7ZmV7J24ICjsp4HsoJEg7Zi47LacKVxuICAgICAgICByZXR1cm4gdC5zdGFja1swXT8uZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhmdW5jTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5mcm9tID09PSBcImluZGlyZWN0XCIpIHtcbiAgICAgICAgLy8gc3RhY2tbMStd7JeQ7IScIO2ZleyduCAo6rCE7KCRIO2YuOy2nClcbiAgICAgICAgcmV0dXJuIHQuc3RhY2suc2xpY2UoMSkuc29tZSgoZikgPT4gZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKSk7XG4gICAgICB9XG4gICAgICAvLyDsoITssrQg7Iqk7YOd7JeQ7IScIO2ZleyduFxuICAgICAgcmV0dXJuIHQuc3RhY2suc29tZSgoZikgPT4gZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KGZpbHRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrjbDsnbTthLAg6rK966GcIOq4sOuwmCDtlYTthLDrp4FcbiAgICogQHBhcmFtIHBhdGggcmFkYXNoIGdldCDqsr3roZwgKOyYiDogXCJkYXRhLnVzZXJJZFwiKVxuICAgKiBAcGFyYW0gb3BlcmF0b3Ig67mE6rWQIOyXsOyCsOyekFxuICAgKiBAcGFyYW0gdmFsdWUg67mE6rWQ6rCSXG4gICAqL1xuICB3aGVyZShwYXRoOiBzdHJpbmcsIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IgfCBcImluY2x1ZGVzXCIsIHZhbHVlOiBhbnkpOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodHJhY2UpID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IGdldCh0cmFjZSwgcGF0aCkgYXMgYW55O1xuXG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgXCI+XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA+IHZhbHVlO1xuICAgICAgICBjYXNlIFwiPFwiOlxuICAgICAgICAgIHJldHVybiBhY3R1YWwgPCB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIj49XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA+PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIjw9XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA8PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIj1cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsID09PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIiE9XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCAhPT0gdmFsdWU7XG4gICAgICAgIGNhc2UgXCJpbmNsdWRlc1wiOlxuICAgICAgICAgIHJldHVybiB0eXBlb2YgYWN0dWFsID09PSBcInN0cmluZ1wiICYmIGFjdHVhbC5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShmaWx0ZXJlZCk7XG4gIH1cblxuICAvKipcbiAgICog7KCE7LK0IOuNsOydtO2EsCDrsLDsl7Qg67CY7ZmYXG4gICAqL1xuICByZXN1bHQoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnRyYWNlcy5tYXAoKHQpID0+IHQuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICog7LKrIOuyiOynuCDrjbDsnbTthLAg67CY7ZmYXG4gICAqL1xuICBmaXJzdCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1swXT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsp4Drp4kg642w7J207YSwIOuwmO2ZmFxuICAgKi9cbiAgbGFzdCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1t0aGlzLnRyYWNlcy5sZW5ndGggLSAxXT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBu67KI7Ke4IOuNsOydtO2EsCDrsJjtmZhcbiAgICovXG4gIGF0KGluZGV4OiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1tpbmRleF0/LmRhdGE7XG4gIH1cblxuICAvKipcbiAgICog7JuQ67O4IHRyYWNlIOuwsOyXtCDrsJjtmZggKOuUlOuyhOq5hS9OYWl0ZVZpZXdlcuyaqSlcbiAgICovXG4gIGdldFRyYWNlcygpOiBOYWl0ZVRyYWNlW10ge1xuICAgIHJldHVybiB0aGlzLnRyYWNlcztcbiAgfVxufVxuXG4vLyBOYWl0ZSDsi7HquIDthLQg6rCd7LK0ICjstpTtm4QgbG9nZ2VyIOyXsOqysCDrk7HsnZgg7IOB7YOcIOq0gOumrCDtlYTsmpTshLEg6rOg66CkKVxuZXhwb3J0IGNsYXNzIE5haXRlQ2xhc3Mge1xuICAvLyDthYzsiqTtirgg66Gc6re4IOq4sOuhnVxuICB0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55IC8q7J2066CH6rKMIOuwm+ydgCDqsJLsnbQgTmFpdGVUcmFjZeuhnCDsoIDsnqXrkJjslrQg7J6I64uk6rCAIOy2lO2bhOyXkCB2aXRlc3Tsl5DqsowgbWV0YeulvCDthrXtlbQg64SY6rKo7KC4IO2UhOuhnOyEuOyKpOqwhCDthrXsi6DsnYQg7Ya17ZW0IOyngeugrO2ZlOuQmOyWtOyVvCDtlZjripQg7KCQ7J2EIOqzoOugpO2VmOyYgOydhCDrlYwg7Jes6riw7JeQIFNlcmlhbGl6YWJsZeydhCDsjajshJwg7KCc7ZWc7J2EIOuRmCDsiJjrj4Qg7J6I7KeA66eMLCDsgqzsmqnsg4HsnZgg7Y647J2Y66W8IOyDneqwge2VmOyXrCBhbnnroZwg67Cb7Iq164uI64ukLiovLFxuICApIHtcbiAgICAvLyDsnbQgdCDtlajsiJjripQg7YWM7Iqk7Yq4IO2ZmOqyveyXkOyEnOunjCDsnpHrj5ntlbTslbwg7ZWp64uI64ukLlxuICAgIC8vIOq3uOumrOqzoCDthYzsiqTtirgg7ZmY6rK9IO2MkOuLqOyXkCDsmZwgaXNUZXN0KCkg7ZWo7IiY66W8IOyCrOyaqe2VmOyngCDslYrslZjrg5DrqbTsmpQsLFxuICAgIC8vIOydtOugh+qyjCDtlZjripTqsowg7Jyg7Yu4IO2VqOyImCDrtojrn6zsmYDshJwg7IKs7Jqp7ZWY64qUIOqyg+uztOuLpCDsobDquIjsnbTrgpjrp4gg67mg66W8IOqygyDqsJnslZjquLAg65WM66y47J6F64uI64ukLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgICBjb25zdCBzdG9yZSA9IGNvbnRleHQ/Lm5haXRlU3RvcmU7XG5cbiAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyDsvZzsiqTtg50g7IiY7KeRXG4gICAgICBjb25zdCBzdGFjayA9IGV4dHJhY3RDYWxsU3RhY2soKTtcblxuICAgICAgY29uc3QgdHJhY2U6IE5haXRlVHJhY2UgPSB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgZGF0YTogdmFsdWUsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBhdDogbmV3IERhdGUoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIO2VreyDgSDrsLDsl7TroZwg6rSA66asXG4gICAgICBjb25zdCBleGlzdGluZyA9IHN0b3JlLmdldChuYW1lKSA/PyBbXTtcbiAgICAgIHN0b3JlLnNldChuYW1lLCBbLi4uZXhpc3RpbmcsIHRyYWNlXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb250ZXh0IOyXhuuKlCDsg4Htmansl5DshJwgTmFpdGUudCDtmLjstpxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoga2V5IOuYkOuKlCB3aWxkY2FyZCDtjKjthLTsnLzroZwgdHJhY2Ug7KGw7ZqMXG4gICAqIO2VreyDgSBOYWl0ZVF1ZXJ5IOuwmO2ZmO2VmOyXrCDssrTsnbTri50g6rCA64qlXG4gICAqL1xuICBnZXQoa2V5UGF0dGVybjogc3RyaW5nKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgY29uc3Qgc3RvcmUgPSBjb250ZXh0Py5uYWl0ZVN0b3JlO1xuXG4gICAgaWYgKCFzdG9yZSkge1xuICAgICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KFtdKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDsl4bsnLzrqbQgZXhhY3QgbWF0Y2hcbiAgICBpZiAoIWtleVBhdHRlcm4uaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICBjb25zdCB0cmFjZXMgPSBzdG9yZS5nZXQoa2V5UGF0dGVybikgPz8gW107XG4gICAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkodHJhY2VzKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDtjKjthLQg66ek7LmtXG4gICAgY29uc3QgYWxsVHJhY2VzOiBOYWl0ZVRyYWNlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2Ygc3RvcmUuZW50cmllcygpKSB7XG4gICAgICBpZiAobWF0Y2hlc1BhdHRlcm4oa2V5LCBrZXlQYXR0ZXJuKSkge1xuICAgICAgICBhbGxUcmFjZXMucHVzaCguLi50cmFjZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShhbGxUcmFjZXMpO1xuICB9XG5cbiAgLy8g7KCE7LK0IOumrOyKpO2KuCDqsIDsoLjsmKTquLBcbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGlmICghY29udGV4dD8ubmFpdGVTdG9yZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvLyBOYWl0ZVRyYWNlIOuwsOyXtOydhCBkYXRh66eMIOy2lOy2nO2VmOyXrCDrsJjtmZhcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2YgY29udGV4dC5uYWl0ZVN0b3JlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwibW9jazpcIikpIHtcbiAgICAgICAgLy8gTW9jayDshKTsoJXsnYAg6re464yA66GcIOuwmO2ZmFxuICAgICAgICByZXN1bHRba2V5XSA9IHRyYWNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5haXRlVHJhY2Ug67Cw7Je07J2AIGRhdGHrp4wg7LaU7LacXG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJhY2VzLm1hcCgodDogTmFpdGVUcmFjZSkgPT4gdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsiqTthqDslrTsl5Ag65Ok7Ja07J6I642YIO2KuOugiOydtOyKpOulvCDqs6DrjIDroZwg6rq864K07Ji164uI64ukLlxuICAgKiDsnbTrlYwg6rCS65Ok7J2AIOuqqOuRkCDsp4HroKztmZQg6rCA64ql7ZWcIOyDge2DnOuhnCDrgpjqsIDqsowg65Cp64uI64ukLlxuICAgKiDthYzsiqTtirgg7KCV67O07JmAIO2VqOq7mCBleHRlbnNpb25z7JeQIOuztOuCvCDsmqnrj4TroZwg66eM65Ok7JeI7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVHJhY2VzKCk6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGluZU51bWJlcjogbnVtYmVyO1xuICAgIGF0OiBzdHJpbmc7XG4gIH1bXSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgaWYgKCFjb250ZXh0Py5uYWl0ZVN0b3JlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdHJhY2VzID0gQXJyYXkuZnJvbShjb250ZXh0Lm5haXRlU3RvcmUudmFsdWVzKCkpLmZsYXQoKTtcblxuICAgIC8vIOyngeugrO2ZlCDrtojqsIDriqXtlZwg6rCS7J20IOyhtOyerO2VnOuLpOuptCDsnbTrpbwg64yA66y47Ked66eM7ZWY6rKMIOyVjOugpOykjeuLiOuLpCEg6re47LmY66eMIOyVjOumrOq4sOunjCDtlZjqs6Ag6re464OlIOyngOuCmOqwkeuLiOuLpCDjhY7jhY5cbiAgICAvLyDsmZwg7KeB66Cs7ZmU6rCAIOykkeyalO2VnOqwgD8g7J20KGdldEFsbFRyYWNlcykg7Zi47Lac7J2YIOqysOqzvOuKlCDsmbjrtoDroZwg64KY6rCA6rKMIOuQmOuKlOuNsCxcbiAgICAvLyDsnbTrlYwg7KO8IOyaqeuPhOqwgCB2aXRlc3TsnZggdGFzay5tZXRhIO2VhOuTnOulvCDthrXtlbQgYWZ0ZXJFYWNo7JeQ7IScIFNvbmFtdSBleHRlbnNpb27snLzroZwg7KCE64us7ZWY64qUIOqyg+yeheuLiOuLpC5cbiAgICAvLyDsl6zquLDshJwgbWV0YSDtlYTrk5zsl5Ag64u06ri0IOuCtOyaqeydgCDtlITroZzshLjsiqTqsIQg7Ya17IugKHByb2Nlc3Muc2VuZCkg65iQ64qUIOyKpOugiOuTnOqwhCDthrXsi6AobWVzc2FnZSBwb3J0KeydhCDthrXtlbQg7KCE64us65CY7Ja07JW8IO2VmOuKlOuNsCxcbiAgICAvLyDsnbTroZwg7J247ZW0IFwi7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrk6Trp4wg7ZeI7JqpXCLtlZjripQg7KCc7JW97J20IOyDneq5geuLiOuLpC5cbiAgICAvL1xuICAgIC8vIOydtCDsoJzslb3snYQg7J2Y7Iud7ZWY7JesIE5haXRlLnTsl5Ag7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrp4wg64SY6riw6rKMIO2VoCDsiJjrj4Qg7J6I7JeI7KeA66eMLCDqt7jroIfqsowg7ZWY66m0IOu2iO2OuO2VtOyniCDqsoMg6rCZ7JWE7IScIO2VmOyngCDslYrslZjsirXri4jri6QuXG4gICAgLy8g65Sw65287IScIO2YhOyerCBOYWl0ZS5064qUIOuqqOuToCDqsJLsnYQg67Cb7J2EIOyImCDsnojqsowg65CY7Ja0IOyeiOyKteuLiOuLpC4gXG4gICAgLy8g64yA7IugIOydtOugh+qyjChnZXRBbGxUcmFjZXMpIOq3uCDqsJLrk6TsnYQg67m864K8IOuVjCBKU09OLnN0cmluZ2lmeeulvCDsgqzsmqntlZjsl6wg6rCV7KCc66GcIOyngeugrO2ZlCDqsIDriqXtlZjqsowg66eM65Ok7JeI7Iq164uI64ukLCxcbiAgICBmb3IgKGNvbnN0IHRyYWNlIG9mIHRyYWNlcykge1xuICAgICAgY29uc3QgY2hlY2sgPSBpc1NlcmlhbGl6YWJsZSh0cmFjZS5kYXRhKTtcbiAgICAgIGlmICghY2hlY2sudmFsaWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgXCLilZTilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZdcXG5cIiArXG4gICAgICAgICAgICBcIuKVkSAgW05haXRlXSBOb24tc2VyaWFsaXphYmxlIHZhbHVlIGRldGVjdGVkISAgICAgICAgICAgICAgICAgICAgICDilZFcXG5cIiArXG4gICAgICAgICAgICBcIuKVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVo1xcblwiICtcbiAgICAgICAgICAgIGDilZEgIEtleTogJHt0cmFjZS5rZXkucGFkRW5kKDU3KX3ilZFcXG5gICtcbiAgICAgICAgICAgIGDilZEgIFJlYXNvbjogJHsoY2hlY2sucmVhc29uID8/IFwidW5rbm93blwiKS5zbGljZSgwLCA1NCkucGFkRW5kKDU0KX3ilZFcXG5gICtcbiAgICAgICAgICAgIGDilZEgIExvY2F0aW9uOiAkeyh0cmFjZS5zdGFja1swXT8uZmlsZVBhdGggPz8gXCJ1bmtub3duXCIpLnNsaWNlKC01MSkucGFkRW5kKDUyKX3ilZFcXG5gICtcbiAgICAgICAgICAgIGDilZEgIExpbmU6ICR7U3RyaW5nKHRyYWNlLnN0YWNrWzBdPy5saW5lTnVtYmVyID8/IDApLnBhZEVuZCg1Nil94pWRXFxuYCArXG4gICAgICAgICAgICBcIuKVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVo1xcblwiICtcbiAgICAgICAgICAgIFwi4pWRICBOYWl0ZS50KCkgYWNjZXB0cyBhbnkgdHlwZSBvZiB2YWx1ZS4gSG93ZXZlciwgdmFsdWVzIHdpbGwgICAgIOKVkVxcblwiICtcbiAgICAgICAgICAgIFwi4pWRICBiZSBzZXJpYWxpemVkIHRvIEpTT04gd2hlbiBleHBvcnRlZCB2aWEgTmFpdGUuZ2V0QWxsVHJhY2VzKCkuIOKVkVxcblwiICtcbiAgICAgICAgICAgIFwi4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdXFxuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYWNlcy5tYXAoKHRyYWNlKSA9PiAoe1xuICAgICAga2V5OiB0cmFjZS5rZXksXG4gICAgICB2YWx1ZTogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0cmFjZS5kYXRhID8/IFwiXCIpKSwgLy8g7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsoPrp4wg64Ko6riw66Ck64qUIOuIiOusvOqyqOyatCDrhbjroKUsLCDslYjqt7jrn6zrqbQgdGFzay5tZXRh7JeQIOuTpOyWtOqwgOyEnCDtlITroZzshLjsiqTqsIQg7Ya17IugIO2VoCDrlYwg66y47KCcIOyDneq4sOqxsOuToOyalCwsXG4gICAgICBmaWxlUGF0aDogdHJhY2Uuc3RhY2tbMF0/LmZpbGVQYXRoID8/IFwiXCIsXG4gICAgICBsaW5lTnVtYmVyOiB0cmFjZS5zdGFja1swXT8ubGluZU51bWJlciA/PyAwLFxuICAgICAgYXQ6IHRyYWNlLmF0LnRvSVNPU3RyaW5nKCksXG4gICAgfSkpO1xuICB9XG5cbiAgLy8g7Yq57KCVIO2CpCDsgq3soJztlZjquLBcbiAgZGVsKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgaWYgKCFjb250ZXh0Py5uYWl0ZVN0b3JlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRleHQubmFpdGVTdG9yZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIGNyZWF0ZVN0b3JlKCk6IE5haXRlU3RvcmUge1xuICAgIHJldHVybiBuZXcgTWFwPHN0cmluZywgTmFpdGVUcmFjZVtdPigpO1xuICB9XG5cbiAgLy8g7J2867CYIOuhnOq3uCDroIjrsqhcbiAgZChfbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgLy8gVE9ETzogTG9nZ2VyIOyXsOqysFxuICAgIGNvbnNvbGUubG9nKGBbREVCVUddICR7X21lc3NhZ2V9YCk7XG4gIH1cbiAgaShfbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgLy8gVE9ETzogTG9nZ2VyIOyXsOqysFxuICAgIGNvbnNvbGUubG9nKGBbSU5GT10gJHtfbWVzc2FnZX1gKTtcbiAgfVxuICB3KF9tZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiBMb2dnZXIg7Jew6rKwXG4gICAgY29uc29sZS5sb2coYFtXQVJOXSAke19tZXNzYWdlfWApO1xuICB9XG4gIGUoX21lc3NhZ2U6IHN0cmluZykge1xuICAgIC8vIFRPRE86IExvZ2dlciDsl7DqsrBcbiAgICBjb25zb2xlLmxvZyhgW0VSUk9SXSAke19tZXNzYWdlfWApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBOYWl0ZSA9IG5ldyBOYWl0ZUNsYXNzKCk7XG4iXSwibmFtZXMiOlsiZ2V0IiwiU29uYW11IiwiaXNTZXJpYWxpemFibGUiLCJleHRyYWN0Q2FsbFN0YWNrIiwic3RhY2siLCJFcnJvciIsImxpbmVzIiwic3BsaXQiLCJmcmFtZXMiLCJzbGljZSIsIm1hcCIsInBhcnNlU3RhY2tGcmFtZSIsImZpbHRlciIsImZyYW1lIiwiY29udGV4dEluZGV4IiwiZmluZEluZGV4IiwiZiIsImZ1bmN0aW9uTmFtZSIsImluY2x1ZGVzIiwibGluZSIsIm1hdGNoV2l0aEZ1bmMiLCJtYXRjaCIsImZpbGVQYXRoIiwibGluZU51bWJlclN0ciIsImxpbmVOdW1iZXIiLCJOdW1iZXIiLCJwYXJzZUludCIsIm1hdGNoTm9GdW5jIiwibWF0Y2hlc1BhdHRlcm4iLCJrZXkiLCJwYXR0ZXJuIiwia2V5UGFydHMiLCJwYXR0ZXJuUGFydHMiLCJsZW5ndGgiLCJwcmVmaXhQYXJ0cyIsImV2ZXJ5IiwicGFydCIsImkiLCJOYWl0ZVF1ZXJ5IiwidHJhY2VzIiwiZnJvbUZpbGUiLCJmaWxlTmFtZSIsImZpbHRlcmVkIiwidCIsInNvbWUiLCJlbmRzV2l0aCIsImZyb21GdW5jdGlvbiIsImZ1bmNOYW1lIiwib3B0aW9ucyIsImZyb20iLCJ3aGVyZSIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlIiwidHJhY2UiLCJhY3R1YWwiLCJyZXN1bHQiLCJkYXRhIiwiZmlyc3QiLCJsYXN0IiwiYXQiLCJpbmRleCIsImdldFRyYWNlcyIsIk5haXRlQ2xhc3MiLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29udGV4dCIsImdldENvbnRleHQiLCJzdG9yZSIsIm5haXRlU3RvcmUiLCJEYXRlIiwiZXhpc3RpbmciLCJzZXQiLCJrZXlQYXR0ZXJuIiwiYWxsVHJhY2VzIiwiZW50cmllcyIsInB1c2giLCJnZXRBbGwiLCJzdGFydHNXaXRoIiwiZ2V0QWxsVHJhY2VzIiwiQXJyYXkiLCJ2YWx1ZXMiLCJmbGF0IiwiY2hlY2siLCJ2YWxpZCIsImNvbnNvbGUiLCJ3YXJuIiwicGFkRW5kIiwicmVhc29uIiwiU3RyaW5nIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5IiwidG9JU09TdHJpbmciLCJkZWwiLCJkZWxldGUiLCJjcmVhdGVTdG9yZSIsIk1hcCIsImQiLCJfbWVzc2FnZSIsImxvZyIsInciLCJlIiwiTmFpdGUiXSwibWFwcGluZ3MiOiJBQUFBLGtGQUFrRixHQUVsRixTQUFTQSxHQUFHLFFBQVEsVUFBVTtBQUM5QixTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBRXZDLFNBQVNDLGNBQWMsUUFBUSwyQkFBd0I7QUFvQnZEOzs7OztDQUtDLEdBQ0QsU0FBU0M7SUFDUCxNQUFNQyxRQUFRLElBQUlDLFFBQVFELEtBQUs7SUFDL0IsSUFBSSxDQUFDQSxPQUFPLE9BQU8sRUFBRTtJQUVyQixNQUFNRSxRQUFRRixNQUFNRyxLQUFLLENBQUM7SUFFMUIsVUFBVTtJQUNWLGVBQWU7SUFDZiw2QkFBNkI7SUFDN0Isb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixNQUFNQyxTQUFTRixNQUNaRyxLQUFLLENBQUMsR0FDTkMsR0FBRyxDQUFDQyxpQkFDSkMsTUFBTSxDQUFDLENBQUNDLFFBQStCQSxVQUFVO0lBRXBELG9DQUFvQztJQUNwQyxNQUFNQyxlQUFlTixPQUFPTyxTQUFTLENBQ25DLENBQUNDLElBQ0NBLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxxQkFBcUJGLEVBQUVDLFlBQVksRUFBRUMsU0FBUztJQUczRSxPQUFPSixnQkFBZ0IsSUFBSU4sT0FBT0MsS0FBSyxDQUFDLEdBQUdLLGVBQWUsS0FBS047QUFDakU7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0csZ0JBQWdCUSxJQUFZO0lBQ25DLDREQUE0RDtJQUM1RCxNQUFNQyxnQkFBZ0JELEtBQUtFLEtBQUssQ0FBQztJQUNqQyxJQUFJRCxlQUFlO1FBQ2pCLE1BQU1ILGVBQWVHLGFBQWEs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
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYWl0ZS9uYWl0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogTmFpdGXripQgZXhwZWN07JmAIO2YuOydke2VmOuPhOuhnSBhbnnrpbwg7ZeI7Jqp7ZWoICovXG5cbmltcG9ydCB7IGdldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHR5cGUgeyBDb21wYXJpc29uT3BlcmF0b3IgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS50eXBlc1wiO1xuaW1wb3J0IHsgaXNTZXJpYWxpemFibGUgfSBmcm9tIFwiLi4vdXRpbHMvb2JqZWN0LXV0aWxzXCI7XG5cbi8vIFN0YWNrRnJhbWUg7YOA7J6FXG5pbnRlcmZhY2UgU3RhY2tGcmFtZSB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZmlsZVBhdGg6IHN0cmluZzsgLy8gXCIvVXNlcnMvLi4uL3N5bmNlci50c1wiIOuYkOuKlCBcIm5vZGU6aW50ZXJuYWwvLi4uXCJcbiAgbGluZU51bWJlcjogbnVtYmVyOyAvLyBUUyDtjIzsnbwg6riw7KSAIOudvOyduCDrsojtmLhcbn1cblxuLy8gTmFpdGVUcmFjZSDtg4DsnoVcbmludGVyZmFjZSBOYWl0ZVRyYWNlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbiAgc3RhY2s6IFN0YWNrRnJhbWVbXTsgLy8g7L2c7Iqk7YOdIOygleuztFxuICBhdDogRGF0ZTtcbn1cblxuLy8gTmFpdGUudOqwgCDsoIDsnqXrkJjripQg7YOA7J6FICjtla3sg4Eg67Cw7Je066GcIO2GteydvClcbmV4cG9ydCB0eXBlIE5haXRlU3RvcmUgPSBNYXA8c3RyaW5nLCBOYWl0ZVRyYWNlW10+O1xuXG4vKipcbiAqIOy9nOyKpO2DneydhCDtjIzsi7HtlZjsl6wgU3RhY2tGcmFtZSDrsLDsl7TroZwg67CY7ZmYXG4gKiAtIGV4dHJhY3RDYWxsU3RhY2sg7J6Q7Iug6rO8IE5haXRlLnTripQg7KCc7Jm4XG4gKiAtIHJ1bldpdGhDb250ZXh0L3J1bldpdGhNb2NrQ29udGV4dCDrsJzqsqwg7IucIOqxsOq4sOyEnCDsooXro4xcbiAqIC0gbm9kZTog64K067aAIOqyveuhnOuKlCDtj6ztlajtlZjrkJgsIGxpbmVOdW1iZXLripQgcGF0aOyXkCA6IO2PrO2VqCDsi5wg67aZ7J207KeAIOyViuydjFxuICovXG5mdW5jdGlvbiBleHRyYWN0Q2FsbFN0YWNrKCk6IFN0YWNrRnJhbWVbXSB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIGlmICghc3RhY2spIHJldHVybiBbXTtcblxuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuXG4gIC8vIOy9nOyKpO2DnSDqtazsobA6XG4gIC8vIFswXTogXCJFcnJvclwiXG4gIC8vIFsxXTogXCJhdCBleHRyYWN0Q2FsbFN0YWNrXCJcbiAgLy8gWzJdOiBcImF0IE5haXRlLnRcIlxuICAvLyBbM106IOyLpOygnCDtmLjstpwg7JyE7LmY67aA7YSwIOyLnOyekVxuICBjb25zdCBmcmFtZXMgPSBsaW5lc1xuICAgIC5zbGljZSgzKVxuICAgIC5tYXAocGFyc2VTdGFja0ZyYW1lKVxuICAgIC5maWx0ZXIoKGZyYW1lKTogZnJhbWUgaXMgU3RhY2tGcmFtZSA9PiBmcmFtZSAhPT0gbnVsbCk7XG5cbiAgLy8gcnVuV2l0aENvbnRleHQg6rOE7Je0IO2VqOyImCDrsJzqsqwg7IucIOqxsOq4sOyEnCDsnpDrpbTquLBcbiAgY29uc3QgY29udGV4dEluZGV4ID0gZnJhbWVzLmZpbmRJbmRleChcbiAgICAoZikgPT5cbiAgICAgIGYuZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhcInJ1bldpdGhDb250ZXh0XCIpIHx8IGYuZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhcInJ1bldpdGhNb2NrQ29udGV4dFwiKSxcbiAgKTtcblxuICByZXR1cm4gY29udGV4dEluZGV4ID49IDAgPyBmcmFtZXMuc2xpY2UoMCwgY29udGV4dEluZGV4ICsgMSkgOiBmcmFtZXM7XG59XG5cbi8qKlxuICog7L2c7Iqk7YOdIO2VnCDspITsnYQg7YyM7IuxXG4gKiDtmJXsi50xOiBcImF0IEZ1bmN0aW9uTmFtZSAoZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXIpXCJcbiAqIO2YleyLnTI6IFwiYXQgZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXJcIiAo7J2166qFIO2VqOyImC/rqqjrk4gg66CI67KoKVxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWNrRnJhbWUobGluZTogc3RyaW5nKTogU3RhY2tGcmFtZSB8IG51bGwge1xuICAvLyDtjKjthLQxOiBcImF0IEZ1bmN0aW9uTmFtZSAoZmlsZVBhdGg6bGluZU51bWJlcjpjb2x1bW5OdW1iZXIpXCJcbiAgY29uc3QgbWF0Y2hXaXRoRnVuYyA9IGxpbmUubWF0Y2goL2F0XFxzKyguKz8pXFxzK1xcKCguKz8pOihcXGQrKTpcXGQrXFwpLyk7XG4gIGlmIChtYXRjaFdpdGhGdW5jKSB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gbWF0Y2hXaXRoRnVuY1sxXTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoV2l0aEZ1bmNbMl07XG4gICAgY29uc3QgbGluZU51bWJlclN0ciA9IG1hdGNoV2l0aEZ1bmNbM107XG5cbiAgICAvLyBmaWxlUGF0aOyXkCDsnbTrr7ggOuqwgCDtj6ztlajrkJjslrQg7J6I7Jy866m0ICjsmIg6IFwibm9kZTppbnRlcm5hbC8uLi5cIilcbiAgICBpZiAoZmlsZVBhdGguaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICByZXR1cm4geyBmdW5jdGlvbk5hbWUsIGZpbGVQYXRoLCBsaW5lTnVtYmVyOiAwIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgbGluZU51bWJlcjogTnVtYmVyLnBhcnNlSW50KGxpbmVOdW1iZXJTdHIsIDEwKSxcbiAgICB9O1xuICB9XG5cbiAgLy8g7Yyo7YS0MjogXCJhdCBmaWxlUGF0aDpsaW5lTnVtYmVyOmNvbHVtbk51bWJlclwiICjtlajsiJjrqoUg7JeG7J2MKVxuICBjb25zdCBtYXRjaE5vRnVuYyA9IGxpbmUubWF0Y2goL2F0XFxzKyguKz8pOihcXGQrKTpcXGQrJC8pO1xuICBpZiAobWF0Y2hOb0Z1bmMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoTm9GdW5jWzFdO1xuICAgIGNvbnN0IGxpbmVOdW1iZXJTdHIgPSBtYXRjaE5vRnVuY1syXTtcblxuICAgIHJldHVybiB7XG4gICAgICBmdW5jdGlvbk5hbWU6IG51bGwsXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIGxpbmVOdW1iZXI6IE51bWJlci5wYXJzZUludChsaW5lTnVtYmVyU3RyLCAxMCksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHdpbGRjYXJkIO2MqO2EtCDrp6Tsua1cbiAqIOyYiOyLnDpcbiAqIC0gXCJzeW5jZXI6KlwiIOKGkiBcInN5bmNlcjphXCIsIFwic3luY2VyOmE6YlwiIOuqqOuRkCDrp6Tsua1cbiAqIC0gXCJzeW5jZXI6Kjp1c2VyXCIg4oaSIFwic3luY2VyOnJlbmRlclRlbXBsYXRlOnVzZXJcIiDrp6Tsua1cbiAqIC0gXCJzeW5jZXI6cmVuZGVyVGVtcGxhdGU6KlwiIOKGkiBcInN5bmNlcjpyZW5kZXJUZW1wbGF0ZTpzZXJ2aWNlXCIg66ek7LmtXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNQYXR0ZXJuKGtleTogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5UGFydHMgPSBrZXkuc3BsaXQoXCI6XCIpO1xuICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KFwiOlwiKTtcblxuICAvLyDrp4jsp4Drp4nsnbQgKiDihpIgcHJlZml4IOunpOy5rSAo6ri47J20IOustOq0gClcbiAgLy8g7JiIOiBcInN5bmNlcjoqXCLripQgXCJzeW5jZXI6YVwiLCBcInN5bmNlcjphOmJcIiDrqqjrkZAg66ek7LmtXG4gIGlmIChwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdID09PSBcIipcIikge1xuICAgIGNvbnN0IHByZWZpeFBhcnRzID0gcGF0dGVyblBhcnRzLnNsaWNlKDAsIC0xKTtcbiAgICAvLyBwcmVmaXjqsIAg66qo65GQIOydvOy5mO2VmOuKlOyngCDtmZXsnbhcbiAgICByZXR1cm4gcHJlZml4UGFydHMuZXZlcnkoKHBhcnQsIGkpID0+IHBhcnQgPT09IGtleVBhcnRzW2ldKTtcbiAgfVxuXG4gIC8vIOq4uOydtOqwgCDqsJnslYTslbwg7ZWoXG4gIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSBrZXlQYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyDqsIEg7YyM7Yq46rCAICog65iQ64qUIOygle2Zle2eiCDsnbzsuZhcbiAgcmV0dXJuIHBhdHRlcm5QYXJ0cy5ldmVyeSgocGFydCwgaSkgPT4gcGFydCA9PT0gXCIqXCIgfHwgcGFydCA9PT0ga2V5UGFydHNbaV0pO1xufVxuXG4vKipcbiAqIE5haXRlUXVlcnkg7YG0656Y7IqkXG4gKiDssrTsnbTri53snYQg7Ya17ZWcIHRyYWNlIO2VhO2EsOungSDrsI8g7KGw7ZqMXG4gKi9cbmV4cG9ydCBjbGFzcyBOYWl0ZVF1ZXJ5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFjZXM6IE5haXRlVHJhY2VbXSkge31cblxuICAvKipcbiAgICog7YyM7J2866qF7Jy866GcIO2VhO2EsOungVxuICAgKiBAcGFyYW0gZmlsZU5hbWUg7YyM7J2866qFICjsmIg6IFwic3luY2VyLnRlc3QudHNcIilcbiAgICovXG4gIGZyb21GaWxlKGZpbGVOYW1lOiBzdHJpbmcpOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodCkgPT5cbiAgICAgIHQuc3RhY2suc29tZSgoZnJhbWUpID0+IGZyYW1lLmZpbGVQYXRoLmVuZHNXaXRoKGAvJHtmaWxlTmFtZX1gKSksXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkoZmlsdGVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VqOyImOuqheycvOuhnCDtlYTthLDrp4FcbiAgICogQHBhcmFtIGZ1bmNOYW1lIO2VqOyImOuqhSAoaW5jbHVkZXMg7LK07YGsKVxuICAgKiBAcGFyYW0gb3B0aW9ucy5mcm9tICdkaXJlY3QnID0g7KeB7KCRIO2YuOy2nOunjCwgJ2luZGlyZWN0JyA9IOqwhOygkSDtmLjstpzrp4wsICdib3RoJyA9IOuqqOuRkFxuICAgKi9cbiAgZnJvbUZ1bmN0aW9uKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBmcm9tOiBcImRpcmVjdFwiIHwgXCJpbmRpcmVjdFwiIHwgXCJib3RoXCIgfSA9IHsgZnJvbTogXCJib3RoXCIgfSxcbiAgKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLnRyYWNlcy5maWx0ZXIoKHQpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmZyb20gPT09IFwiZGlyZWN0XCIpIHtcbiAgICAgICAgLy8gc3RhY2tbMF3rp4wg7ZmV7J24ICjsp4HsoJEg7Zi47LacKVxuICAgICAgICByZXR1cm4gdC5zdGFja1swXT8uZnVuY3Rpb25OYW1lPy5pbmNsdWRlcyhmdW5jTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5mcm9tID09PSBcImluZGlyZWN0XCIpIHtcbiAgICAgICAgLy8gc3RhY2tbMStd7JeQ7IScIO2ZleyduCAo6rCE7KCRIO2YuOy2nClcbiAgICAgICAgcmV0dXJuIHQuc3RhY2suc2xpY2UoMSkuc29tZSgoZikgPT4gZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKSk7XG4gICAgICB9XG4gICAgICAvLyDsoITssrQg7Iqk7YOd7JeQ7IScIO2ZleyduFxuICAgICAgcmV0dXJuIHQuc3RhY2suc29tZSgoZikgPT4gZi5mdW5jdGlvbk5hbWU/LmluY2x1ZGVzKGZ1bmNOYW1lKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KGZpbHRlcmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrjbDsnbTthLAg6rK966GcIOq4sOuwmCDtlYTthLDrp4FcbiAgICogQHBhcmFtIHBhdGggcmFkYXNoIGdldCDqsr3roZwgKOyYiDogXCJkYXRhLnVzZXJJZFwiKVxuICAgKiBAcGFyYW0gb3BlcmF0b3Ig67mE6rWQIOyXsOyCsOyekFxuICAgKiBAcGFyYW0gdmFsdWUg67mE6rWQ6rCSXG4gICAqL1xuICB3aGVyZShwYXRoOiBzdHJpbmcsIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IgfCBcImluY2x1ZGVzXCIsIHZhbHVlOiBhbnkpOiBOYWl0ZVF1ZXJ5IHtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMudHJhY2VzLmZpbHRlcigodHJhY2UpID0+IHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IGdldCh0cmFjZSwgcGF0aCkgYXMgYW55O1xuXG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgXCI+XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA+IHZhbHVlO1xuICAgICAgICBjYXNlIFwiPFwiOlxuICAgICAgICAgIHJldHVybiBhY3R1YWwgPCB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIj49XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA+PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIjw9XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCA8PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIj1cIjpcbiAgICAgICAgICByZXR1cm4gYWN0dWFsID09PSB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIiE9XCI6XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbCAhPT0gdmFsdWU7XG4gICAgICAgIGNhc2UgXCJpbmNsdWRlc1wiOlxuICAgICAgICAgIHJldHVybiB0eXBlb2YgYWN0dWFsID09PSBcInN0cmluZ1wiICYmIGFjdHVhbC5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShmaWx0ZXJlZCk7XG4gIH1cblxuICAvKipcbiAgICog7KCE7LK0IOuNsOydtO2EsCDrsLDsl7Qg67CY7ZmYXG4gICAqL1xuICByZXN1bHQoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnRyYWNlcy5tYXAoKHQpID0+IHQuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICog7LKrIOuyiOynuCDrjbDsnbTthLAg67CY7ZmYXG4gICAqL1xuICBmaXJzdCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1swXT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsp4Drp4kg642w7J207YSwIOuwmO2ZmFxuICAgKi9cbiAgbGFzdCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1t0aGlzLnRyYWNlcy5sZW5ndGggLSAxXT8uZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBu67KI7Ke4IOuNsOydtO2EsCDrsJjtmZhcbiAgICovXG4gIGF0KGluZGV4OiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYWNlc1tpbmRleF0/LmRhdGE7XG4gIH1cblxuICAvKipcbiAgICog7JuQ67O4IHRyYWNlIOuwsOyXtCDrsJjtmZggKOuUlOuyhOq5hS9OYWl0ZVZpZXdlcuyaqSlcbiAgICovXG4gIGdldFRyYWNlcygpOiBOYWl0ZVRyYWNlW10ge1xuICAgIHJldHVybiB0aGlzLnRyYWNlcztcbiAgfVxufVxuXG4vLyBOYWl0ZSDsi7HquIDthLQg6rCd7LK0ICjstpTtm4QgbG9nZ2VyIOyXsOqysCDrk7HsnZgg7IOB7YOcIOq0gOumrCDtlYTsmpTshLEg6rOg66CkKVxuZXhwb3J0IGNsYXNzIE5haXRlQ2xhc3Mge1xuICAvLyDthYzsiqTtirgg66Gc6re4IOq4sOuhnVxuICB0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55IC8q7J2066CH6rKMIOuwm+ydgCDqsJLsnbQgTmFpdGVUcmFjZeuhnCDsoIDsnqXrkJjslrQg7J6I64uk6rCAIOy2lO2bhOyXkCB2aXRlc3Tsl5DqsowgbWV0YeulvCDthrXtlbQg64SY6rKo7KC4IO2UhOuhnOyEuOyKpOqwhCDthrXsi6DsnYQg7Ya17ZW0IOyngeugrO2ZlOuQmOyWtOyVvCDtlZjripQg7KCQ7J2EIOqzoOugpO2VmOyYgOydhCDrlYwg7Jes6riw7JeQIFNlcmlhbGl6YWJsZeydhCDsjajshJwg7KCc7ZWc7J2EIOuRmCDsiJjrj4Qg7J6I7KeA66eMLCDsgqzsmqnsg4HsnZgg7Y647J2Y66W8IOyDneqwge2VmOyXrCBhbnnroZwg67Cb7Iq164uI64ukLiovLFxuICApIHtcbiAgICAvLyDsnbQgdCDtlajsiJjripQg7YWM7Iqk7Yq4IO2ZmOqyveyXkOyEnOunjCDsnpHrj5ntlbTslbwg7ZWp64uI64ukLlxuICAgIC8vIOq3uOumrOqzoCDthYzsiqTtirgg7ZmY6rK9IO2MkOuLqOyXkCDsmZwgaXNUZXN0KCkg7ZWo7IiY66W8IOyCrOyaqe2VmOyngCDslYrslZjrg5DrqbTsmpQsLFxuICAgIC8vIOydtOugh+qyjCDtlZjripTqsowg7Jyg7Yu4IO2VqOyImCDrtojrn6zsmYDshJwg7IKs7Jqp7ZWY64qUIOqyg+uztOuLpCDsobDquIjsnbTrgpjrp4gg67mg66W8IOqygyDqsJnslZjquLAg65WM66y47J6F64uI64ukLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJ0ZXN0XCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgICBjb25zdCBzdG9yZSA9IGNvbnRleHQ/Lm5haXRlU3RvcmU7XG5cbiAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyDsvZzsiqTtg50g7IiY7KeRXG4gICAgICBjb25zdCBzdGFjayA9IGV4dHJhY3RDYWxsU3RhY2soKTtcblxuICAgICAgY29uc3QgdHJhY2U6IE5haXRlVHJhY2UgPSB7XG4gICAgICAgIGtleTogbmFtZSxcbiAgICAgICAgZGF0YTogdmFsdWUsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBhdDogbmV3IERhdGUoKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIO2VreyDgSDrsLDsl7TroZwg6rSA66asXG4gICAgICBjb25zdCBleGlzdGluZyA9IHN0b3JlLmdldChuYW1lKSA/PyBbXTtcbiAgICAgIHN0b3JlLnNldChuYW1lLCBbLi4uZXhpc3RpbmcsIHRyYWNlXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb250ZXh0IOyXhuuKlCDsg4Htmansl5DshJwgTmFpdGUudCDtmLjstpxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoga2V5IOuYkOuKlCB3aWxkY2FyZCDtjKjthLTsnLzroZwgdHJhY2Ug7KGw7ZqMXG4gICAqIO2VreyDgSBOYWl0ZVF1ZXJ5IOuwmO2ZmO2VmOyXrCDssrTsnbTri50g6rCA64qlXG4gICAqL1xuICBnZXQoa2V5UGF0dGVybjogc3RyaW5nKTogTmFpdGVRdWVyeSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgY29uc3Qgc3RvcmUgPSBjb250ZXh0Py5uYWl0ZVN0b3JlO1xuXG4gICAgaWYgKCFzdG9yZSkge1xuICAgICAgcmV0dXJuIG5ldyBOYWl0ZVF1ZXJ5KFtdKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDsl4bsnLzrqbQgZXhhY3QgbWF0Y2hcbiAgICBpZiAoIWtleVBhdHRlcm4uaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICBjb25zdCB0cmFjZXMgPSBzdG9yZS5nZXQoa2V5UGF0dGVybikgPz8gW107XG4gICAgICByZXR1cm4gbmV3IE5haXRlUXVlcnkodHJhY2VzKTtcbiAgICB9XG5cbiAgICAvLyB3aWxkY2FyZCDtjKjthLQg66ek7LmtXG4gICAgY29uc3QgYWxsVHJhY2VzOiBOYWl0ZVRyYWNlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2Ygc3RvcmUuZW50cmllcygpKSB7XG4gICAgICBpZiAobWF0Y2hlc1BhdHRlcm4oa2V5LCBrZXlQYXR0ZXJuKSkge1xuICAgICAgICBhbGxUcmFjZXMucHVzaCguLi50cmFjZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmFpdGVRdWVyeShhbGxUcmFjZXMpO1xuICB9XG5cbiAgLy8g7KCE7LK0IOumrOyKpO2KuCDqsIDsoLjsmKTquLBcbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGlmICghY29udGV4dD8ubmFpdGVTdG9yZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvLyBOYWl0ZVRyYWNlIOuwsOyXtOydhCBkYXRh66eMIOy2lOy2nO2VmOyXrCDrsJjtmZhcbiAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHRyYWNlc10gb2YgY29udGV4dC5uYWl0ZVN0b3JlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwibW9jazpcIikpIHtcbiAgICAgICAgLy8gTW9jayDshKTsoJXsnYAg6re464yA66GcIOuwmO2ZmFxuICAgICAgICByZXN1bHRba2V5XSA9IHRyYWNlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5haXRlVHJhY2Ug67Cw7Je07J2AIGRhdGHrp4wg7LaU7LacXG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJhY2VzLm1hcCgodDogTmFpdGVUcmFjZSkgPT4gdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsiqTthqDslrTsl5Ag65Ok7Ja07J6I642YIO2KuOugiOydtOyKpOulvCDqs6DrjIDroZwg6rq864K07Ji164uI64ukLlxuICAgKiDsnbTrlYwg6rCS65Ok7J2AIOuqqOuRkCDsp4HroKztmZQg6rCA64ql7ZWcIOyDge2DnOuhnCDrgpjqsIDqsowg65Cp64uI64ukLlxuICAgKiDthYzsiqTtirgg7KCV67O07JmAIO2VqOq7mCBleHRlbnNpb25z7JeQIOuztOuCvCDsmqnrj4TroZwg66eM65Ok7JeI7Iq164uI64ukLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVHJhY2VzKCk6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGluZU51bWJlcjogbnVtYmVyO1xuICAgIGF0OiBzdHJpbmc7XG4gIH1bXSB7XG4gICAgY29uc3QgY29udGV4dCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgaWYgKCFjb250ZXh0Py5uYWl0ZVN0b3JlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgdHJhY2VzID0gQXJyYXkuZnJvbShjb250ZXh0Lm5haXRlU3RvcmUudmFsdWVzKCkpLmZsYXQoKTtcblxuICAgIC8vIOyngeugrO2ZlCDrtojqsIDriqXtlZwg6rCS7J20IOyhtOyerO2VnOuLpOuptCDsnbTrpbwg64yA66y47Ked66eM7ZWY6rKMIOyVjOugpOykjeuLiOuLpCEg6re47LmY66eMIOyVjOumrOq4sOunjCDtlZjqs6Ag6re464OlIOyngOuCmOqwkeuLiOuLpCDjhY7jhY5cbiAgICAvLyDsmZwg7KeB66Cs7ZmU6rCAIOykkeyalO2VnOqwgD8g7J20KGdldEFsbFRyYWNlcykg7Zi47Lac7J2YIOqysOqzvOuKlCDsmbjrtoDroZwg64KY6rCA6rKMIOuQmOuKlOuNsCxcbiAgICAvLyDsnbTrlYwg7KO8IOyaqeuPhOqwgCB2aXRlc3TsnZggdGFzay5tZXRhIO2VhOuTnOulvCDthrXtlbQgYWZ0ZXJFYWNo7JeQ7IScIFNvbmFtdSBleHRlbnNpb27snLzroZwg7KCE64us7ZWY64qUIOqyg+yeheuLiOuLpC5cbiAgICAvLyDsl6zquLDshJwgbWV0YSDtlYTrk5zsl5Ag64u06ri0IOuCtOyaqeydgCDtlITroZzshLjsiqTqsIQg7Ya17IugKHByb2Nlc3Muc2VuZCkg65iQ64qUIOyKpOugiOuTnOqwhCDthrXsi6AobWVzc2FnZSBwb3J0KeydhCDthrXtlbQg7KCE64us65CY7Ja07JW8IO2VmOuKlOuNsCxcbiAgICAvLyDsnbTroZwg7J247ZW0IFwi7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrk6Trp4wg7ZeI7JqpXCLtlZjripQg7KCc7JW97J20IOyDneq5geuLiOuLpC5cbiAgICAvL1xuICAgIC8vIOydtCDsoJzslb3snYQg7J2Y7Iud7ZWY7JesIE5haXRlLnTsl5Ag7KeB66Cs7ZmUIOqwgOuKpe2VnCDqsJLrp4wg64SY6riw6rKMIO2VoCDsiJjrj4Qg7J6I7JeI7KeA66eMLCDqt7jroIfqsowg7ZWY66m0IOu2iO2OuO2VtOyniCDqsoMg6rCZ7JWE7IScIO2VmOyngCDslYrslZjsirXri4jri6QuXG4gICAgLy8g65Sw65287IScIO2YhOyerCBOYWl0ZS5064qUIOuqqOuToCDqsJLsnYQg67Cb7J2EIOyImCDsnojqsowg65CY7Ja0IOyeiOyKteuLiOuLpC5cbiAgICAvLyDrjIDsi6Ag7J2066CH6rKMKGdldEFsbFRyYWNlcykg6re4IOqwkuuTpOydhCDrubzrgrwg65WMIEpTT04uc3RyaW5naWZ566W8IOyCrOyaqe2VmOyXrCDqsJXsoJzroZwg7KeB66Cs7ZmUIOqwgOuKpe2VmOqyjCDrp4zrk6Tsl4jsirXri4jri6QsLFxuICAgIGZvciAoY29uc3QgdHJhY2Ugb2YgdHJhY2VzKSB7XG4gICAgICBjb25zdCBjaGVjayA9IGlzU2VyaWFsaXphYmxlKHRyYWNlLmRhdGEpO1xuICAgICAgaWYgKCFjaGVjay52YWxpZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICBcIuKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xcblwiICtcbiAgICAgICAgICAgIFwi4pWRICBbTmFpdGVdIE5vbi1zZXJpYWxpemFibGUgdmFsdWUgZGV0ZWN0ZWQhICAgICAgICAgICAgICAgICAgICAgIOKVkVxcblwiICtcbiAgICAgICAgICAgIFwi4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjXFxuXCIgK1xuICAgICAgICAgICAgYOKVkSAgS2V5OiAke3RyYWNlLmtleS5wYWRFbmQoNTcpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgUmVhc29uOiAkeyhjaGVjay5yZWFzb24gPz8gXCJ1bmtub3duXCIpLnNsaWNlKDAsIDU0KS5wYWRFbmQoNTQpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgTG9jYXRpb246ICR7KHRyYWNlLnN0YWNrWzBdPy5maWxlUGF0aCA/PyBcInVua25vd25cIikuc2xpY2UoLTUxKS5wYWRFbmQoNTIpfeKVkVxcbmAgK1xuICAgICAgICAgICAgYOKVkSAgTGluZTogJHtTdHJpbmcodHJhY2Uuc3RhY2tbMF0/LmxpbmVOdW1iZXIgPz8gMCkucGFkRW5kKDU2KX3ilZFcXG5gICtcbiAgICAgICAgICAgIFwi4pWg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWjXFxuXCIgK1xuICAgICAgICAgICAgXCLilZEgIE5haXRlLnQoKSBhY2NlcHRzIGFueSB0eXBlIG9mIHZhbHVlLiBIb3dldmVyLCB2YWx1ZXMgd2lsbCAgICAg4pWRXFxuXCIgK1xuICAgICAgICAgICAgXCLilZEgIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiB3aGVuIGV4cG9ydGVkIHZpYSBOYWl0ZS5nZXRBbGxUcmFjZXMoKS4g4pWRXFxuXCIgK1xuICAgICAgICAgICAgXCLilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cXG5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2VzLm1hcCgodHJhY2UpID0+ICh7XG4gICAgICBrZXk6IHRyYWNlLmtleSxcbiAgICAgIHZhbHVlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyYWNlLmRhdGEgPz8gXCJcIikpLCAvLyDsp4HroKztmZQg6rCA64ql7ZWcIOqyg+unjCDrgqjquLDroKTripQg64iI66y86rKo7Jq0IOuFuOugpSwsIOyViOq3uOufrOuptCB0YXNrLm1ldGHsl5Ag65Ok7Ja06rCA7IScIO2UhOuhnOyEuOyKpOqwhCDthrXsi6Ag7ZWgIOuVjCDrrLjsoJwg7IOd6riw6rGw65Og7JqULCxcbiAgICAgIGZpbGVQYXRoOiB0cmFjZS5zdGFja1swXT8uZmlsZVBhdGggPz8gXCJcIixcbiAgICAgIGxpbmVOdW1iZXI6IHRyYWNlLnN0YWNrWzBdPy5saW5lTnVtYmVyID8/IDAsXG4gICAgICBhdDogdHJhY2UuYXQudG9JU09TdHJpbmcoKSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyDtirnsoJUg7YKkIOyCreygnO2VmOq4sFxuICBkZWwoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQ/Lm5haXRlU3RvcmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGV4dC5uYWl0ZVN0b3JlLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgY3JlYXRlU3RvcmUoKTogTmFpdGVTdG9yZSB7XG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBOYWl0ZVRyYWNlW10+KCk7XG4gIH1cblxuICAvLyDsnbzrsJgg66Gc6re4IOugiOuyqFxuICBkKF9tZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiBMb2dnZXIg7Jew6rKwXG4gICAgY29uc29sZS5sb2coYFtERUJVR10gJHtfbWVzc2FnZX1gKTtcbiAgfVxuICBpKF9tZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiBMb2dnZXIg7Jew6rKwXG4gICAgY29uc29sZS5sb2coYFtJTkZPXSAke19tZXNzYWdlfWApO1xuICB9XG4gIHcoX21lc3NhZ2U6IHN0cmluZykge1xuICAgIC8vIFRPRE86IExvZ2dlciDsl7DqsrBcbiAgICBjb25zb2xlLmxvZyhgW1dBUk5dICR7X21lc3NhZ2V9YCk7XG4gIH1cbiAgZShfbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgLy8gVE9ETzogTG9nZ2VyIOyXsOqysFxuICAgIGNvbnNvbGUubG9nKGBbRVJST1JdICR7X21lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IE5haXRlID0gbmV3IE5haXRlQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJTb25hbXUiLCJpc1NlcmlhbGl6YWJsZSIsImV4dHJhY3RDYWxsU3RhY2siLCJzdGFjayIsIkVycm9yIiwibGluZXMiLCJzcGxpdCIsImZyYW1lcyIsInNsaWNlIiwibWFwIiwicGFyc2VTdGFja0ZyYW1lIiwiZmlsdGVyIiwiZnJhbWUiLCJjb250ZXh0SW5kZXgiLCJmaW5kSW5kZXgiLCJmIiwiZnVuY3Rpb25OYW1lIiwiaW5jbHVkZXMiLCJsaW5lIiwibWF0Y2hXaXRoRnVuYyIsIm1hdGNoIiwiZmlsZVBhdGgiLCJsaW5lTnVtYmVyU3RyIiwibGluZU51bWJlciIsIk51bWJlciIsInBhcnNlSW50IiwibWF0Y2hOb0Z1bmMiLCJtYXRjaGVzUGF0dGVybiIsImtleSIsInBhdHRlcm4iLCJrZXlQYXJ0cyIsInBhdHRlcm5QYXJ0cyIsImxlbmd0aCIsInByZWZpeFBhcnRzIiwiZXZlcnkiLCJwYXJ0IiwiaSIsIk5haXRlUXVlcnkiLCJ0cmFjZXMiLCJmcm9tRmlsZSIsImZpbGVOYW1lIiwiZmlsdGVyZWQiLCJ0Iiwic29tZSIsImVuZHNXaXRoIiwiZnJvbUZ1bmN0aW9uIiwiZnVuY05hbWUiLCJvcHRpb25zIiwiZnJvbSIsIndoZXJlIiwicGF0aCIsIm9wZXJhdG9yIiwidmFsdWUiLCJ0cmFjZSIsImFjdHVhbCIsInJlc3VsdCIsImRhdGEiLCJmaXJzdCIsImxhc3QiLCJhdCIsImluZGV4IiwiZ2V0VHJhY2VzIiwiTmFpdGVDbGFzcyIsIm5hbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInN0b3JlIiwibmFpdGVTdG9yZSIsIkRhdGUiLCJleGlzdGluZyIsInNldCIsImtleVBhdHRlcm4iLCJhbGxUcmFjZXMiLCJlbnRyaWVzIiwicHVzaCIsImdldEFsbCIsInN0YXJ0c1dpdGgiLCJnZXRBbGxUcmFjZXMiLCJBcnJheSIsInZhbHVlcyIsImZsYXQiLCJjaGVjayIsInZhbGlkIiwiY29uc29sZSIsIndhcm4iLCJwYWRFbmQiLCJyZWFzb24iLCJTdHJpbmciLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJ0b0lTT1N0cmluZyIsImRlbCIsImRlbGV0ZSIsImNyZWF0ZVN0b3JlIiwiTWFwIiwiZCIsIl9tZXNzYWdlIiwibG9nIiwidyIsImUiLCJOYWl0ZSJdLCJtYXBwaW5ncyI6IkFBQUEsa0ZBQWtGLEdBRWxGLFNBQVNBLEdBQUcsUUFBUSxVQUFVO0FBQzlCLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFFdkMsU0FBU0MsY0FBYyxRQUFRLDJCQUF3QjtBQW9CdkQ7Ozs7O0NBS0MsR0FDRCxTQUFTQztJQUNQLE1BQU1DLFFBQVEsSUFBSUMsUUFBUUQsS0FBSztJQUMvQixJQUFJLENBQUNBLE9BQU8sT0FBTyxFQUFFO0lBRXJCLE1BQU1FLFFBQVFGLE1BQU1HLEtBQUssQ0FBQztJQUUxQixVQUFVO0lBQ1YsZUFBZTtJQUNmLDZCQUE2QjtJQUM3QixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLE1BQU1DLFNBQVNGLE1BQ1pHLEtBQUssQ0FBQyxHQUNOQyxHQUFHLENBQUNDLGlCQUNKQyxNQUFNLENBQUMsQ0FBQ0MsUUFBK0JBLFVBQVU7SUFFcEQsb0NBQW9DO0lBQ3BDLE1BQU1DLGVBQWVOLE9BQU9PLFNBQVMsQ0FDbkMsQ0FBQ0MsSUFDQ0EsRUFBRUMsWUFBWSxFQUFFQyxTQUFTLHFCQUFxQkYsRUFBRUMsWUFBWSxFQUFFQyxTQUFTO0lBRzNFLE9BQU9KLGdCQUFnQixJQUFJTixPQUFPQyxLQUFLLENBQUMsR0FBR0ssZUFBZSxLQUFLTjtBQUNqRTtBQUVBOzs7O0NBSUMsR0FDRCxTQUFTRyxnQkFBZ0JRLElBQVk7SUFDbkMsNERBQTREO0lBQzVELE1BQU1DLGdCQUFnQkQsS0FBS0UsS0FBSyxDQUFDO0lBQ2pDLElBQUlELGVBQWU7UUFDakIsTUFBTUgsZUFBZUcsYUFBYSxD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
|
package/dist/stream/sse.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
2
2
|
import type { z } from "zod";
|
|
3
3
|
export declare function createSSEFactory<T extends z.ZodObject>(socket: FastifyRequest["socket"], reply: FastifyReply, _events: T): SSEConnection<T>;
|
|
4
|
-
declare
|
|
5
|
-
|
|
6
|
-
private readonly reply;
|
|
7
|
-
private _closed;
|
|
8
|
-
constructor(socket: FastifyRequest["socket"], reply: FastifyReply);
|
|
4
|
+
export declare function createMockSSEFactory<T extends z.ZodObject>(_events: T): SSEConnection<T>;
|
|
5
|
+
export interface SSEConnection<T extends z.ZodObject> {
|
|
9
6
|
publish<K extends keyof z.infer<T>>(event: K, data: z.infer<T>[K]): void;
|
|
10
7
|
end(): Promise<void>;
|
|
11
8
|
}
|
|
12
|
-
export {};
|
|
13
9
|
//# sourceMappingURL=sse.d.ts.map
|
package/dist/stream/sse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/stream/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EACpD,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/stream/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EACpD,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,CAAC,GACT,aAAa,CAAC,CAAC,CAAC,CAElB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAKxF;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;IAClD,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB"}
|
package/dist/stream/sse.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
// NOTE(Haze, 251106): context provider에서 인자를 채워주면 createSSE(events)만으로 사용 가능
|
|
2
2
|
export function createSSEFactory(socket, reply, _events) {
|
|
3
|
-
return new
|
|
3
|
+
return new SSEConnectionImpl(socket, reply);
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
export function createMockSSEFactory(_events) {
|
|
6
|
+
return {
|
|
7
|
+
publish: (_event, _data)=>{},
|
|
8
|
+
end: ()=>Promise.resolve()
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
class SSEConnectionImpl {
|
|
6
12
|
socket;
|
|
7
13
|
reply;
|
|
8
14
|
_closed = false;
|
|
@@ -35,4 +41,4 @@ class SSEConnection {
|
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vc3NlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIE5PVEUoSGF6ZSwgMjUxMTA2KTogY29udGV4dCBwcm92aWRlcuyXkOyEnCDsnbjsnpDrpbwg7LGE7JuM7KO866m0IGNyZWF0ZVNTRShldmVudHMp66eM7Jy866GcIOyCrOyaqSDqsIDriqVcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTU0VGYWN0b3J5PFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4oXG4gIHNvY2tldDogRmFzdGlmeVJlcXVlc3RbXCJzb2NrZXRcIl0sXG4gIHJlcGx5OiBGYXN0aWZ5UmVwbHksXG4gIF9ldmVudHM6IFQsXG4pOiBTU0VDb25uZWN0aW9uPFQ+IHtcbiAgcmV0dXJuIG5ldyBTU0VDb25uZWN0aW9uSW1wbDxUPihzb2NrZXQsIHJlcGx5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tTU0VGYWN0b3J5PFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4oX2V2ZW50czogVCk6IFNTRUNvbm5lY3Rpb248VD4ge1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2g6IChfZXZlbnQsIF9kYXRhKSA9PiB7fSxcbiAgICBlbmQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNTRUNvbm5lY3Rpb248VCBleHRlbmRzIHouWm9kT2JqZWN0PiB7XG4gIHB1Ymxpc2g8SyBleHRlbmRzIGtleW9mIHouaW5mZXI8VD4+KGV2ZW50OiBLLCBkYXRhOiB6LmluZmVyPFQ+W0tdKTogdm9pZDtcbiAgZW5kKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmNsYXNzIFNTRUNvbm5lY3Rpb25JbXBsPFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4gaW1wbGVtZW50cyBTU0VDb25uZWN0aW9uPFQ+IHtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb2NrZXQ6IEZhc3RpZnlSZXF1ZXN0W1wic29ja2V0XCJdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKSB7XG4gICAgdGhpcy5zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGlzaDxLIGV4dGVuZHMga2V5b2Ygei5pbmZlcjxUPj4oZXZlbnQ6IEssIGRhdGE6IHouaW5mZXI8VD5bS10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZXBseS5zc2Uoe1xuICAgICAgZXZlbnQ6IGV2ZW50IGFzIHN0cmluZyxcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcGx5LnNzZSh7XG4gICAgICBldmVudDogXCJlbmRcIixcbiAgICAgIGRhdGE6IFwiRU5EXCIsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKTtcbiAgICB0aGlzLnJlcGx5LnJhdy5lbmQoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVNTRUZhY3RvcnkiLCJzb2NrZXQiLCJyZXBseSIsIl9ldmVudHMiLCJTU0VDb25uZWN0aW9uSW1wbCIsImNyZWF0ZU1vY2tTU0VGYWN0b3J5IiwicHVibGlzaCIsIl9ldmVudCIsIl9kYXRhIiwiZW5kIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY2xvc2VkIiwib24iLCJldmVudCIsImRhdGEiLCJzc2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0VGltZW91dCIsInJhdyJdLCJtYXBwaW5ncyI6IkFBR0EsNkVBQTZFO0FBQzdFLE9BQU8sU0FBU0EsaUJBQ2RDLE1BQWdDLEVBQ2hDQyxLQUFtQixFQUNuQkMsT0FBVTtJQUVWLE9BQU8sSUFBSUMsa0JBQXFCSCxRQUFRQztBQUMxQztBQUVBLE9BQU8sU0FBU0cscUJBQTRDRixPQUFVO0lBQ3BFLE9BQU87UUFDTEcsU0FBUyxDQUFDQyxRQUFRQyxTQUFXO1FBQzdCQyxLQUFLLElBQU1DLFFBQVFDLE9BQU87SUFDNUI7QUFDRjtBQU9BLE1BQU1QOzs7SUFDSVEsVUFBVSxNQUFNO0lBRXhCLFlBQ0UsQUFBaUJYLE1BQWdDLEVBQ2pELEFBQWlCQyxLQUFtQixDQUNwQzthQUZpQkQsU0FBQUE7YUFDQUMsUUFBQUE7UUFFakIsSUFBSSxDQUFDRCxNQUFNLENBQUNZLEVBQUUsQ0FBQyxTQUFTO1lBQ3RCLElBQUksQ0FBQ0QsT0FBTyxHQUFHO1FBQ2pCO0lBQ0Y7SUFFQU4sUUFBb0NRLEtBQVEsRUFBRUMsSUFBbUIsRUFBUTtRQUN2RSxJQUFJLElBQUksQ0FBQ0gsT0FBTyxFQUFFO1lBQ2hCO1FBQ0Y7UUFFQSxJQUFJLENBQUNWLEtBQUssQ0FBQ2MsR0FBRyxDQUFDO1lBQ2JGLE9BQU9BO1lBQ1BDLE1BQU1FLEtBQUtDLFNBQVMsQ0FBQ0g7UUFDdkI7SUFDRjtJQUVBLE1BQU1OLE1BQXFCO1FBQ3pCLElBQUksSUFBSSxDQUFDRyxPQUFPLEVBQUU7WUFDaEI7UUFDRjtRQUVBLElBQUksQ0FBQ1YsS0FBSyxDQUFDYyxHQUFHLENBQUM7WUFDYkYsT0FBTztZQUNQQyxNQUFNO1FBQ1I7UUFFQSxNQUFNLElBQUlMLFFBQVEsQ0FBQ0MsVUFBWVEsV0FBV1IsU0FBUztRQUNuRCxJQUFJLENBQUNULEtBQUssQ0FBQ2tCLEdBQUcsQ0FBQ1gsR0FBRztJQUNwQjtBQUNGIn0=
|
|
@@ -199,6 +199,10 @@ function resolveTypeNode(typeNode) {
|
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
201
|
break;
|
|
202
|
+
case ts.SyntaxKind.ParenthesizedType:
|
|
203
|
+
// 괄호로 묶인 타입 (예: (A & B)[] 에서 (A & B))
|
|
204
|
+
// 내부 타입을 재귀적으로 resolve
|
|
205
|
+
return resolveTypeNode(typeNode.type);
|
|
202
206
|
case undefined:
|
|
203
207
|
throw new Error(`typeNode undefined`);
|
|
204
208
|
}
|
|
@@ -237,4 +241,4 @@ function printNode(node, sourceFile) {
|
|
|
237
241
|
return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile);
|
|
238
242
|
}
|
|
239
243
|
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvYXBpLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpLCByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQg7YyM7J287J2EIO2MjOyLse2VmOyXrCBBUEkg66mU7IaM65OcIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDrtpnsnYAg66mU7IaM65Oc65Ok7J2YIO2DgOyehSDsoJXrs7Trpbwg67aE7ISd7ZWp64uI64ukLlxuICogQHBhcmFtIGZpbGVQYXRoIC0g7YyM7Iux7ZWgIFR5cGVTY3JpcHQg7YyM7J287J2YIOygiOuMgCDqsr3roZxcbiAqIEByZXR1cm5zIEFQSSDrqZTshozrk5wg7KCV67O0IOuwsOyXtCAo7YOA7J6FIO2MjOudvOuvuO2EsCwg7YyM652866+47YSwLCDrpqzthLQg7YOA7J6FIOuTsSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBcGlzRnJvbUZpbGUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8RXh0ZW5kZWRBcGlbXT4ge1xuICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKFwiLnRzXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7ZmlsZVBhdGh9IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBUeXBlU2NyaXB0IGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgZmlsZSBwYXRoLiBXZSBvbmx5IHN1cHBvcnQgcGFyc2luZyBUeXBlU2NyaXB0IGZpbGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCksXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgKTtcblxuICBjb25zdCBtZXRob2RzOiBPbWl0PEV4dGVuZGVkQXBpLCBcInBhdGhcIiB8IFwib3B0aW9uc1wiPltdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbSBhcyB0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdDogXCJ0eXBlLXBhcmFtXCIsXG4gICAgICAgICAgICBpZDogdHAubmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICAgICAgY29uc3RyYWludDogdHAuY29uc3RyYWludCA/IHJlc29sdmVUeXBlTm9kZSh0cC5jb25zdHJhaW50KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFwaVBhcmFtW10gPSBub2RlLnBhcmFtZXRlcnMubWFwKChwYXJhbURlYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERlZiA9IHByaW50Tm9kZShwYXJhbURlYy5pbml0aWFsaXplciwgc291cmNlRmlsZSk7XG5cbiAgICAgICAgLy8g6riw67O46rCS7J20IOyeiOuKlCDqsr3smrAgcGFyYW1EZWMudHlwZeqwgCB1bmRlZmluZWTroZwg64KY7Ji0XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwYXJhbURlYy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogcGFyYW1EZWMudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJhbURlYy5xdWVzdGlvblRva2VuICE9PSB1bmRlZmluZWQgfHwgcGFyYW1EZWMuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg66as7YS0IO2DgOyeheydtCDquLDsnqzrkJjsp4Ag7JWK7J2AIOuplOyGjOuTnCAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHJlc29sdmVUeXBlTm9kZShub2RlLnR5cGUpO1xuXG4gICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdG9yKTtcbiAgfTtcbiAgdmlzaXRvcihzb3VyY2VGaWxlKTtcblxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyDtmITsnqwg7YyM7J287J2YIOuTseuhneuQnCBBUEkg7ZWE7YSwXG4gIGNvbnN0IGN1cnJlbnRNb2RlbEFwaXMgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4ge1xuICAgIHJldHVybiBtZXRob2RzLmZpbmQoXG4gICAgICAobWV0aG9kKSA9PiBtZXRob2QubW9kZWxOYW1lID09PSBhcGkubW9kZWxOYW1lICYmIG1ldGhvZC5tZXRob2ROYW1lID09PSBhcGkubWV0aG9kTmFtZSxcbiAgICApO1xuICB9KTtcbiAgaWYgKGN1cnJlbnRNb2RlbEFwaXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gY29uc3QgcCA9IHBhdGguam9pbih0bXBkaXIoKSwgXCJzb25hbXUtc3luY2VyLWVycm9yLmpzb25cIik7XG4gICAgLy8gd3JpdGVGaWxlU3luYyhwLCBKU09OLnN0cmluZ2lmeShyZWdpc3RlcmVkQXBpcywgbnVsbCwgMikpO1xuICAgIC8vIGV4ZWNTeW5jKGBvcGVuICR7cH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCDtjIzsnbzsl5Ag7IKs7KCEIOuTseuhneuQnCBBUEnqsIAg7JeG7Iq164uI64ukLiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgLy8g65Ox66Gd65CcIEFQSeyXkCDtmITsnqwg66mU7IaM65OcIO2DgOyehSDsoJXrs7Qg7ZmV7J6lXG4gIGNvbnN0IGV4dGVuZGVkQXBpcyA9IGN1cnJlbnRNb2RlbEFwaXMubWFwKChhcGkpID0+IHtcbiAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+IG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiYgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKCFmb3VuZE1ldGhvZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBub3QgZm91bmQgaW4gJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwaSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8udHlwZVBhcmFtZXRlcnMsXG4gICAgICBwYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8ucGFyYW1ldGVycyxcbiAgICAgIHJldHVyblR5cGU6IGZvdW5kTWV0aG9kPy5yZXR1cm5UeXBlLFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gZXh0ZW5kZWRBcGlzO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVHlwZU5vZGUodHlwZU5vZGU6IHRzLlR5cGVOb2RlKTogQXBpUGFyYW1UeXBlIHtcbiAgc3dpdGNoICh0eXBlTm9kZT8ua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BbnlLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwiYW55XCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVua25vd25LZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5MaXRlcmFsVHlwZToge1xuICAgICAgY29uc3QgbGl0ZXJhbCA9ICh0eXBlTm9kZSBhcyB0cy5MaXRlcmFsVHlwZU5vZGUpLmxpdGVyYWw7XG4gICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBsaXRlcmFsLnRleHQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzTnVtZXJpY0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBOdW1iZXIobGl0ZXJhbC50ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcImZhbHNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi7JWMIOyImCDsl4bripQg66as7YSw65+0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlUeXBlOiB7XG4gICAgICBjb25zdCBhcnJOb2RlID0gdHlwZU5vZGUgYXMgdHMuQXJyYXlUeXBlTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudHNUeXBlOiByZXNvbHZlVHlwZU5vZGUoYXJyTm9kZS5lbGVtZW50VHlwZSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6IHtcbiAgICAgIGNvbnN0IGxpdGVyYWxOb2RlID0gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIucGFyYW1ldGVyc1swXS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5wYXJhbWV0ZXJzWzBdLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtyZXMudHlwZX1dYCxcbiAgICAgICAgICAgICAgfSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkubmFtZSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiAobWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlKS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgICBvcHRpb25hbDogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkucXVlc3Rpb25Ub2tlbiAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJyZWZcIixcbiAgICAgICAgaWQ6ICgodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVOYW1lIGFzIHRzLklkZW50aWZpZXIpLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgIGFyZ3M6ICh0eXBlTm9kZSBhcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSkudHlwZUFyZ3VtZW50cz8ubWFwKCh0eXBlQXJnKSA9PlxuICAgICAgICAgIHJlc29sdmVUeXBlTm9kZSh0eXBlQXJnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuaW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwidW5pb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5VbmlvblR5cGVOb2RlKS50eXBlcy5tYXAoKHR5cGUpID0+IHJlc29sdmVUeXBlTm9kZSh0eXBlKSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcnNlY3Rpb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5JbnRlcnNlY3Rpb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5kZXhlZEFjY2Vzc1R5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCIsXG4gICAgICAgIG9iamVjdDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLm9iamVjdFR5cGUpLFxuICAgICAgICBpbmRleDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLmluZGV4VHlwZSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UdXBsZVR5cGU6XG4gICAgICBpZiAodHMuaXNUdXBsZVR5cGVOb2RlKHR5cGVOb2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwidHVwbGUtdHlwZVwiLFxuICAgICAgICAgIGVsZW1lbnRzOiB0eXBlTm9kZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IHJlc29sdmVUeXBlTm9kZShlbGVtKSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHlwZU5vZGUgdW5kZWZpbmVkYCk7XG4gIH1cblxuICBjb25zb2xlLmRlYnVnKHR5cGVOb2RlKTtcbiAgdGhyb3cgbmV3IEVycm9yKGDslYwg7IiYIOyXhuuKlCBTeW50YXhLaW5kICR7dHlwZU5vZGUua2luZH1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhcmFtRGVjKFxuICBwYXJhbURlYzoge1xuICAgIG5hbWU6IHRzLkJpbmRpbmdOYW1lO1xuICAgIHR5cGU6IHRzLlR5cGVOb2RlO1xuICAgIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0RGVmPzogc3RyaW5nO1xuICB9LFxuICBpbmRleDogbnVtYmVyID0gMCxcbik6IEFwaVBhcmFtIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtRGVjLm5hbWUgYXMgdHMuSWRlbnRpZmllcjtcbiAgY29uc3QgdHlwZSA9IHJlc29sdmVUeXBlTm9kZShwYXJhbURlYy50eXBlKTtcblxuICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5kZWJ1Zyh7IG5hbWUsIHR5cGUsIHBhcmFtRGVjIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBBcGlQYXJhbSA9IHtcbiAgICBuYW1lOiBuYW1lLmVzY2FwZWRUZXh0ID8gbmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpIDogYG5vbmFtZUF0JHtpbmRleH1gLFxuICAgIHR5cGUsXG4gICAgb3B0aW9uYWw6IHBhcmFtRGVjLm9wdGlvbmFsID09PSB0cnVlLFxuICAgIGRlZmF1bHREZWY6IHBhcmFtRGVjPy5kZWZhdWx0RGVmLFxuICB9O1xuXG4gIC8vIOq1rOyhsOu2hO2VtO2VoOuLueydmCDqsr3smrAg7YOA7J6F7J2066aEIOyCrOyaqVxuICBpZiAoXG4gICAgdHMuaXNPYmplY3RCaW5kaW5nUGF0dGVybihuYW1lKSAmJlxuICAgIHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUocGFyYW1EZWMudHlwZSkgJiZcbiAgICB0cy5pc0lkZW50aWZpZXIocGFyYW1EZWMudHlwZS50eXBlTmFtZSlcbiAgKSB7XG4gICAgcmVzdWx0Lm5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHBhcmFtRGVjLnR5cGUudHlwZU5hbWUudGV4dCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwcmludE5vZGUobm9kZTogdHMuTm9kZSB8IHVuZGVmaW5lZCwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoeyBuZXdMaW5lOiB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZCB9KTtcbiAgcmV0dXJuIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBub2RlLCBzb3VyY2VGaWxlKTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZWFkRmlsZSIsImluZmxlY3Rpb24iLCJ0cyIsInJlZ2lzdGVyZWRBcGlzIiwidmFsaWRhdGVNZXRob2ROYW1lIiwicmVhZEFwaXNGcm9tRmlsZSIsImZpbGVQYXRoIiwiZW5kc1dpdGgiLCJFcnJvciIsInNvdXJjZUZpbGUiLCJjcmVhdGVTb3VyY2VGaWxlIiwidG9TdHJpbmciLCJTY3JpcHRUYXJnZXQiLCJMYXRlc3QiLCJtZXRob2RzIiwibW9kZWxOYW1lIiwibWV0aG9kTmFtZSIsInZpc2l0b3IiLCJub2RlIiwiaXNDbGFzc0RlY2xhcmF0aW9uIiwibmFtZSIsImlzSWRlbnRpZmllciIsImVzY2FwZWRUZXh0IiwicmVwbGFjZSIsImlzTWV0aG9kRGVjbGFyYXRpb24iLCJ0eXBlUGFyYW1ldGVycyIsIm1hcCIsInR5cGVQYXJhbSIsInRwIiwidCIsImlkIiwiY29uc3RyYWludCIsInJlc29sdmVUeXBlTm9kZSIsInVuZGVmaW5lZCIsInBhcmFtZXRlcnMiLCJwYXJhbURlYyIsImluZGV4IiwiZGVmYXVsdERlZiIsInByaW50Tm9kZSIsImluaXRpYWxpemVyIiwicmVzb2x2ZVBhcmFtRGVjIiwidHlwZSIsIm9wdGlvbmFsIiwicXVlc3Rpb25Ub2tlbiIsInJldHVyblR5cGUiLCJwdXNoIiwiZm9yRWFjaENoaWxkIiwibGVuZ3RoIiwiY3VycmVudE1vZGVsQXBpcyIsImZpbHRlciIsImFwaSIsImZpbmQiLCJtZXRob2QiLCJleHRlbmRlZEFwaXMiLCJmb3VuZE1ldGhvZCIsInR5cGVOb2RlIiwia2luZCIsIlN5bnRheEtpbmQiLCJBbnlLZXl3b3JkIiwiVW5rbm93bktleXdvcmQiLCJTdHJpbmdLZXl3b3JkIiwiTnVtYmVyS2V5d29yZCIsIkJvb2xlYW5LZXl3b3JkIiwiVW5kZWZpbmVkS2V5d29yZCIsIk51bGxLZXl3b3JkIiwiVm9pZEtleXdvcmQiLCJMaXRlcmFsVHlwZSIsImxpdGVyYWwiLCJpc1N0cmluZ0xpdGVyYWwiLCJ2YWx1ZSIsInRleHQiLCJpc051bWVyaWNMaXRlcmFsIiwiTnVtYmVyIiwiVHJ1ZUtleXdvcmQiLCJGYWxzZUtleXdvcmQiLCJBcnJheVR5cGUiLCJhcnJOb2RlIiwiZWxlbWVudHNUeXBlIiwiZWxlbWVudFR5cGUiLCJUeXBlTGl0ZXJhbCIsImxpdGVyYWxOb2RlIiwicHJvcHMiLCJtZW1iZXJzIiwibWVtYmVyIiwiaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uIiwicmVzIiwiVHlwZVJlZmVyZW5jZSIsInR5cGVOYW1lIiwiYXJncyIsInR5cGVBcmd1bWVudHMiLCJ0eXBlQXJnIiwiVW5pb25UeXBlIiwidHlwZXMiLCJJbnRlcnNlY3Rpb25UeXBlIiwiSW5kZXhlZEFjY2Vzc1R5cGUiLCJvYmplY3QiLCJvYmplY3RUeXBlIiwiaW5kZXhUeXBlIiwiVHVwbGVUeXBlIiwiaXNUdXBsZVR5cGVOb2RlIiwiZWxlbWVudHMiLCJlbGVtIiwiY29uc29sZSIsImRlYnVnIiwicmVzdWx0IiwiaXNPYmplY3RCaW5kaW5nUGF0dGVybiIsImlzVHlwZVJlZmVyZW5jZU5vZGUiLCJjYW1lbGl6ZSIsInByaW50ZXIiLCJjcmVhdGVQcmludGVyIiwibmV3TGluZSIsIk5ld0xpbmVLaW5kIiwiTGluZUZlZWQiLCJFbWl0SGludCIsIlVuc3BlY2lmaWVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsU0FBU0MsUUFBUSxRQUFRLG1CQUFjO0FBQ3ZDLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BDLE9BQU9DLFFBQVEsYUFBYTtBQUM1QixTQUEyQkMsY0FBYyxRQUFRLHVCQUFvQjtBQUNyRSxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBbUI7QUFJdEQ7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLGlCQUFpQkMsUUFBc0I7SUFDM0QsSUFBSSxDQUFDQSxTQUFTQyxRQUFRLENBQUMsUUFBUTtRQUM3QixNQUFNLElBQUlDLE1BQ1IsR0FBR0YsU0FBUyw2R0FBNkcsQ0FBQztJQUU5SDtJQUVBLE1BQU1HLGFBQWFQLEdBQUdRLGdCQUFnQixDQUNwQ0osVUFDQSxBQUFDLENBQUEsTUFBTU4sU0FBU00sU0FBUSxFQUFHSyxRQUFRLElBQ25DVCxHQUFHVSxZQUFZLENBQUNDLE1BQU07SUFHeEIsTUFBTUMsVUFBbUQsRUFBRTtJQUMzRCxJQUFJQyxZQUFvQjtJQUN4QixJQUFJQyxhQUFxQjtJQUN6QixNQUFNQyxVQUFVLENBQUND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
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvYXBpLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpLCByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQg7YyM7J287J2EIO2MjOyLse2VmOyXrCBBUEkg66mU7IaM65OcIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDrtpnsnYAg66mU7IaM65Oc65Ok7J2YIO2DgOyehSDsoJXrs7Trpbwg67aE7ISd7ZWp64uI64ukLlxuICogQHBhcmFtIGZpbGVQYXRoIC0g7YyM7Iux7ZWgIFR5cGVTY3JpcHQg7YyM7J287J2YIOygiOuMgCDqsr3roZxcbiAqIEByZXR1cm5zIEFQSSDrqZTshozrk5wg7KCV67O0IOuwsOyXtCAo7YOA7J6FIO2MjOudvOuvuO2EsCwg7YyM652866+47YSwLCDrpqzthLQg7YOA7J6FIOuTsSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBcGlzRnJvbUZpbGUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8RXh0ZW5kZWRBcGlbXT4ge1xuICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKFwiLnRzXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7ZmlsZVBhdGh9IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBUeXBlU2NyaXB0IGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgZmlsZSBwYXRoLiBXZSBvbmx5IHN1cHBvcnQgcGFyc2luZyBUeXBlU2NyaXB0IGZpbGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCksXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgKTtcblxuICBjb25zdCBtZXRob2RzOiBPbWl0PEV4dGVuZGVkQXBpLCBcInBhdGhcIiB8IFwib3B0aW9uc1wiPltdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbSBhcyB0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdDogXCJ0eXBlLXBhcmFtXCIsXG4gICAgICAgICAgICBpZDogdHAubmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICAgICAgY29uc3RyYWludDogdHAuY29uc3RyYWludCA/IHJlc29sdmVUeXBlTm9kZSh0cC5jb25zdHJhaW50KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFwaVBhcmFtW10gPSBub2RlLnBhcmFtZXRlcnMubWFwKChwYXJhbURlYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERlZiA9IHByaW50Tm9kZShwYXJhbURlYy5pbml0aWFsaXplciwgc291cmNlRmlsZSk7XG5cbiAgICAgICAgLy8g6riw67O46rCS7J20IOyeiOuKlCDqsr3smrAgcGFyYW1EZWMudHlwZeqwgCB1bmRlZmluZWTroZwg64KY7Ji0XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwYXJhbURlYy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogcGFyYW1EZWMudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJhbURlYy5xdWVzdGlvblRva2VuICE9PSB1bmRlZmluZWQgfHwgcGFyYW1EZWMuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg66as7YS0IO2DgOyeheydtCDquLDsnqzrkJjsp4Ag7JWK7J2AIOuplOyGjOuTnCAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHJlc29sdmVUeXBlTm9kZShub2RlLnR5cGUpO1xuXG4gICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdG9yKTtcbiAgfTtcbiAgdmlzaXRvcihzb3VyY2VGaWxlKTtcblxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyDtmITsnqwg7YyM7J287J2YIOuTseuhneuQnCBBUEkg7ZWE7YSwXG4gIGNvbnN0IGN1cnJlbnRNb2RlbEFwaXMgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4ge1xuICAgIHJldHVybiBtZXRob2RzLmZpbmQoXG4gICAgICAobWV0aG9kKSA9PiBtZXRob2QubW9kZWxOYW1lID09PSBhcGkubW9kZWxOYW1lICYmIG1ldGhvZC5tZXRob2ROYW1lID09PSBhcGkubWV0aG9kTmFtZSxcbiAgICApO1xuICB9KTtcbiAgaWYgKGN1cnJlbnRNb2RlbEFwaXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gY29uc3QgcCA9IHBhdGguam9pbih0bXBkaXIoKSwgXCJzb25hbXUtc3luY2VyLWVycm9yLmpzb25cIik7XG4gICAgLy8gd3JpdGVGaWxlU3luYyhwLCBKU09OLnN0cmluZ2lmeShyZWdpc3RlcmVkQXBpcywgbnVsbCwgMikpO1xuICAgIC8vIGV4ZWNTeW5jKGBvcGVuICR7cH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCDtjIzsnbzsl5Ag7IKs7KCEIOuTseuhneuQnCBBUEnqsIAg7JeG7Iq164uI64ukLiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgLy8g65Ox66Gd65CcIEFQSeyXkCDtmITsnqwg66mU7IaM65OcIO2DgOyehSDsoJXrs7Qg7ZmV7J6lXG4gIGNvbnN0IGV4dGVuZGVkQXBpcyA9IGN1cnJlbnRNb2RlbEFwaXMubWFwKChhcGkpID0+IHtcbiAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+IG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiYgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKCFmb3VuZE1ldGhvZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBub3QgZm91bmQgaW4gJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwaSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8udHlwZVBhcmFtZXRlcnMsXG4gICAgICBwYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8ucGFyYW1ldGVycyxcbiAgICAgIHJldHVyblR5cGU6IGZvdW5kTWV0aG9kPy5yZXR1cm5UeXBlLFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gZXh0ZW5kZWRBcGlzO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVHlwZU5vZGUodHlwZU5vZGU6IHRzLlR5cGVOb2RlKTogQXBpUGFyYW1UeXBlIHtcbiAgc3dpdGNoICh0eXBlTm9kZT8ua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BbnlLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwiYW55XCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVua25vd25LZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5MaXRlcmFsVHlwZToge1xuICAgICAgY29uc3QgbGl0ZXJhbCA9ICh0eXBlTm9kZSBhcyB0cy5MaXRlcmFsVHlwZU5vZGUpLmxpdGVyYWw7XG4gICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBsaXRlcmFsLnRleHQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzTnVtZXJpY0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBOdW1iZXIobGl0ZXJhbC50ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcImZhbHNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi7JWMIOyImCDsl4bripQg66as7YSw65+0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlUeXBlOiB7XG4gICAgICBjb25zdCBhcnJOb2RlID0gdHlwZU5vZGUgYXMgdHMuQXJyYXlUeXBlTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudHNUeXBlOiByZXNvbHZlVHlwZU5vZGUoYXJyTm9kZS5lbGVtZW50VHlwZSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6IHtcbiAgICAgIGNvbnN0IGxpdGVyYWxOb2RlID0gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIucGFyYW1ldGVyc1swXS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5wYXJhbWV0ZXJzWzBdLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtyZXMudHlwZX1dYCxcbiAgICAgICAgICAgICAgfSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkubmFtZSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiAobWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlKS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgICBvcHRpb25hbDogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkucXVlc3Rpb25Ub2tlbiAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJyZWZcIixcbiAgICAgICAgaWQ6ICgodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVOYW1lIGFzIHRzLklkZW50aWZpZXIpLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgIGFyZ3M6ICh0eXBlTm9kZSBhcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSkudHlwZUFyZ3VtZW50cz8ubWFwKCh0eXBlQXJnKSA9PlxuICAgICAgICAgIHJlc29sdmVUeXBlTm9kZSh0eXBlQXJnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuaW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwidW5pb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5VbmlvblR5cGVOb2RlKS50eXBlcy5tYXAoKHR5cGUpID0+IHJlc29sdmVUeXBlTm9kZSh0eXBlKSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcnNlY3Rpb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5JbnRlcnNlY3Rpb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5kZXhlZEFjY2Vzc1R5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCIsXG4gICAgICAgIG9iamVjdDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLm9iamVjdFR5cGUpLFxuICAgICAgICBpbmRleDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLmluZGV4VHlwZSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UdXBsZVR5cGU6XG4gICAgICBpZiAodHMuaXNUdXBsZVR5cGVOb2RlKHR5cGVOb2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwidHVwbGUtdHlwZVwiLFxuICAgICAgICAgIGVsZW1lbnRzOiB0eXBlTm9kZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IHJlc29sdmVUeXBlTm9kZShlbGVtKSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZFR5cGU6XG4gICAgICAvLyDqtITtmLjroZwg66y27J24IO2DgOyehSAo7JiIOiAoQSAmIEIpW10g7JeQ7IScIChBICYgQikpXG4gICAgICAvLyDrgrTrtoAg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCByZXNvbHZlXG4gICAgICByZXR1cm4gcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5QYXJlbnRoZXNpemVkVHlwZU5vZGUpLnR5cGUpO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlTm9kZSB1bmRlZmluZWRgKTtcbiAgfVxuXG4gIGNvbnNvbGUuZGVidWcodHlwZU5vZGUpO1xuICB0aHJvdyBuZXcgRXJyb3IoYOyVjCDsiJgg7JeG64qUIFN5bnRheEtpbmQgJHt0eXBlTm9kZS5raW5kfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUGFyYW1EZWMoXG4gIHBhcmFtRGVjOiB7XG4gICAgbmFtZTogdHMuQmluZGluZ05hbWU7XG4gICAgdHlwZTogdHMuVHlwZU5vZGU7XG4gICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGRlZmF1bHREZWY/OiBzdHJpbmc7XG4gIH0sXG4gIGluZGV4OiBudW1iZXIgPSAwLFxuKTogQXBpUGFyYW0ge1xuICBjb25zdCBuYW1lID0gcGFyYW1EZWMubmFtZSBhcyB0cy5JZGVudGlmaWVyO1xuICBjb25zdCB0eXBlID0gcmVzb2x2ZVR5cGVOb2RlKHBhcmFtRGVjLnR5cGUpO1xuXG4gIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLmRlYnVnKHsgbmFtZSwgdHlwZSwgcGFyYW1EZWMgfSk7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IEFwaVBhcmFtID0ge1xuICAgIG5hbWU6IG5hbWUuZXNjYXBlZFRleHQgPyBuYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCkgOiBgbm9uYW1lQXQke2luZGV4fWAsXG4gICAgdHlwZSxcbiAgICBvcHRpb25hbDogcGFyYW1EZWMub3B0aW9uYWwgPT09IHRydWUsXG4gICAgZGVmYXVsdERlZjogcGFyYW1EZWM/LmRlZmF1bHREZWYsXG4gIH07XG5cbiAgLy8g6rWs7KGw67aE7ZW07ZWg64u57J2YIOqyveyasCDtg4DsnoXsnbTrpoQg7IKs7JqpXG4gIGlmIChcbiAgICB0cy5pc09iamVjdEJpbmRpbmdQYXR0ZXJuKG5hbWUpICYmXG4gICAgdHMuaXNUeXBlUmVmZXJlbmNlTm9kZShwYXJhbURlYy50eXBlKSAmJlxuICAgIHRzLmlzSWRlbnRpZmllcihwYXJhbURlYy50eXBlLnR5cGVOYW1lKVxuICApIHtcbiAgICByZXN1bHQubmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUocGFyYW1EZWMudHlwZS50eXBlTmFtZS50ZXh0LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHByaW50Tm9kZShub2RlOiB0cy5Ob2RlIHwgdW5kZWZpbmVkLCBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwcmludGVyID0gdHMuY3JlYXRlUHJpbnRlcih7IG5ld0xpbmU6IHRzLk5ld0xpbmVLaW5kLkxpbmVGZWVkIH0pO1xuICByZXR1cm4gcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5vZGUsIHNvdXJjZUZpbGUpO1xufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsInJlYWRGaWxlIiwiaW5mbGVjdGlvbiIsInRzIiwicmVnaXN0ZXJlZEFwaXMiLCJ2YWxpZGF0ZU1ldGhvZE5hbWUiLCJyZWFkQXBpc0Zyb21GaWxlIiwiZmlsZVBhdGgiLCJlbmRzV2l0aCIsIkVycm9yIiwic291cmNlRmlsZSIsImNyZWF0ZVNvdXJjZUZpbGUiLCJ0b1N0cmluZyIsIlNjcmlwdFRhcmdldCIsIkxhdGVzdCIsIm1ldGhvZHMiLCJtb2RlbE5hbWUiLCJtZXRob2ROYW1lIiwidmlzaXRvciIsIm5vZGUiLCJpc0NsYXNzRGVjbGFyYXRpb24iLCJuYW1lIiwiaXNJZGVudGlmaWVyIiwiZXNjYXBlZFRleHQiLCJyZXBsYWNlIiwiaXNNZXRob2REZWNsYXJhdGlvbiIsInR5cGVQYXJhbWV0ZXJzIiwibWFwIiwidHlwZVBhcmFtIiwidHAiLCJ0IiwiaWQiLCJjb25zdHJhaW50IiwicmVzb2x2ZVR5cGVOb2RlIiwidW5kZWZpbmVkIiwicGFyYW1ldGVycyIsInBhcmFtRGVjIiwiaW5kZXgiLCJkZWZhdWx0RGVmIiwicHJpbnROb2RlIiwiaW5pdGlhbGl6ZXIiLCJyZXNvbHZlUGFyYW1EZWMiLCJ0eXBlIiwib3B0aW9uYWwiLCJxdWVzdGlvblRva2VuIiwicmV0dXJuVHlwZSIsInB1c2giLCJmb3JFYWNoQ2hpbGQiLCJsZW5ndGgiLCJjdXJyZW50TW9kZWxBcGlzIiwiZmlsdGVyIiwiYXBpIiwiZmluZCIsIm1ldGhvZCIsImV4dGVuZGVkQXBpcyIsImZvdW5kTWV0aG9kIiwidHlwZU5vZGUiLCJraW5kIiwiU3ludGF4S2luZCIsIkFueUtleXdvcmQiLCJVbmtub3duS2V5d29yZCIsIlN0cmluZ0tleXdvcmQiLCJOdW1iZXJLZXl3b3JkIiwiQm9vbGVhbktleXdvcmQiLCJVbmRlZmluZWRLZXl3b3JkIiwiTnVsbEtleXdvcmQiLCJWb2lkS2V5d29yZCIsIkxpdGVyYWxUeXBlIiwibGl0ZXJhbCIsImlzU3RyaW5nTGl0ZXJhbCIsInZhbHVlIiwidGV4dCIsImlzTnVtZXJpY0xpdGVyYWwiLCJOdW1iZXIiLCJUcnVlS2V5d29yZCIsIkZhbHNlS2V5d29yZCIsIkFycmF5VHlwZSIsImFyck5vZGUiLCJlbGVtZW50c1R5cGUiLCJlbGVtZW50VHlwZSIsIlR5cGVMaXRlcmFsIiwibGl0ZXJhbE5vZGUiLCJwcm9wcyIsIm1lbWJlcnMiLCJtZW1iZXIiLCJpc0luZGV4U2lnbmF0dXJlRGVjbGFyYXRpb24iLCJyZXMiLCJUeXBlUmVmZXJlbmNlIiwidHlwZU5hbWUiLCJhcmdzIiwidHlwZUFyZ3VtZW50cyIsInR5cGVBcmciLCJVbmlvblR5cGUiLCJ0eXBlcyIsIkludGVyc2VjdGlvblR5cGUiLCJJbmRleGVkQWNjZXNzVHlwZSIsIm9iamVjdCIsIm9iamVjdFR5cGUiLCJpbmRleFR5cGUiLCJUdXBsZVR5cGUiLCJpc1R1cGxlVHlwZU5vZGUiLCJlbGVtZW50cyIsImVsZW0iLCJQYXJlbnRoZXNpemVkVHlwZSIsImNvbnNvbGUiLCJkZWJ1ZyIsInJlc3VsdCIsImlzT2JqZWN0QmluZGluZ1BhdHRlcm4iLCJpc1R5cGVSZWZlcmVuY2VOb2RlIiwiY2FtZWxpemUiLCJwcmludGVyIiwiY3JlYXRlUHJpbnRlciIsIm5ld0xpbmUiLCJOZXdMaW5lS2luZCIsIkxpbmVGZWVkIiwiRW1pdEhpbnQiLCJVbnNwZWNpZmllZCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLFFBQVEsUUFBUSxtQkFBYztBQUN2QyxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxRQUFRLGFBQWE7QUFDNUIsU0FBMkJDLGNBQWMsUUFBUSx1QkFBb0I7QUFDckUsU0FBU0Msa0JBQWtCLFFBQVEsc0JBQW1CO0FBSXREOzs7OztDQUtDLEdBQ0QsT0FBTyxlQUFlQyxpQkFBaUJDLFFBQXNCO0lBQzNELElBQUksQ0FBQ0EsU0FBU0Ms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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AbsolutePath, ApiRelativePath } from "../utils/path-utils";
|
|
2
|
-
export type FileType = "
|
|
2
|
+
export type FileType = "config" | "entity" | "frame" | "functions" | "generated" | "model" | "types" | "workflow";
|
|
3
3
|
export type GlobPattern<T extends ApiRelativePath | AbsolutePath> = {
|
|
4
4
|
[key in FileType]: T;
|
|
5
5
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-patterns.d.ts","sourceRoot":"","sources":["../../src/syncer/file-patterns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,QAAQ,GAChB,
|
|
1
|
+
{"version":3,"file":"file-patterns.d.ts","sourceRoot":"","sources":["../../src/syncer/file-patterns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,WAAW,GACX,WAAW,GACX,OAAO,GACP,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,YAAY,IAAI;KACjE,GAAG,IAAI,QAAQ,GAAG,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,eAAe,CAS7D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,qCAAqC,IAAI,WAAW,CAAC,YAAY,CAAC,CAOjF"}
|