@witnet/sdk 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/.env_witnet +6 -6
  2. package/LICENSE +21 -21
  3. package/README.md +103 -103
  4. package/dist/bin/helpers.d.ts +88 -0
  5. package/dist/bin/helpers.d.ts.map +1 -0
  6. package/dist/bin/helpers.js +866 -0
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +42 -0
  10. package/dist/lib/crypto/account.d.ts +18 -0
  11. package/dist/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/lib/crypto/account.js +152 -0
  13. package/dist/lib/crypto/coinbase.d.ts +9 -0
  14. package/dist/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/lib/crypto/coinbase.js +39 -0
  16. package/dist/lib/crypto/index.d.ts +7 -0
  17. package/dist/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/lib/crypto/index.js +28 -0
  19. package/dist/lib/crypto/interfaces.d.ts +80 -0
  20. package/dist/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/lib/crypto/interfaces.js +3 -0
  22. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts +47 -0
  23. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/lib/crypto/payloads/DataRequestPayload.js +384 -0
  25. package/dist/lib/crypto/payloads/StakePayload.d.ts +27 -0
  26. package/dist/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/lib/crypto/payloads/StakePayload.js +184 -0
  28. package/dist/lib/crypto/payloads/UnstakePayload.d.ts +35 -0
  29. package/dist/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/lib/crypto/payloads/UnstakePayload.js +244 -0
  31. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts +24 -0
  32. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/lib/crypto/payloads/ValueTransferPayload.js +182 -0
  34. package/dist/lib/crypto/payloads.d.ts +54 -0
  35. package/dist/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/lib/crypto/payloads.js +224 -0
  37. package/dist/lib/crypto/signer.d.ts +26 -0
  38. package/dist/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/lib/crypto/signer.js +299 -0
  40. package/dist/lib/crypto/transmitters/DataRequests.d.ts +14 -0
  41. package/dist/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/lib/crypto/transmitters/DataRequests.js +62 -0
  43. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts +11 -0
  44. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/lib/crypto/transmitters/StakeDeposits.js +48 -0
  46. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts +17 -0
  47. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/lib/crypto/transmitters/StakeWithdrawals.js +115 -0
  49. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts +10 -0
  50. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/lib/crypto/transmitters/ValueTransfers.js +47 -0
  52. package/dist/lib/crypto/transmitters.d.ts +46 -0
  53. package/dist/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/lib/crypto/transmitters.js +506 -0
  55. package/dist/lib/crypto/types.d.ts +127 -0
  56. package/dist/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/lib/crypto/types.js +261 -0
  58. package/dist/lib/crypto/utils.d.ts +10 -0
  59. package/dist/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/lib/crypto/utils.js +97 -0
  61. package/dist/lib/crypto/wallet.d.ts +26 -0
  62. package/dist/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/lib/crypto/wallet.js +327 -0
  64. package/dist/lib/helpers.d.ts +90 -0
  65. package/dist/lib/helpers.d.ts.map +1 -0
  66. package/dist/lib/helpers.js +1031 -0
  67. package/dist/lib/index.d.ts +5 -0
  68. package/dist/lib/index.d.ts.map +1 -0
  69. package/dist/lib/index.js +21 -0
  70. package/dist/lib/radon/artifacts.d.ts +55 -0
  71. package/dist/lib/radon/artifacts.d.ts.map +1 -0
  72. package/dist/lib/radon/artifacts.js +347 -0
  73. package/dist/lib/radon/ccdr/eth.d.ts +100 -0
  74. package/dist/lib/radon/ccdr/eth.d.ts.map +1 -0
  75. package/dist/lib/radon/ccdr/eth.js +237 -0
  76. package/dist/lib/radon/ccdr/index.d.ts +34 -0
  77. package/dist/lib/radon/ccdr/index.d.ts.map +1 -0
  78. package/dist/lib/radon/ccdr/index.js +63 -0
  79. package/dist/lib/radon/ccdr/wit.d.ts +29 -0
  80. package/dist/lib/radon/ccdr/wit.d.ts.map +1 -0
  81. package/dist/lib/radon/ccdr/wit.js +60 -0
  82. package/dist/lib/radon/filters.d.ts +14 -0
  83. package/dist/lib/radon/filters.d.ts.map +1 -0
  84. package/dist/lib/radon/filters.js +47 -0
  85. package/dist/lib/radon/index.d.ts +36 -0
  86. package/dist/lib/radon/index.d.ts.map +1 -0
  87. package/dist/lib/radon/index.js +154 -0
  88. package/dist/lib/radon/reducers.d.ts +29 -0
  89. package/dist/lib/radon/reducers.d.ts.map +1 -0
  90. package/dist/lib/radon/reducers.js +101 -0
  91. package/dist/lib/radon/retrievals.d.ts +120 -0
  92. package/dist/lib/radon/retrievals.d.ts.map +1 -0
  93. package/dist/lib/radon/retrievals.js +358 -0
  94. package/dist/lib/radon/sources.d.ts +102 -0
  95. package/dist/lib/radon/sources.d.ts.map +1 -0
  96. package/dist/lib/radon/sources.js +294 -0
  97. package/dist/lib/radon/types.d.ts +521 -0
  98. package/dist/lib/radon/types.d.ts.map +1 -0
  99. package/dist/lib/radon/types.js +1066 -0
  100. package/dist/lib/radon/utils.d.ts +55 -0
  101. package/dist/lib/radon/utils.d.ts.map +1 -0
  102. package/dist/lib/radon/utils.js +181 -0
  103. package/dist/lib/rpc/farm.d.ts +66 -0
  104. package/dist/lib/rpc/farm.d.ts.map +1 -0
  105. package/dist/lib/rpc/farm.js +808 -0
  106. package/dist/lib/rpc/index.d.ts +3 -0
  107. package/dist/lib/rpc/index.d.ts.map +1 -0
  108. package/dist/lib/rpc/index.js +19 -0
  109. package/dist/lib/rpc/node.d.ts +38 -0
  110. package/dist/lib/rpc/node.d.ts.map +1 -0
  111. package/dist/lib/rpc/node.js +335 -0
  112. package/dist/lib/rpc/nodes.d.ts +40 -0
  113. package/dist/lib/rpc/nodes.d.ts.map +1 -0
  114. package/dist/lib/rpc/nodes.js +531 -0
  115. package/dist/lib/rpc/provider.d.ts +72 -0
  116. package/dist/lib/rpc/provider.d.ts.map +1 -0
  117. package/dist/lib/rpc/provider.js +402 -0
  118. package/dist/lib/rpc/reporter.d.ts +18 -0
  119. package/dist/lib/rpc/reporter.d.ts.map +1 -0
  120. package/dist/lib/rpc/reporter.js +99 -0
  121. package/dist/lib/rpc/types.d.ts +396 -0
  122. package/dist/lib/rpc/types.d.ts.map +1 -0
  123. package/dist/lib/rpc/types.js +81 -0
  124. package/dist/lib/rpc/wallet.d.ts +72 -0
  125. package/dist/lib/rpc/wallet.d.ts.map +1 -0
  126. package/dist/lib/rpc/wallet.js +41 -0
  127. package/dist/lib/types.d.ts +19 -0
  128. package/dist/lib/types.d.ts.map +1 -0
  129. package/dist/lib/types.js +7 -0
  130. package/dist/lib/utils.d.ts +5 -0
  131. package/dist/lib/utils.d.ts.map +1 -0
  132. package/dist/lib/utils.js +51 -0
  133. package/dist/package.json +1 -1
  134. package/dist/src/bin/helpers.js +2 -2
  135. package/dist/src/index.js +1 -1
  136. package/dist/src/lib/crypto/account.js +1 -1
  137. package/dist/src/lib/crypto/coinbase.js +1 -1
  138. package/dist/src/lib/crypto/index.js +1 -1
  139. package/dist/src/lib/crypto/interfaces.js +1 -1
  140. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +2 -2
  141. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
  142. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +8 -8
  143. package/dist/src/lib/crypto/payloads/StakePayload.js +1 -1
  144. package/dist/src/lib/crypto/payloads/UnstakePayload.js +1 -1
  145. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +1 -1
  146. package/dist/src/lib/crypto/payloads.js +1 -1
  147. package/dist/src/lib/crypto/signer.js +1 -1
  148. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +0 -1
  149. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
  150. package/dist/src/lib/crypto/transmitters/DataRequests.js +1 -2
  151. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +1 -1
  152. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +1 -1
  153. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +1 -1
  154. package/dist/src/lib/crypto/transmitters.js +1 -1
  155. package/dist/src/lib/crypto/types.js +1 -1
  156. package/dist/src/lib/crypto/utils.js +1 -1
  157. package/dist/src/lib/crypto/wallet.js +1 -1
  158. package/dist/src/lib/index.js +1 -1
  159. package/dist/src/lib/radon/ccdr/eth.js +1 -1
  160. package/dist/src/lib/radon/ccdr/index.js +1 -1
  161. package/dist/src/lib/radon/ccdr/wit.d.ts +11 -0
  162. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
  163. package/dist/src/lib/radon/ccdr/wit.js +17 -2
  164. package/dist/src/lib/radon/filters.js +1 -1
  165. package/dist/src/lib/radon/index.d.ts +1 -1
  166. package/dist/src/lib/radon/index.d.ts.map +1 -1
  167. package/dist/src/lib/radon/index.js +9 -3
  168. package/dist/src/lib/radon/reducers.js +1 -1
  169. package/dist/src/lib/radon/types.js +1 -1
  170. package/dist/src/lib/radon/utils.js +1 -1
  171. package/dist/src/lib/rpc/index.js +1 -1
  172. package/dist/src/lib/rpc/nodes.js +1 -1
  173. package/dist/src/lib/rpc/provider.d.ts +5 -3
  174. package/dist/src/lib/rpc/provider.d.ts.map +1 -1
  175. package/dist/src/lib/rpc/provider.js +14 -3
  176. package/dist/src/lib/rpc/reporter.d.ts +2 -3
  177. package/dist/src/lib/rpc/reporter.d.ts.map +1 -1
  178. package/dist/src/lib/rpc/reporter.js +1 -4
  179. package/dist/src/lib/rpc/types.d.ts +49 -24
  180. package/dist/src/lib/rpc/types.d.ts.map +1 -1
  181. package/dist/src/lib/rpc/types.js +3 -1
  182. package/dist/src/lib/types.d.ts +1 -1
  183. package/dist/src/lib/types.d.ts.map +1 -1
  184. package/dist/src/lib/types.js +1 -1
  185. package/dist/src/lib/utils.js +1 -1
  186. package/dist/witnet/assets/index.js +1 -1
  187. package/dist/witnet/assets/modals/index.js +1 -1
  188. package/dist/witnet/assets/modals/web3/eth.js +1 -1
  189. package/dist/witnet/assets/modals/web3/ipfs.js +1 -1
  190. package/dist/witnet/assets/modals/web3/wit.js +4 -7
  191. package/dist/witnet/assets/requests.js +1 -1
  192. package/package.json +1 -1
  193. package/src/bin/cli/history.js +31 -31
  194. package/src/bin/cli/inspect.js +405 -359
  195. package/src/bin/cli/network.js +594 -592
  196. package/src/bin/cli/nodes.js +364 -364
  197. package/src/bin/cli/radon.js +815 -815
  198. package/src/bin/cli/wallet.js +1117 -1094
  199. package/src/bin/helpers.js +840 -840
  200. package/src/bin/postinstall.js +9 -9
  201. package/src/bin/toolkit.js +295 -295
  202. package/witnet/assets/_index.js +8 -8
  203. package/witnet/assets/_requests.js +25 -25
  204. package/witnet/assets/_sources.js +36 -36
  205. package/witnet/assets/_templates.js +36 -36
  206. package/witnet/assets/index.js +4 -4
  207. package/witnet/assets/modals/index.js +9 -9
  208. package/witnet/assets/modals/web3/eth.js +29 -29
  209. package/witnet/assets/modals/web3/ipfs.js +19 -19
  210. package/witnet/assets/modals/web3/wit.js +21 -23
  211. package/witnet/assets/requests.js +95 -95
