@wireio/protoc-gen-solana 1.0.5 → 1.0.6

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.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Compatibility shim for @protobuf-ts/plugin with TypeScript 5.x
3
+ *
4
+ * TypeScript 5.x removed the deprecated top-level ts.create* factory functions
5
+ * that @protobuf-ts/plugin@2.11.1 relies on (607 call sites). This shim restores
6
+ * them as thin wrappers around the current ts.factory.create* API.
7
+ *
8
+ * Three categories of changes between TS 4.x and 5.x factory APIs:
9
+ * 1. Same-name moves: ts.createFoo -> ts.factory.createFoo
10
+ * 2. Renames: ts.createCall -> ts.factory.createCallExpression
11
+ * 3. Signature changes: decorators param merged into modifiers
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=TypescriptFactoryShim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypescriptFactoryShim.d.ts","sourceRoot":"","sources":["../src/TypescriptFactoryShim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Compatibility shim for @protobuf-ts/plugin with TypeScript 5.x
4
+ *
5
+ * TypeScript 5.x removed the deprecated top-level ts.create* factory functions
6
+ * that @protobuf-ts/plugin@2.11.1 relies on (607 call sites). This shim restores
7
+ * them as thin wrappers around the current ts.factory.create* API.
8
+ *
9
+ * Three categories of changes between TS 4.x and 5.x factory APIs:
10
+ * 1. Same-name moves: ts.createFoo -> ts.factory.createFoo
11
+ * 2. Renames: ts.createCall -> ts.factory.createCallExpression
12
+ * 3. Signature changes: decorators param merged into modifiers
13
+ */
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const typescript_1 = __importDefault(require("typescript"));
19
+ const tsAny = typescript_1.default;
20
+ const factoryAny = typescript_1.default.factory;
21
+ // Only patch if the deprecated APIs are actually missing
22
+ if (typescript_1.default.factory && typeof tsAny.createTypeReferenceNode !== "function") {
23
+ // ── 1. Auto-map factory methods that kept the same name ─────────────────
24
+ for (const key of Object.getOwnPropertyNames(typescript_1.default.factory)) {
25
+ if (key.startsWith("create") &&
26
+ typeof factoryAny[key] === "function" &&
27
+ typeof tsAny[key] !== "function") {
28
+ tsAny[key] = factoryAny[key].bind(typescript_1.default.factory);
29
+ }
30
+ }
31
+ // ── 2. Renamed methods (old short name → new full name) ─────────────────
32
+ const renames = {
33
+ createArrayLiteral: "createArrayLiteralExpression",
34
+ createBinary: "createBinaryExpression",
35
+ createBreak: "createBreakStatement",
36
+ createCall: "createCallExpression",
37
+ createConditional: "createConditionalExpression",
38
+ createElementAccess: "createElementAccessExpression",
39
+ createFor: "createForStatement",
40
+ createForOf: "createForOfStatement",
41
+ createIf: "createIfStatement",
42
+ createNew: "createNewExpression",
43
+ createObjectLiteral: "createObjectLiteralExpression",
44
+ createParen: "createParenthesizedExpression",
45
+ createPostfix: "createPostfixUnaryExpression",
46
+ createPropertyAccess: "createPropertyAccessExpression",
47
+ createReturn: "createReturnStatement",
48
+ createSwitch: "createSwitchStatement",
49
+ createThrow: "createThrowStatement",
50
+ createWhile: "createWhileStatement",
51
+ };
52
+ for (const [oldName, newName] of Object.entries(renames)) {
53
+ if (typeof tsAny[oldName] !== "function" && typeof factoryAny[newName] === "function") {
54
+ tsAny[oldName] = factoryAny[newName].bind(typescript_1.default.factory);
55
+ }
56
+ }
57
+ // ── 3. Signature changes: decorators param removed in TS 5.x ───────────
58
+ //
59
+ // In TS 4.x many declaration functions took (decorators?, modifiers?, ...rest).
60
+ // In TS 5.x the signature is (modifiers?, ...rest) — decorators are merged
61
+ // into the modifiers array. @protobuf-ts/plugin always passes `undefined`
62
+ // for decorators, but we handle the general case for safety.
63
+ function withMergedDecorators(factoryFn) {
64
+ return function (decorators, modifiers, ...rest) {
65
+ const parts = [];
66
+ if (Array.isArray(decorators))
67
+ parts.push(...decorators);
68
+ if (Array.isArray(modifiers))
69
+ parts.push(...modifiers);
70
+ return factoryFn.call(typescript_1.default.factory, parts.length > 0 ? parts : undefined, ...rest);
71
+ };
72
+ }
73
+ // Same-name functions that lost the decorators param
74
+ const sameNameDecoratorFns = [
75
+ "createClassDeclaration",
76
+ "createInterfaceDeclaration",
77
+ "createEnumDeclaration",
78
+ "createImportDeclaration",
79
+ "createIndexSignature",
80
+ ];
81
+ for (const name of sameNameDecoratorFns) {
82
+ if (typeof factoryAny[name] === "function") {
83
+ tsAny[name] = withMergedDecorators(factoryAny[name]);
84
+ }
85
+ }
86
+ // Renamed functions that ALSO lost the decorators param
87
+ const renamedDecoratorFns = {
88
+ createMethod: "createMethodDeclaration",
89
+ createProperty: "createPropertyDeclaration",
90
+ createConstructor: "createConstructorDeclaration",
91
+ createParameter: "createParameterDeclaration",
92
+ };
93
+ for (const [oldName, newName] of Object.entries(renamedDecoratorFns)) {
94
+ if (typeof factoryAny[newName] === "function") {
95
+ tsAny[oldName] = withMergedDecorators(factoryAny[newName]);
96
+ }
97
+ }
98
+ // ── 4. createPropertySignature: initializer param removed ───────────────
99
+ // Old: (modifiers?, name, questionToken?, type?, initializer?)
100
+ // New: (modifiers?, name, questionToken?, type?)
101
+ if (typeof typescript_1.default.factory.createPropertySignature === "function") {
102
+ const orig = typescript_1.default.factory.createPropertySignature.bind(typescript_1.default.factory);
103
+ tsAny.createPropertySignature = function (modifiers, name, questionToken, type, _initializer) {
104
+ return orig(modifiers, name, questionToken, type);
105
+ };
106
+ }
107
+ }
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZXNjcmlwdEZhY3RvcnlTaGltLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1R5cGVzY3JpcHRGYWN0b3J5U2hpbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7Ozs7O0FBRUgsNERBQTJCO0FBRTNCLE1BQU0sS0FBSyxHQUFHLG9CQUFTLENBQUE7QUFDdkIsTUFBTSxVQUFVLEdBQUcsb0JBQUUsQ0FBQyxPQUFjLENBQUE7QUFFcEMseURBQXlEO0FBQ3pELElBQUksb0JBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLENBQUMsdUJBQXVCLEtBQUssVUFBVSxFQUFFLENBQUM7SUFFdEUsMkVBQTJFO0lBQzNFLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLG9CQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxJQUNFLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3hCLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFVBQVU7WUFDckMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUNoQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxNQUFNLE9BQU8sR0FBMkI7UUFDdEMsa0JBQWtCLEVBQUUsOEJBQThCO1FBQ2xELFlBQVksRUFBRSx3QkFBd0I7UUFDdEMsV0FBVyxFQUFFLHNCQUFzQjtRQUNuQyxVQUFVLEVBQUUsc0JBQXNCO1FBQ2xDLGlCQUFpQixFQUFFLDZCQUE2QjtRQUNoRCxtQkFBbUIsRUFBRSwrQkFBK0I7UUFDcEQsU0FBUyxFQUFFLG9CQUFvQjtRQUMvQixXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLFFB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QUFPLENBQUMsdUJBQXVCLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsb0JBQUUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLG9CQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEUsS0FBSyxDQUFDLHVCQUF1QixHQUFHLFVBQVUsU0FBYyxFQUFFLElBQVMsRUFBRSxhQUFrQixFQUFFLElBQVMsRUFBRSxZQUFpQjtZQUNuSCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcGF0aWJpbGl0eSBzaGltIGZvciBAcHJvdG9idWYtdHMvcGx1Z2luIHdpdGggVHlwZVNjcmlwdCA1LnhcbiAqXG4gKiBUeXBlU2NyaXB0IDUueCByZW1vdmVkIHRoZSBkZXByZWNhdGVkIHRvcC1sZXZlbCB0cy5jcmVhdGUqIGZhY3RvcnkgZnVuY3Rpb25zXG4gKiB0aGF0IEBwcm90b2J1Zi10cy9wbHVnaW5AMi4xMS4xIHJlbGllcyBvbiAoNjA3IGNhbGwgc2l0ZXMpLiBUaGlzIHNoaW0gcmVzdG9yZXNcbiAqIHRoZW0gYXMgdGhpbiB3cmFwcGVycyBhcm91bmQgdGhlIGN1cnJlbnQgdHMuZmFjdG9yeS5jcmVhdGUqIEFQSS5cbiAqXG4gKiBUaHJlZSBjYXRlZ29yaWVzIG9mIGNoYW5nZXMgYmV0d2VlbiBUUyA0LnggYW5kIDUueCBmYWN0b3J5IEFQSXM6XG4gKiAgIDEuIFNhbWUtbmFtZSBtb3ZlczogdHMuY3JlYXRlRm9vIC0+IHRzLmZhY3RvcnkuY3JlYXRlRm9vXG4gKiAgIDIuIFJlbmFtZXM6IHRzLmNyZWF0ZUNhbGwgLT4gdHMuZmFjdG9yeS5jcmVhdGVDYWxsRXhwcmVzc2lvblxuICogICAzLiBTaWduYXR1cmUgY2hhbmdlczogZGVjb3JhdG9ycyBwYXJhbSBtZXJnZWQgaW50byBtb2RpZmllcnNcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIlxuXG5jb25zdCB0c0FueSA9IHRzIGFzIGFueVxuY29uc3QgZmFjdG9yeUFueSA9IHRzLmZhY3RvcnkgYXMgYW55XG5cbi8vIE9ubHkgcGF0Y2ggaWYgdGhlIGRlcHJlY2F0ZWQgQVBJcyBhcmUgYWN0dWFsbHkgbWlzc2luZ1xuaWYgKHRzLmZhY3RvcnkgJiYgdHlwZW9mIHRzQW55LmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlICE9PSBcImZ1bmN0aW9uXCIpIHtcblxuICAvLyDilIDilIAgMS4gQXV0by1tYXAgZmFjdG9yeSBtZXRob2RzIHRoYXQga2VwdCB0aGUgc2FtZSBuYW1lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0cy5mYWN0b3J5KSkge1xuICAgIGlmIChcbiAgICAgIGtleS5zdGFydHNXaXRoKFwiY3JlYXRlXCIpICYmXG4gICAgICB0eXBlb2YgZmFjdG9yeUFueVtrZXldID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIHR5cGVvZiB0c0FueVtrZXldICE9PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRzQW55W2tleV0gPSBmYWN0b3J5QW55W2tleV0uYmluZCh0cy5mYWN0b3J5KVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCAyLiBSZW5hbWVkIG1ldGhvZHMgKG9sZCBzaG9ydCBuYW1lIOKGkiBuZXcgZnVsbCBuYW1lKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgY29uc3QgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBjcmVhdGVBcnJheUxpdGVyYWw6IFwiY3JlYXRlQXJyYXlMaXRlcmFsRXhwcmVzc2lvblwiLFxuICAgIGNyZWF0ZUJpbmFyeTogXCJjcmVhdGVCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlQnJlYWs6IFwiY3JlYXRlQnJlYWtTdGF0ZW1lbnRcIixcbiAgICBjcmVhdGVDYWxsOiBcImNyZWF0ZUNhbGxFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlQ29uZGl0aW9uYWw6IFwiY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlRWxlbWVudEFjY2VzczogXCJjcmVhdGVFbGVtZW50QWNjZXNzRXhwcmVzc2lvblwiLFxuICAgIGNyZWF0ZUZvcjogXCJjcmVhdGVGb3JTdGF0ZW1lbnRcIixcbiAgICBjcmVhdGVGb3JPZjogXCJjcmVhdGVGb3JPZlN0YXRlbWVudFwiLFxuICAgIGNyZWF0ZUlmOiBcImNyZWF0ZUlmU3RhdGVtZW50XCIsXG4gICAgY3JlYXRlTmV3OiBcImNyZWF0ZU5ld0V4cHJlc3Npb25cIixcbiAgICBjcmVhdGVPYmplY3RMaXRlcmFsOiBcImNyZWF0ZU9iamVjdExpdGVyYWxFeHByZXNzaW9uXCIsXG4gICAgY3JlYXRlUGFyZW46IFwiY3JlYXRlUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIixcbiAgICBjcmVhdGVQb3N0Zml4OiBcImNyZWF0ZVBvc3RmaXhVbmFyeUV4cHJlc3Npb25cIixcbiAgICBjcmVhdGVQcm9wZXJ0eUFjY2VzczogXCJjcmVhdGVQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb25cIixcbiAgICBjcmVhdGVSZXR1cm46IFwiY3JlYXRlUmV0dXJuU3RhdGVtZW50XCIsXG4gICAgY3JlYXRlU3dpdGNoOiBcImNyZWF0ZVN3aXRjaFN0YXRlbWVudFwiLFxuICAgIGNyZWF0ZVRocm93OiBcImNyZWF0ZVRocm93U3RhdGVtZW50XCIsXG4gICAgY3JlYXRlV2hpbGU6IFwiY3JlYXRlV2hpbGVTdGF0ZW1lbnRcIixcbiAgfVxuXG4gIGZvciAoY29uc3QgW29sZE5hbWUsIG5ld05hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlbmFtZXMpKSB7XG4gICAgaWYgKHR5cGVvZiB0c0FueVtvbGROYW1lXSAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBmYWN0b3J5QW55W25ld05hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRzQW55W29sZE5hbWVdID0gZmFjdG9yeUFueVtuZXdOYW1lXS5iaW5kKHRzLmZhY3RvcnkpXG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIDMuIFNpZ25hdHVyZSBjaGFuZ2VzOiBkZWNvcmF0b3JzIHBhcmFtIHJlbW92ZWQgaW4gVFMgNS54IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvL1xuICAvLyBJbiBUUyA0LnggbWFueSBkZWNsYXJhdGlvbiBmdW5jdGlvbnMgdG9vayAoZGVjb3JhdG9ycz8sIG1vZGlmaWVycz8sIC4uLnJlc3QpLlxuICAvLyBJbiBUUyA1LnggdGhlIHNpZ25hdHVyZSBpcyAobW9kaWZpZXJzPywgLi4ucmVzdCkg4oCUIGRlY29yYXRvcnMgYXJlIG1lcmdlZFxuICAvLyBpbnRvIHRoZSBtb2RpZmllcnMgYXJyYXkuIEBwcm90b2J1Zi10cy9wbHVnaW4gYWx3YXlzIHBhc3NlcyBgdW5kZWZpbmVkYFxuICAvLyBmb3IgZGVjb3JhdG9ycywgYnV0IHdlIGhhbmRsZSB0aGUgZ2VuZXJhbCBjYXNlIGZvciBzYWZldHkuXG5cbiAgZnVuY3Rpb24gd2l0aE1lcmdlZERlY29yYXRvcnMoZmFjdG9yeUZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGVjb3JhdG9yczogYW55LCBtb2RpZmllcnM6IGFueSwgLi4ucmVzdDogYW55W10pIHtcbiAgICAgIGNvbnN0IHBhcnRzOiBhbnlbXSA9IFtdXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWNvcmF0b3JzKSkgcGFydHMucHVzaCguLi5kZWNvcmF0b3JzKVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kaWZpZXJzKSkgcGFydHMucHVzaCguLi5tb2RpZmllcnMpXG4gICAgICByZXR1cm4gZmFjdG9yeUZuLmNhbGwodHMuZmFjdG9yeSwgcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzIDogdW5kZWZpbmVkLCAuLi5yZXN0KVxuICAgIH1cbiAgfVxuXG4gIC8vIFNhbWUtbmFtZSBmdW5jdGlvbnMgdGhhdCBsb3N0IHRoZSBkZWNvcmF0b3JzIHBhcmFtXG4gIGNvbnN0IHNhbWVOYW1lRGVjb3JhdG9yRm5zID0gW1xuICAgIFwiY3JlYXRlQ2xhc3NEZWNsYXJhdGlvblwiLFxuICAgIFwiY3JlYXRlSW50ZXJmYWNlRGVjbGFyYXRpb25cIixcbiAgICBcImNyZWF0ZUVudW1EZWNsYXJhdGlvblwiLFxuICAgIFwiY3JlYXRlSW1wb3J0RGVjbGFyYXRpb25cIixcbiAgICBcImNyZWF0ZUluZGV4U2lnbmF0dXJlXCIsXG4gIF1cbiAgZm9yIChjb25zdCBuYW1lIG9mIHNhbWVOYW1lRGVjb3JhdG9yRm5zKSB7XG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5QW55W25hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRzQW55W25hbWVdID0gd2l0aE1lcmdlZERlY29yYXRvcnMoZmFjdG9yeUFueVtuYW1lXSlcbiAgICB9XG4gIH1cblxuICAvLyBSZW5hbWVkIGZ1bmN0aW9ucyB0aGF0IEFMU08gbG9zdCB0aGUgZGVjb3JhdG9ycyBwYXJhbVxuICBjb25zdCByZW5hbWVkRGVjb3JhdG9yRm5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGNyZWF0ZU1ldGhvZDogXCJjcmVhdGVNZXRob2REZWNsYXJhdGlvblwiLFxuICAgIGNyZWF0ZVByb3BlcnR5OiBcImNyZWF0ZVByb3BlcnR5RGVjbGFyYXRpb25cIixcbiAgICBjcmVhdGVDb25zdHJ1Y3RvcjogXCJjcmVhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uXCIsXG4gICAgY3JlYXRlUGFyYW1ldGVyOiBcImNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uXCIsXG4gIH1cbiAgZm9yIChjb25zdCBbb2xkTmFtZSwgbmV3TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMocmVuYW1lZERlY29yYXRvckZucykpIHtcbiAgICBpZiAodHlwZW9mIGZhY3RvcnlBbnlbbmV3TmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdHNBbnlbb2xkTmFtZV0gPSB3aXRoTWVyZ2VkRGVjb3JhdG9ycyhmYWN0b3J5QW55W25ld05hbWVdKVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCA0LiBjcmVhdGVQcm9wZXJ0eVNpZ25hdHVyZTogaW5pdGlhbGl6ZXIgcGFyYW0gcmVtb3ZlZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gT2xkOiAobW9kaWZpZXJzPywgbmFtZSwgcXVlc3Rpb25Ub2tlbj8sIHR5cGU/LCBpbml0aWFsaXplcj8pXG4gIC8vIE5ldzogKG1vZGlmaWVycz8sIG5hbWUsIHF1ZXN0aW9uVG9rZW4/LCB0eXBlPylcbiAgaWYgKHR5cGVvZiB0cy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5U2lnbmF0dXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCBvcmlnID0gdHMuZmFjdG9yeS5jcmVhdGVQcm9wZXJ0eVNpZ25hdHVyZS5iaW5kKHRzLmZhY3RvcnkpXG4gICAgdHNBbnkuY3JlYXRlUHJvcGVydHlTaWduYXR1cmUgPSBmdW5jdGlvbiAobW9kaWZpZXJzOiBhbnksIG5hbWU6IGFueSwgcXVlc3Rpb25Ub2tlbjogYW55LCB0eXBlOiBhbnksIF9pbml0aWFsaXplcjogYW55KSB7XG4gICAgICByZXR1cm4gb3JpZyhtb2RpZmllcnMsIG5hbWUsIHF1ZXN0aW9uVG9rZW4sIHR5cGUpXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,23 +1,30 @@
1
- import { toSnakeCase } from "../util/names.js";
2
- import { PROTO_TYPE_MAP, WireType, fieldTag, resolveRustType, needsVarintCast, varintDecodeCast } from "./type-map.js";
3
- import { log } from "../util/logger.js";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRepeated = isRepeated;
4
+ exports.isMessage = isMessage;
5
+ exports.genStructMember = genStructMember;
6
+ exports.genFieldEncode = genFieldEncode;
7
+ exports.genFieldDecode = genFieldDecode;
8
+ const names_js_1 = require("../util/names.js");
9
+ const type_map_js_1 = require("./type-map.js");
10
+ const logger_js_1 = require("../util/logger.js");
4
11
  /** Check if field is repeated (label == 3). */
