@witnet/sdk 1.1.2 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +12 -13
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters.js +5 -6
- package/dist/src/lib/rpc/provider.d.ts.map +1 -1
- package/dist/src/lib/rpc/provider.js +7 -5
- package/package.json +1 -1
- package/src/bin/toolkit.js +3 -8
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataRequestPayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/DataRequestPayload.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,KAAK,EAAiB,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAIvF,MAAM,MAAM,uBAAuB,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAA;AAE1E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG;IAChD,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAA;AAED,KAAK,oBAAoB,GAAG;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAA;AAeD,qBAAa,kBAAmB,SAAQ,0BAA0B,CAAC,iBAAiB,CAAC;IAEjF,OAAc,uBAAuB,SAAO;IAC5C,OAAc,iBAAiB,SAAK;IACpC,OAAc,UAAU,SAAS;IACjC,OAAc,cAAc,SAAkB;IAE9C,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACjC,SAAgB,QAAQ,CAAC,EAAE,aAAa,CAAA;gBAE3B,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,aAAa,EAAE,aAAa,CAAC,EAAE,iBAAiB;IAW1G,IAAW,OAAO,IAAI,IAAI,GAAG,SAAS,CAkBrC;IAED,IAAW,MAAM,IAAI,oBAAoB,GAAG,SAAS,CAyDpD;IAED,IAAW,IAAI,IAAI,IAAI,GAAG,SAAS,CAUlC;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,QAAQ,IAAI,OAAO,CAO7B;IAED,IAAW,OAAO,IAAI,uBAAuB,GAAG,SAAS,CAExD;IAED,IAAW,OAAO,IAAI,SAAS,GAAG,SAAS,CAE1C;IAED,IAAW,OAAO,IAAI,YAAY,GAAG,SAAS,CAE7C;IAED,IAAW,KAAK,IAAI,KAAK,CAMxB;IAED,IAAW,MAAM,IAAI,MAAM,CAiB1B;IAEY,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DataRequestPayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/DataRequestPayload.ts"],"names":[],"mappings":"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"}
|
|
@@ -194,17 +194,18 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
194
194
|
while (this._fees < estimatedFees && this._change >= 0) {
|
|
195
195
|
this._fees = estimatedFees;
|
|
196
196
|
this._outputs = [];
|
|
197
|
-
this._inputs = [];
|
|
198
|
-
this._covered = 0n;
|
|
199
197
|
// consume utxos as to cover for estimated value and estimated fees
|
|
200
198
|
const value = this._fees2Value(this._fees, this._target.witnesses);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
199
|
+
if (this._covered < this.value.pedros + this._fees) {
|
|
200
|
+
const utxos = await ledger.selectUtxos({
|
|
201
|
+
value: types_1.Coins.fromPedros(value + this._fees - this._covered),
|
|
202
|
+
reload,
|
|
203
|
+
});
|
|
204
|
+
const extra = utxos.map(utxo => BigInt(utxo.value)).reduce((prev, curr) => prev + curr, 0n);
|
|
205
|
+
this._covered += extra;
|
|
206
|
+
this._inputs.push(...utxos);
|
|
207
|
+
ledger.consumeUtxos(...utxos);
|
|
208
|
+
}
|
|
208
209
|
this._change = this._covered - (value + this._fees);
|
|
209
210
|
if (this._change >= 0) {
|
|
210
211
|
this.prepareOutputs({ value: this._change });
|
|
@@ -332,9 +333,7 @@ class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
|
332
333
|
}
|
|
333
334
|
}
|
|
334
335
|
async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
|
|
335
|
-
|
|
336
|
-
this._priorities = await provider.priorities();
|
|
337
|
-
}
|
|
336
|
+
this._priorities = await provider.priorities();
|
|
338
337
|
return BigInt(Math.floor(this._priorities[`drt_${priority}`].priority * (this.covered ? this.weight : (this.weight
|
|
339
338
|
// estimate weight of one single output in case there was change to pay back
|
|
340
339
|
+ TX_WEIGHT_OUTPUT_SIZE))));
|
|
@@ -363,4 +362,4 @@ DataRequestPayload.DEFAULT_MAX_RESULT_SIZE = 256;
|
|
|
363
362
|
DataRequestPayload.DEFAULT_WITNESSES = 12;
|
|
364
363
|
DataRequestPayload.MAX_WEIGHT = 80000;
|
|
365
364
|
DataRequestPayload.MIN_COLLATERAL = 20000000000n;
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBdUIxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUM5QixtQ0FBbUM7QUFFbkMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUE7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUE7QUFFM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUE7QUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUE7QUFFaEMsTUFBYSxrQkFBbUIsU0FBUSxxQ0FBNkM7SUFVakYsWUFBYSxhQUFxQixFQUFFLEtBQW1DLEVBQUUsYUFBaUM7UUFDdEcsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNuQyxJQUFJLEtBQUssWUFBWSxvQkFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDekIsQ0FBQzthQUFNLElBQUksS0FBSyxZQUFZLHFCQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FB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UUFDMUQsT0FBTyxlQUFPLENBQUMsR0FBRyxDQUNkLElBQUksRUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUNsRixDQUFDO0lBQ04sQ0FBQztJQUNTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsU0FBaUI7UUFDakQsT0FBTyxDQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztjQUN2QyxFQUFFLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FDL0QsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVTLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPO2dCQUNILEdBQUcsSUFBSSxDQUFDLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQzFDLENBQUE7UUFDTCxDQUFDO0lBQ0wsQ0FBQzs7QUE3WUwsZ0RBOFlDO0FBNVlpQiwwQ0FBdUIsR0FBRyxHQUFHLENBQUM7QUFDOUIsb0NBQWlCLEdBQUcsRUFBRSxDQUFBO0FBQ3RCLDZCQUFVLEdBQUcsS0FBTSxDQUFBO0FBQ25CLGlDQUFjLEdBQUcsWUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9uZyA9IHJlcXVpcmUoXCJsb25nXCIpXHJcblxyXG5pbXBvcnQgeyBSb290IGFzIFByb3RvUm9vdCB9IGZyb20gXCJwcm90b2J1ZmpzXCJcclxuY29uc3QgcHJvdG9Sb290ID0gUHJvdG9Sb290LmZyb21KU09OKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi93aXRuZXQvd2l0bmV0LnByb3RvLmpzb25cIikpXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCB0b0hleFN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVyc1wiXHJcblxyXG5pbXBvcnQgeyBSYWRvblJlcXVlc3QsIFJhZG9uVGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vcmFkb25cIlxyXG5pbXBvcnQgeyBIYXNoLCBIZXhTdHJpbmcsIElKc29uUnBjUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxyXG5cclxuaW1wb3J0IHsgSUxlZGdlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWcgfSBmcm9tIFwiLi4vcGF5bG9hZHNcIlxyXG5pbXBvcnQgeyBDb2lucywgUHVibGljS2V5SGFzaCwgVHJhbnNhY3Rpb25QYXJhbXMsIFRyYW5zYWN0aW9uUHJpb3JpdHkgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgeyBCaWdNYXRoLCBzaGEyNTYgfSBmcm9tIFwiLi4vdXRpbHNcIlxyXG4vLyBpbXBvcnQgeyBPcGNvZGVzIH0gZnJvbSBcInNyYy9saWIvcmFkb24vcmVkdWNlcnNcIlxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgPSBhbnkgfCBzdHJpbmcgfCBzdHJpbmdbXSB8IHN0cmluZ1tdW11cclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0TWFqb3JpdHkgPSBcInNpbXBsZVwiIHwgXCJxdWFsaWZpZWRcIjtcclxuICAgIFxyXG5leHBvcnQgdHlwZSBEYXRhUmVxdWVzdFBhcmFtcyA9IFRyYW5zYWN0aW9uUGFyYW1zICYge1xyXG4gICAgYXJncz86IERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzLFxyXG4gICAgbWFqb3JpdHlUeXBlPzogRGF0YVJlcXVlc3RNYWpvcml0eSxcclxuICAgIG1heFJlc3VsdFNpemU/OiBudW1iZXIsXHJcbiAgICB3aXRuZXNzZXM/OiBudW1iZXIsIFxyXG59XHJcblxyXG50eXBlIERhdGFSZXF1ZXN0T3V0cHV0U0xBID0ge1xyXG4gICAgY29sbGF0ZXJhbD86IG51bWJlcixcclxuICAgIGNvbW1pdEFuZFJldmVhbEZlZT86IG51bWJlcixcclxuICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2U6IG51bWJlcixcclxuICAgIHdpdG5lc3NlczogbnVtYmVyLFxyXG4gICAgd2l0bmVzc1Jld2FyZDogbnVtYmVyLFxyXG4gICAgbWF4UmVzdWx0U2l6ZT86IG51bWJlcixcclxufVxyXG5cclxuY29uc3QgQ09MTEFURVJBTF9SQVRJTyA9IDEwMG47XHJcbi8vIGNvbnN0IFJBRE9OX0VSUk9SX01BWF9CWVRFUyA9IDk7XHJcblxyXG5jb25zdCBEUl9DT01NSVRfVFhfV0VJR0hUID0gNDAwXHJcbmNvbnN0IERSX1JFVkVBTF9UWF9XRUlHSFQgPSAyMDBcclxuY29uc3QgRFJfVEFMTFlfVFhfV0VJR0hUID0gMTAwXHJcblxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQUxQSEEgPSAxXHJcbmNvbnN0IERSX1RYX1dFSUdIVF9CRVRBID0gMVxyXG5cclxuY29uc3QgVFhfV0VJR0hUX0lOUFVUX1NJWkUgPSAxMzNcclxuY29uc3QgVFhfV0VJR0hUX09VVFBVVF9TSVpFID0gMzZcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhUmVxdWVzdFBheWxvYWQgZXh0ZW5kcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxEYXRhUmVxdWVzdFBhcmFtcz4ge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9NQVhfUkVTVUxUX1NJWkUgPSAyNTY7XHJcbiAgICBwdWJsaWMgc3RhdGljIERFRkFVTFRfV0lUTkVTU0VTID0gMTJcclxuICAgIHB1YmxpYyBzdGF0aWMgTUFYX1dFSUdIVCA9IDgwXzAwMFxyXG4gICAgcHVibGljIHN0YXRpYyBNSU5fQ09MTEFURVJBTCA9IDIwXzAwMF8wMDBfMDAwblxyXG5cclxuICAgIHByb3RlY3RlZCBfcmVxdWVzdD86IFJhZG9uUmVxdWVzdCBcclxuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZT86IFJhZG9uVGVtcGxhdGVcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgcmFkb246IFJhZG9uUmVxdWVzdCB8IFJhZG9uVGVtcGxhdGUsIGluaXRpYWxUYXJnZXQ/OiBEYXRhUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgIHN1cGVyKHByb3RvVHlwZU5hbWUsIGluaXRpYWxUYXJnZXQpXHJcbiAgICAgICAgaWYgKHJhZG9uIGluc3RhbmNlb2YgUmFkb25SZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSByYWRvblxyXG4gICAgICAgIH0gZWxzZSBpZiAocmFkb24gaW5zdGFuY2VvZiBSYWRvblRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSByYWRvblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYERhdGFSZXF1ZXN0UGF5bG9hZDogdW5zdXBwb3J0ZWQgUmFkb24gYXNzZXQgdHlwZTogJHsocmFkb24gYXMgYW55KT8uY29uc3RydWN0b3IubmFtZX1gKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRyb0hhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5fdG9Eck91dHB1dFByb3RvYnVmKClcclxuICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IERhdGFSZXF1ZXN0T3V0cHV0ID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJEYXRhUmVxdWVzdE91dHB1dFwiKVxyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBEYXRhUmVxdWVzdE91dHB1dC52ZXJpZnkob2JqKVxyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm9iaiA9PlwiLCBKU09OLnN0cmluZ2lmeShvYmopKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IERhdGFSZXF1ZXN0T3V0cHV0LmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLm1lc3NhZ2UgPT5cIiwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlY29kZSA9IERhdGFSZXF1ZXN0T3V0cHV0LmVuY29kZShtZXNzYWdlKS5maW5pc2goKVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJcXG5kcm9IYXNoLmJ5dGVjb2RlID0+XCIsIGJ5dGVjb2RlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHNoYTI1NihieXRlY29kZSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZHJvU0xBKCk6IERhdGFSZXF1ZXN0T3V0cHV0U0xBIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluQ29uc2Vuc3VzUGVyY2VudGFnZSA9IHRoaXMuX3RhcmdldC5tYWpvcml0eVR5cGUgPT09IFwicXVhbGlmaWVkXCIgPyA2NiA6IDUxO1xyXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzZXMgPSAoXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCdcclxuICAgICAgICAgICAgICAgICAgICA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCBcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB3aXRuZXNzUmV3YXJkID0gdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3NlcykgXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1pdEFuZFJldmVhbEZlZSA9IHRoaXMuX2ZlZXMyVW5pdGFyeUNvbW1pdFJldmVhbFJld2FyZCh0aGlzLl9mZWVzLCB3aXRuZXNzZXMpIC8vTWF0aC5mbG9vcihOdW1iZXIod2l0bmVzc1Jld2FyZCAvIEJpZ0ludCh3aXRuZXNzZXMpKSkgLy8gVE9ETzogemVyb2Z5IGlmIHByb3RvY29sID49IFYyXzFcclxuICAgICAgICAgICAgY29uc3QgY29sbGF0ZXJhbCA9IHdpdG5lc3NSZXdhcmQgKiBDT0xMQVRFUkFMX1JBVElPIC8vIFRPRE86IHplcm9meSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgIGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleGNlc3NpdmUgd2l0bmVzcyBjb2xsYXRlcmFsOiAke2NvbGxhdGVyYWwudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh3aXRuZXNzUmV3YXJkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIHJld2FyZDogJHt3aXRuZXNzUmV3YXJkLnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoY29tbWl0QW5kUmV2ZWFsRmVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSBjb21taXQvcmV2ZWFsIGZlZTogJHtjb21taXRBbmRSZXZlYWxGZWUudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBvbmx5IHdoZW4gcHJvdG9jb2wgPj0gVjJfMVxyXG4gICAgICAgICAgICAvLyBsZXQgbWF4UmVzdWx0U2l6ZVxyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5yZXF1ZXN0LndpdG5lc3NSZWR1Y2VyLm9wY29kZSA9PT0gT3Bjb2Rlcy5Db25jYXRlbmF0ZUFuZEhhc2gpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAhPT0gMzQpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHt0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemV9KSBmb3IgYSBjb25jYXRlbmF0ZS1hbmQtaGFzaCBvdXRwdXQuYClcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHN3aXRjaCAodGhpcy5yZXF1ZXN0LmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgXCJSYWRvbkJvb2xlYW5cIjpcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSBcIlJhZG9uSW50ZWdlclwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlIFwiUmFkb25GbG9hdFwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAmJiB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZSAhPT0gUkFET05fRVJST1JfTUFYX0JZVEVTKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1heFJlc3VsdFNpemVcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSBieXRlcykgZm9yIGV4cGVjdGVkIHJlc3VsdCB0eXBlICgke3RoaXMucmVxdWVzdC5kYXRhVHlwZX0pYClcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSAmJiB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZSA8IFJBRE9OX0VSUk9SX01BWF9CWVRFUykge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBtYXggcmVzdWx0IHNpemUgKCR7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnl0ZXMpIGZvciB2YXJpYW50IHJlc3VsdCB0eXBlICgke3RoaXMucmVxdWVzdC5kYXRhVHlwZX0pYClcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG1heFJlc3VsdFNpemUgPSB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgRGF0YVJlcXVlc3RQYXlsb2FkLkRFRkFVTFRfTUFYX1JFU1VMVF9TSVpFXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBjb2xsYXRlcmFsOiBOdW1iZXIoY29sbGF0ZXJhbCksXHJcbiAgICAgICAgICAgICAgICBjb21taXRBbmRSZXZlYWxGZWU6IE51bWJlcihjb21taXRBbmRSZXZlYWxGZWUpLFxyXG4gICAgICAgICAgICAgICAgLy8gbWF4UmVzdWx0U2l6ZSwgVE9ETzogb25seSBpZiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgICAgICBtaW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc1Jld2FyZDogTnVtYmVyKHdpdG5lc3NSZXdhcmQpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNoKCk6IEhhc2ggfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IF9ieXRlY29kZSA9IHRoaXMuYnl0ZWNvZGVcclxuICAgICAgICBpZiAoX2J5dGVjb2RlICYmIHRoaXMuZHJvSGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KEJ1ZmZlci5jb25jYXQoW1xyXG4gICAgICAgICAgICAgICAgZnJvbUhleFN0cmluZyh0aGlzLmRyb0hhc2gpLFxyXG4gICAgICAgICAgICAgICAgc2hhMjU2KF9ieXRlY29kZSksXHJcbiAgICAgICAgICAgIF0pKSkgYXMgSGFzaFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtYXhXZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gRGF0YVJlcXVlc3RQYXlsb2FkLk1BWF9XRUlHSFRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBhcmFtZXRlcml6ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy50ZW1wbGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5jb3ZlcmVkXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9pbnB1dHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9yZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3RhcmdldFxyXG4gICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEFyZ3MoKTogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy5fdGFyZ2V0Py5hcmdzIDogdW5kZWZpbmVkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByYWRIYXNoKCk6IEhleFN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdD8ucmFkSGFzaFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVxdWVzdCgpOiBSYWRvblJlcXVlc3QgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RhcmdldCAmJiB0aGlzLl9mZWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy5mcm9tUGVkcm9zKHRoaXMuX2ZlZXMyVmFsdWUodGhpcy5fZmVlcywgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29pbnMuemVybygpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgd2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QgJiYgdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NlcyA9IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHRoaXMuX3RhcmdldC53aXRuZXNzZXMpLmxlbmd0aCA6IHRoaXMuX3RhcmdldC53aXRuZXNzZXMgfHwgMFxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgRFJfVFhfV0VJR0hUX0FMUEhBICogKHRoaXMuX3JlcXVlc3Qud2VpZ2h0KCkgKyA4ICsgMiArIDggKyA0ICsgOCksXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICAgICAgKyB0aGlzLl9vdXRwdXRzLmxlbmd0aCAqIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHdpdG5lc3NlcyAqIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSX0NPTU1JVF9UWF9XRUlHSFRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBEUl9UWF9XRUlHSFRfQkVUQSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgLy8gVE9ETyBWMi4xOiB0eXBlb2YgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9PT0gJ29iamVjdCcgPyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICsgTWF0aC5tYXgoRFJfVEFMTFlfVFhfV0VJR0hULCB0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgfHwgMCkgKiBEUl9UWF9XRUlHSFRfQkVUQVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBjb25zdW1lVXR4b3MobGVkZ2VyOiBJTGVkZ2VyLCByZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3RhcmdldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IG5vIGluLWZsaWdodCBwYXJhbXMuYClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSkuZmVlcy5wZWRyb3M7XHJcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5jb25zdW1lVXR4b3MobGVkZ2VyLCByZWxvYWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY292ZXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RhcmdldC53aXRuZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9XSVRORVNTRVMsIFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGxlZGdlci5wcm92aWRlci53aXRuZXNzZXMoKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPCAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogbmV0d29yayBub3QgcmVhZHkgZm9yIHdpdG5lc3NpbmcuYCkgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy53ZWlnaHQgPiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy53ZWlnaHQgLSBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVCAqIDAuOFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgLT0gTWF0aC5jZWlsKGRlbHRhIC8gKERSX0NPTU1JVF9UWF9XRUlHSFQgKyBEUl9SRVZFQUxfVFhfV0VJR0hUICogVFhfV0VJR0hUX09VVFBVVF9TSVpFKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldC53aXRuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBlc3RpbWF0ZSB3aXRuZXNzZXM6IHJhZG9uIHJlcXVlc3QgdG9vIGhlYXZ5OiAke3RoaXMud2VpZ2h0fSB3ZWlnaHQgdW5pdHNgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9ICh0aGlzLl90YXJnZXQgYXMgYW55KT8uZmVlcyBhcyBUcmFuc2FjdGlvblByaW9yaXR5IHx8IFRyYW5zYWN0aW9uUHJpb3JpdHkuT3B1bGVudFxyXG4gICAgICAgICAgICBsZXQgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSk7XHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLl9mZWVzIDwgZXN0aW1hdGVkRmVlcyAmJiB0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmVlcyA9IGVzdGltYXRlZEZlZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRzID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3VtZSB1dHhvcyBhcyB0byBjb3ZlciBmb3IgZXN0aW1hdGVkIHZhbHVlIGFuZCBlc3RpbWF0ZWQgZmVlcyBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXR4b3MgPSBhd2FpdCBsZWRnZXIuc2VsZWN0VXR4b3MoeyBcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQ29pbnMuZnJvbVBlZHJvcyh2YWx1ZSArIHRoaXMuX2ZlZXMgLSB0aGlzLl9jb3ZlcmVkKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gdXR4b3MubWFwKHV0eG8gPT4gQmlnSW50KHV0eG8udmFsdWUpKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwbilcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0cy5wdXNoKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgbGVkZ2VyLmNvbnN1bWVVdHhvcyguLi51dHhvcylcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZSA9IHRoaXMuX2NvdmVyZWQgLSAodmFsdWUgKyB0aGlzLl9mZWVzKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlT3V0cHV0cyh7IHZhbHVlOiB0aGlzLl9jaGFuZ2UgfSlcclxuICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZHJvSGFzaDogdGhpcy5kcm9IYXNoLFxyXG4gICAgICAgICAgICByYWRBcmdzOiB0aGlzLnJhZEFyZ3MsXHJcbiAgICAgICAgICAgIHJhZEhhc2g6IHRoaXMucmFkSGFzaCxcclxuICAgICAgICAgICAgd2l0bmVzc2VzOiB0YXJnZXQud2l0bmVzc2VzLFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJlcGFyZU91dHB1dHMoY2hhbmdlPzogeyB2YWx1ZTogYmlnaW50IH0pOiBhbnkge1xyXG4gICAgICAgIGlmIChjaGFuZ2U/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwa2g6IHRoaXMuX2lucHV0c1swXS5zaWduZXIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogY2hhbmdlLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgdGltZV9sb2NrOiAwLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRUYXJnZXQodGFyZ2V0OiBEYXRhUmVxdWVzdFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlID0gMG5cclxuICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICB0aGlzLl9mZWVzID0gMG5cclxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldFxyXG4gICAgICAgIGlmICh0aGlzLmRyb1NMQT8uY29sbGF0ZXJhbCAmJiB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsIDwgRGF0YVJlcXVlc3RQYXlsb2FkLk1JTl9DT0xMQVRFUkFMKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB3aXRuZXNzaW5nIGNvbGxhdGVyYWwgYmVsb3cgbWluaW11bTogJHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb1NMQS5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgICAgICB9IDwgJHtcclxuICAgICAgICAgICAgICAgICAgICBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUxcclxuICAgICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0YXJnZXQ/LmFyZ3NcclxuICAgICAgICAgICAgaWYgKGFyZ3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBubyB0ZW1wbGF0ZSBhcmdzIHdlcmUgcGFzc2VkLmApXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3MgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChbYXJnc10pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdGhpcy50ZW1wbGF0ZS5idWlsZFJhZG9uUmVxdWVzdChhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wcmlvcml0aWVzXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSlNPTihodW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBjb25zdCBkcm9TTEEgPSB0aGlzLmRyb1NMQSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+ICh7IG91dHB1dF9wb2ludGVyOiB1dHhvLm91dHB1dF9wb2ludGVyIH0pKSxcclxuICAgICAgICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRzLm1hcCh2dG8gPT4gKHsgXHJcbiAgICAgICAgICAgICAgICBwa2g6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgZHJfb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy5fcmVxdWVzdCA/IHsgZGF0YV9yZXF1ZXN0OiB0aGlzLl9yZXF1ZXN0LnRvSlNPTihodW1hbml6ZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIGNvbW1pdF9hbmRfcmV2ZWFsX2ZlZTogZHJvU0xBPy5jb21taXRBbmRSZXZlYWxGZWUsXHJcbiAgICAgICAgICAgICAgICBtaW5fY29uc2Vuc3VzX3BlcmNlbnRhZ2U6IGRyb1NMQT8ubWluQ29uc2Vuc3VzUGVyY2VudGFnZSxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NlczogZHJvU0xBPy53aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzX3Jld2FyZDogZHJvU0xBPy53aXRuZXNzUmV3YXJkLFxyXG4gICAgICAgICAgICAgICAgY29sbGF0ZXJhbDogZHJvU0xBPy5jb2xsYXRlcmFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQgJiYgdGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyAgICBcclxuICAgICAgICAgICAgICAgIGlucHV0czogdGhpcy5pbnB1dHNcclxuICAgICAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4geyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IHBhcnNlSW50KHV0eG8ub3V0cHV0X3BvaW50ZXIuc3BsaXQoJzonKVsxXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBvaW50ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbklkOiB7IFNIQTI1NjogQXJyYXkuZnJvbShmcm9tSGV4U3RyaW5nKHRyYW5zYWN0aW9uSWQpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihvdXRwdXRJbmRleCA+IDAgPyB7IG91dHB1dEluZGV4IH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgICAgICBwa2g6IHsgaGFzaDogQXJyYXkuZnJvbShQdWJsaWNLZXlIYXNoLmZyb21CZWNoMzIodnRvLnBraCkudG9CeXRlczIwKCkpLCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh2dG8udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLih2dG8udGltZV9sb2NrID4gMCA/IHsgdGltZUxvY2s6IHZ0by50aW1lX2xvY2sgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgIGRyT3V0cHV0OiB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogRGF0YVJlcXVlc3RQYXJhbXMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldClcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIShcclxuICAgICAgICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldD8uZmVlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgaW5zdGFuY2VvZiBDb2lucyAmJiAodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICh0YXJnZXQ/LndpdG5lc3NlcyB8fCB0YXJnZXQ/LndpdG5lc3NlcyA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICYmICghdGhpcy50ZW1wbGF0ZSB8fCB0YXJnZXQ/LmFyZ3MpXHJcbiAgICAgICAgICAgICkpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW52YWxpZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHRhcmdldCl9YClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQ/LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhwbGljaXQgd2l0bmVzc2luZyBjb21taXR0ZWVzIG5vdCB5ZXQgc3VwcG9ydGVkOiAke3RhcmdldC53aXRuZXNzZXN9YClcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQud2l0bmVzc2VzID0gcGFyc2VJbnQodGFyZ2V0LndpdG5lc3NlcyBhcyBzdHJpbmcpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBEYXRhUmVxdWVzdFBhcmFtc1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQ/OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRhcmdldCkuZmlsdGVyKChba2V5LF0pID0+IFtcclxuICAgICAgICAgICAgICAgICAgICAnYXJncycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdtYXhSZXN1bHRTaXplJyxcclxuICAgICAgICAgICAgICAgICAgICAnd2l0bmVzc2VzJyxcclxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMocHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJpb3JpdGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gYXdhaXQgcHJvdmlkZXIucHJpb3JpdGllcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllc1tgZHJ0XyR7cHJpb3JpdHl9YF0ucHJpb3JpdHkgKiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdmVyZWQgPyB0aGlzLndlaWdodCA6IChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzdGltYXRlIHdlaWdodCBvZiBvbmUgc2luZ2xlIG91dHB1dCBpbiBjYXNlIHRoZXJlIHdhcyBjaGFuZ2UgdG8gcGF5IGJhY2tcclxuICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoZmVlcyAvIEJpZ0ludCh3aXRuZXNzZXMpKSB8fCAxblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5UmV3YXJkKGZlZXM6IGJpZ2ludCwgX3dpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gQmlnTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIGZlZXMsXHJcbiAgICAgICAgICAgIEJpZ0ludChNYXRoLmNlaWwoTnVtYmVyKERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIENPTExBVEVSQUxfUkFUSU8pKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZmVlczJWYWx1ZShmZWVzOiBiaWdpbnQsIHdpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBCaWdJbnQod2l0bmVzc2VzKSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMyVW5pdGFyeVJld2FyZChmZWVzLCB3aXRuZXNzZXMpXHJcbiAgICAgICAgICAgICAgICArIDJuICogdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0RyT3V0cHV0UHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kcm9TTEEsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBdUIxQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUM5QixtQ0FBbUM7QUFFbkMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUE7QUFDL0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUE7QUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUE7QUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUE7QUFFM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUE7QUFDaEMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUE7QUFFaEMsTUFBYSxrQkFBbUIsU0FBUSxxQ0FBNkM7SUFVakYsWUFBYSxhQUFxQixFQUFFLEtBQW1DLEVBQUUsYUFBaUM7UUFDdEcsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUNuQyxJQUFJLEtBQUssWUFBWSxvQkFBWSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDekIsQ0FBQzthQUFNLElBQUksS0FBSyxZQUFZLHFCQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FB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QUFrQjtRQUMxRCxPQUFPLGVBQU8sQ0FBQyxHQUFHLENBQ2QsSUFBSSxFQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQ2xGLENBQUM7SUFDTixDQUFDO0lBQ1MsV0FBVyxDQUFDLElBQVksRUFBRSxTQUFpQjtRQUNqRCxPQUFPLENBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO2NBQ3ZDLEVBQUUsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUMvRCxDQUNKLENBQUM7SUFDTixDQUFDO0lBRVMsbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU87Z0JBQ0gsR0FBRyxJQUFJLENBQUMsTUFBTTtnQkFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7YUFDMUMsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDOztBQTVZTCxnREE2WUM7QUEzWWlCLDBDQUF1QixHQUFHLEdBQUcsQ0FBQztBQUM5QixvQ0FBaUIsR0FBRyxFQUFFLENBQUE7QUFDdEIsNkJBQVUsR0FBRyxLQUFNLENBQUE7QUFDbkIsaUNBQWMsR0FBRyxZQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMb25nID0gcmVxdWlyZShcImxvbmdcIilcclxuXHJcbmltcG9ydCB7IFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSlcclxuXHJcbmltcG9ydCB7IGZyb21IZXhTdHJpbmcsIHRvSGV4U3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL2Jpbi9oZWxwZXJzXCJcclxuXHJcbmltcG9ydCB7IFJhZG9uUmVxdWVzdCwgUmFkb25UZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi9yYWRvblwiXHJcbmltcG9ydCB7IEhhc2gsIEhleFN0cmluZywgSUpzb25ScGNQcm92aWRlciB9IGZyb20gXCIuLi8uLi90eXBlc1wiXHJcblxyXG5pbXBvcnQgeyBJTGVkZ2VyIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIlxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuLi9wYXlsb2Fkc1wiXHJcbmltcG9ydCB7IENvaW5zLCBQdWJsaWNLZXlIYXNoLCBUcmFuc2FjdGlvblBhcmFtcywgVHJhbnNhY3Rpb25Qcmlvcml0eSB9IGZyb20gXCIuLi90eXBlc1wiXHJcbmltcG9ydCB7IEJpZ01hdGgsIHNoYTI1NiB9IGZyb20gXCIuLi91dGlsc1wiXHJcbi8vIGltcG9ydCB7IE9wY29kZXMgfSBmcm9tIFwic3JjL2xpYi9yYWRvbi9yZWR1Y2Vyc1wiXHJcblxyXG5leHBvcnQgdHlwZSBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyA9IGFueSB8IHN0cmluZyB8IHN0cmluZ1tdIHwgc3RyaW5nW11bXVxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RNYWpvcml0eSA9IFwic2ltcGxlXCIgfCBcInF1YWxpZmllZFwiO1xyXG4gICAgXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0UGFyYW1zID0gVHJhbnNhY3Rpb25QYXJhbXMgJiB7XHJcbiAgICBhcmdzPzogRGF0YVJlcXVlc3RUZW1wbGF0ZUFyZ3MsXHJcbiAgICBtYWpvcml0eVR5cGU/OiBEYXRhUmVxdWVzdE1ham9yaXR5LFxyXG4gICAgbWF4UmVzdWx0U2l6ZT86IG51bWJlcixcclxuICAgIHdpdG5lc3Nlcz86IG51bWJlciwgXHJcbn1cclxuXHJcbnR5cGUgRGF0YVJlcXVlc3RPdXRwdXRTTEEgPSB7XHJcbiAgICBjb2xsYXRlcmFsPzogbnVtYmVyLFxyXG4gICAgY29tbWl0QW5kUmV2ZWFsRmVlPzogbnVtYmVyLFxyXG4gICAgbWluQ29uc2Vuc3VzUGVyY2VudGFnZTogbnVtYmVyLFxyXG4gICAgd2l0bmVzc2VzOiBudW1iZXIsXHJcbiAgICB3aXRuZXNzUmV3YXJkOiBudW1iZXIsXHJcbiAgICBtYXhSZXN1bHRTaXplPzogbnVtYmVyLFxyXG59XHJcblxyXG5jb25zdCBDT0xMQVRFUkFMX1JBVElPID0gMTAwbjtcclxuLy8gY29uc3QgUkFET05fRVJST1JfTUFYX0JZVEVTID0gOTtcclxuXHJcbmNvbnN0IERSX0NPTU1JVF9UWF9XRUlHSFQgPSA0MDBcclxuY29uc3QgRFJfUkVWRUFMX1RYX1dFSUdIVCA9IDIwMFxyXG5jb25zdCBEUl9UQUxMWV9UWF9XRUlHSFQgPSAxMDBcclxuXHJcbmNvbnN0IERSX1RYX1dFSUdIVF9BTFBIQSA9IDFcclxuY29uc3QgRFJfVFhfV0VJR0hUX0JFVEEgPSAxXHJcblxyXG5jb25zdCBUWF9XRUlHSFRfSU5QVVRfU0laRSA9IDEzM1xyXG5jb25zdCBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgPSAzNlxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGFSZXF1ZXN0UGF5bG9hZCBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPERhdGFSZXF1ZXN0UGFyYW1zPiB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBERUZBVUxUX01BWF9SRVNVTFRfU0laRSA9IDI1NjtcclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9XSVRORVNTRVMgPSAxMlxyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfV0VJR0hUID0gODBfMDAwXHJcbiAgICBwdWJsaWMgc3RhdGljIE1JTl9DT0xMQVRFUkFMID0gMjBfMDAwXzAwMF8wMDBuXHJcblxyXG4gICAgcHJvdGVjdGVkIF9yZXF1ZXN0PzogUmFkb25SZXF1ZXN0IFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlPzogUmFkb25UZW1wbGF0ZVxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvciAocHJvdG9UeXBlTmFtZTogc3RyaW5nLCByYWRvbjogUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSwgaW5pdGlhbFRhcmdldD86IERhdGFSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgaW5pdGlhbFRhcmdldClcclxuICAgICAgICBpZiAocmFkb24gaW5zdGFuY2VvZiBSYWRvblJlcXVlc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IHJhZG9uXHJcbiAgICAgICAgfSBlbHNlIGlmIChyYWRvbiBpbnN0YW5jZW9mIFJhZG9uVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJhZG9uXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRGF0YVJlcXVlc3RQYXlsb2FkOiB1bnN1cHBvcnRlZCBSYWRvbiBhc3NldCB0eXBlOiAkeyhyYWRvbiBhcyBhbnkpPy5jb25zdHJ1Y3Rvci5uYW1lfWApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZHJvSGFzaCgpOiBIYXNoIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKVxyXG4gICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgY29uc3QgRGF0YVJlcXVlc3RPdXRwdXQgPSBwcm90b1Jvb3QubG9va3VwVHlwZShcIkRhdGFSZXF1ZXN0T3V0cHV0XCIpXHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IERhdGFSZXF1ZXN0T3V0cHV0LnZlcmlmeShvYmopXHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2gub2JqID0+XCIsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gRGF0YVJlcXVlc3RPdXRwdXQuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2gubWVzc2FnZSA9PlwiLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVjb2RlID0gRGF0YVJlcXVlc3RPdXRwdXQuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2guYnl0ZWNvZGUgPT5cIiwgYnl0ZWNvZGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KGJ5dGVjb2RlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkcm9TTEEoKTogRGF0YVJlcXVlc3RPdXRwdXRTTEEgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl90YXJnZXQgJiYgdGhpcy5fZmVlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5Db25zZW5zdXNQZXJjZW50YWdlID0gdGhpcy5fdGFyZ2V0Lm1ham9yaXR5VHlwZSA9PT0gXCJxdWFsaWZpZWRcIiA/IDY2IDogNTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NlcyA9IChcclxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXModGhpcy5fdGFyZ2V0LndpdG5lc3NlcykubGVuZ3RoIFxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpdG5lc3NSZXdhcmQgPSB0aGlzLl9mZWVzMlVuaXRhcnlSZXdhcmQodGhpcy5fZmVlcywgd2l0bmVzc2VzKSBcclxuICAgICAgICAgICAgY29uc3QgY29tbWl0QW5kUmV2ZWFsRmVlID0gdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3NlcykgLy9NYXRoLmZsb29yKE51bWJlcih3aXRuZXNzUmV3YXJkIC8gQmlnSW50KHdpdG5lc3NlcykpKSAvLyBUT0RPOiB6ZXJvZnkgaWYgcHJvdG9jb2wgPj0gVjJfMVxyXG4gICAgICAgICAgICBjb25zdCBjb2xsYXRlcmFsID0gd2l0bmVzc1Jld2FyZCAqIENPTExBVEVSQUxfUkFUSU8gLy8gVE9ETzogemVyb2Z5IGlmIHByb3RvY29sID49IFYyXzFcclxuICAgICAgICAgICAgaWYgKGNvbGxhdGVyYWwgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGV4Y2Vzc2l2ZSB3aXRuZXNzIGNvbGxhdGVyYWw6ICR7Y29sbGF0ZXJhbC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHdpdG5lc3NSZXdhcmQgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhjZXNzaXZlIHdpdG5lc3MgcmV3YXJkOiAke3dpdG5lc3NSZXdhcmQudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjb21taXRBbmRSZXZlYWxGZWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogZXhjZXNzaXZlIGNvbW1pdC9yZXZlYWwgZmVlOiAke2NvbW1pdEFuZFJldmVhbEZlZS50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCk7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IG9ubHkgd2hlbiBwcm90b2NvbCA+PSBWMl8xXHJcbiAgICAgICAgICAgIC8vIGxldCBtYXhSZXN1bHRTaXplXHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLnJlcXVlc3QpIHtcclxuICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLnJlcXVlc3Qud2l0bmVzc1JlZHVjZXIub3Bjb2RlID09PSBPcGNvZGVzLkNvbmNhdGVuYXRlQW5kSGFzaCkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLl90YXJnZXQ/Lm1heFJlc3VsdFNpemUgJiYgdGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICE9PSAzNCkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgbWF4IHJlc3VsdCBzaXplICgke3RoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZX0pIGZvciBhIGNvbmNhdGVuYXRlLWFuZC1oYXNoIG91dHB1dC5gKVxyXG4gICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgc3dpdGNoICh0aGlzLnJlcXVlc3QuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSBcIlJhZG9uQm9vbGVhblwiOlxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlIFwiUmFkb25JbnRlZ2VyXCI6XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgXCJSYWRvbkZsb2F0XCI6XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplICE9PSBSQURPTl9FUlJPUl9NQVhfQllURVMpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgbWF4IHJlc3VsdCBzaXplICgke1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQubWF4UmVzdWx0U2l6ZVxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9IGJ5dGVzKSBmb3IgZXhwZWN0ZWQgcmVzdWx0IHR5cGUgKCR7dGhpcy5yZXF1ZXN0LmRhdGFUeXBlfSlgKVxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0Py5tYXhSZXN1bHRTaXplICYmIHRoaXMuX3RhcmdldC5tYXhSZXN1bHRTaXplIDwgUkFET05fRVJST1JfTUFYX0JZVEVTKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG1heCByZXN1bHQgc2l6ZSAoJHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0Lm1heFJlc3VsdFNpemVcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSBieXRlcykgZm9yIHZhcmlhbnQgcmVzdWx0IHR5cGUgKCR7dGhpcy5yZXF1ZXN0LmRhdGFUeXBlfSlgKVxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbWF4UmVzdWx0U2l6ZSA9IHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSB8fCBEYXRhUmVxdWVzdFBheWxvYWQuREVGQVVMVF9NQVhfUkVTVUxUX1NJWkVcclxuICAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNvbGxhdGVyYWw6IE51bWJlcihjb2xsYXRlcmFsKSxcclxuICAgICAgICAgICAgICAgIGNvbW1pdEFuZFJldmVhbEZlZTogTnVtYmVyKGNvbW1pdEFuZFJldmVhbEZlZSksXHJcbiAgICAgICAgICAgICAgICAvLyBtYXhSZXN1bHRTaXplLCBUT0RPOiBvbmx5IGlmIHByb3RvY29sID49IFYyXzFcclxuICAgICAgICAgICAgICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2UsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzUmV3YXJkOiBOdW1iZXIod2l0bmVzc1Jld2FyZCksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZVxyXG4gICAgICAgIGlmIChfYnl0ZWNvZGUgJiYgdGhpcy5kcm9IYXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoQnVmZmVyLmNvbmNhdChbXHJcbiAgICAgICAgICAgICAgICBmcm9tSGV4U3RyaW5nKHRoaXMuZHJvSGFzaCksXHJcbiAgICAgICAgICAgICAgICBzaGEyNTYoX2J5dGVjb2RlKSxcclxuICAgICAgICAgICAgXSkpKSBhcyBIYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1heFdlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcGFyYW1ldGVyaXplZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnRlbXBsYXRlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmNvdmVyZWRcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2lucHV0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3JlcXVlc3RcclxuICAgICAgICAgICAgICAgICYmICEhdGhpcy5fdGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmFkQXJncygpOiBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLl90YXJnZXQ/LmFyZ3MgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEhhc2goKTogSGV4U3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Py5yYWRIYXNoXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXF1ZXN0KCk6IFJhZG9uUmVxdWVzdCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IENvaW5zIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvaW5zLmZyb21QZWRyb3ModGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDApKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy56ZXJvKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3ZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCAmJiB0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc2VzID0gdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXModGhpcy5fdGFyZ2V0LndpdG5lc3NlcykubGVuZ3RoIDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwXHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBEUl9UWF9XRUlHSFRfQUxQSEEgKiAodGhpcy5fcmVxdWVzdC53ZWlnaHQoKSArIDggKyAyICsgOCArIDQgKyA4KSxcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMuX2lucHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfSU5QVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMuX291dHB1dHMubGVuZ3RoICogVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICAgICAgICAgICAgICsgd2l0bmVzc2VzICogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJfQ09NTUlUX1RYX1dFSUdIVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRFJfUkVWRUFMX1RYX1dFSUdIVCAqIERSX1RYX1dFSUdIVF9CRVRBICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSAvLyBUT0RPIFYyLjE6IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA6IDBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKyBNYXRoLm1heChEUl9UQUxMWV9UWF9XRUlHSFQsIHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSB8fCAwKSAqIERSX1RYX1dFSUdIVF9CRVRBXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbnN1bWVVdHhvcyhsZWRnZXI6IElMZWRnZXIsIHJlbG9hZD86IGJvb2xlYW4pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogbm8gaW4tZmxpZ2h0IHBhcmFtcy5gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGluc3RhbmNlb2YgQ29pbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmVlcyA9ICh0aGlzLl90YXJnZXQgYXMgYW55KS5mZWVzLnBlZHJvcztcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNvbnN1bWVVdHhvcyhsZWRnZXIsIHJlbG9hZClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb3ZlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fdGFyZ2V0LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIERhdGFSZXF1ZXN0UGF5bG9hZC5ERUZBVUxUX1dJVE5FU1NFUywgXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbGVkZ2VyLnByb3ZpZGVyLndpdG5lc3NlcygpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0LndpdG5lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBjYW5ub3QgZXN0aW1hdGUgd2l0bmVzc2VzOiBuZXR3b3JrIG5vdCByZWFkeSBmb3Igd2l0bmVzc2luZy5gKSAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlaWdodCA+IERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLndlaWdodCAtIERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyAtPSBNYXRoLmNlaWwoZGVsdGEgLyAoRFJfQ09NTUlUX1RYX1dFSUdIVCArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBUWF9XRUlHSFRfT1VUUFVUX1NJWkUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXQud2l0bmVzc2VzIDwgMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0LndpdG5lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogcmFkb24gcmVxdWVzdCB0b28gaGVhdnk6ICR7dGhpcy53ZWlnaHR9IHdlaWdodCB1bml0c2ApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByaW9yaXR5ID0gKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGFzIFRyYW5zYWN0aW9uUHJpb3JpdHkgfHwgVHJhbnNhY3Rpb25Qcmlvcml0eS5PcHVsZW50XHJcbiAgICAgICAgICAgIGxldCBlc3RpbWF0ZWRGZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KTtcclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuX2ZlZXMgPCBlc3RpbWF0ZWRGZWVzICYmIHRoaXMuX2NoYW5nZSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gZXN0aW1hdGVkRmVlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zdW1lIHV0eG9zIGFzIHRvIGNvdmVyIGZvciBlc3RpbWF0ZWQgdmFsdWUgYW5kIGVzdGltYXRlZCBmZWVzIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mZWVzMlZhbHVlKHRoaXMuX2ZlZXMsIHRoaXMuX3RhcmdldC53aXRuZXNzZXMpXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY292ZXJlZCA8IHRoaXMudmFsdWUucGVkcm9zICsgdGhpcy5fZmVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHV0eG9zID0gYXdhaXQgbGVkZ2VyLnNlbGVjdFV0eG9zKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBDb2lucy5mcm9tUGVkcm9zKHZhbHVlICsgdGhpcy5fZmVlcyAtIHRoaXMuX2NvdmVyZWQpLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2FkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0cmEgPSB1dHhvcy5tYXAodXR4byA9PiBCaWdJbnQodXR4by52YWx1ZSkpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDBuKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvdmVyZWQgKz0gZXh0cmFcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi51dHhvcylcclxuICAgICAgICAgICAgICAgICAgICBsZWRnZXIuY29uc3VtZVV0eG9zKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlID0gdGhpcy5fY292ZXJlZCAtICh2YWx1ZSArIHRoaXMuX2ZlZXMpXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbmdlID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVPdXRwdXRzKHsgdmFsdWU6IHRoaXMuX2NoYW5nZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZEZlZXMgPSBhd2FpdCB0aGlzLl9lc3RpbWF0ZU5ldHdvcmtGZWVzKGxlZGdlci5wcm92aWRlciwgcHJpb3JpdHkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnRvUmVjZWlwdCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkcm9IYXNoOiB0aGlzLmRyb0hhc2gsXHJcbiAgICAgICAgICAgIHJhZEFyZ3M6IHRoaXMucmFkQXJncyxcclxuICAgICAgICAgICAgcmFkSGFzaDogdGhpcy5yYWRIYXNoLFxyXG4gICAgICAgICAgICB3aXRuZXNzZXM6IHRhcmdldC53aXRuZXNzZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQgfSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZT8udmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBraDogdGhpcy5faW5wdXRzWzBdLnNpZ25lcixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFuZ2UudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IDAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuICAgICAgICB0aGlzLl9jaGFuZ2UgPSAwblxyXG4gICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgIHRoaXMuX2ZlZXMgPSAwblxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvU0xBPy5jb2xsYXRlcmFsICYmIHRoaXMuZHJvU0xBLmNvbGxhdGVyYWwgPCBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcclxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdpdG5lc3NpbmcgY29sbGF0ZXJhbCBiZWxvdyBtaW5pbXVtOiAke1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvU0xBLmNvbGxhdGVyYWxcclxuICAgICAgICAgICAgICAgIH0gPCAke1xyXG4gICAgICAgICAgICAgICAgICAgIERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTFxyXG4gICAgICAgICAgICAgICAgfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRhcmdldD8uYXJnc1xyXG4gICAgICAgICAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IG5vIHRlbXBsYXRlIGFyZ3Mgd2VyZSBwYXNzZWQuYClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KFthcmdzXSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByaW9yaXRpZXNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9KU09OKGh1bWFuaXplID0gZmFsc2UpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGRyb1NMQSA9IHRoaXMuZHJvU0xBICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4gKHsgb3V0cHV0X3BvaW50ZXI6IHV0eG8ub3V0cHV0X3BvaW50ZXIgfSkpLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgIHBraDogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2dG8udmFsdWUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBkcl9vdXRwdXQ6IHtcclxuICAgICAgICAgICAgICAgIC4uLih0aGlzLl9yZXF1ZXN0ID8geyBkYXRhX3JlcXVlc3Q6IHRoaXMuX3JlcXVlc3QudG9KU09OKGh1bWFuaXplKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgY29tbWl0X2FuZF9yZXZlYWxfZmVlOiBkcm9TTEE/LmNvbW1pdEFuZFJldmVhbEZlZSxcclxuICAgICAgICAgICAgICAgIG1pbl9jb25zZW5zdXNfcGVyY2VudGFnZTogZHJvU0xBPy5taW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzOiBkcm9TTEE/LndpdG5lc3NlcyxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NfcmV3YXJkOiBkcm9TTEE/LndpdG5lc3NSZXdhcmQsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXRlcmFsOiBkcm9TTEE/LmNvbGxhdGVyYWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICBwdWJsaWMgdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkICYmIHRoaXMuX3RhcmdldCAmJiB0aGlzLl9yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAodXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gdXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gcGFyc2VJbnQodXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UG9pbnRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IHsgU0hBMjU2OiBBcnJheS5mcm9tKGZyb21IZXhTdHJpbmcodHJhbnNhY3Rpb25JZCkpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKG91dHB1dEluZGV4ID4gMCA/IHsgb3V0cHV0SW5kZXggfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cy5tYXAodnRvID0+ICh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHBraDogeyBoYXNoOiBBcnJheS5mcm9tKFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih2dG8ucGtoKS50b0J5dGVzMjAoKSksIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IExvbmcuZnJvbVZhbHVlKHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKHZ0by50aW1lX2xvY2sgPiAwID8geyB0aW1lTG9jazogdnRvLnRpbWVfbG9jayB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICAgICAgZHJPdXRwdXQ6IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ/OiBhbnkpOiBEYXRhUmVxdWVzdFBhcmFtcyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fY2xlYW5UYXJnZXRFeHRyYXModGFyZ2V0KVxyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICghKFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGFyZ2V0Py5mZWVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmVlcyBpbnN0YW5jZW9mIENvaW5zICYmICh0YXJnZXQuZmVlcyBhcyBDb2lucykucGVkcm9zID4gMCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IE9iamVjdC52YWx1ZXMoVHJhbnNhY3Rpb25Qcmlvcml0eSkuaW5jbHVkZXModGFyZ2V0LmZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHRhcmdldD8ud2l0bmVzc2VzIHx8IHRhcmdldD8ud2l0bmVzc2VzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKCF0aGlzLnRlbXBsYXRlIHx8IHRhcmdldD8uYXJncylcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0KX1gKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldD8ud2l0bmVzc2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleHBsaWNpdCB3aXRuZXNzaW5nIGNvbW1pdHRlZXMgbm90IHlldCBzdXBwb3J0ZWQ6ICR7dGFyZ2V0LndpdG5lc3Nlc31gKVxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIHRhcmdldC53aXRuZXNzZXMgPSBwYXJzZUludCh0YXJnZXQud2l0bmVzc2VzIGFzIHN0cmluZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIERhdGFSZXF1ZXN0UGFyYW1zXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFyZ2V0KS5maWx0ZXIoKFtrZXksXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdhcmdzJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmVlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ21heFJlc3VsdFNpemUnLFxyXG4gICAgICAgICAgICAgICAgICAgICd3aXRuZXNzZXMnLFxyXG4gICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhrZXkpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBfZXN0aW1hdGVOZXR3b3JrRmVlcyhwcm92aWRlcjogSUpzb25ScGNQcm92aWRlciwgcHJpb3JpdHkgPSBUcmFuc2FjdGlvblByaW9yaXR5Lk1lZGl1bSk6IFByb21pc2U8YmlnaW50PiB7XHJcbiAgICAgICAgdGhpcy5fcHJpb3JpdGllcyA9IGF3YWl0IHByb3ZpZGVyLnByaW9yaXRpZXMoKVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllc1tgZHJ0XyR7cHJpb3JpdHl9YF0ucHJpb3JpdHkgKiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdmVyZWQgPyB0aGlzLndlaWdodCA6IChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzdGltYXRlIHdlaWdodCBvZiBvbmUgc2luZ2xlIG91dHB1dCBpbiBjYXNlIHRoZXJlIHdhcyBjaGFuZ2UgdG8gcGF5IGJhY2tcclxuICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoZmVlcyAvIEJpZ0ludCh3aXRuZXNzZXMpKSB8fCAxblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5UmV3YXJkKGZlZXM6IGJpZ2ludCwgX3dpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gQmlnTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIGZlZXMsXHJcbiAgICAgICAgICAgIEJpZ0ludChNYXRoLmNlaWwoTnVtYmVyKERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIENPTExBVEVSQUxfUkFUSU8pKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZmVlczJWYWx1ZShmZWVzOiBiaWdpbnQsIHdpdG5lc3NlczogbnVtYmVyKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBCaWdJbnQod2l0bmVzc2VzKSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMyVW5pdGFyeVJld2FyZChmZWVzLCB3aXRuZXNzZXMpXHJcbiAgICAgICAgICAgICAgICArIDJuICogdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0RyT3V0cHV0UHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kcm9TTEEsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transmitters.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/transmitters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAKjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGxC,OAAO,EACH,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC9B,MAAM,cAAc,CAAA;AAErB,OAAO,EACH,cAAc,EAEd,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EAEjB,YAAY,EAGf,MAAM,SAAS,CAAA;AAEhB,8BAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,SAAS,mBAAmB,CAAC,KAAK,CAAC,CAAE,YAAW,YAAY;IAExG,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC,SAAgB,SAAS,EAAE,mBAAmB,CAAC;IAE/C,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,CAAK;IACjD,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAK;gBAE5B,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,mBAAmB;IAatG,IAAW,OAAO,IAAI,OAAO,GAAG,SAAS,CAExC;IAED,IAAW,QAAQ,IAAI,gBAAgB,CAEtC;IAED,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED,IAAW,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAErC;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,SAAS,KAAK,KAAK,IAAI,KAAK,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAa5D;IAED,SAAS,KAAK,SAAS,IAAI,OAAO,CAMjC;IAEY,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoC5D,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoDjF,kBAAkB,CAC3B,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,mBAAmB,CAAC;QACnC,cAAc,CAAC,EAAE,mBAAmB,CAAC;KACxC,GACF,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"transmitters.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/transmitters.ts"],"names":[],"mappings":"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"}
|
|
@@ -163,11 +163,11 @@ class Transmitter {
|
|
|
163
163
|
globalTimer(Date.now(), globalTimeout)
|
|
164
164
|
.catch((reason) => { throw new types_1.TimeoutError(globalTimeout, receipt, reason); }),
|
|
165
165
|
promisePoller({
|
|
166
|
-
taskFn: () => this.provider.getTransaction(hash),
|
|
166
|
+
taskFn: () => this.provider.getTransaction(hash).catch(err => err),
|
|
167
167
|
shouldContinue: (error, report) => {
|
|
168
168
|
const status = receipt.status;
|
|
169
169
|
receipt.error = error;
|
|
170
|
-
if (error instanceof Error && error.message.indexOf("
|
|
170
|
+
if (error instanceof Error && error.message.indexOf("ItemNotFound") >= 0) {
|
|
171
171
|
receipt.status = "removed";
|
|
172
172
|
}
|
|
173
173
|
else
|
|
@@ -221,7 +221,8 @@ class Transmitter {
|
|
|
221
221
|
return ["relayed", "mined"].includes(receipt.status);
|
|
222
222
|
},
|
|
223
223
|
interval, timeout,
|
|
224
|
-
})
|
|
224
|
+
})
|
|
225
|
+
.then(async () => {
|
|
225
226
|
if (receipt.status === "removed" && receipt.type !== "Unstake") {
|
|
226
227
|
// TRANSACTION REMOVED FROM MEMPOOL //
|
|
227
228
|
// 1. Try to recover input utxos belonging to ledger's addresses:
|
|
@@ -272,8 +273,6 @@ class Transmitter {
|
|
|
272
273
|
signer: vto.pkh,
|
|
273
274
|
}));
|
|
274
275
|
}
|
|
275
|
-
// console.log("output utxos before =>", utxos)
|
|
276
|
-
// console.log("output utxos after =>", this.ledger.addUtxos(...utxos))
|
|
277
276
|
this.ledger.addUtxos(...utxos);
|
|
278
277
|
}
|
|
279
278
|
catch (err) {
|
|
@@ -414,4 +413,4 @@ class TransmitterMultiSig extends Transmitter {
|
|
|
414
413
|
}
|
|
415
414
|
}
|
|
416
415
|
exports.TransmitterMultiSig = TransmitterMultiSig;
|
|
417
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNtaXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vdHJhbnNtaXR0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUV4RCwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixnQ0FBd0M7QUFFeEMsb0NBQXVDO0FBVXZDLG1DQVlnQjtBQUVoQixNQUFzQixXQUFXO0lBVTdCLFlBQWEsYUFBcUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUErQjtRQUg1RixnQkFBVyxHQUEwQixFQUFFLENBQUE7UUFDdkMsa0JBQWEsR0FBZ0IsRUFBRSxDQUFBO1FBR3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLCtDQUErQyxJQUFJLENBQUMsU0FBUyxH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RSxNQUFNLEtBQUssQ0FDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksd0NBQXdDLElBQUksQ0FBQyxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQ3ZJLENBQUM7cUJBQU0sQ0FBQztvQkFDTCxpRUFBaUU7b0JBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDaEQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFpQjtRQUMvQixPQUFPO1lBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDL0I7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVTLFdBQVc7UUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTztnQkFDSCxJQUFJO2dCQUNKLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVzthQUMvQixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJFRCxrREFxRUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwcm9taXNlUG9sbGVyID0gcmVxdWlyZSgncHJvbWlzZS1wb2xsZXInKS5kZWZhdWx0O1xyXG5cclxuaW1wb3J0IHsgUm9vdCBhcyBQcm90b1Jvb3QsIFR5cGUgYXMgUHJvdG9UeXBlIH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcblxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlcG9ydCwgVXR4b01ldGFkYXRhLCBWYWx1ZVRyYW5zZmVyT3V0cHV0IH0gZnJvbSBcIi4uL3JwYy90eXBlc1wiXHJcbmltcG9ydCB7IEpzb25ScGNQcm92aWRlciB9IGZyb20gXCIuLi9ycGNcIlxyXG5pbXBvcnQgeyBIYXNoLCBOZXR3b3JrIH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgaXNIZXhTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgSUxlZGdlcixcclxuICAgIElKc29uUnBjUHJvdmlkZXIsIFxyXG4gICAgSVRyYW5zbWl0dGVyLCBcclxuICAgIElUcmFuc2FjdGlvblBheWxvYWQsIFxyXG4gICAgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnLCBcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgS2V5ZWRTaWduYXR1cmUsIFxyXG4gICAgUHVibGljS2V5LCBcclxuICAgIFB1YmxpY0tleUhhc2hTdHJpbmcsIFxyXG4gICAgTWVtcG9vbEVycm9yLFxyXG4gICAgVHJhbnNhY3Rpb25DYWxsYmFjaywgXHJcbiAgICBUcmFuc2FjdGlvblJlY2VpcHQsIFxyXG4gICAgVHJhbnNhY3Rpb25TdGF0dXMsIFxyXG4gICAgVGltZW91dEVycm9yLFxyXG4gICAgVHJhbnNtaXNzaW9uLFxyXG4gICAgVHJhbnNtaXNzaW9uRXJyb3IsXHJcbiAgICBVdHhvLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlcjxTcGVjcywgUGF5bG9hZCBleHRlbmRzIElUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+PiBpbXBsZW1lbnRzIElUcmFuc21pdHRlciB7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZWFkb25seSBsZWRnZXI6IElMZWRnZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlUGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nO1xyXG4gICAgXHJcbiAgICBwcm90ZWN0ZWQgX3BheWxvYWQ6IFBheWxvYWQ7XHJcbiAgICBwcm90ZWN0ZWQgX3Byb3RvQnVmOiBQcm90b1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IEFycmF5PEtleWVkU2lnbmF0dXJlPiA9IFtdXHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uczogQXJyYXk8SGFzaD4gPSBbXVxyXG5cclxuICAgIGNvbnN0cnVjdG9yIChwcm90b1R5cGVOYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFBheWxvYWQsIGxlZGdlcjogSUxlZGdlciwgY2hhbmdlUGtoPzogUHVibGljS2V5SGFzaFN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Byb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUocHJvdG9UeXBlTmFtZSlcclxuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB0aGlzLmxlZGdlciA9IGxlZGdlclxyXG4gICAgICAgIGlmICghbGVkZ2VyLnByb3ZpZGVyLm5ldHdvcmspIHtcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGxlZGdlcidzIHByb3ZpZGVyIGlzIG5vdCBpbml0aWFsaXplZC5gKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZVBraCA9IGNoYW5nZVBraCB8fCBsZWRnZXIuY2hhbmdlUGtoXHJcbiAgICAgICAgaWYgKCFsZWRnZXIuZ2V0U2lnbmVyKHRoaXMuY2hhbmdlUGtoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogbGVkZ2VyIGhvbGRzIG5vIFNpZ25lciBmb3IgY2hhbmdlIGFkZHJlc3MgJHt0aGlzLmNoYW5nZVBraH0uYClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXlsb2FkKCk6IFBheWxvYWQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLnByZXBhcmVkID8gdGhpcy5fcGF5bG9hZCA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvdmlkZXIoKTogSUpzb25ScGNQcm92aWRlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLnByb3ZpZGVyXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLm5ldHdvcmsgfHwgXCJtYWlubmV0XCJcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9ucygpOiBBcnJheTxIYXNoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLmNvbnN0cnVjdG9yLm5hbWUuc3BsaXQoLyhbYS16XSg/PVtBLVpdKSkvZykuc2xpY2UoMCwgLTEpLmpvaW4oXCJcIilcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9mcm9tKCk6IEFycmF5PFB1YmxpY0tleUhhc2hTdHJpbmc+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAubWFwKGtzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtzLnB1YmxpY19rZXkpLmhhc2goKS50b0JlY2gzMih0aGlzLm5ldHdvcmspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLmdldFNpZ25lcihwa2gpPy5wa2ggfHwgdGhpcy5sZWRnZXIucGtoXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgcmVwZXRpdGlvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBraCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihwa2gpKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBfcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5fcGF5bG9hZC5wcmVwYXJlZFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbmRUcmFuc2FjdGlvbih0YXJnZXQ/OiBTcGVjcyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcbiAgICAgICAgbGV0IHJlY2VpcHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmICghcmVjZWlwdCB8fCB0YXJnZXQpIHtcclxuICAgICAgICAgICAgLy8gaWYgaW5mbGlnaHQgbm90IHlldCBwcmVwYXJlZCwgb3IgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgdHJhbnNtaXR0ZWQsXHJcbiAgICAgICAgICAgIC8vIHByZXBhcmUgYSBuZXcgaW5mbGlnaHQgZWl0aGVyIHdpdGggc3BlY2lmaWVkIHBhcmFtcyAoaWYgYW55KSxcclxuICAgICAgICAgICAgLy8gb3IgcHJldmlvdXNseSBwcmVwYXJlZCBpbmZsaWdodCAoaWYga25vd24pLlxyXG4gICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb24odGFyZ2V0IHx8IHJlY2VpcHQgYXMgU3BlY3MpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWNlaXB0Py5zdGF0dXMgJiYgcmVjZWlwdC5zdGF0dXMgIT09IFwic2lnbmVkXCIgJiYgIXJlY2VpcHQ/LmVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgaW5mbGlnaHQgd2FzIGFscmVhZHkgdHJhbnNtaXR0ZWQgYW5kIGl0J3Mgbm90IHlldCBrbm93biB0byBmYWlsIC4uLlxyXG4gICAgICAgICAgICByZXR1cm4gcmVjZWlwdFxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSByZWFjaCB0aGlzIHBvaW50IGlzIGJlY2F1c2UgYW4gaW5mbGlnaHQgdHJhbnNhY3Rpb24gaXMgXHJcbiAgICAgICAgLy8gcmVhZHkgdG8gYmUgdHJhbnNtaXR0ZWRcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInBlbmRpbmdcIlxyXG4gICAgICAgIGRlbGV0ZSBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvclxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyXHJcbiAgICAgICAgICAgIC5zZW5kUmF3VHJhbnNhY3Rpb24odGhpcy5fdG9KU09OKGZhbHNlKSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBlcnIpXHJcbiAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihhY2NlcHRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInJlbGF5ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBFcnJvcihgUmVqZWN0ZWQgZm9yIHVua25vd24gcmVhc29uc2ApKVxyXG4gICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1tyZWNlaXB0Lmhhc2hdLmVycm9yID0gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzaWduVHJhbnNhY3Rpb24odGFyZ2V0PzogU3BlY3MsIHJlbG9hZFV0eG9zID0gZmFsc2UpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD4ge1xyXG4gICAgICAgIHRhcmdldCA9IGF3YWl0IHRoaXMuX3BheWxvYWQudmFsaWRhdGVUYXJnZXQodGFyZ2V0KVxyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gaWYgY2FsbGVkIGZyb20gdGhpcy5zZW5kKCkgd2l0aCBubyBwYXJhbXNcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBzaWduIGEgdHJhbnNhY3Rpb24gaWYgbm8gcGFyYW1zIHdlcmUgcHJldmlvdXNseSBzcGVjaWZpZWQuYClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaW5mbGlnaHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmIChpbmZsaWdodCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNpZ24ucGVuZGluZ1JlY2VpcHQgPT5cIiwgaW5mbGlnaHQpXHJcbiAgICAgICAgICAgIGlmICghaW5mbGlnaHQ/LnN0YXR1cyB8fCBpbmZsaWdodC5zdGF0dXMgPT09IFwic2lnbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlY292ZXIgaW5wdXQgdXR4b3MgaWYgcHJldmlvdXNseSBzaWduZWQgcGFyYW1zIHdlcmUgbm90IGV2ZW4gYXR0ZW1wdGVkIHRvIGJlIHNlbnRcclxuICAgICAgICAgICAgICAgIGlmICghcmVsb2FkVXR4b3MpIHRoaXMuX3JlY292ZXJJbnB1dFV0eG9zKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mbGlnaHQuc3RhdHVzID09PSBcInBlbmRpbmdcIiAmJiAhaW5mbGlnaHQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRocm93IGV4Y2VwdGlvbiBpZiBhIGZvcm1lcmx5IHNpZ25lZCB0cmFuc2FjdGlvbiBpcyBzdGlsbCB3YWl0aW5nIHRvIGJlIHJlbGF5ZWQgYnkgYSBwcm92aWRlclxyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW4tZmxpZ2h0IHR4IGJlaW5nIHJlbGF5ZWQ6ICR7aW5mbGlnaHQuaGFzaH1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuICAgICAgICAvLyBjbGVhbiBjdXJyZW50IHNpZ25hdHVyZXMsIHNvIG5ldyBVVFhPcyBjYW4gYmUgY29uc3VtZWQgYW5kIHRoZXJlZm9yZSBhIG5ldyB0cmFuc2FjdGlvbiBoYXNoIGJlIGluY2VwdGVkXHJcbiAgICAgICAgdGhpcy5fY2xlYW5TaWduYXR1cmVzKHRhcmdldClcclxuICAgICAgICBcclxuICAgICAgICAvLyBpZiBub3QgeWV0IHByZXBhcmVkLCB0cnkgdG8gY292ZXIgdHJhbnNhY3Rpb24gZXhwZW5zZXMgd2l0aCBleGlzdGluZyB1dHhvcyBvbiBzaWduZXJzOlxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSAwblxyXG4gICAgICAgIGlmICghdGhpcy5fcGF5bG9hZC5wcmVwYXJlZCkge1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSBhd2FpdCB0aGlzLl9wYXlsb2FkLmNvbnN1bWVVdHhvcyh0aGlzLmxlZGdlciwgcmVsb2FkVXR4b3MpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBjb25zdW1lIFVUWE9zIGZyb20gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH06ICR7ZXJyfS5gXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXlsb2FkLnByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93cyBleGVjZXB0aW9uIGlmIG5vdCBlbm91Z2ggdXR4b3Mgd2VyZSBmb3VuZCB0byBjb3ZlciB0cmFuc2FjdGlvbiBleHBlbnNlczpcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnN1ZmZpY2llbnQgZnVuZHMgb24gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH0ke2NoYW5nZSA8IDAgPyBgOiByZXF1aXJlcyBleHRyYSAkey1jaGFuZ2V9ICRuYW5vd2l0cy5gIDogXCIuXCJ9YFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgLy8gZG91YmxlLWNoZWNrIHdlaWdodCBkb2VzIG5vdCBleGNlZWRzIGJsb2NrIGxpbWl0Li4uXHJcbiAgICAgICAgaWYgKHRoaXMuX3BheWxvYWQud2VpZ2h0ID4gdGhpcy5fcGF5bG9hZC5tYXhXZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiB3ZWlnaHQgZXhjZWVkZWQgYmxvY2sgbGltaXQ6ICR7dGhpcy5fcGF5bG9hZC53ZWlnaHR9ID4gJHt0aGlzLl9wYXlsb2FkLm1heFdlaWdodH0uYFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaWduaW5nIHRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkIGdlbmVyYXRlcyB0aGUgdHJhbnNhY3Rpb24gaGFzaCwgYW5kIHRoZSByZWNlaXB0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vwc2VydFRyYW5zYWN0aW9uUmVjZWlwdCh0aGlzLl9zaWduVHJhbnNhY3Rpb25QYXlsb2FkKCksIHRhcmdldCwgXCJzaWduZWRcIikgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbmZpcm1UcmFuc2FjdGlvbihcclxuICAgICAgICBoYXNoOiBIYXNoLCBcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgICBjb25maXJtYXRpb25zPzogbnVtYmVyLFxyXG4gICAgICAgICAgICB0aW1lb3V0U2Vjcz86IG51bWJlcixcclxuICAgICAgICAgICAgb25DaGVja3BvaW50PzogVHJhbnNhY3Rpb25DYWxsYmFjayxcclxuICAgICAgICAgICAgb25TdGF0dXNDaGFuZ2U/OiBUcmFuc2FjdGlvbkNhbGxiYWNrLFxyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcblxyXG4gICAgICAgIGxldCByZWNlaXB0ID0gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgaWYgKCFyZWNlaXB0IHx8IHJlY2VpcHQuaGFzaCAhPT0gaGFzaCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdHJhbnNhY3Rpb24gbm90IGZvdW5kOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKFtcInNpZ25lZFwiLCBcInBlbmRpbmdcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiBzdGF0dXMgXCIke3JlY2VpcHQuc3RhdHVzfVwiOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbW92ZWRcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTWVtcG9vbEVycm9yKHJlY2VpcHQsIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRyYW5zYWN0aW9uIHJlbW92ZWQgZnJvbSBtZW1wb29sOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbGF5ZWRcIiAmJiBvcHRpb25zPy5vblN0YXR1c0NoYW5nZSkgdHJ5IHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgIH0gY2F0Y2gge307XHJcblxyXG4gICAgICAgIGNvbnN0IGdsb2JhbFRpbWVyID0gKHN0YXJ0OiBudW1iZXIsIG1zOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHBvbGxpbmcgdGltZW91dCBhZnRlciAke01hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwKX0gc2VjcykuYCksIFxyXG4gICAgICAgICAgICAgICAgICAgIG1zXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IFtjb25maXJtYXRpb25zLCBpbnRlcnZhbCwgdGltZW91dCwgZ2xvYmFsVGltZW91dF0gPSBbXHJcbiAgICAgICAgICAgIG9wdGlvbnM/LmNvbmZpcm1hdGlvbnMgfHwgMCxcclxuICAgICAgICAgICAgMTAwMDAsXHJcbiAgICAgICAgICAgIDUwMDAsXHJcbiAgICAgICAgICAgIChvcHRpb25zPy50aW1lb3V0U2VjcyB8fCA2MDApICogMTAwMCxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgZ2xvYmFsVGltZXIoRGF0ZS5ub3coKSwgZ2xvYmFsVGltZW91dClcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVhc29uOiBhbnkpID0+IHsgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihnbG9iYWxUaW1lb3V0LCByZWNlaXB0LCByZWFzb24pIH0pLFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcHJvbWlzZVBvbGxlcih7XHJcbiAgICAgICAgICAgICAgICB0YXNrRm46ICgpID0+IHRoaXMucHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb24oaGFzaCksXHJcbiAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZTogKGVycm9yOiBhbnksIHJlcG9ydDogVHJhbnNhY3Rpb25SZXBvcnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZWNlaXB0LnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuZXJyb3IgPSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIm5vdCBmb3VuZFwiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gXCJyZW1vdmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoIChyZWNlaXB0LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmVsYXllZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydD8uYmxvY2tIYXNoICYmIGlzSGV4U3RyaW5nKHJlcG9ydC5ibG9ja0hhc2gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5jb25maXJtYXRpb25zID0gcmVwb3J0LmNvbmZpcm1hdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LmJsb2NrSGFzaCA9IHJlcG9ydC5ibG9ja0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5ibG9ja0Vwb2NoID0gcmVwb3J0LmJsb2NrRXBvY2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5ibG9ja1RpbWVzdGFtcCA9IHJlcG9ydC5ibG9ja1RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuY29uZmlybWVkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImZpbmFsaXplZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVwb3J0Py5jb25maXJtYXRpb25zID49IGNvbmZpcm1hdGlvbnMgPyBcImNvbmZpcm1lZFwiIDogXCJtaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaW5lZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXBvcnQ/LmJsb2NrSGFzaCB8fCByZXBvcnQuYmxvY2tIYXNoICE9PSByZWNlaXB0LmJsb2NrSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrSGFzaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrRXBvY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVjZWlwdC5ibG9ja01pbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlY2VpcHQuYmxvY2tUaW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LnN0YXR1cyA9IFwicmVsYXllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5jb25maXJtZWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiZmluYWxpemVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZXBvcnQ/LmNvbmZpcm1hdGlvbnMgPj0gY29uZmlybWF0aW9ucyA/IFwiY29uZmlybWVkXCIgOiBcIm1pbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0Py5jb25maXJtYXRpb25zICE9PSByZWNlaXB0LmNvbmZpcm1hdGlvbnMpIHsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuY29uZmlybWF0aW9ucyA9IHJlcG9ydC5jb25maXJtYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gXCJtaW5lZFwiICYmIG9wdGlvbnM/Lm9uQ2hlY2twb2ludCkgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25DaGVja3BvaW50KHJlY2VpcHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gcmVjZWlwdC5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC50aW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFbXCJjb25maXJtZWRcIiwgXCJmaW5hbGl6ZWRcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpICYmIG9wdGlvbnM/Lm9uU3RhdHVzQ2hhbmdlKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0gPSByZWNlaXB0XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcInJlbGF5ZWRcIiwgXCJtaW5lZFwiXS5pbmNsdWRlcyhyZWNlaXB0LnN0YXR1cylcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbnRlcnZhbCwgdGltZW91dCwgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gXCJyZW1vdmVkXCIgJiYgcmVjZWlwdC50eXBlICE9PSBcIlVuc3Rha2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRSQU5TQUNUSU9OIFJFTU9WRUQgRlJPTSBNRU1QT09MIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMS4gVHJ5IHRvIHJlY292ZXIgaW5wdXQgdXR4b3MgYmVsb25naW5nIHRvIGxlZGdlcidzIGFkZHJlc3NlczpcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dHM6IEFycmF5PFV0eG9NZXRhZGF0YT4gPSByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uYm9keS5pbnB1dHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlczogQXJyYXk8S2V5ZWRTaWduYXR1cmU+ID0gcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLnNpZ25hdHVyZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0cy5sZW5ndGggPT09IHNpZ25hdHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHMuZm9yRWFjaCgobWV0YWRhdGEsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lcjogUHVibGljS2V5LmZyb21Qcm90b2J1ZihzaWduYXR1cmVzW2luZGV4XS5wdWJsaWNfa2V5KS5oYXNoKCkudG9CZWNoMzIodGhpcy5uZXR3b3JrKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnV0eG9zKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdhcm5pbmc6IGNhbm5vdCByZWNvdmVyIGlucHV0IFVUWE9TIGZyb20gdHggJHtoYXNofTogJHtlcnJ9YClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gVGhyb3cgTWVtcG9vbEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1lbXBvb2xFcnJvcihyZWNlaXB0LCBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiByZW1vdmVkIGZyb20gbWVtcG9vbDogJHtoYXNofWApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRSQU5TQUNUSU9OIEVJVEhFUiBDT05GSVJNRUQgT1IgRklOQUxJWkVEIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMS4gVHJ5IHRvIGxvYWQgdmFsdWUgdHJhbnNmZXIgb3V0cHV0cyBpbnRvIHRoZSBsZWRnZXIncyBsb2NhbCBjYWNoZTogXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtcIlN0YWtlXCIsIFwiVW5zdGFrZVwiXS5pbmNsdWRlcyhyZWNlaXB0LnR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdnRvOiBWYWx1ZVRyYW5zZmVyT3V0cHV0ID0gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQudHlwZSA9PT0gXCJTdGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLmJvZHk/Lm91dHB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlY2VpcHQudHhbcmVjZWlwdC50eXBlXS5ib2R5Py53aXRoZHJhd2FsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZ0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0eG9zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcG9pbnRlcjogYCR7cmVjZWlwdC5oYXNofTowYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0eG9fbWF0dXJlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lcjogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0czogQXJyYXk8VmFsdWVUcmFuc2Zlck91dHB1dD4gPSByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uYm9keT8ub3V0cHV0cyB8fCBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5mb3JFYWNoKCh2dG8sIGluZGV4KSA9PiB1dHhvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcG9pbnRlcjogYCR7cmVjZWlwdC5oYXNofToke2luZGV4fWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b19tYXR1cmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCh2dG8udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25lcjogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwib3V0cHV0IHV0eG9zIGJlZm9yZSA9PlwiLCB1dHhvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJvdXRwdXQgdXR4b3MgYWZ0ZXIgID0+XCIsIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnV0eG9zKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogd2FybmluZzogY2Fubm90IHJlY292ZXIgb3V0cHV0IFVUWE9zIGZyb20gJHtoYXNofTogJHtlcnJ9YClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gQWRkIGJsb2NrTWluZXIgYWRkcmVzcyB0byB0aGUgdHJhbnNhY3Rpb24gcmVjZWlwdDogXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY2VpcHQ/LmJsb2NrSGFzaCAmJiBpc0hleFN0cmluZyhyZWNlaXB0LmJsb2NrSGFzaCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmdldEJsb2NrKHJlY2VpcHQuYmxvY2tIYXNoIHx8IFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXS5ibG9ja01pbmVyID0gUHVibGljS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZnJvbVByb3RvYnVmKGJsb2NrLmJsb2NrX3NpZy5wdWJsaWNfa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc2goKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvQmVjaDMyKHRoaXMubmV0d29yayk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5vblN0YXR1c0NoYW5nZSkgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge307XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMy4gUmV0dXJuIHRyYW5zYWN0aW9uIHJlY2VpcHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblNpZ25hdHVyZXMobmV3VGFyZ2V0OiBTcGVjcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZC5yZXNldFRhcmdldChuZXdUYXJnZXQpXHJcbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9nZXRJbmZsaWdodEJ5dGVjb2RlKCk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuX3RvUHJvdG9idWYoKVxyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuX3Byb3RvQnVmLnZlcmlmeShvYmopXHJcbiAgICAgICAgaWYgKCFlcnIpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuX3Byb3RvQnVmLmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvdG9CdWYuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0UmVjZWlwdCgpOiBUcmFuc2FjdGlvblJlY2VpcHQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLl9wYXlsb2FkLmhhc2hcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0VHJhbnNtaXNzaW9uKCk6IFRyYW5zbWlzc2lvbiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYnl0ZWNvZGU6IHRoaXMuX2dldEluZmxpZ2h0Qnl0ZWNvZGUoKSxcclxuICAgICAgICAgICAgaGFzaDogdGhpcy5fcGF5bG9hZC5oYXNoLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLl90b0pTT04odHJ1ZSksXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcmVjb3ZlcklucHV0VXR4b3MoKTogYW55IHt9XHJcbiAgICBwcm90ZWN0ZWQgX3JlY292ZXJPdXRwdXRVdHhvcygpOiBhbnkge31cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Vwc2VydFRyYW5zYWN0aW9uUmVjZWlwdChoYXNoOiBIYXNoLCB0YXJnZXQ6IFNwZWNzLCBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzKTogVHJhbnNhY3Rpb25SZWNlaXB0IHtcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3BheWxvYWQuaW50b1JlY2VpcHQodGFyZ2V0LCB0aGlzLm5ldHdvcmspLFxyXG4gICAgICAgICAgICBoYXNoLFxyXG4gICAgICAgICAgICBjaGFuZ2U6IHRoaXMuX3BheWxvYWQuY2hhbmdlLFxyXG4gICAgICAgICAgICBmZWVzOiB0aGlzLl9wYXlsb2FkLmZlZXMsXHJcbiAgICAgICAgICAgIGZyb206IHRoaXMuX2Zyb20sXHJcbiAgICAgICAgICAgIHN0YXR1cyxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcclxuICAgICAgICAgICAgdHg6IHRoaXMuX3RvSlNPTih0cnVlKSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fcGF5bG9hZC52YWx1ZSxcclxuICAgICAgICAgICAgd2VpZ2h0OiB0aGlzLl9wYXlsb2FkLndlaWdodCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfc2lnblRyYW5zYWN0aW9uUGF5bG9hZCgpOiBIYXNoO1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF90b0pTT04oX2h1bWFuaXplOiBib29sZWFuKTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF90b1Byb3RvYnVmKCk6IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlck11bHRpU2lnPFNwZWNzLCBQYXlsb2FkIGV4dGVuZHMgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFNwZWNzPj4gXHJcbiAgICBleHRlbmRzIFRyYW5zbWl0dGVyPFNwZWNzLCBQYXlsb2FkPiBcclxue1xyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgcGF5bG9hZDogUGF5bG9hZCwgbGVkZ2VyOiBJTGVkZ2VyLCBjaGFuZ2VQa2g/OiBQdWJsaWNLZXlIYXNoU3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgcGF5bG9hZCwgbGVkZ2VyLCBjaGFuZ2VQa2gpXHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vIFJlY292ZXIgZm9ybWVybHkgY29uc3VtZWQgVVRYT3MgYnkgYSBmYWlsaW5nIHRyYW5zYWN0aW9uIGJhY2sgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzaWduZXIncyBVVFhPIHBvb2xcclxuICAgIHByb3RlY3RlZCBfcmVjb3ZlcklucHV0VXR4b3MoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcGF5bG9hZC5pbnB1dHMpIHsgICAgXHJcbiAgICAgICAgICAgIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnRoaXMuX3BheWxvYWQuaW5wdXRzKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLy8gUmVjb3ZlciBzZWxmLXRhcmdldGVkIG91dHB1dHMgYXMgZXhwZW5kYWJsZSB1dHhvcyBvbiB0aGVpciByZXNwZWN0aXZlIHNpZ25lcidzIG1lbW9pemVkIGNhY2hlXHJcbiAgICBwcm90ZWN0ZWQgX3JlY292ZXJPdXRwdXRVdHhvcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXlsb2FkLmhhc2ggJiYgdGhpcy5fcGF5bG9hZC5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHV0eG9zOiBBcnJheTxVdHhvPiA9IFtdXHJcbiAgICAgICAgICAgIHRoaXMuX3BheWxvYWQub3V0cHV0cy5mb3JFYWNoKCh2dG8sIGluZGV4KSA9PiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVkZ2VyLmdldFNpZ25lcih2dG8ucGtoKSkgdXR4b3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiB2dG8ucGtoLFxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dF9wb2ludGVyOiBgJHt0aGlzLl9wYXlsb2FkLmhhc2h9OiR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2lnblRyYW5zYWN0aW9uUGF5bG9hZCgpOiBIYXNoIHtcclxuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5fcGF5bG9hZC5oYXNoXHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBoYXNoaWZ5IHBheWxvYWQ6ICR7dGhpcy5fcGF5bG9hZC50b0pTT04odHJ1ZSwgdGhpcy5uZXR3b3JrKX19LmBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BheWxvYWQuaW5wdXRzLmZvckVhY2godXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVyID0gdGhpcy5sZWRnZXIuZ2V0U2lnbmVyKHV0eG8uc2lnbmVyKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzaWduZXIpIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBjYW5ub3QgZmluZCBTaWduZXIgJHt1dHhvLnNpZ25lcn0gaW4gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH0uYCAgICBcclxuICAgICAgICAgICAgICAgICk7IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGAuLi5zaWduZXIgJHtzaWduZXIucGtofSBzaWduaW5nIGhhc2ggJHtoYXNofS4uLmApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25lci5zaWduSGFzaChoYXNoKSkgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9KU09OKGh1bWFuaXplOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4geyBcclxuICAgICAgICAgICAgW3RoaXMudHlwZV06IHsgXHJcbiAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9wYXlsb2FkLnRvSlNPTihodW1hbml6ZSwgdGhpcy5uZXR3b3JrKSxcclxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZXM6IHRoaXMuX3NpZ25hdHVyZXMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9wYXlsb2FkLnRvUHJvdG9idWYoKVxyXG4gICAgICAgIGlmIChib2R5ICYmIHRoaXMuX3NpZ25hdHVyZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJvZHksXHJcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVzOiB0aGlzLl9zaWduYXR1cmVzLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
416
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNtaXR0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vdHJhbnNtaXR0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUV4RCwyQ0FBaUU7QUFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQTtBQUdsRixnQ0FBd0M7QUFFeEMsb0NBQXVDO0FBVXZDLG1DQVlnQjtBQUVoQixNQUFzQixXQUFXO0lBVTdCLFlBQWEsYUFBcUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUErQjtRQUg1RixnQkFBVyxHQUEwQixFQUFFLENBQUE7UUFDdkMsa0JBQWEsR0FBZ0IsRUFBRSxDQUFBO1FBR3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLCtDQUErQyxJQUFJLENBQUMsU0FBUyxH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QUFJLENBQUMsTUFBTTtvQkFBRSxNQUFNLEtBQUssQ0FDcEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksd0NBQXdDLElBQUksQ0FBQyxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQ3ZJLENBQUM7cUJBQU0sQ0FBQztvQkFDTCxpRUFBaUU7b0JBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtnQkFDaEQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1lBQ0YsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFpQjtRQUMvQixPQUFPO1lBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDL0I7U0FDSixDQUFBO0lBQ0wsQ0FBQztJQUVTLFdBQVc7UUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTztnQkFDSCxJQUFJO2dCQUNKLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVzthQUMvQixDQUFBO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJFRCxrREFxRUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBwcm9taXNlUG9sbGVyID0gcmVxdWlyZSgncHJvbWlzZS1wb2xsZXInKS5kZWZhdWx0O1xyXG5cclxuaW1wb3J0IHsgUm9vdCBhcyBQcm90b1Jvb3QsIFR5cGUgYXMgUHJvdG9UeXBlIH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcblxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlcG9ydCwgVXR4b01ldGFkYXRhLCBWYWx1ZVRyYW5zZmVyT3V0cHV0IH0gZnJvbSBcIi4uL3JwYy90eXBlc1wiXHJcbmltcG9ydCB7IEpzb25ScGNQcm92aWRlciB9IGZyb20gXCIuLi9ycGNcIlxyXG5pbXBvcnQgeyBIYXNoLCBOZXR3b3JrIH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgaXNIZXhTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgSUxlZGdlcixcclxuICAgIElKc29uUnBjUHJvdmlkZXIsIFxyXG4gICAgSVRyYW5zbWl0dGVyLCBcclxuICAgIElUcmFuc2FjdGlvblBheWxvYWQsIFxyXG4gICAgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnLCBcclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCJcclxuXHJcbmltcG9ydCB7IFxyXG4gICAgS2V5ZWRTaWduYXR1cmUsIFxyXG4gICAgUHVibGljS2V5LCBcclxuICAgIFB1YmxpY0tleUhhc2hTdHJpbmcsIFxyXG4gICAgTWVtcG9vbEVycm9yLFxyXG4gICAgVHJhbnNhY3Rpb25DYWxsYmFjaywgXHJcbiAgICBUcmFuc2FjdGlvblJlY2VpcHQsIFxyXG4gICAgVHJhbnNhY3Rpb25TdGF0dXMsIFxyXG4gICAgVGltZW91dEVycm9yLFxyXG4gICAgVHJhbnNtaXNzaW9uLFxyXG4gICAgVHJhbnNtaXNzaW9uRXJyb3IsXHJcbiAgICBVdHhvLFxyXG59IGZyb20gXCIuL3R5cGVzXCJcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlcjxTcGVjcywgUGF5bG9hZCBleHRlbmRzIElUcmFuc2FjdGlvblBheWxvYWQ8U3BlY3M+PiBpbXBsZW1lbnRzIElUcmFuc21pdHRlciB7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZWFkb25seSBsZWRnZXI6IElMZWRnZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlUGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nO1xyXG4gICAgXHJcbiAgICBwcm90ZWN0ZWQgX3BheWxvYWQ6IFBheWxvYWQ7XHJcbiAgICBwcm90ZWN0ZWQgX3Byb3RvQnVmOiBQcm90b1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IEFycmF5PEtleWVkU2lnbmF0dXJlPiA9IFtdXHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uczogQXJyYXk8SGFzaD4gPSBbXVxyXG5cclxuICAgIGNvbnN0cnVjdG9yIChwcm90b1R5cGVOYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFBheWxvYWQsIGxlZGdlcjogSUxlZGdlciwgY2hhbmdlUGtoPzogUHVibGljS2V5SGFzaFN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Byb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUocHJvdG9UeXBlTmFtZSlcclxuICAgICAgICB0aGlzLl9wYXlsb2FkID0gcGF5bG9hZDtcclxuICAgICAgICB0aGlzLmxlZGdlciA9IGxlZGdlclxyXG4gICAgICAgIGlmICghbGVkZ2VyLnByb3ZpZGVyLm5ldHdvcmspIHtcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGxlZGdlcidzIHByb3ZpZGVyIGlzIG5vdCBpbml0aWFsaXplZC5gKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoYW5nZVBraCA9IGNoYW5nZVBraCB8fCBsZWRnZXIuY2hhbmdlUGtoXHJcbiAgICAgICAgaWYgKCFsZWRnZXIuZ2V0U2lnbmVyKHRoaXMuY2hhbmdlUGtoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogbGVkZ2VyIGhvbGRzIG5vIFNpZ25lciBmb3IgY2hhbmdlIGFkZHJlc3MgJHt0aGlzLmNoYW5nZVBraH0uYClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXlsb2FkKCk6IFBheWxvYWQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLnByZXBhcmVkID8gdGhpcy5fcGF5bG9hZCA6IHVuZGVmaW5lZFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcHJvdmlkZXIoKTogSUpzb25ScGNQcm92aWRlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLnByb3ZpZGVyXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLm5ldHdvcmsgfHwgXCJtYWlubmV0XCJcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9ucygpOiBBcnJheTxIYXNoPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXlsb2FkLmNvbnN0cnVjdG9yLm5hbWUuc3BsaXQoLyhbYS16XSg/PVtBLVpdKSkvZykuc2xpY2UoMCwgLTEpLmpvaW4oXCJcIilcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IF9mcm9tKCk6IEFycmF5PFB1YmxpY0tleUhhc2hTdHJpbmc+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAubWFwKGtzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwa2ggPSBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtzLnB1YmxpY19rZXkpLmhhc2goKS50b0JlY2gzMih0aGlzLm5ldHdvcmspXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVkZ2VyLmdldFNpZ25lcihwa2gpPy5wa2ggfHwgdGhpcy5sZWRnZXIucGtoXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLy8gYXZvaWQgcmVwZXRpdGlvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBraCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihwa2gpKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBfcHJlcGFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5fcGF5bG9hZC5wcmVwYXJlZFxyXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLl9zaWduYXR1cmVzXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbmRUcmFuc2FjdGlvbih0YXJnZXQ/OiBTcGVjcyk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcbiAgICAgICAgbGV0IHJlY2VpcHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmICghcmVjZWlwdCB8fCB0YXJnZXQpIHtcclxuICAgICAgICAgICAgLy8gaWYgaW5mbGlnaHQgbm90IHlldCBwcmVwYXJlZCwgb3IgcHJlcGFyZWQgYnV0IG5vdCB5ZXQgdHJhbnNtaXR0ZWQsXHJcbiAgICAgICAgICAgIC8vIHByZXBhcmUgYSBuZXcgaW5mbGlnaHQgZWl0aGVyIHdpdGggc3BlY2lmaWVkIHBhcmFtcyAoaWYgYW55KSxcclxuICAgICAgICAgICAgLy8gb3IgcHJldmlvdXNseSBwcmVwYXJlZCBpbmZsaWdodCAoaWYga25vd24pLlxyXG4gICAgICAgICAgICByZWNlaXB0ID0gYXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb24odGFyZ2V0IHx8IHJlY2VpcHQgYXMgU3BlY3MpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWNlaXB0Py5zdGF0dXMgJiYgcmVjZWlwdC5zdGF0dXMgIT09IFwic2lnbmVkXCIgJiYgIXJlY2VpcHQ/LmVycm9yKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgaW5mbGlnaHQgd2FzIGFscmVhZHkgdHJhbnNtaXR0ZWQgYW5kIGl0J3Mgbm90IHlldCBrbm93biB0byBmYWlsIC4uLlxyXG4gICAgICAgICAgICByZXR1cm4gcmVjZWlwdFxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiB3ZSByZWFjaCB0aGlzIHBvaW50IGlzIGJlY2F1c2UgYW4gaW5mbGlnaHQgdHJhbnNhY3Rpb24gaXMgXHJcbiAgICAgICAgLy8gcmVhZHkgdG8gYmUgdHJhbnNtaXR0ZWRcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInBlbmRpbmdcIlxyXG4gICAgICAgIGRlbGV0ZSBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvclxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyXHJcbiAgICAgICAgICAgIC5zZW5kUmF3VHJhbnNhY3Rpb24odGhpcy5fdG9KU09OKGZhbHNlKSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBlcnIpXHJcbiAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihhY2NlcHRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXB0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXS5zdGF0dXMgPSBcInJlbGF5ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbcmVjZWlwdC5oYXNoXVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUcmFuc21pc3Npb25FcnJvcih0aGlzLl9nZXRJbmZsaWdodFRyYW5zbWlzc2lvbigpLCBFcnJvcihgUmVqZWN0ZWQgZm9yIHVua25vd24gcmVhc29uc2ApKVxyXG4gICAgICAgICAgICAgICAgICAgIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1tyZWNlaXB0Lmhhc2hdLmVycm9yID0gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzaWduVHJhbnNhY3Rpb24odGFyZ2V0PzogU3BlY3MsIHJlbG9hZFV0eG9zID0gZmFsc2UpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVjZWlwdD4ge1xyXG4gICAgICAgIHRhcmdldCA9IGF3YWl0IHRoaXMuX3BheWxvYWQudmFsaWRhdGVUYXJnZXQodGFyZ2V0KVxyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gaWYgY2FsbGVkIGZyb20gdGhpcy5zZW5kKCkgd2l0aCBubyBwYXJhbXNcclxuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBzaWduIGEgdHJhbnNhY3Rpb24gaWYgbm8gcGFyYW1zIHdlcmUgcHJldmlvdXNseSBzcGVjaWZpZWQuYClcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgaW5mbGlnaHQgPSB0aGlzLl9nZXRJbmZsaWdodFJlY2VpcHQoKVxyXG4gICAgICAgIGlmIChpbmZsaWdodCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNpZ24ucGVuZGluZ1JlY2VpcHQgPT5cIiwgaW5mbGlnaHQpXHJcbiAgICAgICAgICAgIGlmICghaW5mbGlnaHQ/LnN0YXR1cyB8fCBpbmZsaWdodC5zdGF0dXMgPT09IFwic2lnbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJlY292ZXIgaW5wdXQgdXR4b3MgaWYgcHJldmlvdXNseSBzaWduZWQgcGFyYW1zIHdlcmUgbm90IGV2ZW4gYXR0ZW1wdGVkIHRvIGJlIHNlbnRcclxuICAgICAgICAgICAgICAgIGlmICghcmVsb2FkVXR4b3MpIHRoaXMuX3JlY292ZXJJbnB1dFV0eG9zKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5mbGlnaHQuc3RhdHVzID09PSBcInBlbmRpbmdcIiAmJiAhaW5mbGlnaHQuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRocm93IGV4Y2VwdGlvbiBpZiBhIGZvcm1lcmx5IHNpZ25lZCB0cmFuc2FjdGlvbiBpcyBzdGlsbCB3YWl0aW5nIHRvIGJlIHJlbGF5ZWQgYnkgYSBwcm92aWRlclxyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW4tZmxpZ2h0IHR4IGJlaW5nIHJlbGF5ZWQ6ICR7aW5mbGlnaHQuaGFzaH1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuICAgICAgICBcclxuICAgICAgICAvLyBjbGVhbiBjdXJyZW50IHNpZ25hdHVyZXMsIHNvIG5ldyBVVFhPcyBjYW4gYmUgY29uc3VtZWQgYW5kIHRoZXJlZm9yZSBhIG5ldyB0cmFuc2FjdGlvbiBoYXNoIGJlIGluY2VwdGVkXHJcbiAgICAgICAgdGhpcy5fY2xlYW5TaWduYXR1cmVzKHRhcmdldClcclxuICAgICAgICBcclxuICAgICAgICAvLyBpZiBub3QgeWV0IHByZXBhcmVkLCB0cnkgdG8gY292ZXIgdHJhbnNhY3Rpb24gZXhwZW5zZXMgd2l0aCBleGlzdGluZyB1dHhvcyBvbiBzaWduZXJzOlxyXG4gICAgICAgIGxldCBjaGFuZ2UgPSAwblxyXG4gICAgICAgIGlmICghdGhpcy5fcGF5bG9hZC5wcmVwYXJlZCkge1xyXG4gICAgICAgICAgICBjaGFuZ2UgPSBhd2FpdCB0aGlzLl9wYXlsb2FkLmNvbnN1bWVVdHhvcyh0aGlzLmxlZGdlciwgcmVsb2FkVXR4b3MpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGNhbm5vdCBjb25zdW1lIFVUWE9zIGZyb20gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH06ICR7ZXJyfS5gXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXlsb2FkLnByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIHRocm93cyBleGVjZXB0aW9uIGlmIG5vdCBlbm91Z2ggdXR4b3Mgd2VyZSBmb3VuZCB0byBjb3ZlciB0cmFuc2FjdGlvbiBleHBlbnNlczpcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnN1ZmZpY2llbnQgZnVuZHMgb24gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH0ke2NoYW5nZSA8IDAgPyBgOiByZXF1aXJlcyBleHRyYSAkey1jaGFuZ2V9ICRuYW5vd2l0cy5gIDogXCIuXCJ9YFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgLy8gZG91YmxlLWNoZWNrIHdlaWdodCBkb2VzIG5vdCBleGNlZWRzIGJsb2NrIGxpbWl0Li4uXHJcbiAgICAgICAgaWYgKHRoaXMuX3BheWxvYWQud2VpZ2h0ID4gdGhpcy5fcGF5bG9hZC5tYXhXZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiB3ZWlnaHQgZXhjZWVkZWQgYmxvY2sgbGltaXQ6ICR7dGhpcy5fcGF5bG9hZC53ZWlnaHR9ID4gJHt0aGlzLl9wYXlsb2FkLm1heFdlaWdodH0uYFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaWduaW5nIHRoZSB0cmFuc2FjdGlvbiBwYXlsb2FkIGdlbmVyYXRlcyB0aGUgdHJhbnNhY3Rpb24gaGFzaCwgYW5kIHRoZSByZWNlaXB0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vwc2VydFRyYW5zYWN0aW9uUmVjZWlwdCh0aGlzLl9zaWduVHJhbnNhY3Rpb25QYXlsb2FkKCksIHRhcmdldCwgXCJzaWduZWRcIikgICAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbmZpcm1UcmFuc2FjdGlvbihcclxuICAgICAgICBoYXNoOiBIYXNoLCBcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgICBjb25maXJtYXRpb25zPzogbnVtYmVyLFxyXG4gICAgICAgICAgICB0aW1lb3V0U2Vjcz86IG51bWJlcixcclxuICAgICAgICAgICAgb25DaGVja3BvaW50PzogVHJhbnNhY3Rpb25DYWxsYmFjayxcclxuICAgICAgICAgICAgb25TdGF0dXNDaGFuZ2U/OiBUcmFuc2FjdGlvbkNhbGxiYWNrLFxyXG4gICAgICAgIH1cclxuICAgICk6IFByb21pc2U8VHJhbnNhY3Rpb25SZWNlaXB0PiB7XHJcblxyXG4gICAgICAgIGxldCByZWNlaXB0ID0gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgaWYgKCFyZWNlaXB0IHx8IHJlY2VpcHQuaGFzaCAhPT0gaGFzaCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdHJhbnNhY3Rpb24gbm90IGZvdW5kOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKFtcInNpZ25lZFwiLCBcInBlbmRpbmdcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiBzdGF0dXMgXCIke3JlY2VpcHQuc3RhdHVzfVwiOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbW92ZWRcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTWVtcG9vbEVycm9yKHJlY2VpcHQsIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHRyYW5zYWN0aW9uIHJlbW92ZWQgZnJvbSBtZW1wb29sOiAke2hhc2h9YClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY2VpcHQuc3RhdHVzID09PSBcInJlbGF5ZWRcIiAmJiBvcHRpb25zPy5vblN0YXR1c0NoYW5nZSkgdHJ5IHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgIH0gY2F0Y2gge307XHJcblxyXG4gICAgICAgIGNvbnN0IGdsb2JhbFRpbWVyID0gKHN0YXJ0OiBudW1iZXIsIG1zOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHBvbGxpbmcgdGltZW91dCBhZnRlciAke01hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwKX0gc2VjcykuYCksIFxyXG4gICAgICAgICAgICAgICAgICAgIG1zXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IFtjb25maXJtYXRpb25zLCBpbnRlcnZhbCwgdGltZW91dCwgZ2xvYmFsVGltZW91dF0gPSBbXHJcbiAgICAgICAgICAgIG9wdGlvbnM/LmNvbmZpcm1hdGlvbnMgfHwgMCxcclxuICAgICAgICAgICAgMTAwMDAsXHJcbiAgICAgICAgICAgIDUwMDAsXHJcbiAgICAgICAgICAgIChvcHRpb25zPy50aW1lb3V0U2VjcyB8fCA2MDApICogMTAwMCxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcclxuICAgICAgICAgICAgZ2xvYmFsVGltZXIoRGF0ZS5ub3coKSwgZ2xvYmFsVGltZW91dClcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgocmVhc29uOiBhbnkpID0+IHsgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihnbG9iYWxUaW1lb3V0LCByZWNlaXB0LCByZWFzb24pIH0pLFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcHJvbWlzZVBvbGxlcih7XHJcbiAgICAgICAgICAgICAgICB0YXNrRm46ICgpID0+IHRoaXMucHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb24oaGFzaCkuY2F0Y2goZXJyID0+IGVyciksXHJcbiAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZTogKGVycm9yOiBhbnksIHJlcG9ydDogVHJhbnNhY3Rpb25SZXBvcnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZWNlaXB0LnN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuZXJyb3IgPSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5kZXhPZihcIkl0ZW1Ob3RGb3VuZFwiKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gXCJyZW1vdmVkXCJcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoIChyZWNlaXB0LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmVsYXllZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydD8uYmxvY2tIYXNoICYmIGlzSGV4U3RyaW5nKHJlcG9ydC5ibG9ja0hhc2gpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5jb25maXJtYXRpb25zID0gcmVwb3J0LmNvbmZpcm1hdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LmJsb2NrSGFzaCA9IHJlcG9ydC5ibG9ja0hhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5ibG9ja0Vwb2NoID0gcmVwb3J0LmJsb2NrRXBvY2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5ibG9ja1RpbWVzdGFtcCA9IHJlcG9ydC5ibG9ja1RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuc3RhdHVzID0gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnQuY29uZmlybWVkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImZpbmFsaXplZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAocmVwb3J0Py5jb25maXJtYXRpb25zID49IGNvbmZpcm1hdGlvbnMgPyBcImNvbmZpcm1lZFwiIDogXCJtaW5lZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaW5lZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXBvcnQ/LmJsb2NrSGFzaCB8fCByZXBvcnQuYmxvY2tIYXNoICE9PSByZWNlaXB0LmJsb2NrSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrSGFzaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNlaXB0LmJsb2NrRXBvY2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVjZWlwdC5ibG9ja01pbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlY2VpcHQuYmxvY2tUaW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXB0LnN0YXR1cyA9IFwicmVsYXllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC5zdGF0dXMgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC5jb25maXJtZWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiZmluYWxpemVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChyZXBvcnQ/LmNvbmZpcm1hdGlvbnMgPj0gY29uZmlybWF0aW9ucyA/IFwiY29uZmlybWVkXCIgOiBcIm1pbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0Py5jb25maXJtYXRpb25zICE9PSByZWNlaXB0LmNvbmZpcm1hdGlvbnMpIHsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQuY29uZmlybWF0aW9ucyA9IHJlcG9ydC5jb25maXJtYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gXCJtaW5lZFwiICYmIG9wdGlvbnM/Lm9uQ2hlY2twb2ludCkgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25DaGVja3BvaW50KHJlY2VpcHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gcmVjZWlwdC5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWlwdC50aW1lc3RhbXAgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFbXCJjb25maXJtZWRcIiwgXCJmaW5hbGl6ZWRcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpICYmIG9wdGlvbnM/Lm9uU3RhdHVzQ2hhbmdlKSB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblN0YXR1c0NoYW5nZShyZWNlaXB0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0gPSByZWNlaXB0XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcInJlbGF5ZWRcIiwgXCJtaW5lZFwiXS5pbmNsdWRlcyhyZWNlaXB0LnN0YXR1cylcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbnRlcnZhbCwgdGltZW91dCwgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWNlaXB0LnN0YXR1cyA9PT0gXCJyZW1vdmVkXCIgJiYgcmVjZWlwdC50eXBlICE9PSBcIlVuc3Rha2VcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUUkFOU0FDVElPTiBSRU1PVkVEIEZST00gTUVNUE9PTCAvL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAxLiBUcnkgdG8gcmVjb3ZlciBpbnB1dCB1dHhvcyBiZWxvbmdpbmcgdG8gbGVkZ2VyJ3MgYWRkcmVzc2VzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRzOiBBcnJheTxVdHhvTWV0YWRhdGE+ID0gcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLmJvZHkuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduYXR1cmVzOiBBcnJheTxLZXllZFNpZ25hdHVyZT4gPSByZWNlaXB0LnR4W3JlY2VpcHQudHlwZV0uc2lnbmF0dXJlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dHMubGVuZ3RoID09PSBzaWduYXR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cy5mb3JFYWNoKChtZXRhZGF0YSwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZXI6IFB1YmxpY0tleS5mcm9tUHJvdG9idWYoc2lnbmF0dXJlc1tpbmRleF0ucHVibGljX2tleSkuaGFzaCgpLnRvQmVjaDMyKHRoaXMubmV0d29yayksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZGdlci5hZGRVdHhvcyguLi51dHhvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdhcm5pbmc6IGNhbm5vdCByZWNvdmVyIGlucHV0IFVUWE9TIGZyb20gdHggJHtoYXNofTogJHtlcnJ9YClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAyLiBUaHJvdyBNZW1wb29sRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1lbXBvb2xFcnJvcihyZWNlaXB0LCBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0cmFuc2FjdGlvbiByZW1vdmVkIGZyb20gbWVtcG9vbDogJHtoYXNofWApO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRSQU5TQUNUSU9OIEVJVEhFUiBDT05GSVJNRUQgT1IgRklOQUxJWkVEIC8vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEuIFRyeSB0byBsb2FkIHZhbHVlIHRyYW5zZmVyIG91dHB1dHMgaW50byB0aGUgbGVkZ2VyJ3MgbG9jYWwgY2FjaGU6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXR4b3M6IEFycmF5PFV0eG8+ID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbXCJTdGFrZVwiLCBcIlVuc3Rha2VcIl0uaW5jbHVkZXMocmVjZWlwdC50eXBlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2dG86IFZhbHVlVHJhbnNmZXJPdXRwdXQgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpcHQudHlwZSA9PT0gXCJTdGFrZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJlY2VpcHQudHhbcmVjZWlwdC50eXBlXS5ib2R5Py5vdXRwdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVjZWlwdC50eFtyZWNlaXB0LnR5cGVdLmJvZHk/LndpdGhkcmF3YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2dG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcG9pbnRlcjogYCR7cmVjZWlwdC5oYXNofTowYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsb2NrOiB2dG8udGltZV9sb2NrLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b19tYXR1cmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduZXI6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRzOiBBcnJheTxWYWx1ZVRyYW5zZmVyT3V0cHV0PiA9IHJlY2VpcHQudHhbcmVjZWlwdC50eXBlXS5ib2R5Py5vdXRwdXRzIHx8IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5mb3JFYWNoKCh2dG8sIGluZGV4KSA9PiB1dHhvcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BvaW50ZXI6IGAke3JlY2VpcHQuaGFzaH06JHtpbmRleH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXR4b19tYXR1cmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQodnRvLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiB2dG8ucGtoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB3YXJuaW5nOiBjYW5ub3QgcmVjb3ZlciBvdXRwdXQgVVRYT3MgZnJvbSAke2hhc2h9OiAke2Vycn1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIuIEFkZCBibG9ja01pbmVyIGFkZHJlc3MgdG8gdGhlIHRyYW5zYWN0aW9uIHJlY2VpcHQ6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjZWlwdD8uYmxvY2tIYXNoICYmIGlzSGV4U3RyaW5nKHJlY2VpcHQuYmxvY2tIYXNoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB0aGlzLnByb3ZpZGVyLmdldEJsb2NrKHJlY2VpcHQuYmxvY2tIYXNoIHx8IFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0uYmxvY2tNaW5lciA9IFB1YmxpY0tleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mcm9tUHJvdG9idWYoYmxvY2suYmxvY2tfc2lnLnB1YmxpY19rZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc2goKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b0JlY2gzMih0aGlzLm5ldHdvcmspO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5vblN0YXR1c0NoYW5nZSkgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25TdGF0dXNDaGFuZ2UocmVjZWlwdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMy4gUmV0dXJuIHRyYW5zYWN0aW9uIHJlY2VpcHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9jbGVhblNpZ25hdHVyZXMobmV3VGFyZ2V0OiBTcGVjcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZC5yZXNldFRhcmdldChuZXdUYXJnZXQpXHJcbiAgICAgICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtdXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9nZXRJbmZsaWdodEJ5dGVjb2RlKCk6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuX3RvUHJvdG9idWYoKVxyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuX3Byb3RvQnVmLnZlcmlmeShvYmopXHJcbiAgICAgICAgaWYgKCFlcnIpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuX3Byb3RvQnVmLmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvdG9CdWYuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0UmVjZWlwdCgpOiBUcmFuc2FjdGlvblJlY2VpcHQgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLl9wYXlsb2FkLmhhc2hcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLnJlY2VpcHRzW2hhc2hdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldEluZmxpZ2h0VHJhbnNtaXNzaW9uKCk6IFRyYW5zbWlzc2lvbiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYnl0ZWNvZGU6IHRoaXMuX2dldEluZmxpZ2h0Qnl0ZWNvZGUoKSxcclxuICAgICAgICAgICAgaGFzaDogdGhpcy5fcGF5bG9hZC5oYXNoLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLl90b0pTT04odHJ1ZSksXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcmVjb3ZlcklucHV0VXR4b3MoKTogYW55IHt9XHJcbiAgICBwcm90ZWN0ZWQgX3JlY292ZXJPdXRwdXRVdHhvcygpOiBhbnkge31cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Vwc2VydFRyYW5zYWN0aW9uUmVjZWlwdChoYXNoOiBIYXNoLCB0YXJnZXQ6IFNwZWNzLCBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzKTogVHJhbnNhY3Rpb25SZWNlaXB0IHtcclxuICAgICAgICBKc29uUnBjUHJvdmlkZXIucmVjZWlwdHNbaGFzaF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuX3BheWxvYWQuaW50b1JlY2VpcHQodGFyZ2V0LCB0aGlzLm5ldHdvcmspLFxyXG4gICAgICAgICAgICBoYXNoLFxyXG4gICAgICAgICAgICBjaGFuZ2U6IHRoaXMuX3BheWxvYWQuY2hhbmdlLFxyXG4gICAgICAgICAgICBmZWVzOiB0aGlzLl9wYXlsb2FkLmZlZXMsXHJcbiAgICAgICAgICAgIGZyb206IHRoaXMuX2Zyb20sXHJcbiAgICAgICAgICAgIHN0YXR1cyxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcclxuICAgICAgICAgICAgdHg6IHRoaXMuX3RvSlNPTih0cnVlKSxcclxuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5fcGF5bG9hZC52YWx1ZSxcclxuICAgICAgICAgICAgd2VpZ2h0OiB0aGlzLl9wYXlsb2FkLndlaWdodCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1toYXNoXVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBfc2lnblRyYW5zYWN0aW9uUGF5bG9hZCgpOiBIYXNoO1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF90b0pTT04oX2h1bWFuaXplOiBib29sZWFuKTogYW55O1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IF90b1Byb3RvYnVmKCk6IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc21pdHRlck11bHRpU2lnPFNwZWNzLCBQYXlsb2FkIGV4dGVuZHMgSVRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFNwZWNzPj4gXHJcbiAgICBleHRlbmRzIFRyYW5zbWl0dGVyPFNwZWNzLCBQYXlsb2FkPiBcclxue1xyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgcGF5bG9hZDogUGF5bG9hZCwgbGVkZ2VyOiBJTGVkZ2VyLCBjaGFuZ2VQa2g/OiBQdWJsaWNLZXlIYXNoU3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgcGF5bG9hZCwgbGVkZ2VyLCBjaGFuZ2VQa2gpXHJcbiAgICAgICAgdGhpcy5fcGF5bG9hZCA9IHBheWxvYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vIFJlY292ZXIgZm9ybWVybHkgY29uc3VtZWQgVVRYT3MgYnkgYSBmYWlsaW5nIHRyYW5zYWN0aW9uIGJhY2sgdG8gdGhlaXIgcmVzcGVjdGl2ZSBzaWduZXIncyBVVFhPIHBvb2xcclxuICAgIHByb3RlY3RlZCBfcmVjb3ZlcklucHV0VXR4b3MoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcGF5bG9hZC5pbnB1dHMpIHsgICAgXHJcbiAgICAgICAgICAgIHRoaXMubGVkZ2VyLmFkZFV0eG9zKC4uLnRoaXMuX3BheWxvYWQuaW5wdXRzKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLy8gUmVjb3ZlciBzZWxmLXRhcmdldGVkIG91dHB1dHMgYXMgZXhwZW5kYWJsZSB1dHhvcyBvbiB0aGVpciByZXNwZWN0aXZlIHNpZ25lcidzIG1lbW9pemVkIGNhY2hlXHJcbiAgICBwcm90ZWN0ZWQgX3JlY292ZXJPdXRwdXRVdHhvcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXlsb2FkLmhhc2ggJiYgdGhpcy5fcGF5bG9hZC5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHV0eG9zOiBBcnJheTxVdHhvPiA9IFtdXHJcbiAgICAgICAgICAgIHRoaXMuX3BheWxvYWQub3V0cHV0cy5mb3JFYWNoKCh2dG8sIGluZGV4KSA9PiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVkZ2VyLmdldFNpZ25lcih2dG8ucGtoKSkgdXR4b3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVyOiB2dG8ucGtoLFxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dF9wb2ludGVyOiBgJHt0aGlzLl9wYXlsb2FkLmhhc2h9OiR7aW5kZXh9YCxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5sZWRnZXIuYWRkVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2lnblRyYW5zYWN0aW9uUGF5bG9hZCgpOiBIYXNoIHtcclxuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5fcGF5bG9hZC5oYXNoXHJcbiAgICAgICAgaWYgKCFoYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBoYXNoaWZ5IHBheWxvYWQ6ICR7dGhpcy5fcGF5bG9hZC50b0pTT04odHJ1ZSwgdGhpcy5uZXR3b3JrKX19LmBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BheWxvYWQuaW5wdXRzLmZvckVhY2godXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVyID0gdGhpcy5sZWRnZXIuZ2V0U2lnbmVyKHV0eG8uc2lnbmVyKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzaWduZXIpIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBjYW5ub3QgZmluZCBTaWduZXIgJHt1dHhvLnNpZ25lcn0gaW4gJHt0aGlzLmxlZGdlci5jb25zdHJ1Y3Rvci5uYW1lfSAke3RoaXMubGVkZ2VyLnBraH0uYCAgICBcclxuICAgICAgICAgICAgICAgICk7IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGAuLi5zaWduZXIgJHtzaWduZXIucGtofSBzaWduaW5nIGhhc2ggJHtoYXNofS4uLmApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25lci5zaWduSGFzaChoYXNoKSkgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9KU09OKGh1bWFuaXplOiBib29sZWFuKTogYW55IHtcclxuICAgICAgICByZXR1cm4geyBcclxuICAgICAgICAgICAgW3RoaXMudHlwZV06IHsgXHJcbiAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9wYXlsb2FkLnRvSlNPTihodW1hbml6ZSwgdGhpcy5uZXR3b3JrKSxcclxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZXM6IHRoaXMuX3NpZ25hdHVyZXMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9wYXlsb2FkLnRvUHJvdG9idWYoKVxyXG4gICAgICAgIGlmIChib2R5ICYmIHRoaXMuX3NpZ25hdHVyZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGJvZHksXHJcbiAgICAgICAgICAgICAgICBzaWduYXR1cmVzOiB0aGlzLl9zaWduYXR1cmVzLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/lib/rpc/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -330,11 +330,13 @@ class JsonRpcProvider {
|
|
|
330
330
|
return this
|
|
331
331
|
.callApiMethod(types_2.Methods.SearchDataRequests, {
|
|
332
332
|
radHash,
|
|
333
|
-
limit: options?.limit,
|
|
334
|
-
offset: options?.offset,
|
|
335
|
-
reverse: options?.reverse
|
|
333
|
+
limit: options?.limit || 1,
|
|
334
|
+
offset: options?.offset || 0,
|
|
335
|
+
reverse: !(options?.reverse === false),
|
|
336
336
|
})
|
|
337
|
-
.then(async (entries) => Promise.all(entries.map((entry) =>
|
|
337
|
+
.then(async (entries) => Promise.all(entries.map((entry) => {
|
|
338
|
+
return this.getDataRequest(entry[1], options?.mode || "ethereal", true);
|
|
339
|
+
})));
|
|
338
340
|
}
|
|
339
341
|
/// ---------------------------------------------------------------------------------------------------------------
|
|
340
342
|
async sendRawTransaction(transaction) {
|
|
@@ -347,4 +349,4 @@ class JsonRpcProvider {
|
|
|
347
349
|
}
|
|
348
350
|
exports.JsonRpcProvider = JsonRpcProvider;
|
|
349
351
|
JsonRpcProvider.receipts = {};
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBc0Q7QUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZDLDJDQUE4QztBQUM5QyxNQUFNLFNBQVMsR0FBRyxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUUzRCwyQ0FBb0Y7QUFFcEYsZ0RBQWlDO0FBRWpDLG1DQU9nQjtBQXNDaEIsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBSTNDLFlBQVksTUFBYyxFQUFFLE1BQWEsRUFBRSxLQUFXO1FBQ2xELEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0NBQ0o7QUFYRCxvREFXQztBQUVELE1BQWEsZUFBZTtJQVN4Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBWTtRQUM3QixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksMEJBQTBCLENBQUMsQ0FB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VUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQWEsZUFBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7O0FBdFZMLDBDQXVWQztBQW5WaUIsd0JBQVEsR0FBcUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBheGlvcywgQXhpb3NIZWFkZXJzIH0gZnJvbSBcImF4aW9zXCJcclxuY29uc3QganNvbkJpZyA9IHJlcXVpcmUoJ2pzb24tYmlnaW50Jyk7XHJcbmltcG9ydCB7IFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcbmNvbnN0IHByb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJDb25zZW5zdXNDb25zdGFudHNcIilcclxuXHJcbmltcG9ydCB7IFB1YmxpY0tleSwgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSBcIi4uL2NyeXB0by90eXBlc1wiXHJcbmltcG9ydCB7IEVwb2NoLCBIYXNoLCBOZXR3b3JrLCBVdHhvTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi4vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhbGFuY2UsIEJhbGFuY2UyLCBCbG9jaywgQ29uc2Vuc3VzQ29uc3RhbnRzLCBcclxuICAgIEdldERhdGFSZXF1ZXN0RnVsbFJlcG9ydCwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydCwgR2V0RGF0YVJlcXVlc3RNb2RlLFxyXG4gICAgTWVtcG9vbCwgTWV0aG9kcywgUGVlckFkZHIsIFByaW9yaXRpZXMsIFByb3RvY29sSW5mbywgXHJcbiAgICBRdWVyeVN0YWtlcywgUXVlcnlTdGFraW5nUG93ZXJzLFxyXG4gICAgVHJhbnNhY3Rpb25SZXBvcnQsIFNpZ25hbGluZ0luZm8sIFN0YWtlRW50cnksIFN0YWtpbmdQb3dlciwgXHJcbiAgICBTdXBlcmJsb2NrUmVwb3J0LCBTdXBwbHlJbmZvLCBTeW5jU3RhdHVzLCBVdHhvSW5mbyxcclxufSBmcm9tIFwiLi90eXBlc1wiXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgbmV0d29yaz86IE5ldHdvcms7XHJcbiAgICBuZXR3b3JrSWQ/OiBudW1iZXI7XHJcbiAgICBcclxuICAgIGJsb2NrcyhzaW5jZTogRXBvY2gsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPEFycmF5PFtudW1iZXIsIEhhc2gvKiwgUHVibGljS2V5SGFzaFN0cmluZyovXT4+O1xyXG4gICAgY29uc3RhbnRzKCk6IFByb21pc2U8Q29uc2Vuc3VzQ29uc3RhbnRzPjtcclxuICAgIGhvbGRlcnMobGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4+IFxyXG4gICAgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+O1xyXG4gICAgcG93ZXJzKHBhcmFtcz86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj47XHJcbiAgICBwcmlvcml0aWVzKCk6IFByb21pc2U8UHJpb3JpdGllcz47XHJcbiAgICBwcm90b2NvbEluZm8oKTogUHJvbWlzZTxQcm90b2NvbEluZm8+O1xyXG4gICAgc3Rha2VzKHBhcmFtczogUXVlcnlTdGFrZXMpOiBQcm9taXNlPEFycmF5PFN0YWtlRW50cnk+PjsgXHJcbiAgICBzdXBwbHlJbmZvKCk6IFByb21pc2U8U3VwcGx5SW5mbz47XHJcbiAgICBzeW5jU3RhdHVzKCk6IFByb21pc2U8YW55PjtcclxuICAgIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPjtcclxuICAgIHdpdG5lc3NlcygpOiBQcm9taXNlPG51bWJlcj47XHJcblxyXG4gICAgZ2V0QmFsYW5jZShwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPEJhbGFuY2UyPjtcclxuICAgIGdldEJsb2NrKGJsb2NrSGFzaDogSGFzaCwgc2hvd1RyYW5zYWN0aW9uSGFzaGVzPzogYm9vbGVhbik6IFByb21pc2U8QmxvY2s+O1xyXG4gICAgZ2V0RGF0YVJlcXVlc3QoZHJUeEhhc2g6IEhhc2gsIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUpOiBQcm9taXNlPEdldERhdGFSZXF1ZXN0RnVsbFJlcG9ydCB8IEdldERhdGFSZXF1ZXN0RXRoZXJlYWxSZXBvcnQ+O1xyXG4gICAgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+O1xyXG4gICAgZ2V0VHJhbnNhY3Rpb24odHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlcG9ydD47XHJcbiAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+O1xyXG4gICAgZ2V0VXR4b3MocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nLCBmaWx0ZXI/OiB7IG1pblZhbHVlPzogYmlnaW50LCBzaWduZXI/OiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+O1xyXG4gICAgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcblxyXG4gICAgc2VhcmNoRGF0YVJlcXVlc3RzKHJhZEhhc2g6IEhhc2gsIG9wdGlvbnM/OiB7IFxyXG4gICAgICAgIGxpbWl0PzogbnVtYmVyLCBcclxuICAgICAgICBvZmZzZXQ/OiBudW1iZXIsIFxyXG4gICAgICAgIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUsIFxyXG4gICAgICAgIHJldmVyc2U/OiBib29sZWFuIFxyXG4gICAgfSk6IFByb21pc2U8QXJyYXk8R2V0RGF0YVJlcXVlc3RGdWxsUmVwb3J0IHwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydD4+O1xyXG4gICAgICAgIFxyXG4gICAgc2VuZFJhd1RyYW5zYWN0aW9uKHR4OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvblJwY1Byb3ZpZGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICByZWFkb25seSBlcnJvcj86IGFueTtcclxuICAgIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgcGFyYW1zOiBhbnlbXTtcclxuICAgIGNvbnN0cnVjdG9yKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IGFueVtdLCBlcnJvcj86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKGAke21ldGhvZH0oJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfSk6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSlgKVxyXG4gICAgICAgIGRlbGV0ZSBlcnJvcj8uc3RhY2tcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3JcclxuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxyXG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uUnBjUHJvdmlkZXIgaW1wbGVtZW50cyBJSnNvblJwY1Byb3ZpZGVyIHtcclxuICAgIFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50czogc3RyaW5nW11cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlY2VpcHRzOiBSZWNvcmQ8SGFzaCwgVHJhbnNhY3Rpb25SZWNlaXB0PiA9IHt9O1xyXG5cclxuICAgIHByb3RlY3RlZCBfY29uc3RhbnRzPzogQ29uc2Vuc3VzQ29uc3RhbnRzXHJcbiAgICBwcm90ZWN0ZWQgX2hlYWRlcnM6IEF4aW9zSGVhZGVycztcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBKc29uUnBjUHJvdmlkZXIgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgZGVmYXVsdCBXaXQvUlBDIGVuZHBvaW50LlxyXG4gICAgICogRGVmYXVsdHMgdG8gaHR0cHM6Ly9ycGMtMDEud2l0bmV0LmlvIGlmIG5vIFdJVE5FVF9TREtfUFJPVklERVJfVVJMIGVudmFyIGlzIHNldHRsZWRcclxuICAgICAqIG9uIHRoZSBlbnZpcm9ubWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIGZyb21FbnYodXJsPzogc3RyaW5nKTogUHJvbWlzZTxKc29uUnBjUHJvdmlkZXI+IHtcclxuICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLmZyb21VUkwodXJsIHx8IHByb2Nlc3MuZW52LldJVE5FVF9TREtfUFJPVklERVJfVVJMIHx8IFwiaHR0cHM6Ly9ycGMtMDEud2l0bmV0LmlvXCIpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgSnNvblJwY1Byb3ZpZGVyIG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBXaXQvUlBDIGVuZHBvaW50LlxyXG4gICAgICogQHBhcmFtIHVybCBXaXQvUlBDIGVuZHBvaW50IFVSTC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIGZyb21VUkwodXJsOiBzdHJpbmcpOiBQcm9taXNlPEpzb25ScGNQcm92aWRlcj4ge1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IEpzb25ScGNQcm92aWRlcih1cmwpXHJcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmNvbnN0YW50cygpLnRoZW4oKCkgPT4gcHJvdmlkZXIpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IodXJsPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPSBbXVxyXG4gICAgICAgIGlmICh1cmwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCB1cmxzID0gdXJsLnJlcGxhY2VBbGwoJywnLCAnOycpLnNwbGl0KCc7JylcclxuICAgICAgICAgICAgdXJscy5mb3JFYWNoKHVybCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbc2NoZW1hLCBdID0gdXRpbHMucGFyc2VVUkwodXJsKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgJiYgIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV2l0bmV0Lkpzb25ScGNQcm92aWRlcjogdW5zdXBwb3J0ZWQgVVJMIHNjaGVtYSAke3NjaGVtYX1gKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50cyA9IHVybHNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50cy5wdXNoKHByb2Nlc3MuZW52LldJVE5FVF9TREtfUFJPVklERVJfVVJMIHx8IFwiaHR0cHM6Ly9ycGMtMDEud2l0bmV0LmlvXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2hlYWRlcnMgPSBuZXcgQXhpb3NIZWFkZXJzKHsgXHJcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBwaW5nX2NvbW1pdHRlZVswXS5zdGFydHNXaXRoKCd3aXQnKSA/IFwibWFpbm5ldFwiOiBcInRlc3RuZXRcIlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrSWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge31cclxuICAgICAgICAgICAgb2JqLmFjdGl2aXR5UGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmFjdGl2aXR5X3BlcmlvZDtcclxuICAgICAgICAgICAgb2JqLmJvb3RzdHJhcEhhc2ggPSB7IFNIQTI1NjogQXJyYXkuZnJvbSh1dGlscy5mcm9tSGV4U3RyaW5nKHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBfaGFzaCkpIH1cclxuICAgICAgICAgICAgb2JqLmJvb3RzdHJhcHBpbmdDb21taXR0ZWUgPSB0aGlzLl9jb25zdGFudHMuYm9vdHN0cmFwcGluZ19jb21taXR0ZWVcclxuICAgICAgICAgICAgb2JqLmNoZWNrcG9pbnRaZXJvVGltZXN0YW1wID0gdGhpcy5fY29uc3RhbnRzLmNoZWNrcG9pbnRfemVyb190aW1lc3RhbXBcclxuICAgICAgICAgICAgb2JqLmNoZWNrcG9pbnRzUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmNoZWNrcG9pbnRzX3BlcmlvZFxyXG4gICAgICAgICAgICBvYmouY29sbGF0ZXJhbEFnZSA9IHRoaXMuX2NvbnN0YW50cy5jb2xsYXRlcmFsX2FnZVxyXG4gICAgICAgICAgICBvYmouY29sbGF0ZXJhbE1pbmltdW0gPSB0aGlzLl9jb25zdGFudHMuY29sbGF0ZXJhbF9taW5pbXVtXHJcbiAgICAgICAgICAgIG9iai5lcG9jaHNXaXRoTWluaW11bURpZmZpY3VsdHkgPSB0aGlzLl9jb25zdGFudHMuZXBvY2hzX3dpdGhfbWluaW11bV9kaWZmaWN1bHR5XHJcbiAgICAgICAgICAgIG9iai5leHRyYVJvdW5kcyA9IHRoaXMuX2NvbnN0YW50cy5leHRyYV9yb3VuZHNcclxuICAgICAgICAgICAgb2JqLmdlbmVzaXNIYXNoID0geyBTSEEyNTY6IEFycmF5LmZyb20odXRpbHMuZnJvbUhleFN0cmluZyh0aGlzLl9jb25zdGFudHMuZ2VuZXNpc19oYXNoKSkgfVxyXG4gICAgICAgICAgICBvYmouaGFsdmluZ1BlcmlvZCA9IHRoaXMuX2NvbnN0YW50cy5oYWx2aW5nX3BlcmlvZFxyXG4gICAgICAgICAgICBvYmouaW5pdGlhbEJsb2NrUmV3YXJkID0gdGhpcy5fY29uc3RhbnRzLmluaXRpYWxfYmxvY2tfcmV3YXJkXHJcbiAgICAgICAgICAgIG9iai5tYXhEcldlaWdodCA9IHRoaXMuX2NvbnN0YW50cy5tYXhfZHJfd2VpZ2h0XHJcbiAgICAgICAgICAgIG9iai5tYXhWdFdlaWdodCA9IHRoaXMuX2NvbnN0YW50cy5tYXhfdnRfd2VpZ2h0XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMubWluaW11bV9kaWZmaWN1bHR5ID4gMCkgb2JqLm1pbmltdW1EaWZmaWN1bHR5ID0gdGhpcy5fY29uc3RhbnRzLm1pbmltdW1fZGlmZmljdWx0eVxyXG4gICAgICAgICAgICBvYmoubWluaW5nQmFja3VwRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLm1pbmluZ19iYWNrdXBfZmFjdG9yXHJcbiAgICAgICAgICAgIG9iai5taW5pbmdSZXBsaWNhdGlvbkZhY3RvciA9IHRoaXMuX2NvbnN0YW50cy5taW5pbmdfcmVwbGljYXRpb25fZmFjdG9yXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uRXhwaXJlQWxwaGFEaWZmID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25fZXhwaXJlX2FscGhhX2RpZmZcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25Jc3N1YW5jZSA9IHRoaXMuX2NvbnN0YW50cy5yZXB1dGF0aW9uX2lzc3VhbmNlXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uSXNzdWFuY2VTdG9wID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25faXNzdWFuY2Vfc3RvcFxyXG4gICAgICAgICAgICBvYmoucmVwdXRhdGlvblBlbmFsaXphdGlvbkZhY3RvciA9IHRoaXMuX2NvbnN0YW50cy5yZXB1dGF0aW9uX3BlbmFsaXphdGlvbl9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tDb21taXR0ZWVEZWNyZWFzaW5nUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLnN1cGVyYmxvY2tfY29tbWl0dGVlX2RlY3JlYXNpbmdfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5zdXBlcmJsb2NrQ29tbWl0dGVlRGVjcmVhc2luZ1N0ZXAgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19jb21taXR0ZWVfZGVjcmVhc2luZ19zdGVwXHJcbiAgICAgICAgICAgIG9iai5zdXBlcmJsb2NrUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLnN1cGVyYmxvY2tfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5zdXBlcmJsb2NrU2lnbmluZ0NvbW1pdHRlZVNpemUgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19zaWduaW5nX2NvbW1pdHRlZV9zaXplXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9iailcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHByb3RvQnVmLmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBwcm90b0J1Zi5lbmNvZGUobWVzc2FnZSkuZmluaXNoKClcclxuICAgICAgICAgICAgY29uc3QgaGFzaCA9IHV0aWxzLnRvSGV4U3RyaW5nKHV0aWxzLnNoYTI1NihidWZmZXIpKSBcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaGFzaClcclxuICAgICAgICAgICAgY29uc3QgaGV4ID0gaGFzaC5zdWJzdHJpbmcoMCwgNClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGhleCwgMTYpXHJcbiAgICAgICAgfSBcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHByb3RlY3RlZCBuZXh0VVJMKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kcG9pbnRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuZW5kcG9pbnRzLmxlbmd0aCldXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHByb3RlY3RlZCBhc3luYyBjYWxsQXBpTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBBcnJheTxhbnk+IHwgYW55ICk6IFByb21pc2U8RXJyb3IgfCBhbnk+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm5leHRVUkwoKVxyXG4gICAgICAgIHJldHVybiBheGlvc1xyXG4gICAgICAgICAgICAucG9zdChcclxuICAgICAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcclxuICAgICAgICAgICAgICAgICAgICBpZDogKyBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuX2hlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7IHJldHVybiBqc29uQmlnKCkucGFyc2UocmVzcG9uc2UpIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihtZXRob2QsIHBhcmFtcywgcmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcik7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiByZXNwb25zZT8uZGF0YT8ucmVzdWx0IGFzIFQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbGlzdCBvZiBibG9jayBoYXNoZXMgd2l0aGluIGdpdmVuIHJhbmdlLCBhcyBrbm93biBieSB0aGUgcHJvdmlkZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2luY2UgLSBGaXJzdCBlcG9jaCBmb3Igd2hpY2ggdG8gcmV0dXJuIGJsb2NrIGhhc2hlcy4gSWYgbmVnYXRpdmUsIHJldHVybiBibG9jayBoYXNoZXMgZnJvbSB0aGUgbGFzdCBuIGVwb2Nocy5cclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBOdW1iZXIgb2YgYmxvY2sgaGFzaGVzIHRvIHJldHVybi4gSWYgbmVnYXRpdmUsIHJldHVybiB0aGUgbGFzdCBuIGJsb2NrIGhhc2hlcyBmcm9tIHRoaXMgZXBvY2ggcmFuZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBibG9ja3Moc2luY2U6IG51bWJlciA9IC0xLCBsaW1pdDogbnVtYmVyID0gMSwpOiBQcm9taXNlPEFycmF5PFtudW1iZXIsIEhhc2hdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8W051bWJlciwgSGFzaF0+KE1ldGhvZHMuR2V0QmxvY2tDaGFpbiwgW3NpbmNlLCBsaW1pdCwgXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgY29uc2Vuc3VzIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSBub2RlXHJcbiAgICBwdWJsaWMgYXN5bmMgY29uc3RhbnRzKCk6IFByb21pc2U8Q29uc2Vuc3VzQ29uc3RhbnRzPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPENvbnNlbnN1c0NvbnN0YW50cz4oTWV0aG9kcy5HZXRDb25zZW5zdXNDb25zdGFudHMpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoY29uc3RhbnRzOiBDb25zZW5zdXNDb25zdGFudHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHMgPSBjb25zdGFudHNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRzXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vLyBHZXQgbGltaXRlZCBsaXN0IG9mIGN1cnJlbnRseSB0b3AgaG9sZGVycywgYXMga25vd24gYnkgdGhlIHByb3ZpZGVyLlxyXG4gICAgcHVibGljIGFzeW5jIGhvbGRlcnMobWluQmFsYW5jZSA9IDAsIG1heEJhbGFuY2U/OiBudW1iZXIpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZT4+KE1ldGhvZHMuR2V0QmFsYW5jZTIsIHtcclxuICAgICAgICAgICAgICAgIGFsbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbkJhbGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uIG1heEJhbGFuY2UgPyB7IG1heEJhbGFuY2UgfSA6IHt9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLnRoZW4oKGJhbGFuY2VzOiBSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZTI+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlQ29tcGFyZSA9IChhOiBCYWxhbmNlMiwgYjogQmFsYW5jZTIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhX3RvdCA9IGEubG9ja2VkICsgYS51bmxvY2tlZCArIGEuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYl90b3QgPSBiLmxvY2tlZCArIGIudW5sb2NrZWQgKyBiLnN0YWtlZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhX3RvdCA8IGJfdG90KSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhX3RvdCA+IGJfdG90KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYmFsYW5jZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhOiAoc3RyaW5nIHwgQmFsYW5jZTIpW10sIGI6IChzdHJpbmcgfCBCYWxhbmNlMilbXSkgPT4gcmV2ZXJzZUNvbXBhcmUoYVsxXSBhcyBCYWxhbmNlMiwgYlsxXSBhcyBCYWxhbmNlMikpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGxpc3Qgb2Yga25vd24gcGVlcnNcclxuICAgIHB1YmxpYyBhc3luYyBrbm93blBlZXJzKCk6IFByb21pc2U8QXJyYXk8UGVlckFkZHI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxBcnJheTxQZWVyQWRkcj4+KE1ldGhvZHMuS25vd25QZWVycyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgYWxsIHRoZSBwZW5kaW5nIHRyYW5zYWN0aW9uc1xyXG4gICAgcHVibGljIGFzeW5jIG1lbXBvb2woKTogUHJvbWlzZTxNZW1wb29sPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxNZW1wb29sPihNZXRob2RzLkdldE1lbXBvb2wpO1xyXG4gICAgfSAgICBcclxuICAgIFxyXG4gICAgLy8vIEdldCBwcmlvcml0eSBhbmQgdGltZS10by1ibG9jayBlc3RpbWF0aW9ucyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHRpZXJzLlxyXG4gICAgcHVibGljIGFzeW5jIHByaW9yaXRpZXMoKTogUHJvbWlzZTxQcmlvcml0aWVzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxQcmlvcml0aWVzPihNZXRob2RzLlByaW9yaXR5KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHByb3RvY29sIHZlcnNpb25zIGFuZCB3aGljaCB2ZXJzaW9uIGlzIGN1cnJlbnRseSBiZWluZyBlbmZvcmNlZC5cclxuICAgIHB1YmxpYyBhc3luYyBwcm90b2NvbEluZm8oKTogUHJvbWlzZTxQcm90b2NvbEluZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFByb3RvY29sSW5mbz4oTWV0aG9kcy5Qcm90b2NvbClcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhIGZ1bGwgbGlzdCBvZiBzdGFraW5nIHBvd2VycyBvcmRlcmVkIGJ5IHJhbmtcclxuICAgIHB1YmxpYyBhc3luYyBwb3dlcnMocXVlcnk/OiBRdWVyeVN0YWtpbmdQb3dlcnMpOiBQcm9taXNlPEFycmF5PFN0YWtpbmdQb3dlcj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEFycmF5PFN0YWtpbmdQb3dlcj4+KE1ldGhvZHMuUXVlcnlTdGFraW5nUG93ZXJzLCBxdWVyeSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhIGZ1bGwgbGlzdCBvZiBjdXJyZW50IHN0YWtlIGVudHJpZXMgIFF1ZXJ5IHRoZSBhbW91bnQgb2YgbmFub3dpdHMgc3Rha2VkIGJ5IGFuIGFkZHJlc3MuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3Rha2VzKHF1ZXJ5PzogUXVlcnlTdGFrZXMpOiBQcm9taXNlPEFycmF5PFN0YWtlRW50cnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2VFbnRyeT4+KE1ldGhvZHMuUXVlcnlTdGFrZXMsIHF1ZXJ5KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnI/LmVycm9yPy5tZXNzYWdlICYmIGVyci5lcnJvci5tZXNzYWdlLmluZGV4T2YoXCJub3QgcmVnaXN0ZXJlZFwiKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IG5vZGUgc3RhdHVzXHJcbiAgICBwdWJsaWMgYXN5bmMgc3luY1N0YXR1cygpOiBQcm9taXNlPFN5bmNTdGF0dXM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN5bmNTdGF0dXM+KE1ldGhvZHMuU3luY1N0YXR1cyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyB3aXBzKCk6IFByb21pc2U8U2lnbmFsaW5nSW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U2lnbmFsaW5nSW5mbz4oTWV0aG9kcy5TaWduYWxpbmdJbmZvKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyB3aXRuZXNzZXMoX3NpbmNlPzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICAvLyB0b2RvOiB3aXRuZXNzZXMgZXN0aW1hdGlvbiBzaG91bGQgaW5zdGVhZCBiZSBjb21wdXRlZCBpbiBwcm9wb3J0aW9uIHRvXHJcbiAgICAgICAgLy8gICAgICAgcmF0aW8gb2YgdmFsaWRhdG9ycyB0aGF0IGhhdmUgaG9uZXN0bHkgd2l0bmVzc2VkIGRhdGEgcmVxdWVzdHNcclxuICAgICAgICAvLyAgICAgICB2cyB2YWxpZGF0b3JzIHRoYXQgaGF2ZSBob25lc3RseSB3aXRuZXNzZWQgZGF0YSByZXF1ZXN0cyBhbmRcclxuICAgICAgICAvLyAgICAgICBuZXZlciByZXZlYWxlZCBcImkgcGFzc2VkXCIgb3V0IG9mIG1ham9yaXR5LCBcclxuICAgICAgICAvLyAgICAgICB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBvZiBlcG9jaHMuXHJcbiAgICAgICAgbGV0IGNlbnN1cyA9IDBcclxuICAgICAgICByZXR1cm4gdGhpcyBcclxuICAgICAgICAgICAgLnN0YWtlcyh7IHBhcmFtczogeyBkaXN0aW5jdDogdHJ1ZSB9fSkgLy8gdG9kbzogaW1wbGVtZW50IGBjb3VudGAgZmxhZyBvbiBJSnNvblJwY1Byb3ZpZGVyLnN0YWtlcygpXHJcbiAgICAgICAgICAgIC50aGVuKHJlY29yZHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2Vuc3VzID0gcmVjb3Jkcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrcygtMTYsIDE2KSAvLyB0b2RvOiBibG9ja3MoKSBzaG91bGQgcmV0dXJuIGVwb2NoLCBoYXNoIGFuZCB2YWxpZGF0b3IgcGtoIGZvciBlYWNoIGJsb2NrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlY29yZHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlY29yZHMubWFwKHJlY29yZCA9PiB0aGlzLmdldEJsb2NrKHJlY29yZFsxXSkpKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihibG9ja3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogQXJyYXk8UHVibGljS2V5SGFzaFN0cmluZz4gPSBbXVxyXG4gICAgICAgICAgICAgICAgYmxvY2tzLm1hcChibG9jayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGtoID0gUHVibGljS2V5LmZyb21Qcm90b2J1ZihibG9jay5ibG9ja19zaWcucHVibGljX2tleSkuaGFzaCgpLnRvQmVjaDMyKHRoaXMubmV0d29yaylcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvcnMuaW5jbHVkZXMocGtoKSkgdmFsaWRhdG9ycy5wdXNoKHBraCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IodGhpcy5uZXR3b3JrID09PSBcInRlc3RuZXRcIiA/IGNlbnN1cyAvIDIgOiBjZW5zdXMgLyA0KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLy8gR2V0IGJhbGFuY2VcclxuICAgIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlKHBraDogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8QmFsYW5jZTI+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxCYWxhbmNlMj4oTWV0aG9kcy5HZXRCYWxhbmNlMiwgeyBwa2ggfSlcclxuICAgICAgICAgICAgLnRoZW4oKGJhbGFuY2U6IEJhbGFuY2UyKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbG9ja2VkOiBCaWdJbnQoYmFsYW5jZS5sb2NrZWQpLFxyXG4gICAgICAgICAgICAgICAgc3Rha2VkOiBCaWdJbnQoYmFsYW5jZS5zdGFrZWQpLFxyXG4gICAgICAgICAgICAgICAgdW5sb2NrZWQ6IEJpZ0ludChiYWxhbmNlLnVubG9ja2VkKSxcclxuICAgICAgICAgICAgfSkpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGJsb2NrIGluZm8gYnkgaGFzaFxyXG4gICAgICogQHBhcmFtIHtIYXNofSBibG9ja0hhc2ggLSBIYXNoIG9mIHRoZSBibG9jayB0aGF0IHdlIGFyZSBxdWVyeWluZy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd1RyYW5zYWN0aW9uSGFzaCAtIFdoZXRoZXIgdG8gaW5jbHVkZSBhbiBleHRyYSBmaWVsZCBjb250YWluaW5nIGFycmF5IG9mIHRyYW5zYWN0aW9uIGhhc2hlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGdldEJsb2NrKFxyXG4gICAgICAgICAgICBibG9ja0hhc2g6IEhhc2gsXHJcbiAgICAgICAgICAgIHNob3dUcmFuc2FjdGlvbkhhc2ggPSBmYWxzZSxcclxuICAgICAgICApOiBQcm9taXNlPEJsb2NrPlxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QmxvY2s+KE1ldGhvZHMuR2V0QmxvY2ssIFtibG9ja0hhc2gsIHNob3dUcmFuc2FjdGlvbkhhc2gsIF0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyBnZXREYXRhUmVxdWVzdChkclR4SGFzaDogSGFzaCwgbW9kZT86IEdldERhdGFSZXF1ZXN0TW9kZSwgZm9yY2UgPSBmYWxzZSk6IFByb21pc2U8R2V0RGF0YVJlcXVlc3RGdWxsUmVwb3J0IHwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8R2V0RGF0YVJlcXVlc3RGdWxsUmVwb3J0IHwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydD4oTWV0aG9kcy5HZXREYXRhUmVxdWVzdCwge1xyXG4gICAgICAgICAgICBoYXNoOiBkclR4SGFzaCxcclxuICAgICAgICAgICAgbW9kZTogbW9kZSB8fCBcImZ1bGxcIixcclxuICAgICAgICAgICAgZm9yY2VcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IHRoZSBibG9ja3MgdGhhdCBwZXJ0YWluIHRvIHRoZSBzdXBlcmJsb2NrIGluZGV4XHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN1cGVyYmxvY2tSZXBvcnQ+KE1ldGhvZHMuR2V0U3VwZXJibG9jaywgeyBcImJsb2NrX2Vwb2NoXCI6IGVwb2NoIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8VHJhbnNhY3Rpb25SZXBvcnQ+KE1ldGhvZHMuR2V0VHJhbnNhY3Rpb24sIFt0eEhhc2gsIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+IHtcclxuICAgICAgICAvLyB0b2RvOiBmZXRjaC91cGRhdGUgcmVjZWlwdCBmcm9tIHByb3ZpZGVyLCBpZiBub3QgY2FjaGVkXHJcbiAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1t0eEhhc2hdXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgdXR4b3NcclxuICAgIHB1YmxpYyBhc3luYyBnZXRVdHhvcyhwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcsIGZpbHRlcj86IHsgbWluVmFsdWU/OiBiaWdpbnQgfCBzdHJpbmcsIGZyb21TaWduZXI/OiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+IHtcclxuICAgICAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5taW5WYWx1ZSA9IGZpbHRlcj8ubWluVmFsdWU/LnRvU3RyaW5nKCkgPz8gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFV0eG9JbmZvPihNZXRob2RzLkdldFV0eG9JbmZvLCBbcGtoLCAuLi4oZmlsdGVyID8gW2ZpbHRlcl06IFtdKV0pXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IFV0eG9JbmZvKSA9PiByZXN1bHQudXR4b3MubWFwKCh1dHhvOiBVdHhvTWV0YWRhdGEpID0+ICh7IFxyXG4gICAgICAgICAgICAgICAgLi4udXR4bywgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHV0eG8udmFsdWUpXHJcbiAgICAgICAgICAgIH0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcsIGZvcmNlID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8YW55PihNZXRob2RzLkdldFZhbHVlVHJhbnNmZXIsIHtcclxuICAgICAgICAgICAgaGFzaDogdHhIYXNoLFxyXG4gICAgICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaERhdGFSZXF1ZXN0cyhcclxuICAgICAgICByYWRIYXNoOiBIYXNoLCBcclxuICAgICAgICBvcHRpb25zPzogeyBcclxuICAgICAgICAgICAgbGltaXQ/OiBudW1iZXIsIFxyXG4gICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXIsXHJcbiAgICAgICAgICAgIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUsIFxyXG4gICAgICAgICAgICByZXZlcnNlPzogYm9vbGVhbiBcclxuICAgIH0pOiBQcm9taXNlPEFycmF5PEdldERhdGFSZXF1ZXN0RXRoZXJlYWxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQ+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8QXJyYXk8YW55W10+PihNZXRob2RzLlNlYXJjaERhdGFSZXF1ZXN0cywge1xyXG4gICAgICAgICAgICAgICAgcmFkSGFzaCxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiBvcHRpb25zPy5saW1pdCxcclxuICAgICAgICAgICAgICAgIG9mZnNldDogb3B0aW9ucz8ub2Zmc2V0LFxyXG4gICAgICAgICAgICAgICAgcmV2ZXJzZTogb3B0aW9ucz8ucmV2ZXJzZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihhc3luYyBlbnRyaWVzID0+IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgZW50cmllcy5tYXAoKGVudHJ5OiBhbnlbXSkgPT4gdGhpcy5nZXREYXRhUmVxdWVzdChlbnRyeVsxXSwgb3B0aW9ucz8ubW9kZSB8fCBcImV0aGVyZWFsXCIsIHRydWUpKVxyXG4gICAgICAgICAgICApKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VuZFJhd1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPGJvb2xlYW4+KE1ldGhvZHMuSW52ZW50b3J5LCB7IHRyYW5zYWN0aW9uIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8vIEdldCBzdXBwbHkgaW5mb1xyXG4gICAgcHVibGljIGFzeW5jIHN1cHBseUluZm8oKTogUHJvbWlzZTxTdXBwbHlJbmZvPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxTdXBwbHlJbmZvPihNZXRob2RzLkdldFN1cHBseUluZm8pXHJcbiAgICB9XHJcbn0iXX0=
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JwYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBc0Q7QUFDdEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZDLDJDQUE4QztBQUM5QyxNQUFNLFNBQVMsR0FBRyxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUUzRCwyQ0FBb0Y7QUFFcEYsZ0RBQWlDO0FBRWpDLG1DQU9nQjtBQXNDaEIsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBSTNDLFlBQVksTUFBYyxFQUFFLE1BQWEsRUFBRSxLQUFXO1FBQ2xELEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hFLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUN4QixDQUFDO0NBQ0o7QUFYRCxvREFXQztBQUVELE1BQWEsZUFBZTtJQVN4Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBWTtRQUM3QixPQUFPLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksMEJBQTBCLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBVztRQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUVELFlBQVksR0FBWTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNuQixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixNQUFNLENBQUMsTUFBTSxFQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ2xFLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxNQUFNLEVBQUUsQ0FBQyxDQUFBO2dCQUMzRSxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksMEJBQTBCLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9CQUFZLENBQUM7WUFDN0IsY0FBYyxFQUFFLGtCQUFrQjtTQUNyQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDOUYsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLFNBQVMsQ0FBQTtRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsU0FBUztRQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUE7WUFDbkIsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUNyRCxHQUFHLENBQUMsYUFBYSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUMvRixHQUFHLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQTtZQUNwRSxHQUFHLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQTtZQUN2RSxHQUFHLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQTtZQUMxRCxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFBO1lBQ2xELEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFBO1lBQzFELEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFBO1lBQ2hGLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUE7WUFDOUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDM0YsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQTtZQUNsRCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQTtZQUM3RCxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFBO1lBQy9DLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUE7WUFDL0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixHQUFHLENBQUM7Z0JBQUUsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUE7WUFDdEcsR0FBRyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUE7WUFDN0QsR0FBRyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUE7WUFDdkUsR0FBRyxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUE7WUFDNUUsR0FBRyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUE7WUFDNUQsR0FBRyxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUE7WUFDckUsR0FBRyxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUE7WUFDakYsR0FBRyxDQUFDLG1DQUFtQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsc0NBQXNDLENBQUE7WUFDaEcsR0FBRyxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsb0NBQW9DLENBQUE7WUFDNUYsR0FBRyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUE7WUFDeEQsR0FBRyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsaUNBQWlDLENBQUE7WUFDdEYsbUJBQW1CO1lBQ25CLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDeEMsdUJBQXVCO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDcEQsb0JBQW9CO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2hDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM1QixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQztJQUVTLE9BQU87UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFUyxLQUFLLENBQUMsYUFBYSxDQUFJLE1BQWMsRUFBRSxNQUF5QjtRQUN0RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDMUIsT0FBTyxlQUFLO2FBQ1AsSUFBSSxDQUNELEdBQUcsRUFDSDtZQUNJLE9BQU8sRUFBRSxLQUFLO1lBQ2QsRUFBRSxFQUFFLENBQUUsSUFBSSxJQUFJLEVBQUU7WUFDaEIsTUFBTTtZQUNOLE1BQU07U0FDVCxFQUNEO1lBQ0ksT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3RCLGlCQUFpQixFQUFFLFVBQVMsUUFBUSxJQUFJLE9BQU8sT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUMsQ0FBQztTQUM3RSxDQUVKLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDckIsSUFBSSxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUU3RixDQUFDOztnQkFBTSxPQUFPLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBVyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELG1IQUFtSDtJQUVuSDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFnQixDQUFDLENBQUMsRUFBRSxRQUFnQixDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBaUIsZUFBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUcsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCw0Q0FBNEM7SUFDckMsS0FBSyxDQUFDLFNBQVM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUk7aUJBQ04sYUFBYSxDQUFxQixlQUFPLENBQUMscUJBQXFCLENBQUM7aUJBQ2hFLElBQUksQ0FBQyxDQUFDLFNBQTZCLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7Z0JBQzNCLE9BQU8sU0FBUyxDQUFBO1lBQ3BCLENBQUMsQ0FBQyxDQUFBO1FBQ1YsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFFRCx3RUFBd0U7SUFDakUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQW1CO1FBQ3BELE9BQU8sSUFBSTthQUNOLGFBQWEsQ0FBdUMsZUFBTyxDQUFDLFdBQVcsRUFBRTtZQUN0RSxHQUFHLEVBQUU7Z0JBQ0QsVUFBVTtnQkFDVixHQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUN2QztTQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUErQyxFQUFFLEVBQUU7WUFDeEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFXLEVBQUUsQ0FBVyxFQUFFLEVBQUU7Z0JBQ2hELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFBO2dCQUM5QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtnQkFDOUMsSUFBSSxLQUFLLEdBQUcsS0FBSztvQkFBRSxPQUFPLENBQUMsQ0FBQztxQkFDdkIsSUFBSSxLQUFLLEdBQUcsS0FBSztvQkFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDOztvQkFDN0IsT0FBTyxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFBO1lBQ0QsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBd0IsRUFBRSxDQUF3QixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQyxDQUFDLENBQ3hILENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFFRCwyQkFBMkI7SUFDcEIsS0FBSyxDQUFDLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFrQixlQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG9DQUFvQztJQUM3QixLQUFLLENBQUMsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQVUsZUFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCw0RUFBNEU7SUFDckUsS0FBSyxDQUFDLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFhLGVBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsMEZBQTBGO0lBQ25GLEtBQUssQ0FBQyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBZSxlQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVELHFEQUFxRDtJQUM5QyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQTBCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBc0IsZUFBTyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFFRCxnR0FBZ0c7SUFDekYsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFtQjtRQUNuQyxPQUFPLElBQUk7YUFDTixhQUFhLENBQW9CLGVBQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO2FBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUUsT0FBTyxFQUFFLENBQUE7WUFDYixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxHQUFHLENBQUE7WUFDYixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsbUJBQW1CO0lBQ1osS0FBSyxDQUFDLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFhLGVBQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQWdCLGVBQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFlO1FBQ2xDLHlFQUF5RTtRQUN6RSx1RUFBdUU7UUFDdkUscUVBQXFFO1FBQ3JFLG9EQUFvRDtRQUNwRCw4Q0FBOEM7UUFDOUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsT0FBTyxJQUFJO2FBQ04sTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFDLENBQUMsQ0FBQyw0REFBNEQ7YUFDbEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1osTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7WUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBLENBQUMsNEVBQTRFO1FBQzVHLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNaLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkUsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsTUFBTSxVQUFVLEdBQStCLEVBQUUsQ0FBQTtZQUNqRCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNmLE1BQU0sR0FBRyxHQUFHLGlCQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQ1gsVUFBVSxDQUFDLE1BQU0sRUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUNuRSxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsbUhBQW1IO0lBQ25ILGVBQWU7SUFDUixLQUFLLENBQUMsVUFBVSxDQUFDLEdBQXdCO1FBQzVDLE9BQU8sSUFBSTthQUNOLGFBQWEsQ0FBVyxlQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUM7YUFDckQsSUFBSSxDQUFDLENBQUMsT0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQixNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDOUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQzlCLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNyQyxDQUFDLENBQUMsQ0FBQTtJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FDYixTQUFlLEVBQ2YsbUJBQW1CLEdBQUcsS0FBSztRQUcvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQVEsZUFBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsRUFBRyxDQUFDLENBQUE7SUFDMUYsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBYyxFQUFFLElBQXlCLEVBQUUsS0FBSyxHQUFHLEtBQUs7UUFDaEYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUEwRCxlQUFPLENBQUMsY0FBYyxFQUFFO1lBQ3ZHLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLElBQUksSUFBSSxNQUFNO1lBQ3BCLEtBQUs7U0FDUixDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsdURBQXVEO0lBQ2hELEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQW1CLGVBQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFZO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBb0IsZUFBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFZO1FBQzNDLDBEQUEwRDtRQUMxRCxPQUFPLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELGFBQWE7SUFDTixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQXdCLEVBQUUsTUFBeUU7UUFDckgsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDMUQsQ0FBQztRQUNELE9BQU8sSUFBSTthQUNOLGFBQWEsQ0FBVyxlQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDL0UsSUFBSSxDQUFDLENBQUMsTUFBZ0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLEdBQUcsSUFBSTtZQUNQLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1osQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFZLEVBQUUsSUFBYSxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBTSxlQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDckQsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUs7U0FDUixDQUFDLENBQUE7SUFDTixDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUMzQixPQUFhLEVBQ2IsT0FLSDtRQUNHLE9BQU8sSUFBSTthQUNOLGFBQWEsQ0FBZSxlQUFPLENBQUMsa0JBQWtCLEVBQUU7WUFDckQsT0FBTztZQUNQLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUM7WUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztZQUM1QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDO1NBQ3pDLENBQUM7YUFDRCxJQUFJLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDM0UsQ0FBQyxDQUFDLENBQ0wsQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELG1IQUFtSDtJQUM1RyxLQUFLLENBQUMsa0JBQWtCLENBQUMsV0FBZ0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFVLGVBQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxtQkFBbUI7SUFDWixLQUFLLENBQUMsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQWEsZUFBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7O0FBeFZMLDBDQXlWQztBQXJWaUIsd0JBQVEsR0FBcUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmYXVsdCBhcyBheGlvcywgQXhpb3NIZWFkZXJzIH0gZnJvbSBcImF4aW9zXCJcclxuY29uc3QganNvbkJpZyA9IHJlcXVpcmUoJ2pzb24tYmlnaW50Jyk7XHJcbmltcG9ydCB7IFJvb3QgYXMgUHJvdG9Sb290IH0gZnJvbSBcInByb3RvYnVmanNcIlxyXG5jb25zdCBwcm90b1Jvb3QgPSBQcm90b1Jvb3QuZnJvbUpTT04ocmVxdWlyZShcIi4uLy4uLy4uL3dpdG5ldC93aXRuZXQucHJvdG8uanNvblwiKSkgXHJcbmNvbnN0IHByb3RvQnVmID0gcHJvdG9Sb290Lmxvb2t1cFR5cGUoXCJDb25zZW5zdXNDb25zdGFudHNcIilcclxuXHJcbmltcG9ydCB7IFB1YmxpY0tleSwgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSBcIi4uL2NyeXB0by90eXBlc1wiXHJcbmltcG9ydCB7IEVwb2NoLCBIYXNoLCBOZXR3b3JrLCBVdHhvTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi4vdXRpbHNcIlxyXG5cclxuaW1wb3J0IHtcclxuICAgIEJhbGFuY2UsIEJhbGFuY2UyLCBCbG9jaywgQ29uc2Vuc3VzQ29uc3RhbnRzLCBcclxuICAgIEdldERhdGFSZXF1ZXN0RnVsbFJlcG9ydCwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydCwgR2V0RGF0YVJlcXVlc3RNb2RlLFxyXG4gICAgTWVtcG9vbCwgTWV0aG9kcywgUGVlckFkZHIsIFByaW9yaXRpZXMsIFByb3RvY29sSW5mbywgXHJcbiAgICBRdWVyeVN0YWtlcywgUXVlcnlTdGFraW5nUG93ZXJzLFxyXG4gICAgVHJhbnNhY3Rpb25SZXBvcnQsIFNpZ25hbGluZ0luZm8sIFN0YWtlRW50cnksIFN0YWtpbmdQb3dlciwgXHJcbiAgICBTdXBlcmJsb2NrUmVwb3J0LCBTdXBwbHlJbmZvLCBTeW5jU3RhdHVzLCBVdHhvSW5mbyxcclxufSBmcm9tIFwiLi90eXBlc1wiXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKc29uUnBjUHJvdmlkZXIge1xyXG4gICAgbmV0d29yaz86IE5ldHdvcms7XHJcbiAgICBuZXR3b3JrSWQ/OiBudW1iZXI7XHJcbiAgICBcclxuICAgIGJsb2NrcyhzaW5jZTogRXBvY2gsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPEFycmF5PFtudW1iZXIsIEhhc2gvKiwgUHVibGljS2V5SGFzaFN0cmluZyovXT4+O1xyXG4gICAgY29uc3RhbnRzKCk6IFByb21pc2U8Q29uc2Vuc3VzQ29uc3RhbnRzPjtcclxuICAgIGhvbGRlcnMobGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4+IFxyXG4gICAgbWVtcG9vbCgpOiBQcm9taXNlPE1lbXBvb2w+O1xyXG4gICAgcG93ZXJzKHBhcmFtcz86IFF1ZXJ5U3Rha2luZ1Bvd2Vycyk6IFByb21pc2U8QXJyYXk8U3Rha2luZ1Bvd2VyPj47XHJcbiAgICBwcmlvcml0aWVzKCk6IFByb21pc2U8UHJpb3JpdGllcz47XHJcbiAgICBwcm90b2NvbEluZm8oKTogUHJvbWlzZTxQcm90b2NvbEluZm8+O1xyXG4gICAgc3Rha2VzKHBhcmFtczogUXVlcnlTdGFrZXMpOiBQcm9taXNlPEFycmF5PFN0YWtlRW50cnk+PjsgXHJcbiAgICBzdXBwbHlJbmZvKCk6IFByb21pc2U8U3VwcGx5SW5mbz47XHJcbiAgICBzeW5jU3RhdHVzKCk6IFByb21pc2U8YW55PjtcclxuICAgIHdpcHMoKTogUHJvbWlzZTxTaWduYWxpbmdJbmZvPjtcclxuICAgIHdpdG5lc3NlcygpOiBQcm9taXNlPG51bWJlcj47XHJcblxyXG4gICAgZ2V0QmFsYW5jZShwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcpOiBQcm9taXNlPEJhbGFuY2UyPjtcclxuICAgIGdldEJsb2NrKGJsb2NrSGFzaDogSGFzaCwgc2hvd1RyYW5zYWN0aW9uSGFzaGVzPzogYm9vbGVhbik6IFByb21pc2U8QmxvY2s+O1xyXG4gICAgZ2V0RGF0YVJlcXVlc3QoZHJUeEhhc2g6IEhhc2gsIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUpOiBQcm9taXNlPEdldERhdGFSZXF1ZXN0RnVsbFJlcG9ydCB8IEdldERhdGFSZXF1ZXN0RXRoZXJlYWxSZXBvcnQ+O1xyXG4gICAgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+O1xyXG4gICAgZ2V0VHJhbnNhY3Rpb24odHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlcG9ydD47XHJcbiAgICBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+O1xyXG4gICAgZ2V0VXR4b3MocGtoOiBQdWJsaWNLZXlIYXNoU3RyaW5nLCBmaWx0ZXI/OiB7IG1pblZhbHVlPzogYmlnaW50LCBzaWduZXI/OiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+O1xyXG4gICAgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcblxyXG4gICAgc2VhcmNoRGF0YVJlcXVlc3RzKHJhZEhhc2g6IEhhc2gsIG9wdGlvbnM/OiB7IFxyXG4gICAgICAgIGxpbWl0PzogbnVtYmVyLCBcclxuICAgICAgICBvZmZzZXQ/OiBudW1iZXIsIFxyXG4gICAgICAgIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUsIFxyXG4gICAgICAgIHJldmVyc2U/OiBib29sZWFuIFxyXG4gICAgfSk6IFByb21pc2U8QXJyYXk8R2V0RGF0YVJlcXVlc3RGdWxsUmVwb3J0IHwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydD4+O1xyXG4gICAgICAgIFxyXG4gICAgc2VuZFJhd1RyYW5zYWN0aW9uKHR4OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSnNvblJwY1Byb3ZpZGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICByZWFkb25seSBlcnJvcj86IGFueTtcclxuICAgIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgcGFyYW1zOiBhbnlbXTtcclxuICAgIGNvbnN0cnVjdG9yKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IGFueVtdLCBlcnJvcj86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKGAke21ldGhvZH0oJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfSk6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfSlgKVxyXG4gICAgICAgIGRlbGV0ZSBlcnJvcj8uc3RhY2tcclxuICAgICAgICB0aGlzLmVycm9yID0gZXJyb3JcclxuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxyXG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBKc29uUnBjUHJvdmlkZXIgaW1wbGVtZW50cyBJSnNvblJwY1Byb3ZpZGVyIHtcclxuICAgIFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50czogc3RyaW5nW11cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlY2VpcHRzOiBSZWNvcmQ8SGFzaCwgVHJhbnNhY3Rpb25SZWNlaXB0PiA9IHt9O1xyXG5cclxuICAgIHByb3RlY3RlZCBfY29uc3RhbnRzPzogQ29uc2Vuc3VzQ29uc3RhbnRzXHJcbiAgICBwcm90ZWN0ZWQgX2hlYWRlcnM6IEF4aW9zSGVhZGVycztcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBKc29uUnBjUHJvdmlkZXIgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgZGVmYXVsdCBXaXQvUlBDIGVuZHBvaW50LlxyXG4gICAgICogRGVmYXVsdHMgdG8gaHR0cHM6Ly9ycGMtMDEud2l0bmV0LmlvIGlmIG5vIFdJVE5FVF9TREtfUFJPVklERVJfVVJMIGVudmFyIGlzIHNldHRsZWRcclxuICAgICAqIG9uIHRoZSBlbnZpcm9ubWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIGZyb21FbnYodXJsPzogc3RyaW5nKTogUHJvbWlzZTxKc29uUnBjUHJvdmlkZXI+IHtcclxuICAgICAgICByZXR1cm4gSnNvblJwY1Byb3ZpZGVyLmZyb21VUkwodXJsIHx8IHByb2Nlc3MuZW52LldJVE5FVF9TREtfUFJPVklERVJfVVJMIHx8IFwiaHR0cHM6Ly9ycGMtMDEud2l0bmV0LmlvXCIpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgSnNvblJwY1Byb3ZpZGVyIG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBXaXQvUlBDIGVuZHBvaW50LlxyXG4gICAgICogQHBhcmFtIHVybCBXaXQvUlBDIGVuZHBvaW50IFVSTC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFzeW5jIGZyb21VUkwodXJsOiBzdHJpbmcpOiBQcm9taXNlPEpzb25ScGNQcm92aWRlcj4ge1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IEpzb25ScGNQcm92aWRlcih1cmwpXHJcbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmNvbnN0YW50cygpLnRoZW4oKCkgPT4gcHJvdmlkZXIpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IodXJsPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lbmRwb2ludHMgPSBbXVxyXG4gICAgICAgIGlmICh1cmwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCB1cmxzID0gdXJsLnJlcGxhY2VBbGwoJywnLCAnOycpLnNwbGl0KCc7JylcclxuICAgICAgICAgICAgdXJscy5mb3JFYWNoKHVybCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbc2NoZW1hLCBdID0gdXRpbHMucGFyc2VVUkwodXJsKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgJiYgIXNjaGVtYS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgV2l0bmV0Lkpzb25ScGNQcm92aWRlcjogdW5zdXBwb3J0ZWQgVVJMIHNjaGVtYSAke3NjaGVtYX1gKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50cyA9IHVybHNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50cy5wdXNoKHByb2Nlc3MuZW52LldJVE5FVF9TREtfUFJPVklERVJfVVJMIHx8IFwiaHR0cHM6Ly9ycGMtMDEud2l0bmV0LmlvXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2hlYWRlcnMgPSBuZXcgQXhpb3NIZWFkZXJzKHsgXHJcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrKCk6IE5ldHdvcmsgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBwaW5nX2NvbW1pdHRlZVswXS5zdGFydHNXaXRoKCd3aXQnKSA/IFwibWFpbm5ldFwiOiBcInRlc3RuZXRcIlxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBuZXR3b3JrSWQoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy5fY29uc3RhbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge31cclxuICAgICAgICAgICAgb2JqLmFjdGl2aXR5UGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmFjdGl2aXR5X3BlcmlvZDtcclxuICAgICAgICAgICAgb2JqLmJvb3RzdHJhcEhhc2ggPSB7IFNIQTI1NjogQXJyYXkuZnJvbSh1dGlscy5mcm9tSGV4U3RyaW5nKHRoaXMuX2NvbnN0YW50cy5ib290c3RyYXBfaGFzaCkpIH1cclxuICAgICAgICAgICAgb2JqLmJvb3RzdHJhcHBpbmdDb21taXR0ZWUgPSB0aGlzLl9jb25zdGFudHMuYm9vdHN0cmFwcGluZ19jb21taXR0ZWVcclxuICAgICAgICAgICAgb2JqLmNoZWNrcG9pbnRaZXJvVGltZXN0YW1wID0gdGhpcy5fY29uc3RhbnRzLmNoZWNrcG9pbnRfemVyb190aW1lc3RhbXBcclxuICAgICAgICAgICAgb2JqLmNoZWNrcG9pbnRzUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLmNoZWNrcG9pbnRzX3BlcmlvZFxyXG4gICAgICAgICAgICBvYmouY29sbGF0ZXJhbEFnZSA9IHRoaXMuX2NvbnN0YW50cy5jb2xsYXRlcmFsX2FnZVxyXG4gICAgICAgICAgICBvYmouY29sbGF0ZXJhbE1pbmltdW0gPSB0aGlzLl9jb25zdGFudHMuY29sbGF0ZXJhbF9taW5pbXVtXHJcbiAgICAgICAgICAgIG9iai5lcG9jaHNXaXRoTWluaW11bURpZmZpY3VsdHkgPSB0aGlzLl9jb25zdGFudHMuZXBvY2hzX3dpdGhfbWluaW11bV9kaWZmaWN1bHR5XHJcbiAgICAgICAgICAgIG9iai5leHRyYVJvdW5kcyA9IHRoaXMuX2NvbnN0YW50cy5leHRyYV9yb3VuZHNcclxuICAgICAgICAgICAgb2JqLmdlbmVzaXNIYXNoID0geyBTSEEyNTY6IEFycmF5LmZyb20odXRpbHMuZnJvbUhleFN0cmluZyh0aGlzLl9jb25zdGFudHMuZ2VuZXNpc19oYXNoKSkgfVxyXG4gICAgICAgICAgICBvYmouaGFsdmluZ1BlcmlvZCA9IHRoaXMuX2NvbnN0YW50cy5oYWx2aW5nX3BlcmlvZFxyXG4gICAgICAgICAgICBvYmouaW5pdGlhbEJsb2NrUmV3YXJkID0gdGhpcy5fY29uc3RhbnRzLmluaXRpYWxfYmxvY2tfcmV3YXJkXHJcbiAgICAgICAgICAgIG9iai5tYXhEcldlaWdodCA9IHRoaXMuX2NvbnN0YW50cy5tYXhfZHJfd2VpZ2h0XHJcbiAgICAgICAgICAgIG9iai5tYXhWdFdlaWdodCA9IHRoaXMuX2NvbnN0YW50cy5tYXhfdnRfd2VpZ2h0XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb25zdGFudHMubWluaW11bV9kaWZmaWN1bHR5ID4gMCkgb2JqLm1pbmltdW1EaWZmaWN1bHR5ID0gdGhpcy5fY29uc3RhbnRzLm1pbmltdW1fZGlmZmljdWx0eVxyXG4gICAgICAgICAgICBvYmoubWluaW5nQmFja3VwRmFjdG9yID0gdGhpcy5fY29uc3RhbnRzLm1pbmluZ19iYWNrdXBfZmFjdG9yXHJcbiAgICAgICAgICAgIG9iai5taW5pbmdSZXBsaWNhdGlvbkZhY3RvciA9IHRoaXMuX2NvbnN0YW50cy5taW5pbmdfcmVwbGljYXRpb25fZmFjdG9yXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uRXhwaXJlQWxwaGFEaWZmID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25fZXhwaXJlX2FscGhhX2RpZmZcclxuICAgICAgICAgICAgb2JqLnJlcHV0YXRpb25Jc3N1YW5jZSA9IHRoaXMuX2NvbnN0YW50cy5yZXB1dGF0aW9uX2lzc3VhbmNlXHJcbiAgICAgICAgICAgIG9iai5yZXB1dGF0aW9uSXNzdWFuY2VTdG9wID0gdGhpcy5fY29uc3RhbnRzLnJlcHV0YXRpb25faXNzdWFuY2Vfc3RvcFxyXG4gICAgICAgICAgICBvYmoucmVwdXRhdGlvblBlbmFsaXphdGlvbkZhY3RvciA9IHRoaXMuX2NvbnN0YW50cy5yZXB1dGF0aW9uX3BlbmFsaXphdGlvbl9mYWN0b3JcclxuICAgICAgICAgICAgb2JqLnN1cGVyYmxvY2tDb21taXR0ZWVEZWNyZWFzaW5nUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLnN1cGVyYmxvY2tfY29tbWl0dGVlX2RlY3JlYXNpbmdfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5zdXBlcmJsb2NrQ29tbWl0dGVlRGVjcmVhc2luZ1N0ZXAgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19jb21taXR0ZWVfZGVjcmVhc2luZ19zdGVwXHJcbiAgICAgICAgICAgIG9iai5zdXBlcmJsb2NrUGVyaW9kID0gdGhpcy5fY29uc3RhbnRzLnN1cGVyYmxvY2tfcGVyaW9kXHJcbiAgICAgICAgICAgIG9iai5zdXBlcmJsb2NrU2lnbmluZ0NvbW1pdHRlZVNpemUgPSB0aGlzLl9jb25zdGFudHMuc3VwZXJibG9ja19zaWduaW5nX2NvbW1pdHRlZV9zaXplXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9iailcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHByb3RvQnVmLmZyb21PYmplY3Qob2JqKVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtZXNzYWdlKVxyXG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBwcm90b0J1Zi5lbmNvZGUobWVzc2FnZSkuZmluaXNoKClcclxuICAgICAgICAgICAgY29uc3QgaGFzaCA9IHV0aWxzLnRvSGV4U3RyaW5nKHV0aWxzLnNoYTI1NihidWZmZXIpKSBcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaGFzaClcclxuICAgICAgICAgICAgY29uc3QgaGV4ID0gaGFzaC5zdWJzdHJpbmcoMCwgNClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGhleCwgMTYpXHJcbiAgICAgICAgfSBcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHByb3RlY3RlZCBuZXh0VVJMKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kcG9pbnRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuZW5kcG9pbnRzLmxlbmd0aCldXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHByb3RlY3RlZCBhc3luYyBjYWxsQXBpTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCBwYXJhbXM/OiBBcnJheTxhbnk+IHwgYW55ICk6IFByb21pc2U8RXJyb3IgfCBhbnk+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm5leHRVUkwoKVxyXG4gICAgICAgIHJldHVybiBheGlvc1xyXG4gICAgICAgICAgICAucG9zdChcclxuICAgICAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBqc29ucnBjOiAnMi4wJyxcclxuICAgICAgICAgICAgICAgICAgICBpZDogKyBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuX2hlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7IHJldHVybiBqc29uQmlnKCkucGFyc2UocmVzcG9uc2UpIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKc29uUnBjUHJvdmlkZXJFcnJvcihtZXRob2QsIHBhcmFtcywgcmVzcG9uc2U/LmVycm9yIHx8IHJlc3BvbnNlPy5kYXRhPy5lcnJvcik7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHJldHVybiByZXNwb25zZT8uZGF0YT8ucmVzdWx0IGFzIFQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgbGlzdCBvZiBibG9jayBoYXNoZXMgd2l0aGluIGdpdmVuIHJhbmdlLCBhcyBrbm93biBieSB0aGUgcHJvdmlkZXIuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2luY2UgLSBGaXJzdCBlcG9jaCBmb3Igd2hpY2ggdG8gcmV0dXJuIGJsb2NrIGhhc2hlcy4gSWYgbmVnYXRpdmUsIHJldHVybiBibG9jayBoYXNoZXMgZnJvbSB0aGUgbGFzdCBuIGVwb2Nocy5cclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgLSBOdW1iZXIgb2YgYmxvY2sgaGFzaGVzIHRvIHJldHVybi4gSWYgbmVnYXRpdmUsIHJldHVybiB0aGUgbGFzdCBuIGJsb2NrIGhhc2hlcyBmcm9tIHRoaXMgZXBvY2ggcmFuZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBibG9ja3Moc2luY2U6IG51bWJlciA9IC0xLCBsaW1pdDogbnVtYmVyID0gMSwpOiBQcm9taXNlPEFycmF5PFtudW1iZXIsIEhhc2hdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8W051bWJlciwgSGFzaF0+KE1ldGhvZHMuR2V0QmxvY2tDaGFpbiwgW3NpbmNlLCBsaW1pdCwgXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgY29uc2Vuc3VzIGNvbnN0YW50cyB1c2VkIGJ5IHRoZSBub2RlXHJcbiAgICBwdWJsaWMgYXN5bmMgY29uc3RhbnRzKCk6IFByb21pc2U8Q29uc2Vuc3VzQ29uc3RhbnRzPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb25zdGFudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPENvbnNlbnN1c0NvbnN0YW50cz4oTWV0aG9kcy5HZXRDb25zZW5zdXNDb25zdGFudHMpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoY29uc3RhbnRzOiBDb25zZW5zdXNDb25zdGFudHMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb25zdGFudHMgPSBjb25zdGFudHNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRzXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25zdGFudHNcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vLyBHZXQgbGltaXRlZCBsaXN0IG9mIGN1cnJlbnRseSB0b3AgaG9sZGVycywgYXMga25vd24gYnkgdGhlIHByb3ZpZGVyLlxyXG4gICAgcHVibGljIGFzeW5jIGhvbGRlcnMobWluQmFsYW5jZSA9IDAsIG1heEJhbGFuY2U/OiBudW1iZXIpOiBQcm9taXNlPFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBCYWxhbmNlMj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZT4+KE1ldGhvZHMuR2V0QmFsYW5jZTIsIHtcclxuICAgICAgICAgICAgICAgIGFsbDoge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbkJhbGFuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uIG1heEJhbGFuY2UgPyB7IG1heEJhbGFuY2UgfSA6IHt9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLnRoZW4oKGJhbGFuY2VzOiBSZWNvcmQ8UHVibGljS2V5SGFzaFN0cmluZywgQmFsYW5jZTI+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlQ29tcGFyZSA9IChhOiBCYWxhbmNlMiwgYjogQmFsYW5jZTIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhX3RvdCA9IGEubG9ja2VkICsgYS51bmxvY2tlZCArIGEuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYl90b3QgPSBiLmxvY2tlZCArIGIudW5sb2NrZWQgKyBiLnN0YWtlZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhX3RvdCA8IGJfdG90KSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhX3RvdCA+IGJfdG90KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYmFsYW5jZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhOiAoc3RyaW5nIHwgQmFsYW5jZTIpW10sIGI6IChzdHJpbmcgfCBCYWxhbmNlMilbXSkgPT4gcmV2ZXJzZUNvbXBhcmUoYVsxXSBhcyBCYWxhbmNlMiwgYlsxXSBhcyBCYWxhbmNlMikpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGxpc3Qgb2Yga25vd24gcGVlcnNcclxuICAgIHB1YmxpYyBhc3luYyBrbm93blBlZXJzKCk6IFByb21pc2U8QXJyYXk8UGVlckFkZHI+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxBcnJheTxQZWVyQWRkcj4+KE1ldGhvZHMuS25vd25QZWVycyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgYWxsIHRoZSBwZW5kaW5nIHRyYW5zYWN0aW9uc1xyXG4gICAgcHVibGljIGFzeW5jIG1lbXBvb2woKTogUHJvbWlzZTxNZW1wb29sPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxNZW1wb29sPihNZXRob2RzLkdldE1lbXBvb2wpO1xyXG4gICAgfSAgICBcclxuICAgIFxyXG4gICAgLy8vIEdldCBwcmlvcml0eSBhbmQgdGltZS10by1ibG9jayBlc3RpbWF0aW9ucyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHRpZXJzLlxyXG4gICAgcHVibGljIGFzeW5jIHByaW9yaXRpZXMoKTogUHJvbWlzZTxQcmlvcml0aWVzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbEFwaU1ldGhvZDxQcmlvcml0aWVzPihNZXRob2RzLlByaW9yaXR5KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHByb3RvY29sIHZlcnNpb25zIGFuZCB3aGljaCB2ZXJzaW9uIGlzIGN1cnJlbnRseSBiZWluZyBlbmZvcmNlZC5cclxuICAgIHB1YmxpYyBhc3luYyBwcm90b2NvbEluZm8oKTogUHJvbWlzZTxQcm90b2NvbEluZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFByb3RvY29sSW5mbz4oTWV0aG9kcy5Qcm90b2NvbClcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhIGZ1bGwgbGlzdCBvZiBzdGFraW5nIHBvd2VycyBvcmRlcmVkIGJ5IHJhbmtcclxuICAgIHB1YmxpYyBhc3luYyBwb3dlcnMocXVlcnk/OiBRdWVyeVN0YWtpbmdQb3dlcnMpOiBQcm9taXNlPEFycmF5PFN0YWtpbmdQb3dlcj4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPEFycmF5PFN0YWtpbmdQb3dlcj4+KE1ldGhvZHMuUXVlcnlTdGFraW5nUG93ZXJzLCBxdWVyeSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8vIEdldCBhIGZ1bGwgbGlzdCBvZiBjdXJyZW50IHN0YWtlIGVudHJpZXMgIFF1ZXJ5IHRoZSBhbW91bnQgb2YgbmFub3dpdHMgc3Rha2VkIGJ5IGFuIGFkZHJlc3MuXHJcbiAgICBwdWJsaWMgYXN5bmMgc3Rha2VzKHF1ZXJ5PzogUXVlcnlTdGFrZXMpOiBQcm9taXNlPEFycmF5PFN0YWtlRW50cnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8QXJyYXk8U3Rha2VFbnRyeT4+KE1ldGhvZHMuUXVlcnlTdGFrZXMsIHF1ZXJ5KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnI/LmVycm9yPy5tZXNzYWdlICYmIGVyci5lcnJvci5tZXNzYWdlLmluZGV4T2YoXCJub3QgcmVnaXN0ZXJlZFwiKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IG5vZGUgc3RhdHVzXHJcbiAgICBwdWJsaWMgYXN5bmMgc3luY1N0YXR1cygpOiBQcm9taXNlPFN5bmNTdGF0dXM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN5bmNTdGF0dXM+KE1ldGhvZHMuU3luY1N0YXR1cyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyB3aXBzKCk6IFByb21pc2U8U2lnbmFsaW5nSW5mbz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8U2lnbmFsaW5nSW5mbz4oTWV0aG9kcy5TaWduYWxpbmdJbmZvKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyB3aXRuZXNzZXMoX3NpbmNlPzogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgICAgICAvLyB0b2RvOiB3aXRuZXNzZXMgZXN0aW1hdGlvbiBzaG91bGQgaW5zdGVhZCBiZSBjb21wdXRlZCBpbiBwcm9wb3J0aW9uIHRvXHJcbiAgICAgICAgLy8gICAgICAgcmF0aW8gb2YgdmFsaWRhdG9ycyB0aGF0IGhhdmUgaG9uZXN0bHkgd2l0bmVzc2VkIGRhdGEgcmVxdWVzdHNcclxuICAgICAgICAvLyAgICAgICB2cyB2YWxpZGF0b3JzIHRoYXQgaGF2ZSBob25lc3RseSB3aXRuZXNzZWQgZGF0YSByZXF1ZXN0cyBhbmRcclxuICAgICAgICAvLyAgICAgICBuZXZlciByZXZlYWxlZCBcImkgcGFzc2VkXCIgb3V0IG9mIG1ham9yaXR5LCBcclxuICAgICAgICAvLyAgICAgICB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBvZiBlcG9jaHMuXHJcbiAgICAgICAgbGV0IGNlbnN1cyA9IDBcclxuICAgICAgICByZXR1cm4gdGhpcyBcclxuICAgICAgICAgICAgLnN0YWtlcyh7IHBhcmFtczogeyBkaXN0aW5jdDogdHJ1ZSB9fSkgLy8gdG9kbzogaW1wbGVtZW50IGBjb3VudGAgZmxhZyBvbiBJSnNvblJwY1Byb3ZpZGVyLnN0YWtlcygpXHJcbiAgICAgICAgICAgIC50aGVuKHJlY29yZHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2Vuc3VzID0gcmVjb3Jkcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJsb2NrcygtMTYsIDE2KSAvLyB0b2RvOiBibG9ja3MoKSBzaG91bGQgcmV0dXJuIGVwb2NoLCBoYXNoIGFuZCB2YWxpZGF0b3IgcGtoIGZvciBlYWNoIGJsb2NrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKHJlY29yZHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlY29yZHMubWFwKHJlY29yZCA9PiB0aGlzLmdldEJsb2NrKHJlY29yZFsxXSkpKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihibG9ja3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogQXJyYXk8UHVibGljS2V5SGFzaFN0cmluZz4gPSBbXVxyXG4gICAgICAgICAgICAgICAgYmxvY2tzLm1hcChibG9jayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGtoID0gUHVibGljS2V5LmZyb21Qcm90b2J1ZihibG9jay5ibG9ja19zaWcucHVibGljX2tleSkuaGFzaCgpLnRvQmVjaDMyKHRoaXMubmV0d29yaylcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvcnMuaW5jbHVkZXMocGtoKSkgdmFsaWRhdG9ycy5wdXNoKHBraCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IodGhpcy5uZXR3b3JrID09PSBcInRlc3RuZXRcIiA/IGNlbnN1cyAvIDIgOiBjZW5zdXMgLyA0KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLy8gR2V0IGJhbGFuY2VcclxuICAgIHB1YmxpYyBhc3luYyBnZXRCYWxhbmNlKHBraDogUHVibGljS2V5SGFzaFN0cmluZyk6IFByb21pc2U8QmFsYW5jZTI+IHtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgICAgICAuY2FsbEFwaU1ldGhvZDxCYWxhbmNlMj4oTWV0aG9kcy5HZXRCYWxhbmNlMiwgeyBwa2ggfSlcclxuICAgICAgICAgICAgLnRoZW4oKGJhbGFuY2U6IEJhbGFuY2UyKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbG9ja2VkOiBCaWdJbnQoYmFsYW5jZS5sb2NrZWQpLFxyXG4gICAgICAgICAgICAgICAgc3Rha2VkOiBCaWdJbnQoYmFsYW5jZS5zdGFrZWQpLFxyXG4gICAgICAgICAgICAgICAgdW5sb2NrZWQ6IEJpZ0ludChiYWxhbmNlLnVubG9ja2VkKSxcclxuICAgICAgICAgICAgfSkpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGJsb2NrIGluZm8gYnkgaGFzaFxyXG4gICAgICogQHBhcmFtIHtIYXNofSBibG9ja0hhc2ggLSBIYXNoIG9mIHRoZSBibG9jayB0aGF0IHdlIGFyZSBxdWVyeWluZy5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvd1RyYW5zYWN0aW9uSGFzaCAtIFdoZXRoZXIgdG8gaW5jbHVkZSBhbiBleHRyYSBmaWVsZCBjb250YWluaW5nIGFycmF5IG9mIHRyYW5zYWN0aW9uIGhhc2hlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGdldEJsb2NrKFxyXG4gICAgICAgICAgICBibG9ja0hhc2g6IEhhc2gsXHJcbiAgICAgICAgICAgIHNob3dUcmFuc2FjdGlvbkhhc2ggPSBmYWxzZSxcclxuICAgICAgICApOiBQcm9taXNlPEJsb2NrPlxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8QmxvY2s+KE1ldGhvZHMuR2V0QmxvY2ssIFtibG9ja0hhc2gsIHNob3dUcmFuc2FjdGlvbkhhc2gsIF0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyBnZXREYXRhUmVxdWVzdChkclR4SGFzaDogSGFzaCwgbW9kZT86IEdldERhdGFSZXF1ZXN0TW9kZSwgZm9yY2UgPSBmYWxzZSk6IFByb21pc2U8R2V0RGF0YVJlcXVlc3RGdWxsUmVwb3J0IHwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8R2V0RGF0YVJlcXVlc3RGdWxsUmVwb3J0IHwgR2V0RGF0YVJlcXVlc3RFdGhlcmVhbFJlcG9ydD4oTWV0aG9kcy5HZXREYXRhUmVxdWVzdCwge1xyXG4gICAgICAgICAgICBoYXNoOiBkclR4SGFzaCxcclxuICAgICAgICAgICAgbW9kZTogbW9kZSB8fCBcImZ1bGxcIixcclxuICAgICAgICAgICAgZm9yY2VcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLy8gR2V0IHRoZSBibG9ja3MgdGhhdCBwZXJ0YWluIHRvIHRoZSBzdXBlcmJsb2NrIGluZGV4XHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0U3VwZXJibG9jayhlcG9jaDogRXBvY2gpOiBQcm9taXNlPFN1cGVyYmxvY2tSZXBvcnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN1cGVyYmxvY2tSZXBvcnQ+KE1ldGhvZHMuR2V0U3VwZXJibG9jaywgeyBcImJsb2NrX2Vwb2NoXCI6IGVwb2NoIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlcG9ydD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8VHJhbnNhY3Rpb25SZXBvcnQ+KE1ldGhvZHMuR2V0VHJhbnNhY3Rpb24sIFt0eEhhc2gsIF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvblJlY2VpcHQodHhIYXNoOiBIYXNoKTogUHJvbWlzZTxUcmFuc2FjdGlvblJlY2VpcHQ+IHtcclxuICAgICAgICAvLyB0b2RvOiBmZXRjaC91cGRhdGUgcmVjZWlwdCBmcm9tIHByb3ZpZGVyLCBpZiBub3QgY2FjaGVkXHJcbiAgICAgICAgcmV0dXJuIEpzb25ScGNQcm92aWRlci5yZWNlaXB0c1t0eEhhc2hdXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyBHZXQgdXR4b3NcclxuICAgIHB1YmxpYyBhc3luYyBnZXRVdHhvcyhwa2g6IFB1YmxpY0tleUhhc2hTdHJpbmcsIGZpbHRlcj86IHsgbWluVmFsdWU/OiBiaWdpbnQgfCBzdHJpbmcsIGZyb21TaWduZXI/OiBQdWJsaWNLZXlIYXNoU3RyaW5nIH0pOiBQcm9taXNlPEFycmF5PFV0eG9NZXRhZGF0YT4+IHtcclxuICAgICAgICBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5taW5WYWx1ZSA9IGZpbHRlcj8ubWluVmFsdWU/LnRvU3RyaW5nKCkgPz8gXCIwXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5jYWxsQXBpTWV0aG9kPFV0eG9JbmZvPihNZXRob2RzLkdldFV0eG9JbmZvLCBbcGtoLCAuLi4oZmlsdGVyID8gW2ZpbHRlcl06IFtdKV0pXHJcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQ6IFV0eG9JbmZvKSA9PiByZXN1bHQudXR4b3MubWFwKCh1dHhvOiBVdHhvTWV0YWRhdGEpID0+ICh7IFxyXG4gICAgICAgICAgICAgICAgLi4udXR4bywgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogQmlnSW50KHV0eG8udmFsdWUpXHJcbiAgICAgICAgICAgIH0pKSlcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VmFsdWVUcmFuc2Zlcih0eEhhc2g6IEhhc2gsIG1vZGU/OiBzdHJpbmcsIGZvcmNlID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8YW55PihNZXRob2RzLkdldFZhbHVlVHJhbnNmZXIsIHtcclxuICAgICAgICAgICAgaGFzaDogdHhIYXNoLFxyXG4gICAgICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgICAgICBmb3JjZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaERhdGFSZXF1ZXN0cyhcclxuICAgICAgICByYWRIYXNoOiBIYXNoLCBcclxuICAgICAgICBvcHRpb25zPzogeyBcclxuICAgICAgICAgICAgbGltaXQ/OiBudW1iZXIsIFxyXG4gICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXIsXHJcbiAgICAgICAgICAgIG1vZGU/OiBHZXREYXRhUmVxdWVzdE1vZGUsIFxyXG4gICAgICAgICAgICByZXZlcnNlPzogYm9vbGVhbiBcclxuICAgIH0pOiBQcm9taXNlPEFycmF5PEdldERhdGFSZXF1ZXN0RXRoZXJlYWxSZXBvcnQgfCBHZXREYXRhUmVxdWVzdEZ1bGxSZXBvcnQ+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICAgICAgLmNhbGxBcGlNZXRob2Q8QXJyYXk8YW55W10+PihNZXRob2RzLlNlYXJjaERhdGFSZXF1ZXN0cywge1xyXG4gICAgICAgICAgICAgICAgcmFkSGFzaCxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiBvcHRpb25zPy5saW1pdCB8fCAxLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBvcHRpb25zPy5vZmZzZXQgfHwgMCxcclxuICAgICAgICAgICAgICAgIHJldmVyc2U6ICEob3B0aW9ucz8ucmV2ZXJzZSA9PT0gZmFsc2UpLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbihhc3luYyBlbnRyaWVzID0+IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgZW50cmllcy5tYXAoKGVudHJ5OiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFSZXF1ZXN0KGVudHJ5WzFdLCBvcHRpb25zPy5tb2RlIHx8IFwiZXRoZXJlYWxcIiwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHB1YmxpYyBhc3luYyBzZW5kUmF3VHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxBcGlNZXRob2Q8Ym9vbGVhbj4oTWV0aG9kcy5JbnZlbnRvcnksIHsgdHJhbnNhY3Rpb24gfSlcclxuICAgIH1cclxuXHJcbiAgICAvLy8gR2V0IHN1cHBseSBpbmZvXHJcbiAgICBwdWJsaWMgYXN5bmMgc3VwcGx5SW5mbygpOiBQcm9taXNlPFN1cHBseUluZm8+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsQXBpTWV0aG9kPFN1cHBseUluZm8+KE1ldGhvZHMuR2V0U3VwcGx5SW5mbylcclxuICAgIH1cclxufSJdfQ==
|
package/package.json
CHANGED
package/src/bin/toolkit.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/// IMPORTS ===========================================================================================================
|
|
4
4
|
|
|
@@ -24,18 +24,13 @@ const toolkitDownloadNames = {
|
|
|
24
24
|
win32: (arch) => `witnet_toolkit-${arch}-pc-windows-msvc.exe`,
|
|
25
25
|
// TODO: detect armv7
|
|
26
26
|
linux: (arch) => `witnet_toolkit-${arch}-unknown-linux-gnu${arch === "arm" ? "eabihf" : ""}`,
|
|
27
|
-
darwin: (arch) => `witnet_toolkit
|
|
27
|
+
darwin: (arch) => `witnet_toolkit-x86_64-apple-darwin`,
|
|
28
28
|
}
|
|
29
29
|
const toolkitFileNames = {
|
|
30
30
|
win32: (arch) => `witnet_toolkit-${version}-${arch}-pc-windows-msvc.exe`,
|
|
31
31
|
// TODO: detect armv7
|
|
32
32
|
linux: (arch) => `witnet_toolkit-${version}-${arch}-unknown-linux-gnu${arch === "arm" ? "eabihf" : ""}`,
|
|
33
|
-
darwin: (arch) =>
|
|
34
|
-
arch === "arm64"
|
|
35
|
-
// m1 mac
|
|
36
|
-
? `witnet_toolkit-${version}-${arch}-unknown-linux-gnu`
|
|
37
|
-
// intel mac
|
|
38
|
-
: `witnet_toolkit-${version}-${arch}-apple-darwin`,
|
|
33
|
+
darwin: (arch) => `witnet_toolkit-${version}-x86_64-apple-darwin`,
|
|
39
34
|
}
|
|
40
35
|
const archsMap = {
|
|
41
36
|
arm64: "aarch64",
|