cdk8s-plus-33 2.5.29 → 2.5.30

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.
@@ -1,20 +1,56 @@
1
1
  "use strict";
2
- var _a, _b, _c;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.NetworkPolicy = exports.NetworkPolicyTrafficDefault = exports.NetworkProtocol = exports.NetworkPolicyIpBlock = exports.NetworkPolicyPort = void 0;
5
37
  exports.validatePeerConfig = validatePeerConfig;
6
38
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
39
  const cdk8s_1 = require("cdk8s");
8
40
  const constructs_1 = require("constructs");
9
- const base = require("./base");
10
- const k8s = require("./imports/k8s");
11
- const namespace = require("./namespace");
12
- const pod = require("./pod");
41
+ const base = __importStar(require("./base"));
42
+ const k8s = __importStar(require("./imports/k8s"));
43
+ const namespace = __importStar(require("./namespace"));
44
+ const pod = __importStar(require("./pod"));
13
45
  const utils_1 = require("./utils");
14
46
  /**
15
47
  * Describes a port to allow traffic on.
16
48
  */
17
49
  class NetworkPolicyPort {
50
+ port;
51
+ endPort;
52
+ protocol;
53
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-33.NetworkPolicyPort", version: "2.5.30" };
18
54
  /**
19
55
  * Distinct TCP ports
20
56
  */
@@ -70,14 +106,15 @@ class NetworkPolicyPort {
70
106
  }
71
107
  }
72
108
  exports.NetworkPolicyPort = NetworkPolicyPort;
73
- _a = JSII_RTTI_SYMBOL_1;
74
- NetworkPolicyPort[_a] = { fqn: "cdk8s-plus-33.NetworkPolicyPort", version: "2.5.29" };
75
109
  /**
76
110
  * Describes a particular CIDR (Ex. "192.168.1.1/24","2001:db9::/64") that is
77
111
  * allowed to the pods matched by a network policy selector.
78
112
  * The except entry describes CIDRs that should not be included within this rule.
79
113
  */
80
114
  class NetworkPolicyIpBlock extends constructs_1.Construct {
115
+ cidr;
116
+ except;
117
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-33.NetworkPolicyIpBlock", version: "2.5.30" };
81
118
  /**
82
119
  * Create an IPv4 peer from a CIDR
83
120
  */
@@ -150,8 +187,6 @@ class NetworkPolicyIpBlock extends constructs_1.Construct {
150
187
  }
151
188
  }
152
189
  exports.NetworkPolicyIpBlock = NetworkPolicyIpBlock;
153
- _b = JSII_RTTI_SYMBOL_1;
154
- NetworkPolicyIpBlock[_b] = { fqn: "cdk8s-plus-33.NetworkPolicyIpBlock", version: "2.5.29" };
155
190
  /**
156
191
  * Network protocols.
157
192
  */
@@ -218,12 +253,18 @@ var NetworkPolicyTrafficDefault;
218
253
  * @see https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource
219
254
  */