5
- export function isRepeated(field) {
12
+ function isRepeated(field) {
6
13
  return field.label === 3;
7
14
  }
8
15
  /** Check if field is a message type (type == 11). */
9
- export function isMessage(field) {
16
+ function isMessage(field) {
10
17
  return field.type === 11;
11
18
  }
12
19
  /**
13
20
  * Generate the Rust struct member declaration for a field.
14
21
  */
15
- export function genStructMember(field) {
16
- const rustName = toSnakeCase(field.name);
17
- let rustType = resolveRustType(field.type, field.typeName);
22
+ function genStructMember(field) {
23
+ const rustName = (0, names_js_1.toSnakeCase)(field.name);
24
+ let rustType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
18
25
  if (field.mapEntry) {
19
- const keyType = resolveRustType(field.mapEntry.keyType, undefined);
20
- const valType = resolveRustType(field.mapEntry.valueType, field.mapEntry.valueTypeName);
26
+ const keyType = (0, type_map_js_1.resolveRustType)(field.mapEntry.keyType, undefined);
27
+ const valType = (0, type_map_js_1.resolveRustType)(field.mapEntry.valueType, field.mapEntry.valueTypeName);
21
28
  // Maps become parallel Vecs: keys + values
22
29
  return [
23
30
  ` pub ${rustName}_keys: Vec<${keyType}>,`,
@@ -33,14 +40,14 @@ export function genStructMember(field) {
33
40
  * Generate encode logic for a single field.
34
41
  * Returns Rust statements that append encoded bytes to a `Vec<u8> buf`.
35
42
  */
36
- export function genFieldEncode(field) {
37
- const rustName = toSnakeCase(field.name);
38
- const typeInfo = PROTO_TYPE_MAP[field.type];
43
+ function genFieldEncode(field) {
44
+ const rustName = (0, names_js_1.toSnakeCase)(field.name);
45
+ const typeInfo = type_map_js_1.PROTO_TYPE_MAP[field.type];
39
46
  if (!typeInfo) {
40
- log.warn(`Skipping unsupported field type ${field.type} for ${field.name}`);
47
+ logger_js_1.log.warn(`Skipping unsupported field type ${field.type} for ${field.name}`);
41
48
  return ` // TODO: unsupported field type ${field.type} for ${field.name}`;
42
49
  }
43
- const tag = fieldTag(field.number, field.mapEntry ? WireType.LengthDelimited : typeInfo.wireType);
50
+ const tag = (0, type_map_js_1.fieldTag)(field.number, field.mapEntry ? type_map_js_1.WireType.LengthDelimited : typeInfo.wireType);
44
51
  const tagHex = `0x${tag.toString(16).padStart(2, "0")}`;
45
52
  if (field.mapEntry) {
46
53
  return genMapEncode(field, tagHex);
@@ -57,13 +64,13 @@ export function genFieldEncode(field) {
57
64
  * Generate decode branch for a single field within the tag-dispatch match.
58
65
  * Returns a `TAG => { ... }` arm.
59
66
  */
60
- export function genFieldDecode(field) {
61
- const rustName = toSnakeCase(field.name);
62
- const typeInfo = PROTO_TYPE_MAP[field.type];
67
+ function genFieldDecode(field) {
68
+ const rustName = (0, names_js_1.toSnakeCase)(field.name);
69
+ const typeInfo = type_map_js_1.PROTO_TYPE_MAP[field.type];
63
70
  if (!typeInfo) {
64
71
  return ` // TODO: unsupported field type ${field.type} for ${field.name}`;
65
72
  }
66
- const tag = fieldTag(field.number, field.mapEntry ? WireType.LengthDelimited : typeInfo.wireType);
73
+ const tag = (0, type_map_js_1.fieldTag)(field.number, field.mapEntry ? type_map_js_1.WireType.LengthDelimited : typeInfo.wireType);
67
74
  if (field.mapEntry) {
68
75
  return genMapDecode(field, rustName, tag);
69
76
  }
@@ -77,7 +84,7 @@ export function genFieldDecode(field) {
77
84
  }
78
85
  // ── Internal codegen helpers ──────────────────────────────────────────
79
86
  function genScalarEncode(field, rustName, typeInfo, tagHex) {
80
- const cast = needsVarintCast(field.type);
87
+ const cast = (0, type_map_js_1.needsVarintCast)(field.type);
81
88
  // For float types, need to pass bits
82
89
  if (field.type === 1) {
83
90
  // double → f64.to_bits() → u64
@@ -131,19 +138,19 @@ function genRepeatedEncode(field, rustName, typeInfo, tagHex) {
131
138
  lines.push(` ${typeInfo.encodeFunc}(&mut buf, elem);`);
132
139
  }
133
140
  else {
134
- const cast = needsVarintCast(field.type);
141
+ const cast = (0, type_map_js_1.needsVarintCast)(field.type);
135
142
  lines.push(` ${typeInfo.encodeFunc}(&mut buf, *elem${cast});`);
136
143
  }
137
144
  lines.push(` }`);
138
145
  return lines.join("\n");
139
146
  }
140
147
  function genMapEncode(field, tagHex) {
141
- const rustName = toSnakeCase(field.name);
148
+ const rustName = (0, names_js_1.toSnakeCase)(field.name);
142
149
  const me = field.mapEntry;
143
- const keyInfo = PROTO_TYPE_MAP[me.keyType];
144
- const valInfo = PROTO_TYPE_MAP[me.valueType];
145
- const keyTag = `0x${fieldTag(1, keyInfo.wireType).toString(16).padStart(2, "0")}`;
146
- const keyCast = needsVarintCast(me.keyType);
150
+ const keyInfo = type_map_js_1.PROTO_TYPE_MAP[me.keyType];
151
+ const valInfo = type_map_js_1.PROTO_TYPE_MAP[me.valueType];
152
+ const keyTag = `0x${(0, type_map_js_1.fieldTag)(1, keyInfo.wireType).toString(16).padStart(2, "0")}`;
153
+ const keyCast = (0, type_map_js_1.needsVarintCast)(me.keyType);
147
154
  const lines = [
148
155
  ` for i in 0..self.${rustName}_keys.len() {`,
149
156
  ` let mut entry = Vec::new();`,
@@ -156,12 +163,12 @@ function genMapEncode(field, tagHex) {
156
163
  lines.push(` ${keyInfo.encodeFunc}(&mut entry, self.${rustName}_keys[i]${keyCast});`);
157
164
  }
158
165
  if (me.valueType === 11) {
159
- const valTag = `0x${fieldTag(2, WireType.LengthDelimited).toString(16).padStart(2, "0")}`;
166
+ const valTag = `0x${(0, type_map_js_1.fieldTag)(2, type_map_js_1.WireType.LengthDelimited).toString(16).padStart(2, "0")}`;
160
167
  lines.push(` encode_key(&mut entry, ${valTag});`, ` let val_encoded = self.${rustName}_values[i].encode();`, ` encode_varint(&mut entry, val_encoded.len() as u64);`, ` entry.extend_from_slice(&val_encoded);`);
161
168
  }
162
169
  else {
163
- const valTag = `0x${fieldTag(2, valInfo.wireType).toString(16).padStart(2, "0")}`;
164
- const valCast = needsVarintCast(me.valueType);
170
+ const valTag = `0x${(0, type_map_js_1.fieldTag)(2, valInfo.wireType).toString(16).padStart(2, "0")}`;
171
+ const valCast = (0, type_map_js_1.needsVarintCast)(me.valueType);
165
172
  lines.push(` encode_key(&mut entry, ${valTag});`);
166
173
  if (valInfo.encodeRef) {
167
174
  lines.push(` ${valInfo.encodeFunc}(&mut entry, &self.${rustName}_values[i]);`);
@@ -174,7 +181,7 @@ function genMapEncode(field, tagHex) {
174
181
  return lines.join("\n");
175
182
  }
176
183
  function genScalarDecode(field, rustName, typeInfo, tag) {
177
- const cast = varintDecodeCast(field.type);
184
+ const cast = (0, type_map_js_1.varintDecodeCast)(field.type);
178
185
  // Float types need from_bits
179
186
  if (field.type === 1) {
180
187
  // double → f64::from_bits
@@ -205,7 +212,7 @@ function genScalarDecode(field, rustName, typeInfo, tag) {
205
212
  ].join("\n");
206
213
  }
207
214
  function genMessageDecode(field, rustName, tag) {
208
- const structType = resolveRustType(field.type, field.typeName);
215
+ const structType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
209
216
  return [
210
217
  ` ${tag} => {`,
211
218
  ` let (len, new_pos) = decode_varint(data, pos)?;`,
@@ -217,7 +224,7 @@ function genMessageDecode(field, rustName, tag) {
217
224
  }
218
225
  function genRepeatedDecode(field, rustName, typeInfo, tag) {
219
226
  if (isMessage(field)) {
220
- const structType = resolveRustType(field.type, field.typeName);
227
+ const structType = (0, type_map_js_1.resolveRustType)(field.type, field.typeName);
221
228
  return [
222
229
  ` ${tag} => {`,
223
230
  ` let (len, new_pos) = decode_varint(data, pos)?;`,
@@ -227,7 +234,7 @@ function genRepeatedDecode(field, rustName, typeInfo, tag) {
227
234
  ` }`
228
235
  ].join("\n");
229
236
  }
230
- const cast = varintDecodeCast(field.type);
237
+ const cast = (0, type_map_js_1.varintDecodeCast)(field.type);
231
238
  if (field.type === 1) {
232
239
  return [
233
240
  ` ${tag} => {`,
@@ -256,12 +263,12 @@ function genRepeatedDecode(field, rustName, typeInfo, tag) {
256
263
  }
257
264
  function genMapDecode(field, rustName, tag) {
258
265
  const me = field.mapEntry;
259
- const keyInfo = PROTO_TYPE_MAP[me.keyType];
260
- const valInfo = PROTO_TYPE_MAP[me.valueType];
261
- const keySol = resolveRustType(me.keyType, undefined);
262
- const valSol = resolveRustType(me.valueType, me.valueTypeName);
263
- const keyTag = fieldTag(1, keyInfo.wireType);
264
- const keyCast = varintDecodeCast(me.keyType);
266
+ const keyInfo = type_map_js_1.PROTO_TYPE_MAP[me.keyType];
267
+ const valInfo = type_map_js_1.PROTO_TYPE_MAP[me.valueType];
268
+ const keySol = (0, type_map_js_1.resolveRustType)(me.keyType, undefined);
269
+ const valSol = (0, type_map_js_1.resolveRustType)(me.valueType, me.valueTypeName);
270
+ const keyTag = (0, type_map_js_1.fieldTag)(1, keyInfo.wireType);
271
+ const keyCast = (0, type_map_js_1.varintDecodeCast)(me.keyType);
265
272
  const lines = [
266
273
  ` ${tag} => {`,
267
274
  ` let (entry_len, new_pos) = decode_varint(data, pos)?;`,
@@ -280,15 +287,15 @@ function genMapDecode(field, rustName, tag) {
280
287
  ` }`
281
288
  ];
282
289
  if (me.valueType === 11) {
283
- const valTag = fieldTag(2, WireType.LengthDelimited);
290
+ const valTag = (0, type_map_js_1.fieldTag)(2, type_map_js_1.WireType.LengthDelimited);
284
291
  lines.push(` ${valTag} => {`, ` let (v_len, new_pos) = decode_varint(data, pos)?;`, ` let v_end = new_pos + v_len as usize;`, ` val = ${valSol}::decode(&data[new_pos..v_end])?;`, ` pos = v_end;`, ` }`);
285
292
  }
286
293
  else {
287
- const valTag = fieldTag(2, valInfo.wireType);
288
- const valCast = varintDecodeCast(me.valueType);
294
+ const valTag = (0, type_map_js_1.fieldTag)(2, valInfo.wireType);
295
+ const valCast = (0, type_map_js_1.varintDecodeCast)(me.valueType);
289
296
  lines.push(` ${valTag} => {`, ` let (v, new_pos) = ${valInfo.decodeFunc}(data, pos)?;`, ` val = v${valCast};`, ` pos = new_pos;`, ` }`);
290
297
  }
291
298
  lines.push(` _ => {`, ` pos = skip_field(data, pos, entry_tag & 0x07)?;`, ` }`, ` }`, ` }`, ` msg.${rustName}_keys.push(key);`, ` msg.${rustName}_values.push(val);`, ` }`);
292
299
  return lines.join("\n");
293
300
  }
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLFFBQVEsRUFDUixRQUFRLEVBQ1IsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBYXZDLCtDQUErQztBQUMvQyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWdCO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUE7QUFDMUIsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWdCO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFnQjtJQUM5QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3hDLElBQUksUUFBUSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUUxRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDbEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUM3QixLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDeEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQzdCLENBQUE7UUFDRCwyQ0FBMkM7UUFDM0MsT0FBTztZQUNMLFdB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ImltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcIi4uL3V0aWwvbmFtZXMuanNcIlxuaW1wb3J0IHtcbiAgUFJPVE9fVFlQRV9NQVAsXG4gIFdpcmVUeXBlLFxuICBmaWVsZFRhZyxcbiAgcmVzb2x2ZVJ1c3RUeXBlLFxuICBuZWVkc1ZhcmludENhc3QsXG4gIHZhcmludERlY29kZUNhc3Rcbn0gZnJvbSBcIi4vdHlwZS1tYXAuanNcIlxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCJcblxuLyoqIFBhcnNlZCBmaWVsZCBkZXNjcmlwdG9yIHN1YnNldCBuZWVkZWQgZm9yIGNvZGVnZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkSW5mbyB7XG4gIG5hbWU6IHN0cmluZ1xuICBudW1iZXI6IG51bWJlclxuICB0eXBlOiBudW1iZXJcbiAgdHlwZU5hbWU/OiBzdHJpbmdcbiAgbGFiZWw6IG51bWJlciAvLyAxPW9wdGlvbmFsLCAyPXJlcXVpcmVkLCAzPXJlcGVhdGVkXG4gIG9uZW9mSW5kZXg/OiBudW1iZXJcbiAgbWFwRW50cnk/OiB7IGtleVR5cGU6IG51bWJlcjsgdmFsdWVUeXBlOiBudW1iZXI7IHZhbHVlVHlwZU5hbWU/OiBzdHJpbmcgfVxufVxuXG4vKiogQ2hlY2sgaWYgZmllbGQgaXMgcmVwZWF0ZWQgKGxhYmVsID09IDMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwZWF0ZWQoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQubGFiZWwgPT09IDNcbn1cblxuLyoqIENoZWNrIGlmIGZpZWxkIGlzIGEgbWVzc2FnZSB0eXBlICh0eXBlID09IDExKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2UoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQudHlwZSA9PT0gMTFcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgUnVzdCBzdHJ1Y3QgbWVtYmVyIGRlY2xhcmF0aW9uIGZvciBhIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuU3RydWN0TWVtYmVyKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGxldCBydXN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICBjb25zdCBrZXlUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKGZpZWxkLm1hcEVudHJ5LmtleVR5cGUsIHVuZGVmaW5lZClcbiAgICBjb25zdCB2YWxUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlLFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlTmFtZVxuICAgIClcbiAgICAvLyBNYXBzIGJlY29tZSBwYXJhbGxlbCBWZWNzOiBrZXlzICsgdmFsdWVzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgcHViICR7cnVzdE5hbWV9X2tleXM6IFZlYzwke2tleVR5cGV9PixgLFxuICAgICAgYCAgICBwdWIgJHtydXN0TmFtZX1fdmFsdWVzOiBWZWM8JHt2YWxUeXBlfT4sYFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcnVzdFR5cGUgPSBgVmVjPCR7cnVzdFR5cGV9PmBcbiAgfVxuXG4gIHJldHVybiBgICAgIHB1YiAke3J1c3ROYW1lfTogJHtydXN0VHlwZX0sYFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGVuY29kZSBsb2dpYyBmb3IgYSBzaW5nbGUgZmllbGQuXG4gKiBSZXR1cm5zIFJ1c3Qgc3RhdGVtZW50cyB0aGF0IGFwcGVuZCBlbmNvZGVkIGJ5dGVzIHRvIGEgYFZlYzx1OD4gYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRW5jb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgbG9nLndhcm4oYFNraXBwaW5nIHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWApXG4gICAgcmV0dXJuIGAgICAgICAgIC8vIFRPRE86IHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWBcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGZpZWxkVGFnKFxuICAgIGZpZWxkLm51bWJlcixcbiAgICBmaWVsZC5tYXBFbnRyeSA/IFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZCA6IHR5cGVJbmZvLndpcmVUeXBlXG4gIClcbiAgY29uc3QgdGFnSGV4ID0gYDB4JHt0YWcudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcEVuY29kZShmaWVsZCwgdGFnSGV4KVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlblJlcGVhdGVkRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbiAgfVxuXG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlbk1lc3NhZ2VFbmNvZGUoZmllbGQsIHJ1c3ROYW1lLCB0YWdIZXgpXG4gIH1cblxuICByZXR1cm4gZ2VuU2NhbGFyRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZWNvZGUgYnJhbmNoIGZvciBhIHNpbmdsZSBmaWVsZCB3aXRoaW4gdGhlIHRhZy1kaXNwYXRjaCBtYXRjaC5cbiAqIFJldHVybnMgYSBgVEFHID0+IHsgLi4uIH1gIGFybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRGVjb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAvLyBUT0RPOiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gXG4gIH1cblxuICBjb25zdCB0YWcgPSBmaWVsZFRhZyhcbiAgICBmaWVsZC5udW1iZXIsXG4gICAgZmllbGQubWFwRW50cnkgPyBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgOiB0eXBlSW5mby53aXJlVHlwZVxuICApXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHRhZylcbiAgfVxuXG4gIGlmIChpc1JlcGVhdGVkKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5SZXBlYXRlZERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG4gIH1cblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5NZXNzYWdlRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnKVxuICB9XG5cbiAgcmV0dXJuIGdlblNjYWxhckRlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBjb2RlZ2VuIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGdlblNjYWxhckVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBjYXN0ID0gbmVlZHNWYXJpbnRDYXN0KGZpZWxkLnR5cGUpXG4gIC8vIEZvciBmbG9hdCB0eXBlcywgbmVlZCB0byBwYXNzIGJpdHNcbiAgaWYgKGZpZWxkLnR5cGUgPT09IDEpIHtcbiAgICAvLyBkb3VibGUg4oaSIGY2NC50b19iaXRzKCkg4oaSIHU2NFxuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICBlbmNvZGVfZml4ZWQ2NCgmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfS50b19iaXRzKCkpO2BcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gMikge1xuICAgIC8vIGZsb2F0IOKGkiBmMzIudG9fYml0cygpIOKGkiB1MzJcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgICAgYCAgICAgICAgZW5jb2RlX2ZpeGVkMzIoJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0udG9fYml0cygpKTtgXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cbiAgaWYgKHR5cGVJbmZvLmVuY29kZVJlZikge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAmc2VsZi4ke3J1c3ROYW1lfSk7YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0ke2Nhc3R9KTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NZXNzYWdlRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0YWdIZXg6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgYCAgICAgICAgbGV0ICR7cnVzdE5hbWV9X2VuY29kZWQgPSBzZWxmLiR7cnVzdE5hbWV9LmVuY29kZSgpO2AsXG4gICAgYCAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgJHtydXN0TmFtZX1fZW5jb2RlZC5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCYke3J1c3ROYW1lfV9lbmNvZGVkKTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5SZXBlYXRlZEVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGZvciBlbGVtIGluICZzZWxmLiR7cnVzdE5hbWV9IHtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2ApXG5cbiAgaWYgKGlzTWVzc2FnZShmaWVsZCkpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgIGxldCBlbGVtX2VuY29kZWQgPSBlbGVtLmVuY29kZSgpO2AsXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgZWxlbV9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJmVsZW1fZW5jb2RlZCk7YFxuICAgIClcbiAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAxKSB7XG4gICAgLy8gcmVwZWF0ZWQgZG91YmxlXG4gICAgbGluZXMucHVzaChgICAgICAgICAgICAgZW5jb2RlX2ZpeGVkNjQoJm11dCBidWYsIGVsZW0udG9fYml0cygpKTtgKVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IDIpIHtcbiAgICAvLyByZXBlYXRlZCBmbG9hdFxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGVuY29kZV9maXhlZDMyKCZtdXQgYnVmLCBlbGVtLnRvX2JpdHMoKSk7YClcbiAgfSBlbHNlIGlmICh0eXBlSW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCBlbGVtKTtgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNhc3QgPSBuZWVkc1ZhcmludENhc3QoZmllbGQudHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAqZWxlbSR7Y2FzdH0pO2ApXG4gIH1cblxuICBsaW5lcy5wdXNoKGAgICAgICAgIH1gKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBFbmNvZGUoZmllbGQ6IEZpZWxkSW5mbywgdGFnSGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IG1lID0gZmllbGQubWFwRW50cnkhXG4gIGNvbnN0IGtleUluZm8gPSBQUk9UT19UWVBFX01BUFttZS5rZXlUeXBlXVxuICBjb25zdCB2YWxJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUudmFsdWVUeXBlXVxuXG4gIGNvbnN0IGtleVRhZyA9IGAweCR7ZmllbGRUYWcoMSwga2V5SW5mby53aXJlVHlwZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG4gIGNvbnN0IGtleUNhc3QgPSBuZWVkc1ZhcmludENhc3QobWUua2V5VHlwZSlcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLiR7cnVzdE5hbWV9X2tleXMubGVuKCkge2AsXG4gICAgYCAgICAgICAgICAgIGxldCBtdXQgZW50cnkgPSBWZWM6Om5ldygpO2AsXG4gICAgYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBlbnRyeSwgJHtrZXlUYWd9KTtgXG4gIF1cblxuICBpZiAoa2V5SW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgJnNlbGYuJHtydXN0TmFtZX1fa2V5c1tpXSk7YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgc2VsZi4ke3J1c3ROYW1lfV9rZXlzW2ldJHtrZXlDYXN0fSk7YClcbiAgfVxuXG4gIGlmIChtZS52YWx1ZVR5cGUgPT09IDExKSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGVudHJ5LCAke3ZhbFRhZ30pO2AsXG4gICAgICBgICAgICAgICAgICAgbGV0IHZhbF9lbmNvZGVkID0gc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgZW50cnksIHZhbF9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbnRyeS5leHRlbmRfZnJvbV9zbGljZSgmdmFsX2VuY29kZWQpO2BcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCB2YWxJbmZvLndpcmVUeXBlKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICBjb25zdCB2YWxDYXN0ID0gbmVlZHNWYXJpbnRDYXN0KG1lLnZhbHVlVHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgZW50cnksICR7dmFsVGFnfSk7YClcbiAgICBpZiAodmFsSW5mby5lbmNvZGVSZWYpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCAmc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0pO2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCBzZWxmLiR7cnVzdE5hbWV9X3ZhbHVlc1tpXSR7dmFsQ2FzdH0pO2ApXG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaChcbiAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbnRyeS5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnkpO2AsXG4gICAgYCAgICAgICAgfWBcbiAgKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY2FsYXJEZWNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHR5cGVJbmZvOiAodHlwZW9mIFBST1RPX1RZUEVfTUFQKVtudW1iZXJdLFxuICB0YWc6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICAvLyBGbG9hdCB0eXBlcyBuZWVkIGZyb21fYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0Ojpmcm9tX2JpdHNcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0ICh2LCBuZXdfcG9zKSA9IGRlY29kZV9maXhlZDY0KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfSA9IGY2NDo6ZnJvbV9iaXRzKHYpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMjo6ZnJvbV9iaXRzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSBmMzI6OmZyb21fYml0cyh2KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgICBgICAgICAgICAgICAgfWBcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke3R5cGVJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSB2JHtjYXN0fTtgLFxuICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgIGAgICAgICAgICAgICB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuZnVuY3Rpb24gZ2VuTWVzc2FnZURlY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdFR5cGUgPSByZXNvbHZlUnVzdFR5cGUoZmllbGQudHlwZSwgZmllbGQudHlwZU5hbWUpXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAobGVuLCBuZXdfcG9zKSA9IGRlY29kZV92YXJpbnQoZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXdfcG9zICsgbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSAke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICBgICAgICAgICAgICAgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRGVjb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0IChsZW4sIG5ld19wb3MpID0gZGVjb2RlX3ZhcmludChkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3X3BvcyArIGxlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaCgke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICAgICAgJHt0YWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gZGVjb2RlX2ZpeGVkNjQoZGF0YSwgcG9zKT87YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2goZjY0Ojpmcm9tX2JpdHModikpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaChmMzI6OmZyb21fYml0cyh2KSk7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgICAgYCAgICAgICAgICAgIH1gXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt0eXBlSW5mby5kZWNvZGVGdW5jfShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2godiR7Y2FzdH0pO2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBEZWNvZGUoZmllbGQ6IEZpZWxkSW5mbywgcnVzdE5hbWU6IHN0cmluZywgdGFnOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtZSA9IGZpZWxkLm1hcEVudHJ5IVxuICBjb25zdCBrZXlJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUua2V5VHlwZV1cbiAgY29uc3QgdmFsSW5mbyA9IFBST1RPX1RZUEVfTUFQW21lLnZhbHVlVHlwZV1cbiAgY29uc3Qga2V5U29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLmtleVR5cGUsIHVuZGVmaW5lZClcbiAgY29uc3QgdmFsU29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLnZhbHVlVHlwZSwgbWUudmFsdWVUeXBlTmFtZSlcblxuICBjb25zdCBrZXlUYWcgPSBmaWVsZFRhZygxLCBrZXlJbmZvLndpcmVUeXBlKVxuICBjb25zdCBrZXlDYXN0ID0gdmFyaW50RGVjb2RlQ2FzdChtZS5rZXlUeXBlKVxuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKGVudHJ5X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgZW50cnlfZW5kID0gcG9zICsgZW50cnlfbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IGtleTogJHtrZXlTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IHZhbDogJHt2YWxTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPCBlbnRyeV9lbmQge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgbGV0IChlbnRyeV90YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICBtYXRjaCBlbnRyeV90YWcge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7a2V5VGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke2tleUluZm8uZGVjb2RlRnVuY30oZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHYke2tleUNhc3R9O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gIF1cblxuICBpZiAobWUudmFsdWVUeXBlID09PSAxMSkge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZClcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsVGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICh2X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2X2VuZCA9IG5ld19wb3MgKyB2X2xlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAke3ZhbFNvbH06OmRlY29kZSgmZGF0YVtuZXdfcG9zLi52X2VuZF0pPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB2X2VuZDtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIHZhbEluZm8ud2lyZVR5cGUpXG4gICAgY29uc3QgdmFsQ2FzdCA9IHZhcmludERlY29kZUNhc3QobWUudmFsdWVUeXBlKVxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWxUYWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt2YWxJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHYke3ZhbENhc3R9O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgIClcbiAgfVxuXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgZW50cnlfdGFnICYgMHgwNyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgfWAsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX1fa2V5cy5wdXNoKGtleSk7YCxcbiAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfV92YWx1ZXMucHVzaCh2YWwpO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cbiJdfQ==
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUJBLGdDQUVDO0FBR0QsOEJBRUM7QUFLRCwwQ0FzQkM7QUFNRCx3Q0E0QkM7QUFNRCx3Q0EwQkM7QUEzSEQsK0NBQThDO0FBQzlDLCtDQU9zQjtBQUN0QixpREFBdUM7QUFhdkMsK0NBQStDO0FBQy9DLFNBQWdCLFVBQVUsQ0FBQyxLQUFnQjtJQUN6QyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRCxxREFBcUQ7QUFDckQsU0FBZ0IsU0FBUyxDQUFDLEtBQWdCO0lBQ3hDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEtBQWdCO0lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUEsc0JBQVcsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDeEMsSUFBSSxRQUFRLEdBQUcsSUFBQSw2QkFBZSxFQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRTFELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWUsRUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFlLEVBQzdCLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FDN0IsQ0FBQTtRQUNELDJDQUEyQztRQUMzQyxPQUFPO1lBQ0wsV0FBVyxRQUFRLGNBQWMsT0FBTyxJQUFJO1lBQzVDLFdBQVcsUUFBUSxnQkFBZ0IsT0FBTyxJQUFJO1NBQy9DLENBQUMs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QUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvU25ha2VDYXNlIH0gZnJvbSBcIi4uL3V0aWwvbmFtZXMuanNcIlxuaW1wb3J0IHtcbiAgUFJPVE9fVFlQRV9NQVAsXG4gIFdpcmVUeXBlLFxuICBmaWVsZFRhZyxcbiAgcmVzb2x2ZVJ1c3RUeXBlLFxuICBuZWVkc1ZhcmludENhc3QsXG4gIHZhcmludERlY29kZUNhc3Rcbn0gZnJvbSBcIi4vdHlwZS1tYXAuanNcIlxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIi4uL3V0aWwvbG9nZ2VyLmpzXCJcblxuLyoqIFBhcnNlZCBmaWVsZCBkZXNjcmlwdG9yIHN1YnNldCBuZWVkZWQgZm9yIGNvZGVnZW4uICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkSW5mbyB7XG4gIG5hbWU6IHN0cmluZ1xuICBudW1iZXI6IG51bWJlclxuICB0eXBlOiBudW1iZXJcbiAgdHlwZU5hbWU/OiBzdHJpbmdcbiAgbGFiZWw6IG51bWJlciAvLyAxPW9wdGlvbmFsLCAyPXJlcXVpcmVkLCAzPXJlcGVhdGVkXG4gIG9uZW9mSW5kZXg/OiBudW1iZXJcbiAgbWFwRW50cnk/OiB7IGtleVR5cGU6IG51bWJlcjsgdmFsdWVUeXBlOiBudW1iZXI7IHZhbHVlVHlwZU5hbWU/OiBzdHJpbmcgfVxufVxuXG4vKiogQ2hlY2sgaWYgZmllbGQgaXMgcmVwZWF0ZWQgKGxhYmVsID09IDMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVwZWF0ZWQoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQubGFiZWwgPT09IDNcbn1cblxuLyoqIENoZWNrIGlmIGZpZWxkIGlzIGEgbWVzc2FnZSB0eXBlICh0eXBlID09IDExKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lc3NhZ2UoZmllbGQ6IEZpZWxkSW5mbyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmllbGQudHlwZSA9PT0gMTFcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgUnVzdCBzdHJ1Y3QgbWVtYmVyIGRlY2xhcmF0aW9uIGZvciBhIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuU3RydWN0TWVtYmVyKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGxldCBydXN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcblxuICBpZiAoZmllbGQubWFwRW50cnkpIHtcbiAgICBjb25zdCBrZXlUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKGZpZWxkLm1hcEVudHJ5LmtleVR5cGUsIHVuZGVmaW5lZClcbiAgICBjb25zdCB2YWxUeXBlID0gcmVzb2x2ZVJ1c3RUeXBlKFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlLFxuICAgICAgZmllbGQubWFwRW50cnkudmFsdWVUeXBlTmFtZVxuICAgIClcbiAgICAvLyBNYXBzIGJlY29tZSBwYXJhbGxlbCBWZWNzOiBrZXlzICsgdmFsdWVzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgcHViICR7cnVzdE5hbWV9X2tleXM6IFZlYzwke2tleVR5cGV9PixgLFxuICAgICAgYCAgICBwdWIgJHtydXN0TmFtZX1fdmFsdWVzOiBWZWM8JHt2YWxUeXBlfT4sYFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcnVzdFR5cGUgPSBgVmVjPCR7cnVzdFR5cGV9PmBcbiAgfVxuXG4gIHJldHVybiBgICAgIHB1YiAke3J1c3ROYW1lfTogJHtydXN0VHlwZX0sYFxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGVuY29kZSBsb2dpYyBmb3IgYSBzaW5nbGUgZmllbGQuXG4gKiBSZXR1cm5zIFJ1c3Qgc3RhdGVtZW50cyB0aGF0IGFwcGVuZCBlbmNvZGVkIGJ5dGVzIHRvIGEgYFZlYzx1OD4gYnVmYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRW5jb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgbG9nLndhcm4oYFNraXBwaW5nIHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWApXG4gICAgcmV0dXJuIGAgICAgICAgIC8vIFRPRE86IHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgJHtmaWVsZC50eXBlfSBmb3IgJHtmaWVsZC5uYW1lfWBcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGZpZWxkVGFnKFxuICAgIGZpZWxkLm51bWJlcixcbiAgICBmaWVsZC5tYXBFbnRyeSA/IFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZCA6IHR5cGVJbmZvLndpcmVUeXBlXG4gIClcbiAgY29uc3QgdGFnSGV4ID0gYDB4JHt0YWcudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcEVuY29kZShmaWVsZCwgdGFnSGV4KVxuICB9XG5cbiAgaWYgKGlzUmVwZWF0ZWQoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlblJlcGVhdGVkRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbiAgfVxuXG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgcmV0dXJuIGdlbk1lc3NhZ2VFbmNvZGUoZmllbGQsIHJ1c3ROYW1lLCB0YWdIZXgpXG4gIH1cblxuICByZXR1cm4gZ2VuU2NhbGFyRW5jb2RlKGZpZWxkLCBydXN0TmFtZSwgdHlwZUluZm8sIHRhZ0hleClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZWNvZGUgYnJhbmNoIGZvciBhIHNpbmdsZSBmaWVsZCB3aXRoaW4gdGhlIHRhZy1kaXNwYXRjaCBtYXRjaC5cbiAqIFJldHVybnMgYSBgVEFHID0+IHsgLi4uIH1gIGFybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbkZpZWxkRGVjb2RlKGZpZWxkOiBGaWVsZEluZm8pOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IHR5cGVJbmZvID0gUFJPVE9fVFlQRV9NQVBbZmllbGQudHlwZV1cblxuICBpZiAoIXR5cGVJbmZvKSB7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAvLyBUT0RPOiB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlICR7ZmllbGQudHlwZX0gZm9yICR7ZmllbGQubmFtZX1gXG4gIH1cblxuICBjb25zdCB0YWcgPSBmaWVsZFRhZyhcbiAgICBmaWVsZC5udW1iZXIsXG4gICAgZmllbGQubWFwRW50cnkgPyBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQgOiB0eXBlSW5mby53aXJlVHlwZVxuICApXG5cbiAgaWYgKGZpZWxkLm1hcEVudHJ5KSB7XG4gICAgcmV0dXJuIGdlbk1hcERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHRhZylcbiAgfVxuXG4gIGlmIChpc1JlcGVhdGVkKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5SZXBlYXRlZERlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG4gIH1cblxuICBpZiAoaXNNZXNzYWdlKGZpZWxkKSkge1xuICAgIHJldHVybiBnZW5NZXNzYWdlRGVjb2RlKGZpZWxkLCBydXN0TmFtZSwgdGFnKVxuICB9XG5cbiAgcmV0dXJuIGdlblNjYWxhckRlY29kZShmaWVsZCwgcnVzdE5hbWUsIHR5cGVJbmZvLCB0YWcpXG59XG5cbi8vIOKUgOKUgCBJbnRlcm5hbCBjb2RlZ2VuIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGdlblNjYWxhckVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBjYXN0ID0gbmVlZHNWYXJpbnRDYXN0KGZpZWxkLnR5cGUpXG4gIC8vIEZvciBmbG9hdCB0eXBlcywgbmVlZCB0byBwYXNzIGJpdHNcbiAgaWYgKGZpZWxkLnR5cGUgPT09IDEpIHtcbiAgICAvLyBkb3VibGUg4oaSIGY2NC50b19iaXRzKCkg4oaSIHU2NFxuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICBlbmNvZGVfZml4ZWQ2NCgmbXV0IGJ1Ziwgc2VsZi4ke3J1c3ROYW1lfS50b19iaXRzKCkpO2BcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuICBpZiAoZmllbGQudHlwZSA9PT0gMikge1xuICAgIC8vIGZsb2F0IOKGkiBmMzIudG9fYml0cygpIOKGkiB1MzJcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgICAgYCAgICAgICAgZW5jb2RlX2ZpeGVkMzIoJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0udG9fYml0cygpKTtgXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cbiAgaWYgKHR5cGVJbmZvLmVuY29kZVJlZikge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgICBgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAmc2VsZi4ke3J1c3ROYW1lfSk7YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICR7dHlwZUluZm8uZW5jb2RlRnVuY30oJm11dCBidWYsIHNlbGYuJHtydXN0TmFtZX0ke2Nhc3R9KTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NZXNzYWdlRW5jb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0YWdIZXg6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2AsXG4gICAgYCAgICAgICAgbGV0ICR7cnVzdE5hbWV9X2VuY29kZWQgPSBzZWxmLiR7cnVzdE5hbWV9LmVuY29kZSgpO2AsXG4gICAgYCAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgJHtydXN0TmFtZX1fZW5jb2RlZC5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgYnVmLmV4dGVuZF9mcm9tX3NsaWNlKCYke3J1c3ROYW1lfV9lbmNvZGVkKTtgXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5SZXBlYXRlZEVuY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdHlwZUluZm86ICh0eXBlb2YgUFJPVE9fVFlQRV9NQVApW251bWJlcl0sXG4gIHRhZ0hleDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuICBsaW5lcy5wdXNoKGAgICAgICAgIGZvciBlbGVtIGluICZzZWxmLiR7cnVzdE5hbWV9IHtgKVxuICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgYnVmLCAke3RhZ0hleH0pO2ApXG5cbiAgaWYgKGlzTWVzc2FnZShmaWVsZCkpIHtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgIGxldCBlbGVtX2VuY29kZWQgPSBlbGVtLmVuY29kZSgpO2AsXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX3ZhcmludCgmbXV0IGJ1ZiwgZWxlbV9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBidWYuZXh0ZW5kX2Zyb21fc2xpY2UoJmVsZW1fZW5jb2RlZCk7YFxuICAgIClcbiAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAxKSB7XG4gICAgLy8gcmVwZWF0ZWQgZG91YmxlXG4gICAgbGluZXMucHVzaChgICAgICAgICAgICAgZW5jb2RlX2ZpeGVkNjQoJm11dCBidWYsIGVsZW0udG9fYml0cygpKTtgKVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IDIpIHtcbiAgICAvLyByZXBlYXRlZCBmbG9hdFxuICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgIGVuY29kZV9maXhlZDMyKCZtdXQgYnVmLCBlbGVtLnRvX2JpdHMoKSk7YClcbiAgfSBlbHNlIGlmICh0eXBlSW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCBlbGVtKTtgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNhc3QgPSBuZWVkc1ZhcmludENhc3QoZmllbGQudHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke3R5cGVJbmZvLmVuY29kZUZ1bmN9KCZtdXQgYnVmLCAqZWxlbSR7Y2FzdH0pO2ApXG4gIH1cblxuICBsaW5lcy5wdXNoKGAgICAgICAgIH1gKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBFbmNvZGUoZmllbGQ6IEZpZWxkSW5mbywgdGFnSGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBydXN0TmFtZSA9IHRvU25ha2VDYXNlKGZpZWxkLm5hbWUpXG4gIGNvbnN0IG1lID0gZmllbGQubWFwRW50cnkhXG4gIGNvbnN0IGtleUluZm8gPSBQUk9UT19UWVBFX01BUFttZS5rZXlUeXBlXVxuICBjb25zdCB2YWxJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUudmFsdWVUeXBlXVxuXG4gIGNvbnN0IGtleVRhZyA9IGAweCR7ZmllbGRUYWcoMSwga2V5SW5mby53aXJlVHlwZSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKX1gXG4gIGNvbnN0IGtleUNhc3QgPSBuZWVkc1ZhcmludENhc3QobWUua2V5VHlwZSlcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgICAgICAgICBmb3IgaSBpbiAwLi5zZWxmLiR7cnVzdE5hbWV9X2tleXMubGVuKCkge2AsXG4gICAgYCAgICAgICAgICAgIGxldCBtdXQgZW50cnkgPSBWZWM6Om5ldygpO2AsXG4gICAgYCAgICAgICAgICAgIGVuY29kZV9rZXkoJm11dCBlbnRyeSwgJHtrZXlUYWd9KTtgXG4gIF1cblxuICBpZiAoa2V5SW5mby5lbmNvZGVSZWYpIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgJnNlbGYuJHtydXN0TmFtZX1fa2V5c1tpXSk7YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAke2tleUluZm8uZW5jb2RlRnVuY30oJm11dCBlbnRyeSwgc2VsZi4ke3J1c3ROYW1lfV9rZXlzW2ldJHtrZXlDYXN0fSk7YClcbiAgfVxuXG4gIGlmIChtZS52YWx1ZVR5cGUgPT09IDExKSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCBXaXJlVHlwZS5MZW5ndGhEZWxpbWl0ZWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIil9YFxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGVudHJ5LCAke3ZhbFRhZ30pO2AsXG4gICAgICBgICAgICAgICAgICAgbGV0IHZhbF9lbmNvZGVkID0gc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0uZW5jb2RlKCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgZW50cnksIHZhbF9lbmNvZGVkLmxlbigpIGFzIHU2NCk7YCxcbiAgICAgIGAgICAgICAgICAgICBlbnRyeS5leHRlbmRfZnJvbV9zbGljZSgmdmFsX2VuY29kZWQpO2BcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsVGFnID0gYDB4JHtmaWVsZFRhZygyLCB2YWxJbmZvLndpcmVUeXBlKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpfWBcbiAgICBjb25zdCB2YWxDYXN0ID0gbmVlZHNWYXJpbnRDYXN0KG1lLnZhbHVlVHlwZSlcbiAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICBlbmNvZGVfa2V5KCZtdXQgZW50cnksICR7dmFsVGFnfSk7YClcbiAgICBpZiAodmFsSW5mby5lbmNvZGVSZWYpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCAmc2VsZi4ke3J1c3ROYW1lfV92YWx1ZXNbaV0pO2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICR7dmFsSW5mby5lbmNvZGVGdW5jfSgmbXV0IGVudHJ5LCBzZWxmLiR7cnVzdE5hbWV9X3ZhbHVlc1tpXSR7dmFsQ2FzdH0pO2ApXG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaChcbiAgICBgICAgICAgICAgICAgZW5jb2RlX2tleSgmbXV0IGJ1ZiwgJHt0YWdIZXh9KTtgLFxuICAgIGAgICAgICAgICAgICBlbmNvZGVfdmFyaW50KCZtdXQgYnVmLCBlbnRyeS5sZW4oKSBhcyB1NjQpO2AsXG4gICAgYCAgICAgICAgICAgIGJ1Zi5leHRlbmRfZnJvbV9zbGljZSgmZW50cnkpO2AsXG4gICAgYCAgICAgICAgfWBcbiAgKVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5TY2FsYXJEZWNvZGUoXG4gIGZpZWxkOiBGaWVsZEluZm8sXG4gIHJ1c3ROYW1lOiBzdHJpbmcsXG4gIHR5cGVJbmZvOiAodHlwZW9mIFBST1RPX1RZUEVfTUFQKVtudW1iZXJdLFxuICB0YWc6IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICAvLyBGbG9hdCB0eXBlcyBuZWVkIGZyb21fYml0c1xuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIC8vIGRvdWJsZSDihpIgZjY0Ojpmcm9tX2JpdHNcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0ICh2LCBuZXdfcG9zKSA9IGRlY29kZV9maXhlZDY0KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfSA9IGY2NDo6ZnJvbV9iaXRzKHYpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgLy8gZmxvYXQg4oaSIGYzMjo6ZnJvbV9iaXRzXG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSBmMzI6OmZyb21fYml0cyh2KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgICBgICAgICAgICAgICAgfWBcbiAgICBdLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke3R5cGVJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSB2JHtjYXN0fTtgLFxuICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgIGAgICAgICAgICAgICB9YFxuICBdLmpvaW4oXCJcXG5cIilcbn1cblxuZnVuY3Rpb24gZ2VuTWVzc2FnZURlY29kZShcbiAgZmllbGQ6IEZpZWxkSW5mbyxcbiAgcnVzdE5hbWU6IHN0cmluZyxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHN0cnVjdFR5cGUgPSByZXNvbHZlUnVzdFR5cGUoZmllbGQudHlwZSwgZmllbGQudHlwZU5hbWUpXG4gIHJldHVybiBbXG4gICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCAobGVuLCBuZXdfcG9zKSA9IGRlY29kZV92YXJpbnQoZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgIGxldCBlbmQgPSBuZXdfcG9zICsgbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0gPSAke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICBgICAgICAgICAgICAgfWBcbiAgXS5qb2luKFwiXFxuXCIpXG59XG5cbmZ1bmN0aW9uIGdlblJlcGVhdGVkRGVjb2RlKFxuICBmaWVsZDogRmllbGRJbmZvLFxuICBydXN0TmFtZTogc3RyaW5nLFxuICB0eXBlSW5mbzogKHR5cGVvZiBQUk9UT19UWVBFX01BUClbbnVtYmVyXSxcbiAgdGFnOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmIChpc01lc3NhZ2UoZmllbGQpKSB7XG4gICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlc29sdmVSdXN0VHlwZShmaWVsZC50eXBlLCBmaWVsZC50eXBlTmFtZSlcbiAgICByZXR1cm4gW1xuICAgICAgYCAgICAgICAgICAgICR7dGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbGV0IChsZW4sIG5ld19wb3MpID0gZGVjb2RlX3ZhcmludChkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgZW5kID0gbmV3X3BvcyArIGxlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaCgke3N0cnVjdFR5cGV9OjpkZWNvZGUoJmRhdGFbbmV3X3Bvcy4uZW5kXSk/KTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBwb3MgPSBlbmQ7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG5cbiAgY29uc3QgY2FzdCA9IHZhcmludERlY29kZUNhc3QoZmllbGQudHlwZSlcblxuICBpZiAoZmllbGQudHlwZSA9PT0gMSkge1xuICAgIHJldHVybiBbXG4gICAgICBgICAgICAgICAgICAgJHt0YWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gZGVjb2RlX2ZpeGVkNjQoZGF0YSwgcG9zKT87YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2goZjY0Ojpmcm9tX2JpdHModikpO2AsXG4gICAgICBgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICB9YFxuICAgIF0uam9pbihcIlxcblwiKVxuICB9XG4gIGlmIChmaWVsZC50eXBlID09PSAyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgICBgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSBkZWNvZGVfZml4ZWQzMihkYXRhLCBwb3MpPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX0ucHVzaChmMzI6OmZyb21fYml0cyh2KSk7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgcG9zID0gbmV3X3BvcztgLFxuICAgICAgYCAgICAgICAgICAgIH1gXG4gICAgXS5qb2luKFwiXFxuXCIpXG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt0eXBlSW5mby5kZWNvZGVGdW5jfShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgbXNnLiR7cnVzdE5hbWV9LnB1c2godiR7Y2FzdH0pO2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIF0uam9pbihcIlxcblwiKVxufVxuXG5mdW5jdGlvbiBnZW5NYXBEZWNvZGUoZmllbGQ6IEZpZWxkSW5mbywgcnVzdE5hbWU6IHN0cmluZywgdGFnOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBtZSA9IGZpZWxkLm1hcEVudHJ5IVxuICBjb25zdCBrZXlJbmZvID0gUFJPVE9fVFlQRV9NQVBbbWUua2V5VHlwZV1cbiAgY29uc3QgdmFsSW5mbyA9IFBST1RPX1RZUEVfTUFQW21lLnZhbHVlVHlwZV1cbiAgY29uc3Qga2V5U29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLmtleVR5cGUsIHVuZGVmaW5lZClcbiAgY29uc3QgdmFsU29sID0gcmVzb2x2ZVJ1c3RUeXBlKG1lLnZhbHVlVHlwZSwgbWUudmFsdWVUeXBlTmFtZSlcblxuICBjb25zdCBrZXlUYWcgPSBmaWVsZFRhZygxLCBrZXlJbmZvLndpcmVUeXBlKVxuICBjb25zdCBrZXlDYXN0ID0gdmFyaW50RGVjb2RlQ2FzdChtZS5rZXlUeXBlKVxuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgIGAgICAgICAgICAgICAke3RhZ30gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgKGVudHJ5X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgZW50cnlfZW5kID0gcG9zICsgZW50cnlfbGVuIGFzIHVzaXplO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IGtleTogJHtrZXlTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICBsZXQgbXV0IHZhbDogJHt2YWxTb2x9ID0gRGVmYXVsdDo6ZGVmYXVsdCgpO2AsXG4gICAgYCAgICAgICAgICAgICAgICB3aGlsZSBwb3MgPCBlbnRyeV9lbmQge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgbGV0IChlbnRyeV90YWcsIG5ld19wb3MpID0gZGVjb2RlX2tleShkYXRhLCBwb3MpPztgLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICBtYXRjaCBlbnRyeV90YWcge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7a2V5VGFnfSA9PiB7YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAodiwgbmV3X3BvcykgPSAke2tleUluZm8uZGVjb2RlRnVuY30oZGF0YSwgcG9zKT87YCxcbiAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHYke2tleUNhc3R9O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXdfcG9zO2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gIF1cblxuICBpZiAobWUudmFsdWVUeXBlID09PSAxMSkge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIFdpcmVUeXBlLkxlbmd0aERlbGltaXRlZClcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICR7dmFsVGFnfSA9PiB7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICh2X2xlbiwgbmV3X3BvcykgPSBkZWNvZGVfdmFyaW50KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2X2VuZCA9IG5ld19wb3MgKyB2X2xlbiBhcyB1c2l6ZTtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAke3ZhbFNvbH06OmRlY29kZSgmZGF0YVtuZXdfcG9zLi52X2VuZF0pPztgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB2X2VuZDtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHZhbFRhZyA9IGZpZWxkVGFnKDIsIHZhbEluZm8ud2lyZVR5cGUpXG4gICAgY29uc3QgdmFsQ2FzdCA9IHZhcmludERlY29kZUNhc3QobWUudmFsdWVUeXBlKVxuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgJHt2YWxUYWd9ID0+IHtgLFxuICAgICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKHYsIG5ld19wb3MpID0gJHt2YWxJbmZvLmRlY29kZUZ1bmN9KGRhdGEsIHBvcyk/O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHYke3ZhbENhc3R9O2AsXG4gICAgICBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG5ld19wb3M7YCxcbiAgICAgIGAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgIClcbiAgfVxuXG4gIGxpbmVzLnB1c2goXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIF8gPT4ge2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBza2lwX2ZpZWxkKGRhdGEsIHBvcywgZW50cnlfdGFnICYgMHgwNyk/O2AsXG4gICAgYCAgICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgIGAgICAgICAgICAgICAgICAgfWAsXG4gICAgYCAgICAgICAgICAgICAgICBtc2cuJHtydXN0TmFtZX1fa2V5cy5wdXNoKGtleSk7YCxcbiAgICBgICAgICAgICAgICAgICAgIG1zZy4ke3J1c3ROYW1lfV92YWx1ZXMucHVzaCh2YWwpO2AsXG4gICAgYCAgICAgICAgICAgIH1gXG4gIClcbiAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIilcbn1cbiJdfQ==
@@ -1,4 +1,13 @@
1
- export { generateRsFile } from "./message.js";
2
- export { generateRuntime } from "./runtime.js";
3
- export { PROTO_TYPE_MAP, WireType, resolveRustType, fieldTag } from "./type-map.js";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUc5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2VuZXJhdGVSc0ZpbGUgfSBmcm9tIFwiLi9tZXNzYWdlLmpzXCJcbmV4cG9ydCB7IGdlbmVyYXRlUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUuanNcIlxuZXhwb3J0IHR5cGUgeyBNZXNzYWdlRGVzY3JpcHRvciB9IGZyb20gXCIuL21lc3NhZ2UuanNcIlxuZXhwb3J0IHR5cGUgeyBGaWVsZEluZm8gfSBmcm9tIFwiLi9maWVsZC5qc1wiXG5leHBvcnQgeyBQUk9UT19UWVBFX01BUCwgV2lyZVR5cGUsIHJlc29sdmVSdXN0VHlwZSwgZmllbGRUYWcgfSBmcm9tIFwiLi90eXBlLW1hcC5qc1wiXG4iXX0=
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fieldTag = exports.resolveRustType = exports.WireType = exports.PROTO_TYPE_MAP = exports.generateRuntime = exports.generateRsFile = void 0;
4
+ var message_js_1 = require("./message.js");
5
+ Object.defineProperty(exports, "generateRsFile", { enumerable: true, get: function () { return message_js_1.generateRsFile; } });
6
+ var runtime_js_1 = require("./runtime.js");
7
+ Object.defineProperty(exports, "generateRuntime", { enumerable: true, get: function () { return runtime_js_1.generateRuntime; } });
8
+ var type_map_js_1 = require("./type-map.js");
9
+ Object.defineProperty(exports, "PROTO_TYPE_MAP", { enumerable: true, get: function () { return type_map_js_1.PROTO_TYPE_MAP; } });
10
+ Object.defineProperty(exports, "WireType", { enumerable: true, get: function () { return type_map_js_1.WireType; } });
11
+ Object.defineProperty(exports, "resolveRustType", { enumerable: true, get: function () { return type_map_js_1.resolveRustType; } });
12
+ Object.defineProperty(exports, "fieldTag", { enumerable: true, get: function () { return type_map_js_1.fieldTag; } });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUE2QztBQUFwQyw0R0FBQSxjQUFjLE9BQUE7QUFDdkIsMkNBQThDO0FBQXJDLDZHQUFBLGVBQWUsT0FBQTtBQUd4Qiw2Q0FBbUY7QUFBMUUsNkdBQUEsY0FBYyxPQUFBO0FBQUUsdUdBQUEsUUFBUSxPQUFBO0FBQUUsOEdBQUEsZUFBZSxPQUFBO0FBQUUsdUdBQUEsUUFBUSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2VuZXJhdGVSc0ZpbGUgfSBmcm9tIFwiLi9tZXNzYWdlLmpzXCJcbmV4cG9ydCB7IGdlbmVyYXRlUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUuanNcIlxuZXhwb3J0IHR5cGUgeyBNZXNzYWdlRGVzY3JpcHRvciB9IGZyb20gXCIuL21lc3NhZ2UuanNcIlxuZXhwb3J0IHR5cGUgeyBGaWVsZEluZm8gfSBmcm9tIFwiLi9maWVsZC5qc1wiXG5leHBvcnQgeyBQUk9UT19UWVBFX01BUCwgV2lyZVR5cGUsIHJlc29sdmVSdXN0VHlwZSwgZmllbGRUYWcgfSBmcm9tIFwiLi90eXBlLW1hcC5qc1wiXG4iXX0=