@@ -0,0 +1,866 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ var cbor = require("cbor");
64
+ var exec = require("child_process").exec;
65
+ var net = require("net");
66
+ var os = require("os");
67
+ var readline = require('readline');
68
+ var colorstrip = function (str) { return str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, ''); };
69
+ var commas = function (number) {
70
+ parts = number.toString().split('.');
71
+ var result = parts.length <= 1
72
+ ? "".concat(parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","))
73
+ : "".concat(parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","), ".").concat(parts[1]);
74
+ return result;
75
+ };
76
+ var fromNanowits = function (x, d) { return (parseInt(x) / Math.pow(10, 9)).toFixed(d || 2); };
77
+ var fromWits = function (x) { return Math.floor(parseFloat(x) * Math.pow(10, 9)); };
78
+ function toFixedTrunc(x, n) {
79
+ var v = (typeof x === 'string' ? x : x.toString()).split('.');
80
+ if (n <= 0)
81
+ return v[0];
82
+ var f = v[1] || '';
83
+ if (f.length > n)
84
+ return "".concat(v[0], ".").concat(f.substr(0, n));
85
+ while (f.length < n)
86
+ f += '0';
87
+ return "".concat(v[0], ".").concat(f);
88
+ }
89
+ ;
90
+ var whole_wits = function (number, digits) {
91
+ var lookup = [
92
+ { value: 1, symbol: " nWits" },
93
+ { value: 1e3, symbol: " μWits" },
94
+ { value: 1e6, symbol: " mWits" },
95
+ { value: 1e9, symbol: " Wits" },
96
+ { value: 1e12, symbol: " KWits" },
97
+ { value: 1e15, symbol: " MWits" },
98
+ ];
99
+ var regexp = /\.0+$|(?<=\.[0-9])0+$/;
100
+ var item = lookup.findLast(function (item) { return number >= item.value; });
101
+ return item ? toFixedTrunc(commas(number / item.value), digits). /*replace(regexp, "")*/concat(item.symbol) : "(no Wits)";
102
+ };
103
+ var bblue = function (str) { return "\u001B[1;98;44m".concat(str, "\u001B[0;0;0m"); };
104
+ var bcyan = function (str) { return "\u001B[38;46m".concat(str, "\u001B[0;0m"); };
105
+ var bgreen = function (str) { return "\u001B[30;42m".concat(str, "\u001B[0;0m"); };
106
+ var bred = function (str) { return "\u001B[30;41m".concat(str, "\u001B[0;0m"); };
107
+ var bviolet = function (str) { return "\u001B[30;45m".concat(str, "\u001B[0;0m"); };
108
+ var lcyan = function (str) { return "\u001B[1;96m".concat(str, "\u001B[0m"); };
109
+ var lgray = function (str) { return "\u001B[1;90m".concat(str, "\u001B[0m"); };
110
+ var lgreen = function (str) { return "\u001B[1;92m".concat(str, "\u001B[0m"); };
111
+ var lmagenta = function (str) { return "\u001B[1;95m".concat(str, "\u001B[0m"); };
112
+ var lyellow = function (str) { return "\u001B[1;93m".concat(str, "\u001B[0m"); };
113
+ var mblue = function (str) { return "\u001B[94m".concat(str, "\u001B[0m"); };
114
+ var mcyan = function (str) { return "\u001B[96m".concat(str, "\u001B[0m"); };
115
+ var mgreen = function (str) { return "\u001B[92m".concat(str, "\u001B[0m"); };
116
+ var mmagenta = function (str) { return "\u001B[0;95m".concat(str, "\u001B[0m"); };
117
+ var mred = function (str) { return "\u001B[91m".concat(str, "\u001B[0m"); };
118
+ var myellow = function (str) { return "\u001B[93m".concat(str, "\u001B[0m"); };
119
+ var blue = function (str) { return "\u001B[34m".concat(str, "\u001B[0m"); };
120
+ var cyan = function (str) { return "\u001B[36m".concat(str, "\u001B[0m"); };
121
+ var gray = function (str) { return "\u001B[90m".concat(str, "\u001B[0m"); };
122
+ var green = function (str) { return "\u001B[32m".concat(str, "\u001B[0m"); };
123
+ var magenta = function (str) { return "\u001B[0;35m".concat(str, "\u001B[0m"); };
124
+ var normal = function (str) { return "\u001B[98m".concat(str, "\u001B[0m"); };
125
+ var red = function (str) { return "\u001B[31m".concat(str, "\u001B[0m"); };
126
+ var white = function (str) { return "\u001B[1;98m".concat(str, "\u001B[0m"); };
127
+ var yellow = function (str) { return "\u001B[33m".concat(str, "\u001B[0m"); };
128
+ function countLeaves(t, obj) {
129
+ if (!obj)
130
+ return 0;
131
+ if (obj instanceof t)
132
+ return 1;
133
+ if (Array.isArray(obj))
134
+ return obj.reduce(function (sum, item) { return sum + countLeaves(t, item); }, 0);
135
+ else
136
+ return Object.values(obj).reduce(function (sum, item) { return sum + countLeaves(t, item); }, 0);
137
+ }
138
+ function deleteExtraFlags(args) {
139
+ return args.filter(function (arg) { return !arg.startsWith('--'); });
140
+ }
141
+ function cmd() {
142
+ var command = [];
143
+ for (var _i = 0; _i < arguments.length; _i++) {
144
+ command[_i] = arguments[_i];
145
+ }
146
+ return new Promise(function (resolve, reject) {
147
+ exec(command.join(" "), { maxBuffer: 1024 * 1024 * 10 }, function (error, stdout, stderr) {
148
+ if (error) {
149
+ reject(error);
150
+ }
151
+ if (stderr) {
152
+ reject(stderr);
153
+ }
154
+ resolve(stdout);
155
+ });
156
+ });
157
+ }
158
+ ;
159
+ function execRadonBytecode(bytecode) {
160
+ var flags = [];
161
+ for (var _i = 1; _i < arguments.length; _i++) {
162
+ flags[_i - 1] = arguments[_i];
163
+ }
164
+ return __awaiter(this, void 0, void 0, function () {
165
+ var npx;
166
+ return __generator(this, function (_a) {
167
+ if (!isHexString(bytecode)) {
168
+ throw EvalError("invalid hex string");
169
+ }
170
+ else {
171
+ npx = os.type() === "Windows_NT" ? "npx.cmd" : "npx";
172
+ return [2 /*return*/, cmd.apply(void 0, __spreadArray([npx, "witnet", "radon", "dryrun", bytecode], __read(flags), false)).catch(function (err) {
173
+ var errorMessage = err.message.split('\n').slice(1).join('\n').trim();
174
+ var errorRegex = /.*^error: (?<message>.*)$.*/gm;
175
+ var matched = errorRegex.exec(err.message);
176
+ if (matched) {
177
+ errorMessage = matched.groups.message;
178
+ }
179
+ console.error(errorMessage || err);
180
+ })];
181
+ }
182
+ return [2 /*return*/];
183
+ });
184
+ });
185
+ }
186
+ function extractFromArgs(args, flags) {
187
+ var curated = {};
188
+ if (args && flags) {
189
+ Object.keys(flags).forEach(function (flag) {
190
+ var flagIndex = args.indexOf("--".concat(flag));
191
+ if (flagIndex >= 0) {
192
+ if (flags[flag].param) {
193
+ curated[flag] = args[flagIndex];
194
+ if (!args[flagIndex + 1] || args[flagIndex + 1].startsWith('--')) {
195
+ throw "Missing required parameter for --".concat(flag);
196
+ }
197
+ else {
198
+ curated[flag] = args[flagIndex + 1];
199
+ args.splice(flagIndex, 2);
200
+ }
201
+ }
202
+ else {
203
+ curated[flag] = true;
204
+ args.splice(flagIndex, 1);
205
+ }
206
+ }
207
+ });
208
+ }
209
+ return [args, curated,];
210
+ }
211
+ function fromHexString(hexString) {
212
+ if (hexString.startsWith("0x"))
213
+ hexString = hexString.slice(2);
214
+ return Uint8Array.from(hexString.match(/.{1,2}/g).map(function (byte) { return parseInt(byte, 16); }));
215
+ }
216
+ function ipIsPrivateOrLocalhost(ip) {
217
+ if (ip.substring(0, 7) === "::ffff:")
218
+ ip = ip.substring(7);
219
+ if (net.isIPv4(ip)) {
220
+ // check localhost
221
+ if (ip === '127.0.0.1')
222
+ return true;
223
+ // 10.0.0.0 - 10.255.255.255 || 172.16.0.0 - 172.31.255.255 || 192.168.0.0 - 192.168.255.255
224
+ return /^(10)\.(.*)\.(.*)\.(.*)$/.test(ip) || /^(172)\.(1[6-9]|2[0-9]|3[0-1])\.(.*)\.(.*)$/.test(ip) || /^(192)\.(168)\.(.*)\.(.*)$/.test(ip);
225
+ }
226
+ // else: ip is IPv6
227
+ var firstWord = ip.split(":").find(function (el) { return !!el; }); //get first not empty word
228
+ // equivalent of 127.0.0.1 in IPv6
229
+ if (ip === "::1")
230
+ return true;
231
+ // The original IPv6 Site Local addresses (fec0::/10) are deprecated. Range: fec0 - feff
232
+ else if (/^fe[c-f][0-f]$/.test(firstWord))
233
+ return true;
234
+ // These days Unique Local Addresses (ULA) are used in place of Site Local.
235
+ // Range: fc00 - fcff
236
+ else if (/^fc[0-f]{2}$/.test(firstWord))
237
+ return true;
238
+ // Range: fd00 - fcff
239
+ else if (/^fd[0-f]{2}$/.test(firstWord))
240
+ return true;
241
+ // Link local addresses (prefixed with fe80) are not routable
242
+ else if (firstWord === "fe80")
243
+ return true;
244
+ // Discard Prefix
245
+ else if (firstWord === "100")
246
+ return true;
247
+ // Any other IP address is not Unique Local Address (ULA)
248
+ return false;
249
+ }
250
+ function isHexStringOfLength(str, length) {
251
+ return (isHexString(str)
252
+ && ((str.startsWith('0x') && str.slice(2).length === length * 2)
253
+ || str.length === length * 2)) || isWildcard(str);
254
+ }
255
+ function isHexString(str) {
256
+ return (typeof str === 'string'
257
+ && ((str.startsWith("0x") && /^[a-fA-F0-9]+$/i.test(str.slice(2)))
258
+ || /^[a-fA-F0-9]+$/i.test(str))) || isWildcard(str);
259
+ }
260
+ function toHexString(buffer, prefix0x) {
261
+ if (prefix0x === void 0) { prefix0x = false; }
262
+ if (buffer instanceof Uint8Array)
263
+ buffer = Buffer.from(buffer);
264
+ return (prefix0x ? "0x" : "") + Array.prototype.map.call(buffer, function (x) { return ('00' + x.toString(16)).slice(-2); })
265
+ .join('')
266
+ .match(/[a-fA-F0-9]{2}/g)
267
+ .join('');
268
+ }
269
+ function parseURL(url) {
270
+ try {
271
+ var parsedUrl = new URL(url);
272
+ return [
273
+ parsedUrl.protocol + "//",
274
+ parsedUrl.host,
275
+ parsedUrl.pathname.slice(1),
276
+ parsedUrl.search.slice(1)
277
+ ];
278
+ }
279
+ catch (_a) {
280
+ throw new TypeError("Invalid URL was provided: ".concat(url));
281
+ }
282
+ }
283
+ function showUsage(cmd, module) {
284
+ showUsageHeadline(cmd);
285
+ if (module === null || module === void 0 ? void 0 : module.flags)
286
+ showUsageFlags(module.flags);
287
+ if (module === null || module === void 0 ? void 0 : module.router)
288
+ showUsageRouter(module.router);
289
+ if (module === null || module === void 0 ? void 0 : module.envars)
290
+ showUsageEnvars(module.envars);
291
+ }
292
+ function showUsageRouter(router) {
293
+ var cmds = Object.entries(router);
294
+ if (cmds.length > 0) {
295
+ console.info("\nSUBCOMMANDS:");
296
+ var maxLength_1 = Math.max.apply(Math, __spreadArray([], __read(cmds.map(function (_a) {
297
+ var _b = __read(_a, 1), cmd = _b[0];
298
+ return cmd.length;
299
+ })), false));
300
+ cmds.forEach(function (cmd) {
301
+ console.info(" ", "".concat(cmd[0]).concat(" ".repeat(maxLength_1 - cmd[0].length)), " ", cmd[1].hint);
302
+ });
303
+ }
304
+ }
305
+ function showUsageError(cmd, subcmd, module, flags, error) {
306
+ var _a;
307
+ if (flags === void 0) { flags = {}; }
308
+ showUsageSubcommand(cmd, subcmd, module, error);
309
+ if (error) {
310
+ console.info("\nERROR:");
311
+ if (flags === null || flags === void 0 ? void 0 : flags.debug) {
312
+ console.error(error);
313
+ }
314
+ else {
315
+ console.error(((_a = error === null || error === void 0 ? void 0 : error.stack) === null || _a === void 0 ? void 0 : _a.split('\n')[0]) || error);
316
+ }
317
+ }
318
+ }
319
+ function showUsageEnvars(envars) {
320
+ envars = Object.entries(envars);
321
+ if (envars.length > 0) {
322
+ console.info("\nENVARS:");
323
+ var maxWidth_1 = Math.max.apply(Math, __spreadArray([], __read(envars.map(function (_a) {
324
+ var _b = __read(_a, 1), envar = _b[0];
325
+ return envar.length;
326
+ })), false));
327
+ envars.forEach(function (_a) {
328
+ var _b = __read(_a, 2), envar = _b[0], hint = _b[1];
329
+ if (envar.toUpperCase().indexOf("KEY") < 0 && process.env[envar]) {
330
+ console.info(" ", "".concat(yellow(envar.toUpperCase())).concat(" ".repeat(maxWidth_1 - envar.length)), " => Settled to \"".concat(myellow(process.env[envar]), "\""));
331
+ }
332
+ else {
333
+ console.info(" ", "".concat(yellow(envar.toUpperCase())).concat(" ".repeat(maxWidth_1 - envar.length)), " ".concat(hint));
334
+ }
335
+ });
336
+ }
337
+ }
338
+ function showUsageFlags(flags) {
339
+ flags = Object.entries(flags);
340
+ if (flags.length > 0) {
341
+ console.info("\nFLAGS:");
342
+ var maxLength_2 = Math.max.apply(Math, __spreadArray([], __read(flags.filter(function (_a) {
343
+ var _b = __read(_a, 2), hint = _b[1].hint;
344
+ return hint;
345
+ }).map(function (_a) {
346
+ var _b = __read(_a, 2), key = _b[0], param = _b[1].param;
347
+ return param ? key.length + param.length + 3 : key.length;
348
+ })), false));
349
+ flags.forEach(function (flag) {
350
+ var str = "".concat(flag[0]).concat(flag[1].param ? gray(" <".concat(flag[1].param, ">")) : "");
351
+ if (flag[1].hint) {
352
+ console.info(" ", "--".concat(str).concat(" ".repeat(maxLength_2 - colorstrip(str).length)), " ", flag[1].hint);
353
+ }
354
+ });
355
+ }
356
+ }
357
+ function showUsageHeadline(cmd, subcmd, module) {
358
+ var _a, _b, _c;
359
+ console.info("USAGE:");
360
+ if (subcmd) {
361
+ var params = (_a = module.router[subcmd]) === null || _a === void 0 ? void 0 : _a.params;
362
+ var options = (_b = module.router[subcmd]) === null || _b === void 0 ? void 0 : _b.options;
363
+ if (params) {
364
+ var optionalize_1 = function (str) { return str.endsWith(' ...]') ? "[<".concat(str.slice(1, -5), "> ...]") : (str[0] === '[' ? "[<".concat(str.slice(1, -1), ">]") : "<".concat(str, ">")); };
365
+ if (Array.isArray(params)) {
366
+ params = params.map(function (param) { return optionalize_1(param); }).join(' ') + " ";
367
+ }
368
+ else {
369
+ params = optionalize_1(params);
370
+ }
371
+ }
372
+ console.info(" ".concat(white("npx witnet ".concat(cmd)), " [FLAGS] ").concat(white(subcmd), " ").concat(params ? green(params) + " " : "").concat(options && Object.keys(options).length > 0 ? "[OPTIONS]" : ""));
373
+ if ((_c = module === null || module === void 0 ? void 0 : module.router[subcmd]) === null || _c === void 0 ? void 0 : _c.hint) {
374
+ console.info("\nDESCRIPTION:");
375
+ console.info(" ".concat(module.router[subcmd].hint));
376
+ }
377
+ }
378
+ else {
379
+ console.info(" ".concat(white("npx witnet ".concat(cmd)), " [FLAGS] <SUBCOMMAND> ... [OPTIONS]"));
380
+ }
381
+ }
382
+ function showUsageOptions(options) {
383
+ options = Object.entries(options);
384
+ if (options.length > 0) {
385
+ console.info("\nOPTIONS:");
386
+ var maxLength_3 = options
387
+ .map(function (option) { return option[1].param ? option[1].param.length + option[0].length + 3 : option[0].length; })
388
+ .reduce(function (prev, curr) { return curr > prev ? curr : prev; });
389
+ options.forEach(function (option) {
390
+ if (option[1].hint) {
391
+ var str = "".concat(option[0]).concat(option[1].param ? gray(" <".concat(option[1].param, ">")) : "");
392
+ console.info(" ", "--".concat(str).concat(" ".repeat(maxLength_3 - colorstrip(str).length)), " ", option[1].hint);
393
+ }
394
+ });
395
+ }
396
+ }
397
+ function showUsageSubcommand(cmd, subcmd, module) {
398
+ var _a, _b;
399
+ showUsageHeadline(cmd, subcmd, module);
400
+ if (module === null || module === void 0 ? void 0 : module.flags)
401
+ showUsageFlags(module === null || module === void 0 ? void 0 : module.flags);
402
+ if ((_a = module === null || module === void 0 ? void 0 : module.router[subcmd]) === null || _a === void 0 ? void 0 : _a.options)
403
+ showUsageOptions((_b = module.router[subcmd]) === null || _b === void 0 ? void 0 : _b.options);
404
+ if (module === null || module === void 0 ? void 0 : module.envars)
405
+ showUsageEnvars(module === null || module === void 0 ? void 0 : module.envars);
406
+ }
407
+ function showVersion() {
408
+ console.info("".concat(mcyan("Wit/Oracle Toolkit CLI v".concat(require("../../package.json").version))));
409
+ }
410
+ function getWildcardsCountFromString(str) {
411
+ var maxArgsIndex = 0;
412
+ if (str) {
413
+ var match = void 0;
414
+ var regexp = /\\\d\\/g;
415
+ while ((match = regexp.exec(str)) !== null) {
416
+ var argsIndex = parseInt(match[0][1]) + 1;
417
+ if (argsIndex > maxArgsIndex)
418
+ maxArgsIndex = argsIndex;
419
+ }
420
+ }
421
+ return maxArgsIndex;
422
+ }
423
+ function isWildcard(str) {
424
+ return str.length == 3 && /\\\d\\/g.test(str);
425
+ }
426
+ function replaceWildcards(obj, args) {
427
+ if (args.length > 10)
428
+ args = args.slice(0, 10);
429
+ if (obj && typeof obj === "string") {
430
+ for (var argIndex = 0; argIndex < args.length; argIndex++) {
431
+ var wildcard = "\\".concat(argIndex, "\\");
432
+ obj = obj.replaceAll(wildcard, args[argIndex]);
433
+ }
434
+ }
435
+ else if (obj && Array.isArray(obj)) {
436
+ obj = obj.map(function (value) { return typeof value === "string" || Array.isArray(value)
437
+ ? replaceWildcards(value, args)
438
+ : value; });
439
+ }
440
+ return obj;
441
+ }
442
+ function spliceWildcard(obj, argIndex, argValue, argsCount) {
443
+ if (obj && typeof obj === "string") {
444
+ var wildcard = "\\".concat(argIndex, "\\");
445
+ obj = obj.replaceAll(wildcard, argValue);
446
+ for (var j = argIndex + 1; j < argsCount; j++) {
447
+ obj = obj.replaceAll("\\".concat(j, "\\"), "\\".concat(j - 1, "\\"));
448
+ }
449
+ }
450
+ else if (obj && Array.isArray(obj)) {
451
+ obj = obj.map(function (value) { return typeof value === "string" || Array.isArray(value)
452
+ ? spliceWildcard(value, argIndex, argValue, argsCount)
453
+ : value; });
454
+ }
455
+ return obj;
456
+ }
457
+ function toolkitRun(settings, args) {
458
+ return __awaiter(this, void 0, void 0, function () {
459
+ var cmd;
460
+ return __generator(this, function (_a) {
461
+ cmd = "".concat(settings.paths.toolkitBinPath, " ").concat(args.join(' '));
462
+ return [2 /*return*/, new Promise(function (resolve, reject) {
463
+ exec(cmd, { maxBuffer: 1024 * 1024 * 10 }, function (error, stdout, stderr) {
464
+ if (error) {
465
+ reject(error);
466
+ }
467
+ if (stderr) {
468
+ reject(stderr);
469
+ }
470
+ resolve(stdout);
471
+ });
472
+ })];
473
+ });
474
+ });
475
+ }
476
+ function toUpperCamelCase(str) {
477
+ return str.replace(/\b(\w)/g, function (match, capture) {
478
+ return capture.toUpperCase();
479
+ }).replace(/\s+/g, '');
480
+ }
481
+ function toUtf8Array(str) {
482
+ var utf8 = [];
483
+ for (var i = 0; i < str.length; i++) {
484
+ var charcode = str.charCodeAt(i);
485
+ if (charcode < 0x80)
486
+ utf8.push(charcode);
487
+ else if (charcode < 0x800) {
488
+ utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f));
489
+ }
490
+ else if (charcode < 0xd800 || charcode >= 0xe000) {
491
+ utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
492
+ }
493
+ // surrogate pair
494
+ else {
495
+ i++;
496
+ // UTF-16 encodes 0x10000-0x10FFFF by
497
+ // subtracting 0x10000 and splitting the
498
+ // 20 bits of 0x0-0xFFFFF into two halves
499
+ charcode = 0x10000 + (((charcode & 0x3ff) << 10)
500
+ | (str.charCodeAt(i) & 0x3ff));
501
+ utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
502
+ }
503
+ }
504
+ return utf8;
505
+ }
506
+ function utf8ArrayToStr(array) {
507
+ var out, i, len, c;
508
+ var char2, char3;
509
+ out = "";
510
+ len = array.length;
511
+ i = 0;
512
+ while (i < len) {
513
+ c = array[i++];
514
+ switch (c >> 4) {
515
+ case 0:
516
+ case 1:
517
+ case 2:
518
+ case 3:
519
+ case 4:
520
+ case 5:
521
+ case 6:
522
+ case 7:
523
+ // 0xxxxxxx
524
+ out += String.fromCharCode(c);
525
+ break;
526
+ case 12:
527
+ case 13:
528
+ // 110x xxxx 10xx xxxx
529
+ char2 = array[i++];
530
+ out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
531
+ break;
532
+ case 14:
533
+ // 1110 xxxx 10xx xxxx 10xx xxxx
534
+ char2 = array[i++];
535
+ char3 = array[i++];
536
+ out += String.fromCharCode(((c & 0x0F) << 12) |
537
+ ((char2 & 0x3F) << 6) |
538
+ ((char3 & 0x3F) << 0));
539
+ break;
540
+ }
541
+ }
542
+ return out;
543
+ }
544
+ function prompt(question) {
545
+ return __awaiter(this, void 0, void 0, function () {
546
+ var readlineInterface;
547
+ return __generator(this, function (_a) {
548
+ readlineInterface = readline.createInterface({
549
+ input: process.stdin,
550
+ output: process.stdout
551
+ });
552
+ return [2 /*return*/, new Promise(function (resolve, _) {
553
+ readlineInterface.question("".concat(question, " "), function (response) {
554
+ readlineInterface.close();
555
+ resolve(response.trim());
556
+ });
557
+ })];
558
+ });
559
+ });
560
+ }
561
+ function prompter(promise) {
562
+ return __awaiter(this, void 0, void 0, function () {
563
+ var loading;
564
+ return __generator(this, function (_a) {
565
+ loading = (function () {
566
+ var h = ['|', '/', '-', '\\'];
567
+ var i = 0;
568
+ return setInterval(function () {
569
+ i = (i > 3) ? 0 : i;
570
+ process.stdout.write("\b\b".concat(h[i], " "));
571
+ i++;
572
+ }, 50);
573
+ })();
574
+ return [2 /*return*/, promise
575
+ .then(function (result) {
576
+ clearInterval(loading);
577
+ process.stdout.write('\b\b');
578
+ return result;
579
+ })];
580
+ });
581
+ });
582
+ }
583
+ function traceChecklists(checklists) {
584
+ if (checklists && Object.keys(checklists).length > 0) {
585
+ var headlines = __spreadArray(["NODES"], __read(Object.keys(checklists).map(function (key) { return ":".concat(key); })), false);
586
+ checklists = Object.values(checklists);
587
+ var urls = Object.keys(checklists[0]);
588
+ var records = urls.map(function (url) {
589
+ var errors = checklists.filter(function (checklist) { return checklist[url] instanceof Error; }).length;
590
+ return __spreadArray([
591
+ errors === checklists.length ? red(url) : (errors > 0 ? myellow(url) : mcyan(url))
592
+ ], __read(checklists.map(function (checklist) { return checklist[url] instanceof Error
593
+ ? red(checklist[url])
594
+ : (checklist[url] === true ? lcyan("Aye") : cyan("Nay")); })), false);
595
+ });
596
+ traceTable(records, {
597
+ headlines: headlines,
598
+ maxColumnWidth: 31,
599
+ });
600
+ }
601
+ }
602
+ function traceHeader(headline, color, indent) {
603
+ if (color === void 0) { color = normal; }
604
+ if (indent === void 0) { indent = ""; }
605
+ console.info("".concat(indent, "\u250C\u2500").concat("─".repeat(headline.length), "\u2500\u2510"));
606
+ console.info("".concat(indent, "\u2502 ").concat(color(headline), " \u2502"));
607
+ console.info("".concat(indent, "\u2514\u2500").concat("─".repeat(headline.length), "\u2500\u2518"));
608
+ }
609
+ function traceTable(records, options) {
610
+ var stringify = function (data, humanizers, index) { var _a; return humanizers && humanizers[index] ? humanizers[index](data).toString() : (_a = data === null || data === void 0 ? void 0 : data.toString()) !== null && _a !== void 0 ? _a : ""; };
611
+ var max = function (a, b) { return a > b ? a : b; };
612
+ var reduceMax = function (numbers) { return numbers.reduce(function (curr, prev) { return prev > curr ? prev : curr; }, 0); };
613
+ if (!options)
614
+ options = {};
615
+ var indent = (options === null || options === void 0 ? void 0 : options.indent) || "";
616
+ var numColumns = reduceMax(records.map(function (record) { return (record === null || record === void 0 ? void 0 : record.length) || 1; }));
617
+ var maxColumnWidth = (options === null || options === void 0 ? void 0 : options.maxColumnWidth) || 80;
618
+ var table = transpose(records, numColumns);
619
+ options.widths = (options === null || options === void 0 ? void 0 : options.widths) || table.map(function (column, index) {
620
+ var maxWidth = reduceMax(column.map(function (field) { return colorstrip(stringify(field, options === null || options === void 0 ? void 0 : options.humanizers, index)).length; }));
621
+ if ((options === null || options === void 0 ? void 0 : options.headlines) && options.headlines[index]) {
622
+ maxWidth = max(maxWidth, colorstrip(options.headlines[index].replaceAll(':', '')).length);
623
+ }
624
+ return Math.min(maxWidth, maxColumnWidth);
625
+ });
626
+ var headline = options.widths.map(function (maxWidth) { return "─".repeat(maxWidth); });
627
+ console.info("".concat(indent, "\u250C\u2500").concat(headline.join("─┬─"), "\u2500\u2510"));
628
+ if (options === null || options === void 0 ? void 0 : options.headlines) {
629
+ headline = options.widths.map(function (maxWidth, index) {
630
+ var caption = options.headlines[index].replaceAll(':', '');
631
+ var captionLength = colorstrip(caption).length;
632
+ return "".concat(white(caption)).concat(" ".repeat(maxWidth - captionLength));
633
+ });
634
+ console.info("".concat(indent, "\u2502 ").concat(headline.join(" │ "), " \u2502"));
635
+ headline = options.widths.map(function (maxWidth) { return "─".repeat(maxWidth); });
636
+ console.info("".concat(indent, "\u251C\u2500").concat(headline.join("─┼─"), "\u2500\u2524"));
637
+ }
638
+ for (var i = 0; i < records.length; i++) {
639
+ var line = "";
640
+ for (var j = 0; j < numColumns; j++) {
641
+ var data = table[j][i];
642
+ var color = void 0;
643
+ if ((options === null || options === void 0 ? void 0 : options.colors) && options.colors[j]) {
644
+ color = options.colors[j];
645
+ }
646
+ else {
647
+ color = typeof data === 'string'
648
+ ? green
649
+ : (Number(data) === data && data % 1 !== 0 // is float number?
650
+ ? yellow
651
+ : function (x) { return x; });
652
+ }
653
+ data = stringify(data, options === null || options === void 0 ? void 0 : options.humanizers, j);
654
+ if (colorstrip(data).length > maxColumnWidth) {
655
+ while (colorstrip(data).length > maxColumnWidth - 3) {
656
+ data = data.slice(0, -1);
657
+ }
658
+ data += "...";
659
+ }
660
+ var dataLength = colorstrip(data).length;
661
+ if ((options === null || options === void 0 ? void 0 : options.headlines) && options.headlines[j][0] === ':') {
662
+ data = "".concat(color(data)).concat(" ".repeat(options.widths[j] - dataLength));
663
+ }
664
+ else {
665
+ data = "".concat(" ".repeat(options.widths[j] - dataLength)).concat(color(data));
666
+ }
667
+ line += "\u2502 ".concat(data, " ");
668
+ }
669
+ console.info("".concat(indent).concat(line, "\u2502"));
670
+ }
671
+ headline = options.widths.map(function (maxWidth) { return "─".repeat(maxWidth); });
672
+ console.info("".concat(indent, "\u2514\u2500").concat(headline.join("─┴─"), "\u2500\u2518"));
673
+ }
674
+ function transpose(records, numColumns) {
675
+ var columns = [];
676
+ var _loop_1 = function (index) {
677
+ columns.push(records.map(function (row) { return row[index]; }));
678
+ };
679
+ for (var index = 0; index < numColumns; index++) {
680
+ _loop_1(index);
681
+ }
682
+ return columns;
683
+ }
684
+ function txJsonReplacer(key, value) {
685
+ switch (key) {
686
+ case 'bytes':
687
+ case 'der':
688
+ return toHexString(value, true);
689
+ case 'tx':
690
+ return JSON.stringify(value, txJsonReplacer);
691
+ default:
692
+ return value;
693
+ }
694
+ }
695
+ function traceTransactionOnCheckpoint(receipt) {
696
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.confirmations) {
697
+ console.info(" > Checkpoint: ".concat(commas(receipt.blockEpoch + receipt.confirmations)));
698
+ }
699
+ }
700
+ function traceTransactionOnStatusChange(receipt) {
701
+ if (receipt.status === "mined" && (receipt === null || receipt === void 0 ? void 0 : receipt.blockHash)
702
+ || (receipt.status === "confirmed" && !(receipt === null || receipt === void 0 ? void 0 : receipt.confirmations))) {
703
+ console.info(" > Block hash: ".concat(gray(receipt === null || receipt === void 0 ? void 0 : receipt.blockHash)));
704
+ console.info(" > Block miner: ".concat(mcyan(receipt === null || receipt === void 0 ? void 0 : receipt.blockMiner)));
705
+ console.info(" > Block epoch: ".concat(white(commas(receipt === null || receipt === void 0 ? void 0 : receipt.blockEpoch))));
706
+ }
707
+ var captions = {
708
+ "pending": "Awaiting relay...",
709
+ "confirmed": (receipt === null || receipt === void 0 ? void 0 : receipt.confirmations) ? "Transaction confirmed." : "Transaction mined.",
710
+ "finalized": "Transaction finalized.",
711
+ "relayed": "Awaiting inclusion...",
712
+ "mined": "Awaiting confirmations...",
713
+ };
714
+ var caption = captions[receipt.status];
715
+ if (caption)
716
+ console.info(" > ".concat(captions[receipt.status]));
717
+ }
718
+ function traceTransactionReceipt(receipt) {
719
+ var captions = {
720
+ "DataRequests": " > DR TX hash: ",
721
+ "ValueTransfer": " > VTT hash: ",
722
+ };
723
+ console.info("".concat(captions[receipt.type] || " > TX hash: ").concat(white(receipt.hash)));
724
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.droHash)
725
+ console.info(" > DRO hash: ".concat(green(receipt.droHash)));
726
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.radHash)
727
+ console.info(" > RAD hash: ".concat(mgreen(receipt.radHash)));
728
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.droSLA)
729
+ console.info(" > SLA params: ".concat(JSON.stringify(receipt.droSLA)));
730
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.withdrawer) {
731
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.validator) {
732
+ console.info(" > Validator: ".concat(mcyan(receipt.validator)));
733
+ }
734
+ console.info(" > Withdrawer: ".concat(mmagenta(receipt.withdrawer)));
735
+ }
736
+ else {
737
+ console.info(" > Account/s: ".concat(mmagenta(receipt.from)));
738
+ }
739
+ if (receipt === null || receipt === void 0 ? void 0 : receipt.recipients) {
740
+ console.info(" > Recipient/s: ".concat(mmagenta(receipt.recipients.filter(function (pkh, index, array) { return index === array.indexOf(pkh); }))));
741
+ }
742
+ console.info(" > Fees: ".concat(yellow(whole_wits(receipt.fees, 2))));
743
+ console.info(" > Value: ".concat(myellow(whole_wits(receipt.value, 2))));
744
+ console.info(" > Weight: ".concat(mgreen(commas(receipt.weight))));
745
+ }
746
+ function traceTransaction(transmitter, options) {
747
+ return __awaiter(this, void 0, void 0, function () {
748
+ var color, receipt, err_1;
749
+ var _a;
750
+ return __generator(this, function (_b) {
751
+ switch (_b.label) {
752
+ case 0:
753
+ color = (options === null || options === void 0 ? void 0 : options.color) || (function (x) { return "\u001B[30;45m".concat(x, "\u001B[0m"); });
754
+ return [4 /*yield*/, transmitter.signTransaction(options, options === null || options === void 0 ? void 0 : options.strategy)];
755
+ case 1:
756
+ receipt = _b.sent();
757
+ if ((options === null || options === void 0 ? void 0 : options.dryrun) || (options === null || options === void 0 ? void 0 : options.verbose)) {
758
+ console.info("\n".concat(gray(JSON.stringify(receipt.tx, txJsonReplacer))));
759
+ }
760
+ if (options === null || options === void 0 ? void 0 : options.headline) {
761
+ console.info("\n ".concat(color(" ".concat(options.headline, " ")), "\n"));
762
+ }
763
+ traceTransactionReceipt(receipt);
764
+ if (!!(options === null || options === void 0 ? void 0 : options.dryrun)) return [3 /*break*/, 9];
765
+ _b.label = 2;
766
+ case 2:
767
+ _b.trys.push([2, 7, , 8]);
768
+ if (!((options === null || options === void 0 ? void 0 : options.confirmations) !== undefined)) return [3 /*break*/, 4];
769
+ return [4 /*yield*/, transmitter.waitTransaction({
770
+ confirmations: options === null || options === void 0 ? void 0 : options.confirmations,
771
+ onCheckpoint: traceTransactionOnCheckpoint,
772
+ onStatusChange: traceTransactionOnStatusChange,
773
+ })];
774
+ case 3:
775
+ receipt = _b.sent();
776
+ return [3 /*break*/, 6];
777
+ case 4: return [4 /*yield*/, transmitter.sendTransaction(options, options === null || options === void 0 ? void 0 : options.strategy)];
778
+ case 5:
779
+ receipt = _b.sent();
780
+ _b.label = 6;
781
+ case 6: return [3 /*break*/, 8];
782
+ case 7:
783
+ err_1 = _b.sent();
784
+ if ((err_1 === null || err_1 === void 0 ? void 0 : err_1.inFlight) && err_1.inFlight) {
785
+ console.info("\n".concat(gray(JSON.stringify((_a = err_1.inFligt) === null || _a === void 0 ? void 0 : _a.message, txJsonReplacer))));
786
+ }
787
+ throw err_1;
788
+ case 8:
789
+ if (options === null || options === void 0 ? void 0 : options.verbose) {
790
+ console.info("\n".concat(yellow(JSON.stringify(receipt, txJsonReplacer))));
791
+ }
792
+ return [3 /*break*/, 10];
793
+ case 9:
794
+ console.info("\n".concat(mred(" ^^^ DRY-RUN ^^^ ")));
795
+ _b.label = 10;
796
+ case 10: return [2 /*return*/, receipt];
797
+ }
798
+ });
799
+ });
800
+ }
801
+ module.exports = {
802
+ colors: {
803
+ bblue: bblue,
804
+ bcyan: bcyan,
805
+ bgreen: bgreen,
806
+ bred: bred,
807
+ bviolet: bviolet,
808
+ cyan: cyan,
809
+ gray: gray,
810
+ green: green,
811
+ magenta: magenta,
812
+ red: red,
813
+ white: white,
814
+ yellow: yellow,
815
+ normal: normal,
816
+ lcyan: lcyan,
817
+ lgray: lgray,
818
+ lgreen: lgreen,
819
+ lmagenta: lmagenta,
820
+ lyellow: lyellow,
821
+ mcyan: mcyan,
822
+ mgreen: mgreen,
823
+ mmagenta: mmagenta,
824
+ mred: mred,
825
+ myellow: myellow,
826
+ },
827
+ colorstrip: colorstrip,
828
+ commas: commas,
829
+ whole_wits: whole_wits,
830
+ toFixedTrunc: toFixedTrunc,
831
+ fromNanowits: fromNanowits,
832
+ fromWits: fromWits,
833
+ countLeaves: countLeaves,
834
+ execRadonBytecode: execRadonBytecode,
835
+ deleteExtraFlags: deleteExtraFlags,
836
+ extractFromArgs: extractFromArgs,
837
+ fromHexString: fromHexString,
838
+ isHexString: isHexString,
839
+ isHexStringOfLength: isHexStringOfLength,
840
+ toHexString: toHexString,
841
+ parseURL: parseURL,
842
+ ipIsPrivateOrLocalhost: ipIsPrivateOrLocalhost,
843
+ showUsage: showUsage,
844
+ showUsageError: showUsageError,
845
+ showUsageSubcommand: showUsageSubcommand,
846
+ showVersion: showVersion,
847
+ toolkitRun: toolkitRun,
848
+ toUpperCamelCase: toUpperCamelCase,
849
+ toUtf8Array: toUtf8Array,
850
+ utf8ArrayToStr: utf8ArrayToStr,
851
+ prompt: prompt,
852
+ prompter: prompter,
853
+ traceChecklists: traceChecklists,
854
+ traceHeader: traceHeader,
855
+ traceTable: traceTable,
856
+ traceTransaction: traceTransaction,
857
+ traceTransactionOnStatusChange: traceTransactionOnStatusChange,
858
+ traceTransactionOnCheckpoint: traceTransactionOnCheckpoint,
859
+ traceTransactionReceipt: traceTransactionReceipt,
860
+ isWildcard: isWildcard,
861
+ getWildcardsCountFromString: getWildcardsCountFromString,
862
+ replaceWildcards: replaceWildcards,
863
+ spliceWildcard: spliceWildcard,
864
+ txJsonReplacer: txJsonReplacer,
865
+ };
866
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaGVscGVycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNwQixJQUFBLElBQUksR0FBSyxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQTdCLENBQThCO0FBQzFDLElBQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQixJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDeEIsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRXBDLElBQU0sVUFBVSxHQUFHLFVBQUMsR0FBRyxJQUFLLE9BQUEsR0FBRyxDQUFDLE9BQU8sQ0FDbkMsNkVBQTZFLEVBQUUsRUFBRSxDQUNwRixFQUYyQixDQUUzQixDQUFDO0FBRUYsSUFBTSxNQUFNLEdBQUcsVUFBQyxNQUFNO0lBQ2xCLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BDLElBQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsVUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFFO1FBQ3JELENBQUMsQ0FBQyxVQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLGNBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUE7SUFDckUsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQyxDQUFDO0FBRUYsSUFBTSxZQUFZ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QUE7UUFBRSxJQUFJLE1BQUE7UUFBRSxPQUFPLFNBQUE7S0FDekM7SUFDRCxVQUFVLFlBQUE7SUFBRSxNQUFNLFFBQUE7SUFBRSxVQUFVLFlBQUE7SUFBRSxZQUFZLGNBQUE7SUFDNUMsWUFBWSxjQUFBO0lBQUUsUUFBUSxVQUFBO0lBQ3RCLFdBQVcsYUFBQTtJQUNYLGlCQUFpQixtQkFBQTtJQUNqQixnQkFBZ0Isa0JBQUE7SUFBRSxlQUFlLGlCQUFBO0lBQ2pDLGFBQWEsZUFBQTtJQUFFLFdBQVcsYUFBQTtJQUFFLG1CQUFtQixxQkFBQTtJQUFFLFdBQVcsYUFBQTtJQUM1RCxRQUFRLFVBQUE7SUFBRSxzQkFBc0Isd0JBQUE7SUFDaEMsU0FBUyxXQUFBO0lBQUUsY0FBYyxnQkFBQTtJQUFFLG1CQUFtQixxQkFBQTtJQUFFLFdBQVcsYUFBQTtJQUMzRCxVQUFVLFlBQUE7SUFDVixnQkFBZ0Isa0JBQUE7SUFBRSxXQUFXLGFBQUE7SUFBRSxjQUFjLGdCQUFBO0lBQzdDLE1BQU0sUUFBQTtJQUFFLFFBQVEsVUFBQTtJQUNoQixlQUFlLGlCQUFBO0lBQUUsV0FBVyxhQUFBO0lBQUUsVUFBVSxZQUFBO0lBQ3hDLGdCQUFnQixrQkFBQTtJQUFFLDhCQUE4QixnQ0FBQTtJQUFFLDRCQUE0Qiw4QkFBQTtJQUFFLHVCQUF1Qix5QkFBQTtJQUN2RyxVQUFVLFlBQUE7SUFBRSwyQkFBMkIsNkJBQUE7SUFBRSxnQkFBZ0Isa0JBQUE7SUFBRSxjQUFjLGdCQUFBO0lBQ3pFLGNBQWMsZ0JBQUE7Q0FDakIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNib3IgPSByZXF1aXJlKFwiY2JvclwiKVxuY29uc3QgeyBleGVjIH0gPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoXCJuZXRcIilcbmNvbnN0IG9zID0gcmVxdWlyZShcIm9zXCIpXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJylcblxuY29uc3QgY29sb3JzdHJpcCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKFxuICAgIC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csICcnXG4pO1xuXG5jb25zdCBjb21tYXMgPSAobnVtYmVyKSA9PiB7XG4gICAgcGFydHMgPSBudW1iZXIudG9TdHJpbmcoKS5zcGxpdCgnLicpXG4gICAgY29uc3QgcmVzdWx0ID0gcGFydHMubGVuZ3RoIDw9IDFcbiAgICAgICAgPyBgJHtwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIil9YFxuICAgICAgICA6IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX0uJHtwYXJ0c1sxXX1gXG4gICAgcmV0dXJuIHJlc3VsdFxufTtcblxuY29uc3QgZnJvbU5hbm93aXRzID0gKHgsIGQpID0+IChwYXJzZUludCh4KSAvIDEwICoqIDkpLnRvRml4ZWQoZCB8fCAyKVxuY29uc3QgZnJvbVdpdHMgPSAoeCkgPT4gTWF0aC5mbG9vcihwYXJzZUZsb2F0KHgpICogMTAgKiogOSlcblxuZnVuY3Rpb24gdG9GaXhlZFRydW5jKHgsIG4pIHtcbiAgICBjb25zdCB2ID0gKHR5cGVvZiB4ID09PSAnc3RyaW5nJyA/IHggOiB4LnRvU3RyaW5nKCkpLnNwbGl0KCcuJyk7XG4gICAgaWYgKG4gPD0gMCkgcmV0dXJuIHZbMF07XG4gICAgbGV0IGYgPSB2WzFdIHx8ICcnO1xuICAgIGlmIChmLmxlbmd0aCA+IG4pIHJldHVybiBgJHt2WzBdfS4ke2Yuc3Vic3RyKDAsIG4pfWA7XG4gICAgd2hpbGUgKGYubGVuZ3RoIDwgbikgZiArPSAnMCc7XG4gICAgcmV0dXJuIGAke3ZbMF19LiR7Zn1gXG59O1xuXG5jb25zdCB3aG9sZV93aXRzID0gKG51bWJlciwgZGlnaXRzKSA9PiB7XG4gICAgY29uc3QgbG9va3VwID0gW1xuICAgICAgICB7IHZhbHVlOiAxLCBzeW1ib2w6IFwiIG5XaXRzXCIgfSxcbiAgICAgICAgeyB2YWx1ZTogMWUzLCBzeW1ib2w6IFwiIM68V2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlNiwgc3ltYm9sOiBcIiBtV2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlOSwgc3ltYm9sOiBcIiAgV2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlMTIsIHN5bWJvbDogXCIgS1dpdHNcIiB9LFxuICAgICAgICB7IHZhbHVlOiAxZTE1LCBzeW1ib2w6IFwiIE1XaXRzXCIgfSxcbiAgICBdO1xuICAgIGNvbnN0IHJlZ2V4cCA9IC9cXC4wKyR8KD88PVxcLlswLTldKTArJC87XG4gICAgY29uc3QgaXRlbSA9IGxvb2t1cC5maW5kTGFzdChpdGVtID0+IG51bWJlciA+PSBpdGVtLnZhbHVlKTtcbiAgICByZXR1cm4gaXRlbSA/IHRvRml4ZWRUcnVuYyhjb21tYXMobnVtYmVyIC8gaXRlbS52YWx1ZSksIGRpZ2l0cykuLypyZXBsYWNlKHJlZ2V4cCwgXCJcIikqL2NvbmNhdChpdGVtLnN5bWJvbCkgOiBcIihubyBXaXRzKVwiO1xufTtcblxuY29uc3QgYmJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbMTs5ODs0NG0ke3N0cn1cXHgxYlswOzA7MG1gXG5jb25zdCBiY3lhbiA9IChzdHIpID0+IGBcXHgxYlszODs0Nm0ke3N0cn1cXHgxYlswOzBtYFxuY29uc3QgYmdyZWVuID0gKHN0cikgPT4gYFxceDFiWzMwOzQybSR7c3RyfVxceDFiWzA7MG1gXG5jb25zdCBicmVkID0gKHN0cikgPT4gYFxceDFiWzMwOzQxbSR7c3RyfVxceDFiWzA7MG1gXG5jb25zdCBidmlvbGV0ID0gKHN0cikgPT4gYFxceDFiWzMwOzQ1bSR7c3RyfVxceDFiWzA7MG1gXG5cbmNvbnN0IGxjeWFuID0gKHN0cikgPT4gYFxceDFiWzE7OTZtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBsZ3JheSA9IChzdHIpID0+IGBcXHgxYlsxOzkwbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbGdyZWVuID0gKHN0cikgPT4gYFxceDFiWzE7OTJtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBsbWFnZW50YSA9IChzdHIpID0+IGBcXHgxYlsxOzk1bSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbHllbGxvdyA9IChzdHIpID0+IGBcXHgxYlsxOzkzbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbWJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbOTRtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtY3lhbiA9IChzdHIpID0+IGBcXHgxYls5Nm0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IG1ncmVlbiA9IChzdHIpID0+IGBcXHgxYls5Mm0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IG1tYWdlbnRhID0gKHN0cikgPT4gYFxceDFiWzA7OTVtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtcmVkID0gKHN0cikgPT4gYFxceDFiWzkxbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbXllbGxvdyA9IChzdHIpID0+IGBcXHgxYls5M20ke3N0cn1cXHgxYlswbWBcblxuY29uc3QgYmx1ZSA9IChzdHIpID0+IGBcXHgxYlszNG0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IGN5YW4gPSAoc3RyKSA9PiBgXFx4MWJbMzZtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBncmF5ID0gKHN0cikgPT4gYFxceDFiWzkwbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgZ3JlZW4gPSAoc3RyKSA9PiBgXFx4MWJbMzJtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtYWdlbnRhID0gKHN0cikgPT4gYFxceDFiWzA7MzVtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBub3JtYWwgPSAoc3RyKSA9PiBgXFx4MWJbOThtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCByZWQgPSAoc3RyKSA9PiBgXFx4MWJbMzFtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCB3aGl0ZSA9IChzdHIpID0+IGBcXHgxYlsxOzk4bSR7c3RyfVxceDFiWzBtYFxuY29uc3QgeWVsbG93ID0gKHN0cikgPT4gYFxceDFiWzMzbSR7c3RyfVxceDFiWzBtYFxuXG5mdW5jdGlvbiBjb3VudExlYXZlcyh0LCBvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIDA7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIHQpIHJldHVybiAxO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGNvdW50TGVhdmVzKHQsIGl0ZW0pLCAwKVxuICAgIGVsc2UgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKS5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgY291bnRMZWF2ZXModCwgaXRlbSksIDApO1xufVxuXG5mdW5jdGlvbiBkZWxldGVFeHRyYUZsYWdzKGFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5maWx0ZXIoYXJnID0+ICFhcmcuc3RhcnRzV2l0aCgnLS0nKSlcbn1cblxuZnVuY3Rpb24gY21kKC4uLmNvbW1hbmQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBleGVjKGNvbW1hbmQuam9pbihcIiBcIiksIHsgbWF4QnVmZmVyOiAxMDI0ICogMTAyNCAqIDEwIH0sIChlcnJvciwgc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RkZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQpXG4gICAgICAgIH0pXG4gICAgfSlcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNSYWRvbkJ5dGVjb2RlKGJ5dGVjb2RlLCAuLi5mbGFncykge1xuICAgIGlmICghaXNIZXhTdHJpbmcoYnl0ZWNvZGUpKSB7XG4gICAgICAgIHRocm93IEV2YWxFcnJvcihcImludmFsaWQgaGV4IHN0cmluZ1wiKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5weCA9IG9zLnR5cGUoKSA9PT0gXCJXaW5kb3dzX05UXCIgPyBcIm5weC5jbWRcIiA6IFwibnB4XCJcbiAgICAgICAgcmV0dXJuIGNtZChucHgsIFwid2l0bmV0XCIsIFwicmFkb25cIiwgXCJkcnlydW5cIiwgYnl0ZWNvZGUsIC4uLmZsYWdzKVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpLnRyaW0oKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yUmVnZXggPSAvLipeZXJyb3I6ICg/PG1lc3NhZ2U+LiopJC4qL2dtXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGVycm9yUmVnZXguZXhlYyhlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBtYXRjaGVkLmdyb3Vwcy5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlIHx8IGVycilcbiAgICAgICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RnJvbUFyZ3MoYXJncywgZmxhZ3MpIHtcbiAgICBjb25zdCBjdXJhdGVkID0ge31cbiAgICBpZiAoYXJncyAmJiBmbGFncykge1xuICAgICAgICBPYmplY3Qua2V5cyhmbGFncykuZm9yRWFjaChmbGFnID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdJbmRleCA9IGFyZ3MuaW5kZXhPZihgLS0ke2ZsYWd9YClcbiAgICAgICAgICAgIGlmIChmbGFnSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGlmIChmbGFnc1tmbGFnXS5wYXJhbSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJhdGVkW2ZsYWddID0gYXJnc1tmbGFnSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXJnc1tmbGFnSW5kZXggKyAxXSB8fCBhcmdzW2ZsYWdJbmRleCArIDFdLnN0YXJ0c1dpdGgoJy0tJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGBNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgLS0ke2ZsYWd9YFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyYXRlZFtmbGFnXSA9IGFyZ3NbZmxhZ0luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Muc3BsaWNlKGZsYWdJbmRleCwgMilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cmF0ZWRbZmxhZ10gPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGFyZ3Muc3BsaWNlKGZsYWdJbmRleCwgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBbYXJncywgY3VyYXRlZCxdXG59XG5cbmZ1bmN0aW9uIGZyb21IZXhTdHJpbmcoaGV4U3RyaW5nKSB7XG4gICAgaWYgKGhleFN0cmluZy5zdGFydHNXaXRoKFwiMHhcIikpIGhleFN0cmluZyA9IGhleFN0cmluZy5zbGljZSgyKVxuICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oaGV4U3RyaW5nLm1hdGNoKC8uezEsMn0vZykubWFwKChieXRlKSA9PiBwYXJzZUludChieXRlLCAxNikpKVxufVxuXG5mdW5jdGlvbiBpcElzUHJpdmF0ZU9yTG9jYWxob3N0KGlwKSB7XG4gICAgaWYgKGlwLnN1YnN0cmluZygwLCA3KSA9PT0gXCI6OmZmZmY6XCIpXG4gICAgICAgIGlwID0gaXAuc3Vic3RyaW5nKDcpO1xuXG4gICAgaWYgKG5ldC5pc0lQdjQoaXApKSB7XG4gICAgICAgIC8vIGNoZWNrIGxvY2FsaG9zdFxuICAgICAgICBpZiAoaXAgPT09ICcxMjcuMC4wLjEnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gICAgICAgICAxMC4wLjAuMCAtIDEwLjI1NS4yNTUuMjU1ICAgICAgICB8fCAgIDE3Mi4xNi4wLjAgLSAxNzIuMzEuMjU1LjI1NSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgMTkyLjE2OC4wLjAgLSAxOTIuMTY4LjI1NS4yNTVcbiAgICAgICAgcmV0dXJuIC9eKDEwKVxcLiguKilcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApIHx8IC9eKDE3MilcXC4oMVs2LTldfDJbMC05XXwzWzAtMV0pXFwuKC4qKVxcLiguKikkLy50ZXN0KGlwKSB8fCAvXigxOTIpXFwuKDE2OClcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApXG4gICAgfVxuXG4gICAgLy8gZWxzZTogaXAgaXMgSVB2NlxuICAgIGNvbnN0IGZpcnN0V29yZCA9IGlwLnNwbGl0KFwiOlwiKS5maW5kKGVsID0+ICEhZWwpOyAvL2dldCBmaXJzdCBub3QgZW1wdHkgd29yZFxuXG4gICAgLy8gZXF1aXZhbGVudCBvZiAxMjcuMC4wLjEgaW4gSVB2NlxuICAgIGlmIChpcCA9PT0gXCI6OjFcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBUaGUgb3JpZ2luYWwgSVB2NiBTaXRlIExvY2FsIGFkZHJlc3NlcyAoZmVjMDo6LzEwKSBhcmUgZGVwcmVjYXRlZC4gUmFuZ2U6IGZlYzAgLSBmZWZmXG4gICAgZWxzZSBpZiAoL15mZVtjLWZdWzAtZl0kLy50ZXN0KGZpcnN0V29yZCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgLy8gVGhlc2UgZGF5cyBVbmlxdWUgTG9jYWwgQWRkcmVzc2VzIChVTEEpIGFyZSB1c2VkIGluIHBsYWNlIG9mIFNpdGUgTG9jYWwuXG4gICAgLy8gUmFuZ2U6IGZjMDAgLSBmY2ZmXG4gICAgZWxzZSBpZiAoL15mY1swLWZdezJ9JC8udGVzdChmaXJzdFdvcmQpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFJhbmdlOiBmZDAwIC0gZmNmZlxuICAgIGVsc2UgaWYgKC9eZmRbMC1mXXsyfSQvLnRlc3QoZmlyc3RXb3JkKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBMaW5rIGxvY2FsIGFkZHJlc3NlcyAocHJlZml4ZWQgd2l0aCBmZTgwKSBhcmUgbm90IHJvdXRhYmxlXG4gICAgZWxzZSBpZiAoZmlyc3RXb3JkID09PSBcImZlODBcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBEaXNjYXJkIFByZWZpeFxuICAgIGVsc2UgaWYgKGZpcnN0V29yZCA9PT0gXCIxMDBcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBBbnkgb3RoZXIgSVAgYWRkcmVzcyBpcyBub3QgVW5pcXVlIExvY2FsIEFkZHJlc3MgKFVMQSlcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSGV4U3RyaW5nT2ZMZW5ndGgoc3RyLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gKGlzSGV4U3RyaW5nKHN0cilcbiAgICAgICAgJiYgKFxuICAgICAgICAgICAgKHN0ci5zdGFydHNXaXRoKCcweCcpICYmIHN0ci5zbGljZSgyKS5sZW5ndGggPT09IGxlbmd0aCAqIDIpXG4gICAgICAgICAgICB8fCBzdHIubGVuZ3RoID09PSBsZW5ndGggKiAyXG4gICAgICAgIClcbiAgICApIHx8IGlzV2lsZGNhcmQoc3RyKTtcbn1cblxuZnVuY3Rpb24gaXNIZXhTdHJpbmcoc3RyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgdHlwZW9mIHN0ciA9PT0gJ3N0cmluZydcbiAgICAgICAgJiYgKFxuICAgICAgICAgICAgKHN0ci5zdGFydHNXaXRoKFwiMHhcIikgJiYgL15bYS1mQS1GMC05XSskL2kudGVzdChzdHIuc2xpY2UoMikpKVxuICAgICAgICAgICAgfHwgL15bYS1mQS1GMC05XSskL2kudGVzdChzdHIpXG4gICAgICAgIClcbiAgICApIHx8IGlzV2lsZGNhcmQoc3RyKTtcbn1cblxuZnVuY3Rpb24gdG9IZXhTdHJpbmcoYnVmZmVyLCBwcmVmaXgweCA9IGZhbHNlKSB7XG4gICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAgICByZXR1cm4gKHByZWZpeDB4ID8gXCIweFwiIDogXCJcIikgKyBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYnVmZmVyLCB4ID0+ICgnMDAnICsgeC50b1N0cmluZygxNikpLnNsaWNlKC0yKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIC5tYXRjaCgvW2EtZkEtRjAtOV17Mn0vZylcbiAgICAgICAgLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcGFyc2VkVXJsLnByb3RvY29sICsgXCIvL1wiLFxuICAgICAgICAgICAgcGFyc2VkVXJsLmhvc3QsXG4gICAgICAgICAgICBwYXJzZWRVcmwucGF0aG5hbWUuc2xpY2UoMSksXG4gICAgICAgICAgICBwYXJzZWRVcmwuc2VhcmNoLnNsaWNlKDEpXG4gICAgICAgIF1cbiAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBVUkwgd2FzIHByb3ZpZGVkOiAke3VybH1gKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlKGNtZCwgbW9kdWxlKSB7XG4gICAgc2hvd1VzYWdlSGVhZGxpbmUoY21kKVxuICAgIGlmIChtb2R1bGU/LmZsYWdzKSBzaG93VXNhZ2VGbGFncyhtb2R1bGUuZmxhZ3MpXG4gICAgaWYgKG1vZHVsZT8ucm91dGVyKSBzaG93VXNhZ2VSb3V0ZXIobW9kdWxlLnJvdXRlcilcbiAgICBpZiAobW9kdWxlPy5lbnZhcnMpIHNob3dVc2FnZUVudmFycyhtb2R1bGUuZW52YXJzKVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VSb3V0ZXIocm91dGVyKSB7XG4gICAgY29uc3QgY21kcyA9IE9iamVjdC5lbnRyaWVzKHJvdXRlcilcbiAgICBpZiAoY21kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuU1VCQ09NTUFORFM6YClcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gTWF0aC5tYXgoLi4uY21kcy5tYXAoKFtjbWRdKSA9PiBjbWQubGVuZ3RoKSlcbiAgICAgICAgY21kcy5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgJHtjbWRbMF19JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY21kWzBdLmxlbmd0aCl9YCwgXCIgIFwiLCBjbWRbMV0uaGludClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUVycm9yKGNtZCwgc3ViY21kLCBtb2R1bGUsIGZsYWdzID0ge30sIGVycm9yKSB7XG4gICAgc2hvd1VzYWdlU3ViY29tbWFuZChjbWQsIHN1YmNtZCwgbW9kdWxlLCBlcnJvcilcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBcXG5FUlJPUjpgKVxuICAgICAgICBpZiAoZmxhZ3M/LmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcj8uc3RhY2s/LnNwbGl0KCdcXG4nKVswXSB8fCBlcnJvcilcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlRW52YXJzKGVudmFycykge1xuICAgIGVudmFycyA9IE9iamVjdC5lbnRyaWVzKGVudmFycylcbiAgICBpZiAoZW52YXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBcXG5FTlZBUlM6YClcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLm1heCguLi5lbnZhcnMubWFwKChbZW52YXJdKSA9PiBlbnZhci5sZW5ndGgpKVxuICAgICAgICBlbnZhcnMuZm9yRWFjaCgoW2VudmFyLCBoaW50XSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVudmFyLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIktFWVwiKSA8IDAgJiYgcHJvY2Vzcy5lbnZbZW52YXJdKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiICBcIiwgYCR7eWVsbG93KGVudmFyLnRvVXBwZXJDYXNlKCkpfSR7XCIgXCIucmVwZWF0KG1heFdpZHRoIC0gZW52YXIubGVuZ3RoKX1gLCBgID0+IFNldHRsZWQgdG8gXCIke215ZWxsb3cocHJvY2Vzcy5lbnZbZW52YXJdKX1cImApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAke3llbGxvdyhlbnZhci50b1VwcGVyQ2FzZSgpKX0ke1wiIFwiLnJlcGVhdChtYXhXaWR0aCAtIGVudmFyLmxlbmd0aCl9YCwgYCAke2hpbnR9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUZsYWdzKGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBPYmplY3QuZW50cmllcyhmbGFncylcbiAgICBpZiAoZmxhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFxcbkZMQUdTOmApXG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLmZsYWdzLmZpbHRlcigoWyx7aGludH1dKSA9PiBoaW50KS5tYXAoKFtrZXksIHsgcGFyYW0gfV0pID0+IHBhcmFtID8ga2V5Lmxlbmd0aCArIHBhcmFtLmxlbmd0aCArIDMgOiBrZXkubGVuZ3RoKSlcbiAgICAgICAgZmxhZ3MuZm9yRWFjaChmbGFnID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IGAke2ZsYWdbMF19JHtmbGFnWzFdLnBhcmFtID8gZ3JheShgIDwke2ZsYWdbMV0ucGFyYW19PmApIDogXCJcIn1gXG4gICAgICAgICAgICBpZiAoZmxhZ1sxXS5oaW50KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiICBcIiwgYC0tJHtzdHJ9JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY29sb3JzdHJpcChzdHIpLmxlbmd0aCl9YCwgXCIgIFwiLCBmbGFnWzFdLmhpbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VIZWFkbGluZShjbWQsIHN1YmNtZCwgbW9kdWxlKSB7XG4gICAgY29uc29sZS5pbmZvKFwiVVNBR0U6XCIpXG4gICAgaWYgKHN1YmNtZCkge1xuICAgICAgICBsZXQgcGFyYW1zID0gbW9kdWxlLnJvdXRlcltzdWJjbWRdPy5wYXJhbXNcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG1vZHVsZS5yb3V0ZXJbc3ViY21kXT8ub3B0aW9uc1xuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbGl6ZSA9IChzdHIpID0+IHN0ci5lbmRzV2l0aCgnIC4uLl0nKSA/IGBbPCR7c3RyLnNsaWNlKDEsIC01KX0+IC4uLl1gIDogKFxuICAgICAgICAgICAgICAgIHN0clswXSA9PT0gJ1snID8gYFs8JHtzdHIuc2xpY2UoMSwgLTEpfT5dYCA6IGA8JHtzdHJ9PmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMubWFwKHBhcmFtID0+IG9wdGlvbmFsaXplKHBhcmFtKSkuam9pbignICcpICsgXCIgXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gb3B0aW9uYWxpemUocGFyYW1zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgICAgJHt3aGl0ZShgbnB4IHdpdG5ldCAke2NtZH1gKX0gW0ZMQUdTXSAke3doaXRlKHN1YmNtZCl9ICR7cGFyYW1zID8gZ3JlZW4ocGFyYW1zKSArIFwiIFwiIDogXCJcIn0ke29wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCA/IFwiW09QVElPTlNdXCIgOiBcIlwifWApXG4gICAgICAgIGlmIChtb2R1bGU/LnJvdXRlcltzdWJjbWRdPy5oaW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFxcbkRFU0NSSVBUSU9OOmApXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYCAgICR7bW9kdWxlLnJvdXRlcltzdWJjbWRdLmhpbnR9YClcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgICAgJHt3aGl0ZShgbnB4IHdpdG5ldCAke2NtZH1gKX0gW0ZMQUdTXSA8U1VCQ09NTUFORD4gLi4uIFtPUFRJT05TXWApXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucylcbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuT1BUSU9OUzpgKVxuICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBvcHRpb25zXG4gICAgICAgICAgICAubWFwKG9wdGlvbiA9PiBvcHRpb25bMV0ucGFyYW0gPyBvcHRpb25bMV0ucGFyYW0ubGVuZ3RoICsgb3B0aW9uWzBdLmxlbmd0aCArIDMgOiBvcHRpb25bMF0ubGVuZ3RoKVxuICAgICAgICAgICAgLnJlZHVjZSgocHJldiwgY3VycikgPT4gY3VyciA+IHByZXYgPyBjdXJyIDogcHJldik7XG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvblsxXS5oaW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gYCR7b3B0aW9uWzBdfSR7b3B0aW9uWzFdLnBhcmFtID8gZ3JheShgIDwke29wdGlvblsxXS5wYXJhbX0+YCkgOiBcIlwifWBcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgLS0ke3N0cn0ke1wiIFwiLnJlcGVhdChtYXhMZW5ndGggLSBjb2xvcnN0cmlwKHN0cikubGVuZ3RoKX1gLCBcIiAgXCIsIG9wdGlvblsxXS5oaW50KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlU3ViY29tbWFuZChjbWQsIHN1YmNtZCwgbW9kdWxlKSB7XG4gICAgc2hvd1VzYWdlSGVhZGxpbmUoY21kLCBzdWJjbWQsIG1vZHVsZSlcbiAgICBpZiAobW9kdWxlPy5mbGFncykgc2hvd1VzYWdlRmxhZ3MobW9kdWxlPy5mbGFncylcbiAgICBpZiAobW9kdWxlPy5yb3V0ZXJbc3ViY21kXT8ub3B0aW9ucykgc2hvd1VzYWdlT3B0aW9ucyhtb2R1bGUucm91dGVyW3N1YmNtZF0/Lm9wdGlvbnMpXG4gICAgaWYgKG1vZHVsZT8uZW52YXJzKSBzaG93VXNhZ2VFbnZhcnMobW9kdWxlPy5lbnZhcnMpXG59XG5cbmZ1bmN0aW9uIHNob3dWZXJzaW9uKCkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHttY3lhbihgV2l0L09yYWNsZSBUb29sa2l0IENMSSB2JHtyZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb259YCl9YClcbn1cblxuZnVuY3Rpb24gZ2V0V2lsZGNhcmRzQ291bnRGcm9tU3RyaW5nKHN0cikge1xuICAgIGxldCBtYXhBcmdzSW5kZXggPSAwXG4gICAgaWYgKHN0cikge1xuICAgICAgICBsZXQgbWF0Y2hcbiAgICAgICAgY29uc3QgcmVnZXhwID0gL1xcXFxcXGRcXFxcL2dcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgYXJnc0luZGV4ID0gcGFyc2VJbnQobWF0Y2hbMF1bMV0pICsgMVxuICAgICAgICAgICAgaWYgKGFyZ3NJbmRleCA+IG1heEFyZ3NJbmRleCkgbWF4QXJnc0luZGV4ID0gYXJnc0luZGV4XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1heEFyZ3NJbmRleFxufVxuXG5cbmZ1bmN0aW9uIGlzV2lsZGNhcmQoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT0gMyAmJiAvXFxcXFxcZFxcXFwvZy50ZXN0KHN0cilcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVdpbGRjYXJkcyhvYmosIGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAxMCkgYXJncyA9IGFyZ3Muc2xpY2UoMCwgMTApO1xuICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKGxldCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJncy5sZW5ndGg7IGFyZ0luZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbGRjYXJkID0gYFxcXFwke2FyZ0luZGV4fVxcXFxgXG4gICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZUFsbCh3aWxkY2FyZCwgYXJnc1thcmdJbmRleF0pXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9iaiAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gb2JqLm1hcCh2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gcmVwbGFjZVdpbGRjYXJkcyh2YWx1ZSwgYXJncylcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBzcGxpY2VXaWxkY2FyZChvYmosIGFyZ0luZGV4LCBhcmdWYWx1ZSwgYXJnc0NvdW50KSB7XG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IHdpbGRjYXJkID0gYFxcXFwke2FyZ0luZGV4fVxcXFxgXG4gICAgICAgIG9iaiA9IG9iai5yZXBsYWNlQWxsKHdpbGRjYXJkLCBhcmdWYWx1ZSlcbiAgICAgICAgZm9yIChsZXQgaiA9IGFyZ0luZGV4ICsgMTsgaiA8IGFyZ3NDb3VudDsgaisrKSB7XG4gICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZUFsbChgXFxcXCR7an1cXFxcYCwgYFxcXFwke2ogLSAxfVxcXFxgKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChvYmogJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IG9iai5tYXAodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHNwbGljZVdpbGRjYXJkKHZhbHVlLCBhcmdJbmRleCwgYXJnVmFsdWUsIGFyZ3NDb3VudClcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0b29sa2l0UnVuKHNldHRpbmdzLCBhcmdzKSB7XG4gICAgY29uc3QgY21kID0gYCR7c2V0dGluZ3MucGF0aHMudG9vbGtpdEJpblBhdGh9ICR7YXJncy5qb2luKCcgJyl9YFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGV4ZWMoY21kLCB7IG1heEJ1ZmZlcjogMTAyNCAqIDEwMjQgKiAxMCB9LCAoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0ZGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoc3Rkb3V0KVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIHRvVXBwZXJDYW1lbENhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXGIoXFx3KS9nLCBmdW5jdGlvbiAobWF0Y2gsIGNhcHR1cmUpIHtcbiAgICAgICAgcmV0dXJuIGNhcHR1cmUudG9VcHBlckNhc2UoKTtcbiAgICB9KS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbn1cblxuZnVuY3Rpb24gdG9VdGY4QXJyYXkoc3RyKSB7XG4gICAgY29uc3QgdXRmOCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXJjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjaGFyY29kZSA8IDB4ODApIHV0ZjgucHVzaChjaGFyY29kZSk7XG4gICAgICAgIGVsc2UgaWYgKGNoYXJjb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGMwIHwgKGNoYXJjb2RlID4+IDYpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hhcmNvZGUgPCAweGQ4MDAgfHwgY2hhcmNvZGUgPj0gMHhlMDAwKSB7XG4gICAgICAgICAgICB1dGY4LnB1c2goMHhlMCB8IChjaGFyY29kZSA+PiAxMiksXG4gICAgICAgICAgICAgICAgMHg4MCB8ICgoY2hhcmNvZGUgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKGNoYXJjb2RlICYgMHgzZikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgLy8gVVRGLTE2IGVuY29kZXMgMHgxMDAwMC0weDEwRkZGRiBieVxuICAgICAgICAgICAgLy8gc3VidHJhY3RpbmcgMHgxMDAwMCBhbmQgc3BsaXR0aW5nIHRoZVxuICAgICAgICAgICAgLy8gMjAgYml0cyBvZiAweDAtMHhGRkZGRiBpbnRvIHR3byBoYWx2ZXNcbiAgICAgICAgICAgIGNoYXJjb2RlID0gMHgxMDAwMCArICgoKGNoYXJjb2RlICYgMHgzZmYpIDw8IDEwKVxuICAgICAgICAgICAgICAgIHwgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGYwIHwgKGNoYXJjb2RlID4+IDE4KSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZSA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZSA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHV0Zjg7XG59XG5cbmZ1bmN0aW9uIHV0ZjhBcnJheVRvU3RyKGFycmF5KSB7XG4gICAgbGV0IG91dCwgaSwgbGVuLCBjO1xuICAgIGxldCBjaGFyMiwgY2hhcjM7XG5cbiAgICBvdXQgPSBcIlwiO1xuICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBjID0gYXJyYXlbaSsrXTtcbiAgICAgICAgc3dpdGNoIChjID4+IDQpIHtcbiAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiBjYXNlIDI6IGNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OlxuICAgICAgICAgICAgICAgIC8vIDB4eHh4eHh4XG4gICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEyOiBjYXNlIDEzOlxuICAgICAgICAgICAgICAgIC8vIDExMHggeHh4eCAgIDEweHggeHh4eFxuICAgICAgICAgICAgICAgIGNoYXIyID0gYXJyYXlbaSsrXTtcbiAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDFGKSA8PCA2KSB8IChjaGFyMiAmIDB4M0YpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgLy8gMTExMCB4eHh4ICAxMHh4IHh4eHggIDEweHggeHh4eFxuICAgICAgICAgICAgICAgIGNoYXIyID0gYXJyYXlbaSsrXTtcbiAgICAgICAgICAgICAgICBjaGFyMyA9IGFycmF5W2krK107XG4gICAgICAgICAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMHgwRikgPDwgMTIpIHxcbiAgICAgICAgICAgICAgICAgICAgKChjaGFyMiAmIDB4M0YpIDw8IDYpIHxcbiAgICAgICAgICAgICAgICAgICAgKChjaGFyMyAmIDB4M0YpIDw8IDApKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb24pIHtcbiAgICBjb25zdCByZWFkbGluZUludGVyZmFjZSA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICAgICAgcmVhZGxpbmVJbnRlcmZhY2UucXVlc3Rpb24oYCR7cXVlc3Rpb259IGAsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVhZGxpbmVJbnRlcmZhY2UuY2xvc2UoKVxuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS50cmltKCkpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0ZXIocHJvbWlzZSkge1xuICAgIGNvbnN0IGxvYWRpbmcgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCBoID0gWyd8JywgJy8nLCAnLScsICdcXFxcJ107XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGkgPSAoaSA+IDMpID8gMCA6IGlcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXGJcXGIke2hbaV19IGApXG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0sIDUwKTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGxvYWRpbmcpXG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxiXFxiJylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcbn1cblxuZnVuY3Rpb24gdHJhY2VDaGVja2xpc3RzKGNoZWNrbGlzdHMpIHtcbiAgICBpZiAoY2hlY2tsaXN0cyAmJiBPYmplY3Qua2V5cyhjaGVja2xpc3RzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGhlYWRsaW5lcyA9IFtcIk5PREVTXCIsIC4uLk9iamVjdC5rZXlzKGNoZWNrbGlzdHMpLm1hcChrZXkgPT4gYDoke2tleX1gKSxdXG4gICAgICAgIGNoZWNrbGlzdHMgPSBPYmplY3QudmFsdWVzKGNoZWNrbGlzdHMpXG4gICAgICAgIGNvbnN0IHVybHMgPSBPYmplY3Qua2V5cyhjaGVja2xpc3RzWzBdKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdXJscy5tYXAodXJsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGNoZWNrbGlzdHMuZmlsdGVyKGNoZWNrbGlzdCA9PiBjaGVja2xpc3RbdXJsXSBpbnN0YW5jZW9mIEVycm9yKS5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZXJyb3JzID09PSBjaGVja2xpc3RzLmxlbmd0aCA/IHJlZCh1cmwpIDogKGVycm9ycyA+IDAgPyBteWVsbG93KHVybCkgOiBtY3lhbih1cmwpKSxcbiAgICAgICAgICAgICAgICAuLi5jaGVja2xpc3RzLm1hcChjaGVja2xpc3QgPT4gY2hlY2tsaXN0W3VybF0gaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IHJlZChjaGVja2xpc3RbdXJsXSlcbiAgICAgICAgICAgICAgICAgICAgOiAoY2hlY2tsaXN0W3VybF0gPT09IHRydWUgPyBsY3lhbihcIkF5ZVwiKSA6IGN5YW4oXCJOYXlcIikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2VUYWJsZShyZWNvcmRzLCB7XG4gICAgICAgICAgICBoZWFkbGluZXMsXG4gICAgICAgICAgICBtYXhDb2x1bW5XaWR0aDogMzEsXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZUhlYWRlcihoZWFkbGluZSwgY29sb3IgPSBub3JtYWwsIGluZGVudCA9IFwiXCIsKSB7XG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIzilIAke1wi4pSAXCIucmVwZWF0KGhlYWRsaW5lLmxlbmd0aCl94pSA4pSQYClcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUgiAke2NvbG9yKGhlYWRsaW5lKX0g4pSCYClcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUlOKUgCR7XCLilIBcIi5yZXBlYXQoaGVhZGxpbmUubGVuZ3RoKX3ilIDilJhgKVxufVxuXG5mdW5jdGlvbiB0cmFjZVRhYmxlKHJlY29yZHMsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBzdHJpbmdpZnkgPSAoZGF0YSwgaHVtYW5pemVycywgaW5kZXgpID0+IGh1bWFuaXplcnMgJiYgaHVtYW5pemVyc1tpbmRleF0gPyBodW1hbml6ZXJzW2luZGV4XShkYXRhKS50b1N0cmluZygpIDogZGF0YT8udG9TdHJpbmcoKSA/PyBcIlwiXG4gICAgY29uc3QgbWF4ID0gKGEsIGIpID0+IGEgPiBiID8gYSA6IGJcbiAgICBjb25zdCByZWR1Y2VNYXggPSAobnVtYmVycykgPT4gbnVtYmVycy5yZWR1Y2UoKGN1cnIsIHByZXYpID0+IHByZXYgPiBjdXJyID8gcHJldiA6IGN1cnIsIDApXG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge31cbiAgICBjb25zdCBpbmRlbnQgPSBvcHRpb25zPy5pbmRlbnQgfHwgXCJcIlxuICAgIGNvbnN0IG51bUNvbHVtbnMgPSByZWR1Y2VNYXgocmVjb3Jkcy5tYXAocmVjb3JkID0+IHJlY29yZD8ubGVuZ3RoIHx8IDEpKVxuICAgIGNvbnN0IG1heENvbHVtbldpZHRoID0gb3B0aW9ucz8ubWF4Q29sdW1uV2lkdGggfHwgODBcbiAgICBjb25zdCB0YWJsZSA9IHRyYW5zcG9zZShyZWNvcmRzLCBudW1Db2x1bW5zKVxuICAgIG9wdGlvbnMud2lkdGhzID0gb3B0aW9ucz8ud2lkdGhzIHx8IHRhYmxlLm1hcCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgbWF4V2lkdGggPSByZWR1Y2VNYXgoY29sdW1uLm1hcChmaWVsZCA9PiBjb2xvcnN0cmlwKHN0cmluZ2lmeShmaWVsZCwgb3B0aW9ucz8uaHVtYW5pemVycywgaW5kZXgpKS5sZW5ndGgpKVxuICAgICAgICBpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XSkge1xuICAgICAgICAgICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIGNvbG9yc3RyaXAob3B0aW9ucy5oZWFkbGluZXNbaW5kZXhdLnJlcGxhY2VBbGwoJzonLCAnJykpLmxlbmd0aClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIG1heENvbHVtbldpZHRoKVxuICAgIH0pXG4gICAgbGV0IGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUjOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUrOKUgFwiKX3ilIDilJBgKVxuICAgIGlmIChvcHRpb25zPy5oZWFkbGluZXMpIHtcbiAgICAgICAgaGVhZGxpbmUgPSBvcHRpb25zLndpZHRocy5tYXAoKG1heFdpZHRoLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FwdGlvbiA9IG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XS5yZXBsYWNlQWxsKCc6JywgJycpXG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uTGVuZ3RoID0gY29sb3JzdHJpcChjYXB0aW9uKS5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBgJHt3aGl0ZShjYXB0aW9uKX0ke1wiIFwiLnJlcGVhdChtYXhXaWR0aCAtIGNhcHRpb25MZW5ndGgpfWBcbiAgICAgICAgfSlcbiAgICAgICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIIgJHtoZWFkbGluZS5qb2luKFwiIOKUgiBcIil9IOKUgmApXG4gICAgICAgIGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcbiAgICAgICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLzilIBcIil94pSA4pSkYClcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBsaW5lID0gXCJcIlxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bUNvbHVtbnM7IGorKykge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0YWJsZVtqXVtpXVxuICAgICAgICAgICAgbGV0IGNvbG9yXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uY29sb3JzICYmIG9wdGlvbnMuY29sb3JzW2pdKSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSBvcHRpb25zLmNvbG9yc1tqXVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGdyZWVuXG4gICAgICAgICAgICAgICAgICAgIDogKE51bWJlcihkYXRhKSA9PT0gZGF0YSAmJiBkYXRhICUgMSAhPT0gMCAvLyBpcyBmbG9hdCBudW1iZXI/XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHllbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAoeCkgPT4geFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGopXG4gICAgICAgICAgICBpZiAoY29sb3JzdHJpcChkYXRhKS5sZW5ndGggPiBtYXhDb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoIC0gMykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YSArPSBcIi4uLlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZGF0YUxlbmd0aCA9IGNvbG9yc3RyaXAoZGF0YSkubGVuZ3RoXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2pdWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gYCR7Y29sb3IoZGF0YSl9JHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX1gXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBgJHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX0ke2NvbG9yKGRhdGEpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmUgKz0gYOKUgiAke2RhdGF9IGBcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50fSR7bGluZX3ilIJgKVxuICAgIH1cbiAgICBoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcChtYXhXaWR0aCA9PiBcIuKUgFwiLnJlcGVhdChtYXhXaWR0aCkpXG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJTilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLTilIBcIil94pSA4pSYYClcbn1cblxuZnVuY3Rpb24gdHJhbnNwb3NlKHJlY29yZHMsIG51bUNvbHVtbnMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW11cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQ29sdW1uczsgaW5kZXgrKykge1xuICAgICAgICBjb2x1bW5zLnB1c2gocmVjb3Jkcy5tYXAocm93ID0+IHJvd1tpbmRleF0pKVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uc1xufVxuXG5mdW5jdGlvbiB0eEpzb25SZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnYnl0ZXMnOlxuICAgICAgICBjYXNlICdkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHZhbHVlLCB0cnVlKVxuICAgICAgICBjYXNlICd0eCc6XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIHR4SnNvblJlcGxhY2VyKVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uT25DaGVja3BvaW50KHJlY2VpcHQpIHtcbiAgICBpZiAocmVjZWlwdD8uY29uZmlybWF0aW9ucykge1xuICAgICAgICBjb25zb2xlLmluZm8oYCA+IENoZWNrcG9pbnQ6ICAke2NvbW1hcyhyZWNlaXB0LmJsb2NrRXBvY2ggKyByZWNlaXB0LmNvbmZpcm1hdGlvbnMpfWApXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uT25TdGF0dXNDaGFuZ2UocmVjZWlwdCkge1xuICAgIGlmIChcbiAgICAgICAgcmVjZWlwdC5zdGF0dXMgPT09IFwibWluZWRcIiAmJiByZWNlaXB0Py5ibG9ja0hhc2hcbiAgICAgICAgICAgIHx8IChyZWNlaXB0LnN0YXR1cyA9PT0gXCJjb25maXJtZWRcIiAmJiAhcmVjZWlwdD8uY29uZmlybWF0aW9ucylcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGAgPiBCbG9jayBoYXNoOiAgJHtncmF5KHJlY2VpcHQ/LmJsb2NrSGFzaCl9YCkgXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gQmxvY2sgbWluZXI6ICR7bWN5YW4ocmVjZWlwdD8uYmxvY2tNaW5lcil9YCkgXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gQmxvY2sgZXBvY2g6ICR7d2hpdGUoY29tbWFzKHJlY2VpcHQ/LmJsb2NrRXBvY2gpKX1gKVxuICAgIH1cbiAgICBjb25zdCBjYXB0aW9ucyA9IHtcbiAgICAgICAgXCJwZW5kaW5nXCI6IFwiQXdhaXRpbmcgcmVsYXkuLi5cIixcbiAgICAgICAgXCJjb25maXJtZWRcIjogcmVjZWlwdD8uY29uZmlybWF0aW9ucyA/IFwiVHJhbnNhY3Rpb24gY29uZmlybWVkLlwiIDogXCJUcmFuc2FjdGlvbiBtaW5lZC5cIixcbiAgICAgICAgXCJmaW5hbGl6ZWRcIjogXCJUcmFuc2FjdGlvbiBmaW5hbGl6ZWQuXCIsXG4gICAgICAgIFwicmVsYXllZFwiOiBcIkF3YWl0aW5nIGluY2x1c2lvbi4uLlwiLFxuICAgICAgICBcIm1pbmVkXCI6IFwiQXdhaXRpbmcgY29uZmlybWF0aW9ucy4uLlwiLFxuICAgIH1cbiAgICBjb25zdCBjYXB0aW9uID0gY2FwdGlvbnNbcmVjZWlwdC5zdGF0dXNdXG4gICAgaWYgKGNhcHRpb24pIGNvbnNvbGUuaW5mbyhgID4gJHtjYXB0aW9uc1tyZWNlaXB0LnN0YXR1c119YClcbn1cblxuZnVuY3Rpb24gdHJhY2VUcmFuc2FjdGlvblJlY2VpcHQocmVjZWlwdCkge1xuICAgIGNvbnN0IGNhcHRpb25zID0ge1xuICAgICAgICBcIkRhdGFSZXF1ZXN0c1wiOiBgID4gRFIgVFggaGFzaDogIGAsXG4gICAgICAgIFwiVmFsdWVUcmFuc2ZlclwiOiBgID4gVlRUIGhhc2g6ICAgIGAsXG4gICAgfVxuICAgIGNvbnNvbGUuaW5mbyhgJHtjYXB0aW9uc1tyZWNlaXB0LnR5cGVdIHx8IGAgPiBUWCBoYXNoOiAgICAgYH0ke3doaXRlKHJlY2VpcHQuaGFzaCl9YClcbiAgICBpZiAocmVjZWlwdD8uZHJvSGFzaCkgY29uc29sZS5pbmZvKGAgPiBEUk8gaGFzaDogICAgJHtncmVlbihyZWNlaXB0LmRyb0hhc2gpfWApXG4gICAgaWYgKHJlY2VpcHQ/LnJhZEhhc2gpIGNvbnNvbGUuaW5mbyhgID4gUkFEIGhhc2g6ICAgICR7bWdyZWVuKHJlY2VpcHQucmFkSGFzaCl9YClcbiAgICBpZiAocmVjZWlwdD8uZHJvU0xBKSAgY29uc29sZS5pbmZvKGAgPiBTTEEgcGFyYW1zOiAgJHtKU09OLnN0cmluZ2lmeShyZWNlaXB0LmRyb1NMQSl9YClcbiAgICBpZiAocmVjZWlwdD8ud2l0aGRyYXdlcikge1xuICAgICAgICBpZiAocmVjZWlwdD8udmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYCA+IFZhbGlkYXRvcjogICAke21jeWFuKHJlY2VpcHQudmFsaWRhdG9yKX1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gV2l0aGRyYXdlcjogICR7bW1hZ2VudGEocmVjZWlwdC53aXRoZHJhd2VyKX1gKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgID4gQWNjb3VudC9zOiAgICR7bW1hZ2VudGEocmVjZWlwdC5mcm9tKX1gKVxuICAgIH1cbiAgICBpZiAocmVjZWlwdD8ucmVjaXBpZW50cykge1xuICAgICAgICBjb25zb2xlLmluZm8oYCA+IFJlY2lwaWVudC9zOiAke1xuICAgICAgICAgICAgbW1hZ2VudGEocmVjZWlwdC5yZWNpcGllbnRzLmZpbHRlcigocGtoLCBpbmRleCwgYXJyYXkpID0+IGluZGV4ID09PSBhcnJheS5pbmRleE9mKHBraCkpKVxuICAgICAgICB9YClcbiAgICB9XG4gICAgY29uc29sZS5pbmZvKGAgPiBGZWVzOiAgICAgICAgJHt5ZWxsb3cod2hvbGVfd2l0cyhyZWNlaXB0LmZlZXMsIDIpKX1gKVxuICAgIGNvbnNvbGUuaW5mbyhgID4gVmFsdWU6ICAgICAgICR7bXllbGxvdyh3aG9sZV93aXRzKHJlY2VpcHQudmFsdWUsIDIpKX1gKVxuICAgIGNvbnNvbGUuaW5mbyhgID4gV2VpZ2h0OiAgICAgICR7bWdyZWVuKGNvbW1hcyhyZWNlaXB0LndlaWdodCkpfWApIFxufVxuXG5hc3luYyBmdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uKHRyYW5zbWl0dGVyLCBvcHRpb25zKSB7XG4gICAgY29uc3QgY29sb3IgPSBvcHRpb25zPy5jb2xvciB8fCAoKHgpID0+IGBcXHgxYlszMDs0NW0ke3h9XFx4MWJbMG1gKVxuICAgIGxldCByZWNlaXB0ID0gYXdhaXQgdHJhbnNtaXR0ZXIuc2lnblRyYW5zYWN0aW9uKG9wdGlvbnMsIG9wdGlvbnM/LnN0cmF0ZWd5KVxuICAgIGlmIChvcHRpb25zPy5kcnlydW4gfHwgb3B0aW9ucz8udmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICBgXFxuJHtncmF5KEpTT04uc3RyaW5naWZ5KHJlY2VpcHQudHgsIHR4SnNvblJlcGxhY2VyKSl9YFxuICAgICAgICApXG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5oZWFkbGluZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFxcbiAke2NvbG9yKGAgICR7b3B0aW9ucy5oZWFkbGluZX0gIGApfVxcbmApXG4gICAgfVxuICAgIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXG4gICAgaWYgKCFvcHRpb25zPy5kcnlydW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zPy5jb25maXJtYXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdHJhbnNtaXR0ZXIud2FpdFRyYW5zYWN0aW9uKHsgXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbnM6IG9wdGlvbnM/LmNvbmZpcm1hdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2twb2ludDogdHJhY2VUcmFuc2FjdGlvbk9uQ2hlY2twb2ludCxcbiAgICAgICAgICAgICAgICAgICAgb25TdGF0dXNDaGFuZ2U6IHRyYWNlVHJhbnNhY3Rpb25PblN0YXR1c0NoYW5nZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdHJhbnNtaXR0ZXIuc2VuZFRyYW5zYWN0aW9uKG9wdGlvbnMsIG9wdGlvbnM/LnN0cmF0ZWd5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnI/LmluRmxpZ2h0ICYmIGVyci5pbkZsaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuJHtncmF5KEpTT04uc3RyaW5naWZ5KGVyci5pbkZsaWd0Py5tZXNzYWdlLCB0eEpzb25SZXBsYWNlcikpfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucz8udmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBcXG4ke3llbGxvdyhKU09OLnN0cmluZ2lmeShyZWNlaXB0LCB0eEpzb25SZXBsYWNlcikpfWApXG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmluZm8oYFxcbiR7bXJlZChgIF5eXiBEUlktUlVOIF5eXiBgKX1gKVxuICAgIH1cbiAgICByZXR1cm4gcmVjZWlwdFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjb2xvcnM6IHtcbiAgICAgICAgYmJsdWUsIGJjeWFuLCBiZ3JlZW4sIGJyZWQsIGJ2aW9sZXQsXG4gICAgICAgIGN5YW4sIGdyYXksIGdyZWVuLCBtYWdlbnRhLCByZWQsIHdoaXRlLCB5ZWxsb3csIG5vcm1hbCxcbiAgICAgICAgbGN5YW4sIGxncmF5LCBsZ3JlZW4sIGxtYWdlbnRhLCBseWVsbG93LFxuICAgICAgICBtY3lhbiwgbWdyZWVuLCBtbWFnZW50YSwgbXJlZCwgbXllbGxvdyxcbiAgICB9LFxuICAgIGNvbG9yc3RyaXAsIGNvbW1hcywgd2hvbGVfd2l0cywgdG9GaXhlZFRydW5jLCBcbiAgICBmcm9tTmFub3dpdHMsIGZyb21XaXRzLFxuICAgIGNvdW50TGVhdmVzLFxuICAgIGV4ZWNSYWRvbkJ5dGVjb2RlLFxuICAgIGRlbGV0ZUV4dHJhRmxhZ3MsIGV4dHJhY3RGcm9tQXJncyxcbiAgICBmcm9tSGV4U3RyaW5nLCBpc0hleFN0cmluZywgaXNIZXhTdHJpbmdPZkxlbmd0aCwgdG9IZXhTdHJpbmcsXG4gICAgcGFyc2VVUkwsIGlwSXNQcml2YXRlT3JMb2NhbGhvc3QsXG4gICAgc2hvd1VzYWdlLCBzaG93VXNhZ2VFcnJvciwgc2hvd1VzYWdlU3ViY29tbWFuZCwgc2hvd1ZlcnNpb24sXG4gICAgdG9vbGtpdFJ1bixcbiAgICB0b1VwcGVyQ2FtZWxDYXNlLCB0b1V0ZjhBcnJheSwgdXRmOEFycmF5VG9TdHIsXG4gICAgcHJvbXB0LCBwcm9tcHRlcixcbiAgICB0cmFjZUNoZWNrbGlzdHMsIHRyYWNlSGVhZGVyLCB0cmFjZVRhYmxlLCBcbiAgICB0cmFjZVRyYW5zYWN0aW9uLCB0cmFjZVRyYW5zYWN0aW9uT25TdGF0dXNDaGFuZ2UsIHRyYWNlVHJhbnNhY3Rpb25PbkNoZWNrcG9pbnQsIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0LCBcbiAgICBpc1dpbGRjYXJkLCBnZXRXaWxkY2FyZHNDb3VudEZyb21TdHJpbmcsIHJlcGxhY2VXaWxkY2FyZHMsIHNwbGljZVdpbGRjYXJkLFxuICAgIHR4SnNvblJlcGxhY2VyLCBcbn1cbiJdfQ==