220
255
  class NetworkPolicy extends base.Resource {
256
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk8s-plus-33.NetworkPolicy", version: "2.5.30" };
257
+ /**
258
+ * @see base.Resource.apiObject
259
+ */
260
+ apiObject;
261
+ resourceType = 'networkpolicies';
262
+ _podSelectorConfig;
263
+ _egressRules = [];
264
+ _ingressRules = [];
265
+ _policyTypes = new Set();
221
266
  constructor(scope, id, props = {}) {
222
267
  super(scope, id);
223
- this.resourceType = 'networkpolicies';
224
- this._egressRules = [];
225
- this._ingressRules = [];
226
- this._policyTypes = new Set();
227
268
  const podSelector = props.selector ?? pod.Pods.all(this, 'AllPods');
228
269
  this._podSelectorConfig = podSelector.toPodSelectorConfig();
229
270
  let ns;
@@ -331,8 +372,6 @@ class NetworkPolicy extends base.Resource {
331
372
  }
332
373
  }
333
374
  exports.NetworkPolicy = NetworkPolicy;
334
- _c = JSII_RTTI_SYMBOL_1;
335
- NetworkPolicy[_c] = { fqn: "cdk8s-plus-33.NetworkPolicy", version: "2.5.29" };
336
375
  function validatePeerConfig(peerConfig) {
337
376
  if (!peerConfig.ipBlock && !peerConfig.podSelector) {
338
377
  throw new Error('Inavlid peer: either \'ipBlock\' or \'podSelector\' must be defined');
@@ -341,4 +380,4 @@ function validatePeerConfig(peerConfig) {
341
380
  throw new Error('Inavlid peer: only one of \'ipBlock\' and \'podSelector\' must be defined');
342
381
  }
343
382
  }
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQWdoQkEsZ0RBT0M7O0FBdmhCRCxpQ0FBd0M7QUFDeEMsMkNBQW1EO0FBQ25ELCtCQUErQjtBQUMvQixxQ0FBcUM7QUFDckMseUNBQXlDO0FBQ3pDLDZCQUE2QjtBQUM3QixtQ0FBMkM7QUE4QjNDOztHQUVHO0FBQ0gsTUFBYSxpQkFBaUI7SUFFNUI7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFpQixFQUFFLE9BQWU7UUFDdkQsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7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SUFDL0YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QsIExhenkgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGJhc2UgZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIGs4cyBmcm9tICcuL2ltcG9ydHMvazhzJztcbmltcG9ydCAqIGFzIG5hbWVzcGFjZSBmcm9tICcuL25hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBwb2QgZnJvbSAnLi9wb2QnO1xuaW1wb3J0IHsgdW5kZWZpbmVkSWZFbXB0eSB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBOZXR3b3JrUG9saWN5UG9ydGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1BvbGljeVBvcnRQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIHBvcnQgbnVtYmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFsbCBwb3J0cyBhcmUgYWxsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuZCBwb3J0IChyZWxhdGl2ZSB0byBgcG9ydGApLiBPbmx5IGFwcGxpZXMgaWYgYHBvcnRgIGlzIGRlZmluZWQuXG4gICAqIFVzZSB0aGlzIHRvIHNwZWNpZnkgYSBwb3J0IHJhbmdlLCByYXRoZXIgdGhhdCBhIHNwZWNpZmljIG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3QgYSBwb3J0IHJhbmdlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogUHJvdG9jb2wuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5ldHdvcmtQcm90b2NvbC5UQ1BcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogTmV0d29ya1Byb3RvY29sO1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIHBvcnQgdG8gYWxsb3cgdHJhZmZpYyBvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtQb2xpY3lQb3J0IHtcblxuICAvKipcbiAgICogRGlzdGluY3QgVENQIHBvcnRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRjcChwb3J0OiBudW1iZXIpOiBOZXR3b3JrUG9saWN5UG9ydCB7XG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5UG9ydChrOHMuSW50T3JTdHJpbmcuZnJvbU51bWJlcihwb3J0KSwgdW5kZWZpbmVkLCBOZXR3b3JrUHJvdG9jb2wuVENQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIFRDUCBwb3J0IHJhbmdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRjcFJhbmdlKHN0YXJ0UG9ydDogbnVtYmVyLCBlbmRQb3J0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lQb3J0KGs4cy5JbnRPclN0cmluZy5mcm9tTnVtYmVyKHN0YXJ0UG9ydCksIGVuZFBvcnQsIE5ldHdvcmtQcm90b2NvbC5UQ1ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFueSBUQ1AgdHJhZmZpY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbGxUY3AoKSB7XG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5UG9ydChrOHMuSW50T3JTdHJpbmcuZnJvbU51bWJlcigwKSwgNjU1MzUsIE5ldHdvcmtQcm90b2NvbC5UQ1ApO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3RpbmN0IFVEUCBwb3J0c1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1ZHAocG9ydDogbnVtYmVyKTogTmV0d29ya1BvbGljeVBvcnQge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeVBvcnQoazhzLkludE9yU3RyaW5nLmZyb21OdW1iZXIocG9ydCksIHVuZGVmaW5lZCwgTmV0d29ya1Byb3RvY29sLlVEUCk7XG4gIH1cblxuICAvKipcbiAgICogQSBVRFAgcG9ydCByYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1ZHBSYW5nZShzdGFydFBvcnQ6IG51bWJlciwgZW5kUG9ydDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5UG9ydChrOHMuSW50T3JTdHJpbmcuZnJvbU51bWJlcihzdGFydFBvcnQpLCBlbmRQb3J0LCBOZXR3b3JrUHJvdG9jb2wuVURQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgVURQIHRyYWZmaWNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYWxsVWRwKCkge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeVBvcnQoazhzLkludE9yU3RyaW5nLmZyb21OdW1iZXIoMCksIDY1NTM1LCBOZXR3b3JrUHJvdG9jb2wuVURQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b20gcG9ydCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9wczogTmV0d29ya1BvbGljeVBvcnRQcm9wcyk6IE5ldHdvcmtQb2xpY3lQb3J0IHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lQb3J0KHByb3BzLnBvcnQgPyBrOHMuSW50T3JTdHJpbmcuZnJvbU51bWJlcihwcm9wcy5wb3J0KSA6IHVuZGVmaW5lZCwgcHJvcHMuZW5kUG9ydCwgcHJvcHMucHJvdG9jb2wpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ/OiBrOHMuSW50T3JTdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRQb3J0PzogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2w/OiBOZXR3b3JrUHJvdG9jb2wpIHt9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLk5ldHdvcmtQb2xpY3lQb3J0IHtcbiAgICByZXR1cm4geyBwb3J0OiB0aGlzLnBvcnQsIGVuZFBvcnQ6IHRoaXMuZW5kUG9ydCwgcHJvdG9jb2w6IHRoaXMucHJvdG9jb2wgfTtcbiAgfVxuXG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgbmV0d29yayBwZWVycy5cbiAqIEEgcGVlciBjYW4gZWl0aGVyIGJ5IGFuIGlwIGJsb2NrLCBvciBhIHNlbGVjdGlvbiBvZiBwb2RzLCBub3QgYm90aC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUG9saWN5UGVlckNvbmZpZyB7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBibG9jayB0aGlzIHBlZXIgcmVwcmVzZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGlwQmxvY2s/OiBOZXR3b3JrUG9saWN5SXBCbG9jaztcblxuICAvKipcbiAgICogVGhlIHBvZCBzZWxlY3RvciB0aGlzIHBlZXIgcmVwcmVzZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHBvZFNlbGVjdG9yPzogcG9kLlBvZFNlbGVjdG9yQ29uZmlnO1xuXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgcGVlciB0byBhbGxvdyB0cmFmZmljIHRvL2Zyb20uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5ldHdvcmtQb2xpY3lQZWVyIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBwZWVyLlxuICAgKi9cbiAgdG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpOiBOZXR3b3JrUG9saWN5UGVlckNvbmZpZztcblxuICAvKipcbiAgICogQ29udmVydCB0aGUgcGVlciBpbnRvIGEgcG9kIHNlbGVjdG9yLCBpZiBwb3NzaWJsZS5cbiAgICovXG4gIHRvUG9kU2VsZWN0b3IoKTogcG9kLklQb2RTZWxlY3RvciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBydWxlIGFsbG93aW5nIHRyYWZmaWMgZnJvbSAvIHRvIHBvZHMgbWF0Y2hlZCBieSBhIG5ldHdvcmsgcG9saWN5IHNlbGVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lSdWxlIHtcblxuICAvKipcbiAgICogVGhlIHBvcnRzIG9mIHRoZSBydWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRyYWZmaWMgaXMgYWxsb3dlZCBvbiBhbGwgcG9ydHMuXG4gICAqL1xuICByZWFkb25seSBwb3J0cz86IE5ldHdvcmtQb2xpY3lQb3J0W107XG5cbiAgLyoqXG4gICAqIFBlZXIgdGhpcyBydWxlIGludGVyYWN0cyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVlcjogSU5ldHdvcmtQb2xpY3lQZWVyO1xuXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgcGFydGljdWxhciBDSURSIChFeC4gXCIxOTIuMTY4LjEuMS8yNFwiLFwiMjAwMTpkYjk6Oi82NFwiKSB0aGF0IGlzXG4gKiBhbGxvd2VkIHRvIHRoZSBwb2RzIG1hdGNoZWQgYnkgYSBuZXR3b3JrIHBvbGljeSBzZWxlY3Rvci5cbiAqIFRoZSBleGNlcHQgZW50cnkgZGVzY3JpYmVzIENJRFJzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCB3aXRoaW4gdGhpcyBydWxlLlxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya1BvbGljeUlwQmxvY2sgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTmV0d29ya1BvbGljeVBlZXIge1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSVB2NCBwZWVyIGZyb20gYSBDSURSXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2lkcklwOiBzdHJpbmcsIGV4Y2VwdD86IHN0cmluZ1tdKTogTmV0d29ya1BvbGljeUlwQmxvY2sge1xuICAgIGNvbnN0IGNpZHJNYXRjaCA9IGNpZHJJcC5tYXRjaCgvXihcXGR7MSwzfVxcLil7M31cXGR7MSwzfShcXC9cXGQrKT8kLyk7XG5cbiAgICBpZiAoIWNpZHJNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIElQdjQgQ0lEUjogXCIke2NpZHJJcH1cImApO1xuICAgIH1cblxuICAgIGlmICghY2lkck1hdGNoWzJdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENJRFIgbWFzayBpcyBtaXNzaW5nIGluIElQdjQ6IFwiJHtjaWRySXB9XCIuIERpZCB5b3UgbWVhbiBcIiR7Y2lkcklwfS8zMlwiP2ApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeUlwQmxvY2soc2NvcGUsIGlkLCBjaWRySXAsIGV4Y2VwdCk7XG4gIH1cblxuICAvKipcbiAgICogQW55IElQdjQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbnlJcHY0KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBOZXR3b3JrUG9saWN5SXBCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5SXBCbG9jayhzY29wZSwgaWQsICcwLjAuMC4wLzAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSVB2NiBwZWVyIGZyb20gYSBDSURSXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjYoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2lkcklwOiBzdHJpbmcsIGV4Y2VwdD86IHN0cmluZ1tdKTogTmV0d29ya1BvbGljeUlwQmxvY2sge1xuXG4gICAgY29uc3QgY2lkck1hdGNoID0gY2lkcklwLm1hdGNoKC9eKFtcXGRhLWZdezAsNH06KXsyLDd9KFtcXGRhLWZdezAsNH0pPyhcXC9cXGQrKT8kLyk7XG5cbiAgICBpZiAoIWNpZHJNYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIElQdjYgQ0lEUjogXCIke2NpZHJJcH1cImApO1xuICAgIH1cblxuICAgIGlmICghY2lkck1hdGNoWzNdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENJRFIgbWFzayBpcyBtaXNzaW5nIGluIElQdjY6IFwiJHtjaWRySXB9XCIuIERpZCB5b3UgbWVhbiBcIiR7Y2lkcklwfS8xMjhcIj9gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lJcEJsb2NrKHNjb3BlLCBpZCwgY2lkcklwLCBleGNlcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFueSBJUHY2IGFkZHJlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYW55SXB2NihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogTmV0d29ya1BvbGljeUlwQmxvY2sge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeUlwQmxvY2soc2NvcGUsIGlkLCAnOjovMCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSVAgQmxvY2sgVmFsaWQgZXhhbXBsZXMgYXJlIFwiMTkyLjE2OC4xLjEvMjRcIiBvciBcIjIwMDE6ZGI5OjovNjRcIi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2lkcjogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIEEgc2xpY2Ugb2YgQ0lEUnMgdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIHdpdGhpbiBhbiBJUCBCbG9jayBWYWxpZCBleGFtcGxlcyBhcmUgXCIxOTIuMTY4LjEuMS8yNFwiIG9yIFwiMjAwMTpkYjk6Oi82NFwiLlxuICAgICAqIEV4Y2VwdCB2YWx1ZXMgd2lsbCBiZSByZWplY3RlZCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZSBDSURSIHJhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBleGNlcHQ/OiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBJTmV0d29ya1BvbGljeVBlZXIudG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpXG4gICAqL1xuICBwdWJsaWMgdG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpOiBOZXR3b3JrUG9saWN5UGVlckNvbmZpZyB7XG4gICAgcmV0dXJuIHsgaXBCbG9jazogdGhpcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSU5ldHdvcmtQb2xpY3lQZWVyLnRvUG9kU2VsZWN0b3IoKVxuICAgKi9cbiAgcHVibGljIHRvUG9kU2VsZWN0b3IoKTogcG9kLklQb2RTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9LdWJlKCk6IGs4cy5JcEJsb2NrIHtcbiAgICByZXR1cm4geyBjaWRyOiB0aGlzLmNpZHIsIGV4Y2VwdDogdGhpcy5leGNlcHQgfTtcbiAgfVxuXG59XG5cbi8qKlxuICogTmV0d29yayBwcm90b2NvbHMuXG4gKi9cbmV4cG9ydCBlbnVtIE5ldHdvcmtQcm90b2NvbCB7XG4gIC8qKlxuICAgKiBUQ1AuXG4gICAqL1xuICBUQ1AgPSAnVENQJyxcbiAgLyoqXG4gICAqIFVEUC5cbiAgICovXG4gIFVEUCA9ICdVRFAnLFxuICAvKipcbiAgICogU0NUUC5cbiAgICovXG4gIFNDVFAgPSAnU0NUUCcsXG59XG5cbi8qKlxuICogRGVmYXVsdCBiZWhhdmlvcnMgb2YgbmV0d29yayB0cmFmZmljIGluIHBvbGljaWVzLlxuICovXG5leHBvcnQgZW51bSBOZXR3b3JrUG9saWN5VHJhZmZpY0RlZmF1bHQge1xuICAvKipcbiAgICogVGhlIHBvbGljeSBkZW5pZXMgYWxsIHRyYWZmaWMuXG4gICAqIFNpbmNlIHJ1bGVzIGFyZSBhZGRpdGl2ZSwgYWRkaXRpb25hbCBydWxlcyBvciBwb2xpY2llcyBjYW4gYWxsb3dcbiAgICogc3BlY2lmaWMgdHJhZmZpYy5cbiAgICovXG4gIERFTlkgPSAnREVOWScsXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGFsbG93cyBhbGwgdHJhZmZpYyAoZWl0aGVyIGluZ3Jlc3Mgb3IgZWdyZXNzKS5cbiAgICogU2luY2UgcnVsZXMgYXJlIGFkZGl0aXZlLCBubyBhZGRpdGlvbmFsIHJ1bGUgb3IgcG9saWNpZXMgY2FuXG4gICAqIHN1YnNlcXVlbnRseSBkZW55IHRoZSB0cmFmZmljLlxuICAgKi9cbiAgQUxMT1cgPSAnQUxMT1cnLFxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBob3cgdGhlIG5ldHdvcmsgcG9saWN5IHNob3VsZCBjb25maWd1cmUgZWdyZXNzIC8gaW5ncmVzcyB0cmFmZmljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lUcmFmZmljIHtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBwb2xpY3kgd2hlblxuICAgKiBubyBydWxlcyBhcmUgZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bnNldCwgdGhlIHBvbGljeSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJlaGF2aW9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IE5ldHdvcmtQb2xpY3lUcmFmZmljRGVmYXVsdDtcblxuICAvKipcbiAgICogTGlzdCBvZiBydWxlcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzZWxlY3RlZCBwb2RzLlxuICAgKiBJZiBlbXB0eSwgdGhlIGJlaGF2aW9yIG9mIHRoZSBwb2xpY3kgaXMgZGljdGF0ZWQgYnkgdGhlIGBkZWZhdWx0YCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBOZXR3b3JrUG9saWN5UnVsZVtdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBOZXR3b3JrUG9saWN5LmFkZEVncmVzc1J1bGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lBZGRFZ3Jlc3NSdWxlT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFBvcnRzIHRoZSBydWxlIHNob3VsZCBhbGxvdyBvdXRnb2luZyB0cmFmZmljIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIHRoZSBwZWVyIGlzIGEgbWFuYWdlZCBwb2QsIHRha2UgaXRzIHBvcnRzLiBPdGhlcndpc2UsIGFsbCBwb3J0cyBhcmUgYWxsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnRzPzogTmV0d29ya1BvbGljeVBvcnRbXTtcblxufVxuXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYE5ldHdvcmtQb2xpY3lgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lQcm9wcyBleHRlbmRzIGJhc2UuUmVzb3VyY2VQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFdoaWNoIHBvZHMgZG9lcyB0aGlzIHBvbGljeSBvYmplY3QgYXBwbGllcyB0by5cbiAgICpcbiAgICogVGhpcyBjYW4gZWl0aGVyIGJlIGEgc2luZ2xlIHBvZCAvIHdvcmtsb2FkLCBvciBhIGdyb3VwaW5nIG9mIHBvZHMgc2VsZWN0ZWRcbiAgICogdmlhIHRoZSBgUG9kcy5zZWxlY3RgIGZ1bmN0aW9uLiBSdWxlcyBpcyBhcHBsaWVkIHRvIGFueSBwb2RzIHNlbGVjdGVkIGJ5IHRoaXMgcHJvcGVydHkuXG4gICAqIE11bHRpcGxlIG5ldHdvcmsgcG9saWNpZXMgY2FuIHNlbGVjdCB0aGUgc2FtZSBzZXQgb2YgcG9kcy5cbiAgICogSW4gdGhpcyBjYXNlLCB0aGUgcnVsZXMgZm9yIGVhY2ggYXJlIGNvbWJpbmVkIGFkZGl0aXZlbHkuXG4gICAqXG4gICAqIE5vdGUgdGhhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHdpbGwgc2VsZWN0IGFsbCBwb2RzIGluIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBvbGljeS5cbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdG9yPzogcG9kLklQb2RTZWxlY3RvcjtcblxuICAvKipcbiAgICogRWdyZXNzIHRyYWZmaWMgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcG9saWN5IGRvZXNuJ3QgY2hhbmdlIGVncmVzcyBiZWhhdmlvciBvZiB0aGUgcG9kcyBpdCBzZWxlY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgZWdyZXNzPzogTmV0d29ya1BvbGljeVRyYWZmaWM7XG5cbiAgLyoqXG4gICAqIEluZ3Jlc3MgdHJhZmZpYyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwb2xpY3kgZG9lc24ndCBjaGFuZ2UgaW5ncmVzcyBiZWhhdmlvciBvZiB0aGUgcG9kcyBpdCBzZWxlY3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5ncmVzcz86IE5ldHdvcmtQb2xpY3lUcmFmZmljO1xufVxuXG4vKipcbiAqIENvbnRyb2wgdHJhZmZpYyBmbG93IGF0IHRoZSBJUCBhZGRyZXNzIG9yIHBvcnQgbGV2ZWwgKE9TSSBsYXllciAzIG9yIDQpLFxuICogbmV0d29yayBwb2xpY2llcyBhcmUgYW4gYXBwbGljYXRpb24tY2VudHJpYyBjb25zdHJ1Y3Qgd2hpY2ggYWxsb3cgeW91XG4gKiB0byBzcGVjaWZ5IGhvdyBhIHBvZCBpcyBhbGxvd2VkIHRvIGNvbW11bmljYXRlIHdpdGggdmFyaW91cyBuZXR3b3JrIHBlZXJzLlxuICpcbiAqIC0gT3V0Z29pbmcgdHJhZmZpYyBpcyBhbGxvd2VkIGlmIHRoZXJlIGFyZSBubyBuZXR3b3JrIHBvbGljaWVzIHNlbGVjdGluZ1xuICogICB0aGUgcG9kIChhbmQgY2x1c3RlciBwb2xpY3kgb3RoZXJ3aXNlIGFsbG93cyB0aGUgdHJhZmZpYyksXG4gKiAgIE9SIGlmIHRoZSB0cmFmZmljIG1hdGNoZXMgYXQgbGVhc3Qgb25lIGVncmVzcyBydWxlIGFjcm9zcyBhbGwgb2YgdGhlXG4gKiAgIG5ldHdvcmsgcG9saWNpZXMgdGhhdCBzZWxlY3QgdGhlIHBvZC5cbiAqXG4gKiAtIEluY29taW5nIHRyYWZmaWMgaXMgYWxsb3dlZCB0byBhIHBvZCBpZiB0aGVyZSBhcmUgbm8gbmV0d29yayBwb2xpY2llc1xuICogICBzZWxlY3RpbmcgdGhlIHBvZCAoYW5kIGNsdXN0ZXIgcG9saWN5IG90aGVyd2lzZSBhbGxvd3MgdGhlIHRyYWZmaWMpLFxuICogICBPUiBpZiB0aGUgdHJhZmZpYyBzb3VyY2UgaXMgdGhlIHBvZCdzIGxvY2FsIG5vZGUsXG4gKiAgIE9SIGlmIHRoZSB0cmFmZmljIG1hdGNoZXMgYXQgbGVhc3Qgb25lIGluZ3Jlc3MgcnVsZSBhY3Jvc3MgYWxsIG9mXG4gKiAgIHRoZSBuZXR3b3JrIHBvbGljaWVzIHRoYXQgc2VsZWN0IHRoZSBwb2QuXG4gKlxuICogTmV0d29yayBwb2xpY2llcyBkbyBub3QgY29uZmxpY3Q7IHRoZXkgYXJlIGFkZGl0aXZlLlxuICogSWYgYW55IHBvbGljeSBvciBwb2xpY2llcyBhcHBseSB0byBhIGdpdmVuIHBvZCBmb3IgYSBnaXZlblxuICogZGlyZWN0aW9uLCB0aGUgY29ubmVjdGlvbnMgYWxsb3dlZCBpbiB0aGF0IGRpcmVjdGlvbiBmcm9tXG4gKiB0aGF0IHBvZCBpcyB0aGUgdW5pb24gb2Ygd2hhdCB0aGUgYXBwbGljYWJsZSBwb2xpY2llcyBhbGxvdy5cbiAqIFRodXMsIG9yZGVyIG9mIGV2YWx1YXRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBwb2xpY3kgcmVzdWx0LlxuICpcbiAqIEZvciBhIGNvbm5lY3Rpb24gZnJvbSBhIHNvdXJjZSBwb2QgdG8gYSBkZXN0aW5hdGlvbiBwb2QgdG8gYmUgYWxsb3dlZCxcbiAqIGJvdGggdGhlIGVncmVzcyBwb2xpY3kgb24gdGhlIHNvdXJjZSBwb2QgYW5kIHRoZSBpbmdyZXNzIHBvbGljeSBvbiB0aGVcbiAqIGRlc3RpbmF0aW9uIHBvZCBuZWVkIHRvIGFsbG93IHRoZSBjb25uZWN0aW9uLlxuICogSWYgZWl0aGVyIHNpZGUgZG9lcyBub3QgYWxsb3cgdGhlIGNvbm5lY3Rpb24sIGl0IHdpbGwgbm90IGhhcHBlbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3NlcnZpY2VzLW5ldHdvcmtpbmcvbmV0d29yay1wb2xpY2llcy8jbmV0d29ya3BvbGljeS1yZXNvdXJjZVxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya1BvbGljeSBleHRlbmRzIGJhc2UuUmVzb3VyY2Uge1xuXG4gIC8qKlxuICAgKiBAc2VlIGJhc2UuUmVzb3VyY2UuYXBpT2JqZWN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBpT2JqZWN0OiBBcGlPYmplY3Q7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nID0gJ25ldHdvcmtwb2xpY2llcyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcG9kU2VsZWN0b3JDb25maWc6IHBvZC5Qb2RTZWxlY3RvckNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZWdyZXNzUnVsZXM6IGs4cy5OZXR3b3JrUG9saWN5RWdyZXNzUnVsZVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luZ3Jlc3NSdWxlczogazhzLk5ldHdvcmtQb2xpY3lJbmdyZXNzUnVsZVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BvbGljeVR5cGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldHdvcmtQb2xpY3lQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHBvZFNlbGVjdG9yID0gcHJvcHMuc2VsZWN0b3IgPz8gcG9kLlBvZHMuYWxsKHRoaXMsICdBbGxQb2RzJyk7XG4gICAgdGhpcy5fcG9kU2VsZWN0b3JDb25maWcgPSBwb2RTZWxlY3Rvci50b1BvZFNlbGVjdG9yQ29uZmlnKCk7XG5cbiAgICBsZXQgbnM7XG5cbiAgICBpZiAoIXByb3BzLm1ldGFkYXRhPy5uYW1lc3BhY2UpIHtcblxuICAgICAgaWYgKHRoaXMuX3BvZFNlbGVjdG9yQ29uZmlnLm5hbWVzcGFjZXM/LmxhYmVsU2VsZWN0b3IgJiYgIXRoaXMuX3BvZFNlbGVjdG9yQ29uZmlnLm5hbWVzcGFjZXM/LmxhYmVsU2VsZWN0b3IuaXNFbXB0eSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNyZWF0ZSBhIG5ldHdvcmsgcG9saWN5IGZvciBhIHNlbGVjdG9yICgke3BvZFNlbGVjdG9yLm5vZGUucGF0aH0pIHRoYXQgc2VsZWN0cyBwb2RzIGluIG5hbWVzcGFjZXMgYmFzZWQgb24gbGFiZWxzYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9wb2RTZWxlY3RvckNvbmZpZy5uYW1lc3BhY2VzPy5uYW1lcyAmJiB0aGlzLl9wb2RTZWxlY3RvckNvbmZpZy5uYW1lc3BhY2VzLm5hbWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gY3JlYXRlIGEgbmV0d29yayBwb2xpY3kgZm9yIGEgc2VsZWN0b3IgKCR7cG9kU2VsZWN0b3Iubm9kZS5wYXRofSkgdGhhdCBzZWxlY3RzIHBvZHMgaW4gbXVsdGlwbGUgbmFtZXNwYWNlc2ApO1xuICAgICAgfVxuXG4gICAgICBucyA9IHRoaXMuX3BvZFNlbGVjdG9yQ29uZmlnLm5hbWVzcGFjZXM/Lm5hbWVzID8gdGhpcy5fcG9kU2VsZWN0b3JDb25maWcubmFtZXNwYWNlcz8ubmFtZXNbMF0gOiB1bmRlZmluZWQ7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgbnMgPSBwcm9wcy5tZXRhZGF0YS5uYW1lc3BhY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlPYmplY3QgPSBuZXcgazhzLkt1YmVOZXR3b3JrUG9saWN5KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG1ldGFkYXRhOiB7IC4uLnByb3BzLm1ldGFkYXRhLCBuYW1lc3BhY2U6IG5zIH0sXG4gICAgICBzcGVjOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuX3RvS3ViZSgpIH0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWd1cmVEZWZhdWx0QmVoYXZpb3IoJ0VncmVzcycsIHByb3BzLmVncmVzcz8uZGVmYXVsdCk7XG4gICAgdGhpcy5jb25maWd1cmVEZWZhdWx0QmVoYXZpb3IoJ0luZ3Jlc3MnLCBwcm9wcy5pbmdyZXNzPy5kZWZhdWx0KTtcblxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBwcm9wcy5lZ3Jlc3M/LnJ1bGVzID8/IFtdKSB7XG4gICAgICB0aGlzLmFkZEVncmVzc1J1bGUocnVsZS5wZWVyLCBydWxlLnBvcnRzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcHJvcHMuaW5ncmVzcz8ucnVsZXMgPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkSW5ncmVzc1J1bGUocnVsZS5wZWVyLCBydWxlLnBvcnRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb3V0Z29pbmcgdHJhZmZpYyB0byB0aGUgcGVlci5cbiAgICpcbiAgICogSWYgcG9ydHMgYXJlIG5vdCBwYXNzZWQsIHRyYWZmaWMgd2lsbCBiZSBhbGxvd2VkIG9uIGFsbCBwb3J0cy5cbiAgICovXG4gIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKHBlZXI6IElOZXR3b3JrUG9saWN5UGVlciwgcG9ydHM/OiBOZXR3b3JrUG9saWN5UG9ydFtdKSB7XG4gICAgdGhpcy5fcG9saWN5VHlwZXMuYWRkKCdFZ3Jlc3MnKTtcbiAgICB0aGlzLl9lZ3Jlc3NSdWxlcy5wdXNoKHsgcG9ydHM6IChwb3J0cyA/PyBbXSkubWFwKHAgPT4gcC5fdG9LdWJlKCkpLCB0bzogdGhpcy5jcmVhdGVOZXR3b3JrUG9saWN5UGVlcnMocGVlcikgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgaW5jb21pbmcgdHJhZmZpYyBmcm9tIHRoZSBwZWVyLlxuICAgKlxuICAgKiBJZiBwb3J0cyBhcmUgbm90IHBhc3NlZCwgdHJhZmZpYyB3aWxsIGJlIGFsbG93ZWQgb24gYWxsIHBvcnRzLlxuICAgKi9cbiAgcHVibGljIGFkZEluZ3Jlc3NSdWxlKHBlZXI6IElOZXR3b3JrUG9saWN5UGVlciwgcG9ydHM/OiBOZXR3b3JrUG9saWN5UG9ydFtdKSB7XG4gICAgdGhpcy5fcG9saWN5VHlwZXMuYWRkKCdJbmdyZXNzJyk7XG4gICAgdGhpcy5faW5ncmVzc1J1bGVzLnB1c2goeyBwb3J0czogKHBvcnRzID8/IFtdKS5tYXAocCA9PiBwLl90b0t1YmUoKSksIGZyb206IHRoaXMuY3JlYXRlTmV0d29ya1BvbGljeVBlZXJzKHBlZXIpIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXR3b3JrUG9saWN5UGVlcnMocGVlcjogSU5ldHdvcmtQb2xpY3lQZWVyKTogazhzLk5ldHdvcmtQb2xpY3lQZWVyW10ge1xuXG4gICAgY29uc3QgY29uZmlnID0gcGVlci50b05ldHdvcmtQb2xpY3lQZWVyQ29uZmlnKCk7XG5cbiAgICB2YWxpZGF0ZVBlZXJDb25maWcoY29uZmlnKTtcblxuICAgIGlmIChjb25maWcuaXBCbG9jaykge1xuICAgICAgLy8gaXAgYmxvY2sgaXMgYSBzaW5nbGUgcGVlci5cbiAgICAgIHJldHVybiBbeyBpcEJsb2NrOiBjb25maWcuaXBCbG9jay5fdG9LdWJlKCkgfV07XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcucG9kU2VsZWN0b3IhLm5hbWVzcGFjZXM/Lm5hbWVzKSB7XG4gICAgICAvLyB3aGVuIG5vIGV4cGxpY2l0IG5hbWVzcGFjZXMgYXJlIGRlZmluZWQgd2UgY2FuIGp1c3QgdXNlXG4gICAgICAvLyB0aGUgc2VsZWN0b3IgYXMgaXNcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lc3BhY2VTZWxlY3RvcjogY29uZmlnLnBvZFNlbGVjdG9yIS5uYW1lc3BhY2VzPy5sYWJlbFNlbGVjdG9yPy5fdG9LdWJlKCksXG4gICAgICAgIHBvZFNlbGVjdG9yOiBjb25maWcucG9kU2VsZWN0b3IhLmxhYmVsU2VsZWN0b3IuX3RvS3ViZSgpLFxuICAgICAgfV07XG4gICAgfVxuXG4gICAgLy8gd2hlbiBleHBsaWNpdCBuYW1lc3BhY2VzIGFyZSBkZWZpbmVkLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHNlcGFyYXRlXG4gICAgLy8gcGVlciBmb3IgZWFjaCwgc2luY2UgYSBsYWJlbCBzZWxlY3RvciBjYW5ub3QgaGF2ZSBtdWx0aXBsZSBuYW1lIGxhYmVscy4gKHRoZXkgd2lsbCBjb25mbGljdClcbiAgICBjb25zdCBuYW1lc3BhY2VTZWxlY3RvciA9IGNvbmZpZy5wb2RTZWxlY3Rvcj8ubmFtZXNwYWNlcz8ubGFiZWxTZWxlY3Rvcj8uX3RvS3ViZSgpID8/IHt9O1xuICAgIHJldHVybiBjb25maWcucG9kU2VsZWN0b3IhLm5hbWVzcGFjZXMubmFtZXMhLm1hcChuID0+ICh7XG4gICAgICBwb2RTZWxlY3RvcjogY29uZmlnLnBvZFNlbGVjdG9yIS5sYWJlbFNlbGVjdG9yLl90b0t1YmUoKSxcbiAgICAgIG5hbWVzcGFjZVNlbGVjdG9yOiB7XG4gICAgICAgIG1hdGNoRXhwcmVzc2lvbnM6IG5hbWVzcGFjZVNlbGVjdG9yLm1hdGNoRXhwcmVzc2lvbnMsXG4gICAgICAgIG1hdGNoTGFiZWxzOiB7XG4gICAgICAgICAgLi4ubmFtZXNwYWNlU2VsZWN0b3IubWF0Y2hMYWJlbHMsXG4gICAgICAgICAgW25hbWVzcGFjZS5OYW1lc3BhY2UuTkFNRV9MQUJFTF06IG4sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRGVmYXVsdEJlaGF2aW9yKGRpcmVjdGlvbjogJ0luZ3Jlc3MnIHwgJ0VncmVzcycsIF9kZWZhdWx0PzogTmV0d29ya1BvbGljeVRyYWZmaWNEZWZhdWx0KSB7XG5cbiAgICBpZiAoIV9kZWZhdWx0KSB7IHJldHVybjt9XG5cbiAgICBpZiAoX2RlZmF1bHQgPT09IE5ldHdvcmtQb2xpY3lUcmFmZmljRGVmYXVsdC5ERU5ZKSB7XG4gICAgICAvLyBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zZXJ2aWNlcy1uZXR3b3JraW5nL25ldHdvcmstcG9saWNpZXMvI2RlZmF1bHQtZGVueS1hbGwtZWdyZXNzLXRyYWZmaWNcbiAgICAgIHRoaXMuX3BvbGljeVR5cGVzLmFkZChkaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChfZGVmYXVsdCA9PT0gTmV0d29ya1BvbGljeVRyYWZmaWNEZWZhdWx0LkFMTE9XKSB7XG4gICAgICAvLyBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zZXJ2aWNlcy1uZXR3b3JraW5nL25ldHdvcmstcG9saWNpZXMvI2FsbG93LWFsbC1lZ3Jlc3MtdHJhZmZpY1xuICAgICAgdGhpcy5fcG9saWN5VHlwZXMuYWRkKGRpcmVjdGlvbik7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnRWdyZXNzJykge1xuICAgICAgICB0aGlzLl9lZ3Jlc3NSdWxlcy5wdXNoKHt9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2luZ3Jlc3NSdWxlcy5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuTmV0d29ya1BvbGljeVNwZWMge1xuICAgIHJldHVybiB7XG4gICAgICBwb2RTZWxlY3RvcjogdGhpcy5fcG9kU2VsZWN0b3JDb25maWcubGFiZWxTZWxlY3Rvci5fdG9LdWJlKCksXG4gICAgICBlZ3Jlc3M6IHVuZGVmaW5lZElmRW1wdHkodGhpcy5fZWdyZXNzUnVsZXMpLFxuICAgICAgaW5ncmVzczogdW5kZWZpbmVkSWZFbXB0eSh0aGlzLl9pbmdyZXNzUnVsZXMpLFxuICAgICAgcG9saWN5VHlwZXM6IHVuZGVmaW5lZElmRW1wdHkoQXJyYXkuZnJvbSh0aGlzLl9wb2xpY3lUeXBlcykpLFxuICAgIH07XG4gIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQZWVyQ29uZmlnKHBlZXJDb25maWc6IE5ldHdvcmtQb2xpY3lQZWVyQ29uZmlnKSB7XG4gIGlmICghcGVlckNvbmZpZy5pcEJsb2NrICYmICFwZWVyQ29uZmlnLnBvZFNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbmF2bGlkIHBlZXI6IGVpdGhlciBcXCdpcEJsb2NrXFwnIG9yIFxcJ3BvZFNlbGVjdG9yXFwnIG11c3QgYmUgZGVmaW5lZCcpO1xuICB9XG4gIGlmIChwZWVyQ29uZmlnLmlwQmxvY2sgJiYgcGVlckNvbmZpZy5wb2RTZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5hdmxpZCBwZWVyOiBvbmx5IG9uZSBvZiBcXCdpcEJsb2NrXFwnIGFuZCBcXCdwb2RTZWxlY3RvclxcJyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxufVxuIl19
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbmV0d29yay1wb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ2hCQSxnREFPQzs7QUF2aEJELGlDQUF3QztBQUN4QywyQ0FBbUQ7QUFDbkQsNkNBQStCO0FBQy9CLG1EQUFxQztBQUNyQyx1REFBeUM7QUFDekMsMkNBQTZCO0FBQzdCLG1DQUEyQztBQThCM0M7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQW9EVDtJQUNBO0lBQ0E7O0lBcERuQjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBWTtRQUM1QixPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN2RCxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTTtRQUNsQixPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxF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Q0FBQztJQUNELElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpT2JqZWN0LCBMYXp5IH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgKiBhcyBrOHMgZnJvbSAnLi9pbXBvcnRzL2s4cyc7XG5pbXBvcnQgKiBhcyBuYW1lc3BhY2UgZnJvbSAnLi9uYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgcG9kIGZyb20gJy4vcG9kJztcbmltcG9ydCB7IHVuZGVmaW5lZElmRW1wdHkgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgTmV0d29ya1BvbGljeVBvcnRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtQb2xpY3lQb3J0UHJvcHMge1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBwb3J0IG51bWJlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgcG9ydHMgYXJlIGFsbG93ZWQuXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmQgcG9ydCAocmVsYXRpdmUgdG8gYHBvcnRgKS4gT25seSBhcHBsaWVzIGlmIGBwb3J0YCBpcyBkZWZpbmVkLlxuICAgKiBVc2UgdGhpcyB0byBzcGVjaWZ5IGEgcG9ydCByYW5nZSwgcmF0aGVyIHRoYXQgYSBzcGVjaWZpYyBvbmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IGEgcG9ydCByYW5nZS5cbiAgICovXG4gIHJlYWRvbmx5IGVuZFBvcnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFByb3RvY29sLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOZXR3b3JrUHJvdG9jb2wuVENQXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IE5ldHdvcmtQcm90b2NvbDtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBwb3J0IHRvIGFsbG93IHRyYWZmaWMgb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrUG9saWN5UG9ydCB7XG5cbiAgLyoqXG4gICAqIERpc3RpbmN0IFRDUCBwb3J0c1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0Y3AocG9ydDogbnVtYmVyKTogTmV0d29ya1BvbGljeVBvcnQge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeVBvcnQoazhzLkludE9yU3RyaW5nLmZyb21OdW1iZXIocG9ydCksIHVuZGVmaW5lZCwgTmV0d29ya1Byb3RvY29sLlRDUCk7XG4gIH1cblxuICAvKipcbiAgICogQSBUQ1AgcG9ydCByYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0Y3BSYW5nZShzdGFydFBvcnQ6IG51bWJlciwgZW5kUG9ydDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5UG9ydChrOHMuSW50T3JTdHJpbmcuZnJvbU51bWJlcihzdGFydFBvcnQpLCBlbmRQb3J0LCBOZXR3b3JrUHJvdG9jb2wuVENQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgVENQIHRyYWZmaWNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYWxsVGNwKCkge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeVBvcnQoazhzLkludE9yU3RyaW5nLmZyb21OdW1iZXIoMCksIDY1NTM1LCBOZXR3b3JrUHJvdG9jb2wuVENQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXN0aW5jdCBVRFAgcG9ydHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdWRwKHBvcnQ6IG51bWJlcik6IE5ldHdvcmtQb2xpY3lQb3J0IHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lQb3J0KGs4cy5JbnRPclN0cmluZy5mcm9tTnVtYmVyKHBvcnQpLCB1bmRlZmluZWQsIE5ldHdvcmtQcm90b2NvbC5VRFApO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgVURQIHBvcnQgcmFuZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdWRwUmFuZ2Uoc3RhcnRQb3J0OiBudW1iZXIsIGVuZFBvcnQ6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeVBvcnQoazhzLkludE9yU3RyaW5nLmZyb21OdW1iZXIoc3RhcnRQb3J0KSwgZW5kUG9ydCwgTmV0d29ya1Byb3RvY29sLlVEUCk7XG4gIH1cblxuICAvKipcbiAgICogQW55IFVEUCB0cmFmZmljXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFsbFVkcCgpIHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lQb3J0KGs4cy5JbnRPclN0cmluZy5mcm9tTnVtYmVyKDApLCA2NTUzNSwgTmV0d29ya1Byb3RvY29sLlVEUCk7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9tIHBvcnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvcHM6IE5ldHdvcmtQb2xpY3lQb3J0UHJvcHMpOiBOZXR3b3JrUG9saWN5UG9ydCB7XG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5UG9ydChwcm9wcy5wb3J0ID8gazhzLkludE9yU3RyaW5nLmZyb21OdW1iZXIocHJvcHMucG9ydCkgOiB1bmRlZmluZWQsIHByb3BzLmVuZFBvcnQsIHByb3BzLnByb3RvY29sKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0PzogazhzLkludE9yU3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5kUG9ydD86IG51bWJlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3RvY29sPzogTmV0d29ya1Byb3RvY29sKSB7fVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9LdWJlKCk6IGs4cy5OZXR3b3JrUG9saWN5UG9ydCB7XG4gICAgcmV0dXJuIHsgcG9ydDogdGhpcy5wb3J0LCBlbmRQb3J0OiB0aGlzLmVuZFBvcnQsIHByb3RvY29sOiB0aGlzLnByb3RvY29sIH07XG4gIH1cblxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG5ldHdvcmsgcGVlcnMuXG4gKiBBIHBlZXIgY2FuIGVpdGhlciBieSBhbiBpcCBibG9jaywgb3IgYSBzZWxlY3Rpb24gb2YgcG9kcywgbm90IGJvdGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1BvbGljeVBlZXJDb25maWcge1xuXG4gIC8qKlxuICAgKiBUaGUgaXAgYmxvY2sgdGhpcyBwZWVyIHJlcHJlc2VudHMuXG4gICAqL1xuICByZWFkb25seSBpcEJsb2NrPzogTmV0d29ya1BvbGljeUlwQmxvY2s7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2Qgc2VsZWN0b3IgdGhpcyBwZWVyIHJlcHJlc2VudHMuXG4gICAqL1xuICByZWFkb25seSBwb2RTZWxlY3Rvcj86IHBvZC5Qb2RTZWxlY3RvckNvbmZpZztcblxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIHBlZXIgdG8gYWxsb3cgdHJhZmZpYyB0by9mcm9tLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElOZXR3b3JrUG9saWN5UGVlciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgcGVlci5cbiAgICovXG4gIHRvTmV0d29ya1BvbGljeVBlZXJDb25maWcoKTogTmV0d29ya1BvbGljeVBlZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIHBlZXIgaW50byBhIHBvZCBzZWxlY3RvciwgaWYgcG9zc2libGUuXG4gICAqL1xuICB0b1BvZFNlbGVjdG9yKCk6IHBvZC5JUG9kU2VsZWN0b3IgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgcnVsZSBhbGxvd2luZyB0cmFmZmljIGZyb20gLyB0byBwb2RzIG1hdGNoZWQgYnkgYSBuZXR3b3JrIHBvbGljeSBzZWxlY3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUG9saWN5UnVsZSB7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0cyBvZiB0aGUgcnVsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cmFmZmljIGlzIGFsbG93ZWQgb24gYWxsIHBvcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydHM/OiBOZXR3b3JrUG9saWN5UG9ydFtdO1xuXG4gIC8qKlxuICAgKiBQZWVyIHRoaXMgcnVsZSBpbnRlcmFjdHMgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IHBlZXI6IElOZXR3b3JrUG9saWN5UGVlcjtcblxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBhIHBhcnRpY3VsYXIgQ0lEUiAoRXguIFwiMTkyLjE2OC4xLjEvMjRcIixcIjIwMDE6ZGI5OjovNjRcIikgdGhhdCBpc1xuICogYWxsb3dlZCB0byB0aGUgcG9kcyBtYXRjaGVkIGJ5IGEgbmV0d29yayBwb2xpY3kgc2VsZWN0b3IuXG4gKiBUaGUgZXhjZXB0IGVudHJ5IGRlc2NyaWJlcyBDSURScyB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgd2l0aGluIHRoaXMgcnVsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtQb2xpY3lJcEJsb2NrIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU5ldHdvcmtQb2xpY3lQZWVyIHtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIElQdjQgcGVlciBmcm9tIGEgQ0lEUlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcHY0KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNpZHJJcDogc3RyaW5nLCBleGNlcHQ/OiBzdHJpbmdbXSk6IE5ldHdvcmtQb2xpY3lJcEJsb2NrIHtcbiAgICBjb25zdCBjaWRyTWF0Y2ggPSBjaWRySXAubWF0Y2goL14oXFxkezEsM31cXC4pezN9XFxkezEsM30oXFwvXFxkKyk/JC8pO1xuXG4gICAgaWYgKCFjaWRyTWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBJUHY0IENJRFI6IFwiJHtjaWRySXB9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoIWNpZHJNYXRjaFsyXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDSURSIG1hc2sgaXMgbWlzc2luZyBpbiBJUHY0OiBcIiR7Y2lkcklwfVwiLiBEaWQgeW91IG1lYW4gXCIke2NpZHJJcH0vMzJcIj9gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lJcEJsb2NrKHNjb3BlLCBpZCwgY2lkcklwLCBleGNlcHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFueSBJUHY0IGFkZHJlc3NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYW55SXB2NChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogTmV0d29ya1BvbGljeUlwQmxvY2sge1xuICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeUlwQmxvY2soc2NvcGUsIGlkLCAnMC4wLjAuMC8wJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIElQdjYgcGVlciBmcm9tIGEgQ0lEUlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcHY2KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNpZHJJcDogc3RyaW5nLCBleGNlcHQ/OiBzdHJpbmdbXSk6IE5ldHdvcmtQb2xpY3lJcEJsb2NrIHtcblxuICAgIGNvbnN0IGNpZHJNYXRjaCA9IGNpZHJJcC5tYXRjaCgvXihbXFxkYS1mXXswLDR9Oil7Miw3fShbXFxkYS1mXXswLDR9KT8oXFwvXFxkKyk/JC8pO1xuXG4gICAgaWYgKCFjaWRyTWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBJUHY2IENJRFI6IFwiJHtjaWRySXB9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoIWNpZHJNYXRjaFszXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDSURSIG1hc2sgaXMgbWlzc2luZyBpbiBJUHY2OiBcIiR7Y2lkcklwfVwiLiBEaWQgeW91IG1lYW4gXCIke2NpZHJJcH0vMTI4XCI/YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5SXBCbG9jayhzY29wZSwgaWQsIGNpZHJJcCwgZXhjZXB0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgSVB2NiBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFueUlwdjYoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyk6IE5ldHdvcmtQb2xpY3lJcEJsb2NrIHtcbiAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lJcEJsb2NrKHNjb3BlLCBpZCwgJzo6LzAnKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElQIEJsb2NrIFZhbGlkIGV4YW1wbGVzIGFyZSBcIjE5Mi4xNjguMS4xLzI0XCIgb3IgXCIyMDAxOmRiOTo6LzY0XCIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNpZHI6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiBBIHNsaWNlIG9mIENJRFJzIHRoYXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCB3aXRoaW4gYW4gSVAgQmxvY2sgVmFsaWQgZXhhbXBsZXMgYXJlIFwiMTkyLjE2OC4xLjEvMjRcIiBvciBcIjIwMDE6ZGI5OjovNjRcIi5cbiAgICAgKiBFeGNlcHQgdmFsdWVzIHdpbGwgYmUgcmVqZWN0ZWQgaWYgdGhleSBhcmUgb3V0c2lkZSB0aGUgQ0lEUiByYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZXhjZXB0Pzogc3RyaW5nW10pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgSU5ldHdvcmtQb2xpY3lQZWVyLnRvTmV0d29ya1BvbGljeVBlZXJDb25maWcoKVxuICAgKi9cbiAgcHVibGljIHRvTmV0d29ya1BvbGljeVBlZXJDb25maWcoKTogTmV0d29ya1BvbGljeVBlZXJDb25maWcge1xuICAgIHJldHVybiB7IGlwQmxvY2s6IHRoaXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIElOZXR3b3JrUG9saWN5UGVlci50b1BvZFNlbGVjdG9yKClcbiAgICovXG4gIHB1YmxpYyB0b1BvZFNlbGVjdG9yKCk6IHBvZC5JUG9kU2VsZWN0b3IgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuSXBCbG9jayB7XG4gICAgcmV0dXJuIHsgY2lkcjogdGhpcy5jaWRyLCBleGNlcHQ6IHRoaXMuZXhjZXB0IH07XG4gIH1cblxufVxuXG4vKipcbiAqIE5ldHdvcmsgcHJvdG9jb2xzLlxuICovXG5leHBvcnQgZW51bSBOZXR3b3JrUHJvdG9jb2wge1xuICAvKipcbiAgICogVENQLlxuICAgKi9cbiAgVENQID0gJ1RDUCcsXG4gIC8qKlxuICAgKiBVRFAuXG4gICAqL1xuICBVRFAgPSAnVURQJyxcbiAgLyoqXG4gICAqIFNDVFAuXG4gICAqL1xuICBTQ1RQID0gJ1NDVFAnLFxufVxuXG4vKipcbiAqIERlZmF1bHQgYmVoYXZpb3JzIG9mIG5ldHdvcmsgdHJhZmZpYyBpbiBwb2xpY2llcy5cbiAqL1xuZXhwb3J0IGVudW0gTmV0d29ya1BvbGljeVRyYWZmaWNEZWZhdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVuaWVzIGFsbCB0cmFmZmljLlxuICAgKiBTaW5jZSBydWxlcyBhcmUgYWRkaXRpdmUsIGFkZGl0aW9uYWwgcnVsZXMgb3IgcG9saWNpZXMgY2FuIGFsbG93XG4gICAqIHNwZWNpZmljIHRyYWZmaWMuXG4gICAqL1xuICBERU5ZID0gJ0RFTlknLFxuICAvKipcbiAgICogVGhlIHBvbGljeSBhbGxvd3MgYWxsIHRyYWZmaWMgKGVpdGhlciBpbmdyZXNzIG9yIGVncmVzcykuXG4gICAqIFNpbmNlIHJ1bGVzIGFyZSBhZGRpdGl2ZSwgbm8gYWRkaXRpb25hbCBydWxlIG9yIHBvbGljaWVzIGNhblxuICAgKiBzdWJzZXF1ZW50bHkgZGVueSB0aGUgdHJhZmZpYy5cbiAgICovXG4gIEFMTE9XID0gJ0FMTE9XJyxcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgaG93IHRoZSBuZXR3b3JrIHBvbGljeSBzaG91bGQgY29uZmlndXJlIGVncmVzcyAvIGluZ3Jlc3MgdHJhZmZpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUG9saWN5VHJhZmZpYyB7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgcG9saWN5IHdoZW5cbiAgICogbm8gcnVsZXMgYXJlIGRlZmluZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5zZXQsIHRoZSBwb2xpY3kgZG9lcyBub3QgY2hhbmdlIHRoZSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBOZXR3b3JrUG9saWN5VHJhZmZpY0RlZmF1bHQ7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcnVsZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgc2VsZWN0ZWQgcG9kcy5cbiAgICogSWYgZW1wdHksIHRoZSBiZWhhdmlvciBvZiB0aGUgcG9saWN5IGlzIGRpY3RhdGVkIGJ5IHRoZSBgZGVmYXVsdGAgcHJvcGVydHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogTmV0d29ya1BvbGljeVJ1bGVbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgTmV0d29ya1BvbGljeS5hZGRFZ3Jlc3NSdWxlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUG9saWN5QWRkRWdyZXNzUnVsZU9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBQb3J0cyB0aGUgcnVsZSBzaG91bGQgYWxsb3cgb3V0Z29pbmcgdHJhZmZpYyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB0aGUgcGVlciBpcyBhIG1hbmFnZWQgcG9kLCB0YWtlIGl0cyBwb3J0cy4gT3RoZXJ3aXNlLCBhbGwgcG9ydHMgYXJlIGFsbG93ZWQuXG4gICAqL1xuICByZWFkb25seSBwb3J0cz86IE5ldHdvcmtQb2xpY3lQb3J0W107XG5cbn1cblxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBOZXR3b3JrUG9saWN5YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUG9saWN5UHJvcHMgZXh0ZW5kcyBiYXNlLlJlc291cmNlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBXaGljaCBwb2RzIGRvZXMgdGhpcyBwb2xpY3kgb2JqZWN0IGFwcGxpZXMgdG8uXG4gICAqXG4gICAqIFRoaXMgY2FuIGVpdGhlciBiZSBhIHNpbmdsZSBwb2QgLyB3b3JrbG9hZCwgb3IgYSBncm91cGluZyBvZiBwb2RzIHNlbGVjdGVkXG4gICAqIHZpYSB0aGUgYFBvZHMuc2VsZWN0YCBmdW5jdGlvbi4gUnVsZXMgaXMgYXBwbGllZCB0byBhbnkgcG9kcyBzZWxlY3RlZCBieSB0aGlzIHByb3BlcnR5LlxuICAgKiBNdWx0aXBsZSBuZXR3b3JrIHBvbGljaWVzIGNhbiBzZWxlY3QgdGhlIHNhbWUgc2V0IG9mIHBvZHMuXG4gICAqIEluIHRoaXMgY2FzZSwgdGhlIHJ1bGVzIGZvciBlYWNoIGFyZSBjb21iaW5lZCBhZGRpdGl2ZWx5LlxuICAgKlxuICAgKiBOb3RlIHRoYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB3aWxsIHNlbGVjdCBhbGwgcG9kcyBpbiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBwb2xpY3kuXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rvcj86IHBvZC5JUG9kU2VsZWN0b3I7XG5cbiAgLyoqXG4gICAqIEVncmVzcyB0cmFmZmljIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHBvbGljeSBkb2Vzbid0IGNoYW5nZSBlZ3Jlc3MgYmVoYXZpb3Igb2YgdGhlIHBvZHMgaXQgc2VsZWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGVncmVzcz86IE5ldHdvcmtQb2xpY3lUcmFmZmljO1xuXG4gIC8qKlxuICAgKiBJbmdyZXNzIHRyYWZmaWMgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcG9saWN5IGRvZXNuJ3QgY2hhbmdlIGluZ3Jlc3MgYmVoYXZpb3Igb2YgdGhlIHBvZHMgaXQgc2VsZWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IGluZ3Jlc3M/OiBOZXR3b3JrUG9saWN5VHJhZmZpYztcbn1cblxuLyoqXG4gKiBDb250cm9sIHRyYWZmaWMgZmxvdyBhdCB0aGUgSVAgYWRkcmVzcyBvciBwb3J0IGxldmVsIChPU0kgbGF5ZXIgMyBvciA0KSxcbiAqIG5ldHdvcmsgcG9saWNpZXMgYXJlIGFuIGFwcGxpY2F0aW9uLWNlbnRyaWMgY29uc3RydWN0IHdoaWNoIGFsbG93IHlvdVxuICogdG8gc3BlY2lmeSBob3cgYSBwb2QgaXMgYWxsb3dlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHZhcmlvdXMgbmV0d29yayBwZWVycy5cbiAqXG4gKiAtIE91dGdvaW5nIHRyYWZmaWMgaXMgYWxsb3dlZCBpZiB0aGVyZSBhcmUgbm8gbmV0d29yayBwb2xpY2llcyBzZWxlY3RpbmdcbiAqICAgdGhlIHBvZCAoYW5kIGNsdXN0ZXIgcG9saWN5IG90aGVyd2lzZSBhbGxvd3MgdGhlIHRyYWZmaWMpLFxuICogICBPUiBpZiB0aGUgdHJhZmZpYyBtYXRjaGVzIGF0IGxlYXN0IG9uZSBlZ3Jlc3MgcnVsZSBhY3Jvc3MgYWxsIG9mIHRoZVxuICogICBuZXR3b3JrIHBvbGljaWVzIHRoYXQgc2VsZWN0IHRoZSBwb2QuXG4gKlxuICogLSBJbmNvbWluZyB0cmFmZmljIGlzIGFsbG93ZWQgdG8gYSBwb2QgaWYgdGhlcmUgYXJlIG5vIG5ldHdvcmsgcG9saWNpZXNcbiAqICAgc2VsZWN0aW5nIHRoZSBwb2QgKGFuZCBjbHVzdGVyIHBvbGljeSBvdGhlcndpc2UgYWxsb3dzIHRoZSB0cmFmZmljKSxcbiAqICAgT1IgaWYgdGhlIHRyYWZmaWMgc291cmNlIGlzIHRoZSBwb2QncyBsb2NhbCBub2RlLFxuICogICBPUiBpZiB0aGUgdHJhZmZpYyBtYXRjaGVzIGF0IGxlYXN0IG9uZSBpbmdyZXNzIHJ1bGUgYWNyb3NzIGFsbCBvZlxuICogICB0aGUgbmV0d29yayBwb2xpY2llcyB0aGF0IHNlbGVjdCB0aGUgcG9kLlxuICpcbiAqIE5ldHdvcmsgcG9saWNpZXMgZG8gbm90IGNvbmZsaWN0OyB0aGV5IGFyZSBhZGRpdGl2ZS5cbiAqIElmIGFueSBwb2xpY3kgb3IgcG9saWNpZXMgYXBwbHkgdG8gYSBnaXZlbiBwb2QgZm9yIGEgZ2l2ZW5cbiAqIGRpcmVjdGlvbiwgdGhlIGNvbm5lY3Rpb25zIGFsbG93ZWQgaW4gdGhhdCBkaXJlY3Rpb24gZnJvbVxuICogdGhhdCBwb2QgaXMgdGhlIHVuaW9uIG9mIHdoYXQgdGhlIGFwcGxpY2FibGUgcG9saWNpZXMgYWxsb3cuXG4gKiBUaHVzLCBvcmRlciBvZiBldmFsdWF0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgcG9saWN5IHJlc3VsdC5cbiAqXG4gKiBGb3IgYSBjb25uZWN0aW9uIGZyb20gYSBzb3VyY2UgcG9kIHRvIGEgZGVzdGluYXRpb24gcG9kIHRvIGJlIGFsbG93ZWQsXG4gKiBib3RoIHRoZSBlZ3Jlc3MgcG9saWN5IG9uIHRoZSBzb3VyY2UgcG9kIGFuZCB0aGUgaW5ncmVzcyBwb2xpY3kgb24gdGhlXG4gKiBkZXN0aW5hdGlvbiBwb2QgbmVlZCB0byBhbGxvdyB0aGUgY29ubmVjdGlvbi5cbiAqIElmIGVpdGhlciBzaWRlIGRvZXMgbm90IGFsbG93IHRoZSBjb25uZWN0aW9uLCBpdCB3aWxsIG5vdCBoYXBwZW4uXG4gKlxuICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zZXJ2aWNlcy1uZXR3b3JraW5nL25ldHdvcmstcG9saWNpZXMvI25ldHdvcmtwb2xpY3ktcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtQb2xpY3kgZXh0ZW5kcyBiYXNlLlJlc291cmNlIHtcblxuICAvKipcbiAgICogQHNlZSBiYXNlLlJlc291cmNlLmFwaU9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaU9iamVjdDogQXBpT2JqZWN0O1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZyA9ICduZXR3b3JrcG9saWNpZXMnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BvZFNlbGVjdG9yQ29uZmlnOiBwb2QuUG9kU2VsZWN0b3JDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VncmVzc1J1bGVzOiBrOHMuTmV0d29ya1BvbGljeUVncmVzc1J1bGVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmdyZXNzUnVsZXM6IGs4cy5OZXR3b3JrUG9saWN5SW5ncmVzc1J1bGVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wb2xpY3lUeXBlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXR3b3JrUG9saWN5UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBwb2RTZWxlY3RvciA9IHByb3BzLnNlbGVjdG9yID8/IHBvZC5Qb2RzLmFsbCh0aGlzLCAnQWxsUG9kcycpO1xuICAgIHRoaXMuX3BvZFNlbGVjdG9yQ29uZmlnID0gcG9kU2VsZWN0b3IudG9Qb2RTZWxlY3RvckNvbmZpZygpO1xuXG4gICAgbGV0IG5zO1xuXG4gICAgaWYgKCFwcm9wcy5tZXRhZGF0YT8ubmFtZXNwYWNlKSB7XG5cbiAgICAgIGlmICh0aGlzLl9wb2RTZWxlY3RvckNvbmZpZy5uYW1lc3BhY2VzPy5sYWJlbFNlbGVjdG9yICYmICF0aGlzLl9wb2RTZWxlY3RvckNvbmZpZy5uYW1lc3BhY2VzPy5sYWJlbFNlbGVjdG9yLmlzRW1wdHkoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjcmVhdGUgYSBuZXR3b3JrIHBvbGljeSBmb3IgYSBzZWxlY3RvciAoJHtwb2RTZWxlY3Rvci5ub2RlLnBhdGh9KSB0aGF0IHNlbGVjdHMgcG9kcyBpbiBuYW1lc3BhY2VzIGJhc2VkIG9uIGxhYmVsc2ApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcG9kU2VsZWN0b3JDb25maWcubmFtZXNwYWNlcz8ubmFtZXMgJiYgdGhpcy5fcG9kU2VsZWN0b3JDb25maWcubmFtZXNwYWNlcy5uYW1lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNyZWF0ZSBhIG5ldHdvcmsgcG9saWN5IGZvciBhIHNlbGVjdG9yICgke3BvZFNlbGVjdG9yLm5vZGUucGF0aH0pIHRoYXQgc2VsZWN0cyBwb2RzIGluIG11bHRpcGxlIG5hbWVzcGFjZXNgKTtcbiAgICAgIH1cblxuICAgICAgbnMgPSB0aGlzLl9wb2RTZWxlY3RvckNvbmZpZy5uYW1lc3BhY2VzPy5uYW1lcyA/IHRoaXMuX3BvZFNlbGVjdG9yQ29uZmlnLm5hbWVzcGFjZXM/Lm5hbWVzWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIG5zID0gcHJvcHMubWV0YWRhdGEubmFtZXNwYWNlO1xuICAgIH1cblxuICAgIHRoaXMuYXBpT2JqZWN0ID0gbmV3IGs4cy5LdWJlTmV0d29ya1BvbGljeSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBtZXRhZGF0YTogeyAuLi5wcm9wcy5tZXRhZGF0YSwgbmFtZXNwYWNlOiBucyB9LFxuICAgICAgc3BlYzogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLl90b0t1YmUoKSB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEJlaGF2aW9yKCdFZ3Jlc3MnLCBwcm9wcy5lZ3Jlc3M/LmRlZmF1bHQpO1xuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdEJlaGF2aW9yKCdJbmdyZXNzJywgcHJvcHMuaW5ncmVzcz8uZGVmYXVsdCk7XG5cbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcHJvcHMuZWdyZXNzPy5ydWxlcyA/PyBbXSkge1xuICAgICAgdGhpcy5hZGRFZ3Jlc3NSdWxlKHJ1bGUucGVlciwgcnVsZS5wb3J0cyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBydWxlIG9mIHByb3BzLmluZ3Jlc3M/LnJ1bGVzID8/IFtdKSB7XG4gICAgICB0aGlzLmFkZEluZ3Jlc3NSdWxlKHJ1bGUucGVlciwgcnVsZS5wb3J0cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG91dGdvaW5nIHRyYWZmaWMgdG8gdGhlIHBlZXIuXG4gICAqXG4gICAqIElmIHBvcnRzIGFyZSBub3QgcGFzc2VkLCB0cmFmZmljIHdpbGwgYmUgYWxsb3dlZCBvbiBhbGwgcG9ydHMuXG4gICAqL1xuICBwdWJsaWMgYWRkRWdyZXNzUnVsZShwZWVyOiBJTmV0d29ya1BvbGljeVBlZXIsIHBvcnRzPzogTmV0d29ya1BvbGljeVBvcnRbXSkge1xuICAgIHRoaXMuX3BvbGljeVR5cGVzLmFkZCgnRWdyZXNzJyk7XG4gICAgdGhpcy5fZWdyZXNzUnVsZXMucHVzaCh7IHBvcnRzOiAocG9ydHMgPz8gW10pLm1hcChwID0+IHAuX3RvS3ViZSgpKSwgdG86IHRoaXMuY3JlYXRlTmV0d29ya1BvbGljeVBlZXJzKHBlZXIpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGluY29taW5nIHRyYWZmaWMgZnJvbSB0aGUgcGVlci5cbiAgICpcbiAgICogSWYgcG9ydHMgYXJlIG5vdCBwYXNzZWQsIHRyYWZmaWMgd2lsbCBiZSBhbGxvd2VkIG9uIGFsbCBwb3J0cy5cbiAgICovXG4gIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShwZWVyOiBJTmV0d29ya1BvbGljeVBlZXIsIHBvcnRzPzogTmV0d29ya1BvbGljeVBvcnRbXSkge1xuICAgIHRoaXMuX3BvbGljeVR5cGVzLmFkZCgnSW5ncmVzcycpO1xuICAgIHRoaXMuX2luZ3Jlc3NSdWxlcy5wdXNoKHsgcG9ydHM6IChwb3J0cyA/PyBbXSkubWFwKHAgPT4gcC5fdG9LdWJlKCkpLCBmcm9tOiB0aGlzLmNyZWF0ZU5ldHdvcmtQb2xpY3lQZWVycyhwZWVyKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV0d29ya1BvbGljeVBlZXJzKHBlZXI6IElOZXR3b3JrUG9saWN5UGVlcik6IGs4cy5OZXR3b3JrUG9saWN5UGVlcltdIHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHBlZXIudG9OZXR3b3JrUG9saWN5UGVlckNvbmZpZygpO1xuXG4gICAgdmFsaWRhdGVQZWVyQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBpZiAoY29uZmlnLmlwQmxvY2spIHtcbiAgICAgIC8vIGlwIGJsb2NrIGlzIGEgc2luZ2xlIHBlZXIuXG4gICAgICByZXR1cm4gW3sgaXBCbG9jazogY29uZmlnLmlwQmxvY2suX3RvS3ViZSgpIH1dO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnBvZFNlbGVjdG9yIS5uYW1lc3BhY2VzPy5uYW1lcykge1xuICAgICAgLy8gd2hlbiBubyBleHBsaWNpdCBuYW1lc3BhY2VzIGFyZSBkZWZpbmVkIHdlIGNhbiBqdXN0IHVzZVxuICAgICAgLy8gdGhlIHNlbGVjdG9yIGFzIGlzXG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZXNwYWNlU2VsZWN0b3I6IGNvbmZpZy5wb2RTZWxlY3RvciEubmFtZXNwYWNlcz8ubGFiZWxTZWxlY3Rvcj8uX3RvS3ViZSgpLFxuICAgICAgICBwb2RTZWxlY3RvcjogY29uZmlnLnBvZFNlbGVjdG9yIS5sYWJlbFNlbGVjdG9yLl90b0t1YmUoKSxcbiAgICAgIH1dO1xuICAgIH1cblxuICAgIC8vIHdoZW4gZXhwbGljaXQgbmFtZXNwYWNlcyBhcmUgZGVmaW5lZCwgd2UgbmVlZCB0byBjcmVhdGUgYSBzZXBhcmF0ZVxuICAgIC8vIHBlZXIgZm9yIGVhY2gsIHNpbmNlIGEgbGFiZWwgc2VsZWN0b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgbmFtZSBsYWJlbHMuICh0aGV5IHdpbGwgY29uZmxpY3QpXG4gICAgY29uc3QgbmFtZXNwYWNlU2VsZWN0b3IgPSBjb25maWcucG9kU2VsZWN0b3I/Lm5hbWVzcGFjZXM/LmxhYmVsU2VsZWN0b3I/Ll90b0t1YmUoKSA/PyB7fTtcbiAgICByZXR1cm4gY29uZmlnLnBvZFNlbGVjdG9yIS5uYW1lc3BhY2VzLm5hbWVzIS5tYXAobiA9PiAoe1xuICAgICAgcG9kU2VsZWN0b3I6IGNvbmZpZy5wb2RTZWxlY3RvciEubGFiZWxTZWxlY3Rvci5fdG9LdWJlKCksXG4gICAgICBuYW1lc3BhY2VTZWxlY3Rvcjoge1xuICAgICAgICBtYXRjaEV4cHJlc3Npb25zOiBuYW1lc3BhY2VTZWxlY3Rvci5tYXRjaEV4cHJlc3Npb25zLFxuICAgICAgICBtYXRjaExhYmVsczoge1xuICAgICAgICAgIC4uLm5hbWVzcGFjZVNlbGVjdG9yLm1hdGNoTGFiZWxzLFxuICAgICAgICAgIFtuYW1lc3BhY2UuTmFtZXNwYWNlLk5BTUVfTEFCRUxdOiBuLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZURlZmF1bHRCZWhhdmlvcihkaXJlY3Rpb246ICdJbmdyZXNzJyB8ICdFZ3Jlc3MnLCBfZGVmYXVsdD86IE5ldHdvcmtQb2xpY3lUcmFmZmljRGVmYXVsdCkge1xuXG4gICAgaWYgKCFfZGVmYXVsdCkgeyByZXR1cm47fVxuXG4gICAgaWYgKF9kZWZhdWx0ID09PSBOZXR3b3JrUG9saWN5VHJhZmZpY0RlZmF1bHQuREVOWSkge1xuICAgICAgLy8gaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9uZXR3b3JrLXBvbGljaWVzLyNkZWZhdWx0LWRlbnktYWxsLWVncmVzcy10cmFmZmljXG4gICAgICB0aGlzLl9wb2xpY3lUeXBlcy5hZGQoZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoX2RlZmF1bHQgPT09IE5ldHdvcmtQb2xpY3lUcmFmZmljRGVmYXVsdC5BTExPVykge1xuICAgICAgLy8gaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc2VydmljZXMtbmV0d29ya2luZy9uZXR3b3JrLXBvbGljaWVzLyNhbGxvdy1hbGwtZWdyZXNzLXRyYWZmaWNcbiAgICAgIHRoaXMuX3BvbGljeVR5cGVzLmFkZChkaXJlY3Rpb24pO1xuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ0VncmVzcycpIHtcbiAgICAgICAgdGhpcy5fZWdyZXNzUnVsZXMucHVzaCh7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbmdyZXNzUnVsZXMucHVzaCh7fSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0t1YmUoKTogazhzLk5ldHdvcmtQb2xpY3lTcGVjIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9kU2VsZWN0b3I6IHRoaXMuX3BvZFNlbGVjdG9yQ29uZmlnLmxhYmVsU2VsZWN0b3IuX3RvS3ViZSgpLFxuICAgICAgZWdyZXNzOiB1bmRlZmluZWRJZkVtcHR5KHRoaXMuX2VncmVzc1J1bGVzKSxcbiAgICAgIGluZ3Jlc3M6IHVuZGVmaW5lZElmRW1wdHkodGhpcy5faW5ncmVzc1J1bGVzKSxcbiAgICAgIHBvbGljeVR5cGVzOiB1bmRlZmluZWRJZkVtcHR5KEFycmF5LmZyb20odGhpcy5fcG9saWN5VHlwZXMpKSxcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGVlckNvbmZpZyhwZWVyQ29uZmlnOiBOZXR3b3JrUG9saWN5UGVlckNvbmZpZykge1xuICBpZiAoIXBlZXJDb25maWcuaXBCbG9jayAmJiAhcGVlckNvbmZpZy5wb2RTZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5hdmxpZCBwZWVyOiBlaXRoZXIgXFwnaXBCbG9ja1xcJyBvciBcXCdwb2RTZWxlY3RvclxcJyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgfVxuICBpZiAocGVlckNvbmZpZy5pcEJsb2NrICYmIHBlZXJDb25maWcucG9kU2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luYXZsaWQgcGVlcjogb25seSBvbmUgb2YgXFwnaXBCbG9ja1xcJyBhbmQgXFwncG9kU2VsZWN0b3JcXCcgbXVzdCBiZSBkZWZpbmVkJyk7XG4gIH1cbn1cbiJdfQ==