@blokjs/trigger-worker 0.7.0 → 1.1.0

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.
@@ -94,10 +94,9 @@ export class WorkerTrigger extends TriggerBase {
94
94
  */
95
95
  loadNodes() {
96
96
  this.nodeMap.nodes = new NodeMap();
97
- const nodeKeys = Object.keys(this.nodes);
98
- for (const key of nodeKeys) {
99
- this.nodeMap.nodes.addNode(key, this.nodes[key]);
100
- }
97
+ // Register each node under its own node.name (the canonical use: ref, ADR
98
+ // 0002) the Nodes.ts map keys are cosmetic; the collision guard catches dups.
99
+ this.nodeMap.nodes.addNodes(Object.values(this.nodes));
101
100
  }
102
101
  /**
103
102
  * Load workflows into the workflow map
@@ -692,4 +691,4 @@ export class WorkerTrigger extends TriggerBase {
692
691
  }
693
692
  }
694
693
  export default WorkerTrigger;
695
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2VyVHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Xb3JrZXJUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFrRCxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFFTixxQkFBcUIsRUFFckIsYUFBYSxFQUViLGFBQWEsRUFDYixzQkFBc0IsRUFFdEIsT0FBTyxFQUNQLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixXQUFXLEVBR1gsZ0JBQWdCLEdBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFhLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBQzVCLFNBQVMsQ0FBUztJQUNsQyxpRkFBaUY7SUFDakUsS0FBSyxDQUFVO0lBRS9CLFlBQVksU0FBaUIsRUFBRSxLQUFjO1FBQzVDLEtBQUssQ0FBQyx1QkFBdUIsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRDtBQXFIRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFnQixhQUFjLFNBQVEsV0FBVztJQUM1QyxPQUFPLEdBQWtCLEVBQW1CLENBQUM7SUFDcEMs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UUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Q7QUFFRCxlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya2VyVHJpZ2dlciAtIEJhY2tncm91bmQgam9iIHByb2Nlc3NpbmcgZm9yIEJsb2sgd29ya2Zsb3dzXG4gKlxuICogRXh0ZW5kcyBUcmlnZ2VyQmFzZSB0byBzdXBwb3J0IGxvbmctcnVubmluZyBiYWNrZ3JvdW5kIGpvYnM6XG4gKiAtIENvbmN1cnJlbmN5IGNvbnRyb2xzIChtYXggTiBjb25jdXJyZW50IGpvYnMpXG4gKiAtIFJldHJ5IGxvZ2ljIHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxuICogLSBKb2IgdGltZW91dHNcbiAqIC0gSm9iIHByaW9yaXR5IGFuZCBkZWxheSBzY2hlZHVsaW5nXG4gKiAtIERlYWQgbGV0dGVyIHF1ZXVlIHN1cHBvcnRcbiAqXG4gKiBQYXR0ZXJuOlxuICogMS4gbG9hZE5vZGVzKCkgLSBMb2FkIGF2YWlsYWJsZSBub2RlcyBpbnRvIE5vZGVNYXBcbiAqIDIuIGxvYWRXb3JrZmxvd3MoKSAtIExvYWQgd29ya2Zsb3dzIHdpdGggd29ya2VyIHRyaWdnZXJzXG4gKiAzLiBsaXN0ZW4oKSAtIENvbm5lY3QgdG8gam9iIGJhY2tlbmQgYW5kIHN0YXJ0IHByb2Nlc3NpbmdcbiAqIDQuIEZvciBlYWNoIGpvYjpcbiAqICAgIC0gQ3JlYXRlIGNvbnRleHQgd2l0aCB0aGlzLmNyZWF0ZUNvbnRleHQoKVxuICogICAgLSBQb3B1bGF0ZSBjdHgucmVxdWVzdCB3aXRoIGpvYiBkYXRhXG4gKiAgICAtIEV4ZWN1dGUgd29ya2Zsb3cgdmlhIHRoaXMucnVuKGN0eClcbiAqICAgIC0gQWNrIG9uIHN1Y2Nlc3MsIHJldHJ5IG9yIERMUSBvbiBmYWlsdXJlXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBXb3JrZXJUcmlnZ2VyT3B0cywgdHlwZSBXb3JrZmxvd1YyQnVpbGRlciwgdHJ5UGFyc2VEdXJhdGlvbiB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuaW1wb3J0IHtcblx0dHlwZSBCbG9rU2VydmljZSxcblx0Q29uY3VycmVuY3lMaW1pdEVycm9yLFxuXHRDb25jdXJyZW5jeU1ldHJpY3MsXG5cdENvbmZpZ3VyYXRpb24sXG5cdERlYm91bmNlQ29vcmRpbmF0b3IsXG5cdERlZmF1bHRMb2dnZXIsXG5cdERlZmVycmVkRGlzcGF0Y2hTaWduYWwsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyxcblx0SmFuaXRvcixcblx0Tm9kZU1hcCxcblx0UXVldWVFeHBpcmVkRXJyb3IsXG5cdFJ1bkNhbmNlbGxlZEVycm9yLFxuXHRSdW5UcmFja2VyLFxuXHRUcmlnZ2VyQmFzZSxcblx0dHlwZSBUcmlnZ2VyUmVzcG9uc2UsXG5cdFdvcmtmbG93UmVnaXN0cnksXG5cdGJvb3RzdHJhcFRyYWNpbmcsXG59IGZyb20gXCJAYmxva2pzL3J1bm5lclwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0LCBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAYmxva2pzL3NoYXJlZFwiO1xuaW1wb3J0IHsgdHlwZSBTcGFuLCBTcGFuU3RhdHVzQ29kZSwgbWV0cmljcywgdHJhY2UgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvYXBpXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcblxuLyoqXG4gKiBGNCAvIEYyNCDigJQgdGhyb3duIGJ5IGBleGVjdXRlV2l0aFRpbWVvdXRgIHdoZW4gYSB3b3JrZXIgam9iIGV4Y2VlZHMgaXRzXG4gKiB0cmlnZ2VyLWxldmVsIGBjb25maWcudGltZW91dGAuIEEgZGVkaWNhdGVkIHR5cGUgKGluc3RlYWQgb2YgYSBwbGFpblxuICogYEVycm9yYCkgbGV0cyBgaGFuZGxlSm9iYCdzIGNhdGNoIGRpc2NyaW1pbmF0ZSB0aGUgdGltZW91dDogaXQgYWJvcnRzIHRoZVxuICogZGV0YWNoZWQgcnVuIHZpYSBgY3R4LnNpZ25hbGAgYW5kIGZsaXBzIHRoZSBydW4gcmVjb3JkIHRvIGB0aW1lZE91dGBcbiAqIChtYXRjaGluZyB0aGUgcGVyLXN0ZXAgYG1heER1cmF0aW9uYCB0YXhvbm9teSkgcmF0aGVyIHRoYW4gcm91dGluZyB0aGVcbiAqIHRpbWVvdXQgdGhyb3VnaCB0aGUgZ2VuZXJpYyByZXRyeS9ETFEgcGF0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtlclRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0cHVibGljIHJlYWRvbmx5IHRpbWVvdXRNczogbnVtYmVyO1xuXHQvKiogUnVuIGlkIG9mIHRoZSBhYm9ydGVkIHJ1biwgd2hlbiBrbm93biDigJQgdXNlZCB0byBmbGlwIHN0YXR1cyB0byBgdGltZWRPdXRgLiAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgcnVuSWQ/OiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IodGltZW91dE1zOiBudW1iZXIsIHJ1bklkPzogc3RyaW5nKSB7XG5cdFx0c3VwZXIoYEpvYiB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKTtcblx0XHR0aGlzLm5hbWUgPSBcIldvcmtlclRpbWVvdXRFcnJvclwiO1xuXHRcdHRoaXMudGltZW91dE1zID0gdGltZW91dE1zO1xuXHRcdHRoaXMucnVuSWQgPSBydW5JZDtcblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgV29ya2VyVGltZW91dEVycm9yLnByb3RvdHlwZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBKb2IgcmVjZWl2ZWQgZnJvbSB3b3JrZXIgcXVldWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJKb2Ige1xuXHQvKiogVW5pcXVlIGpvYiBJRCAqL1xuXHRpZDogc3RyaW5nO1xuXHQvKiogSm9iIGRhdGEgcGF5bG9hZCAqL1xuXHRkYXRhOiB1bmtub3duO1xuXHQvKiogSm9iIG1ldGFkYXRhIGhlYWRlcnMgKi9cblx0aGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0LyoqIFF1ZXVlIG5hbWUgdGhpcyBqb2IgYmVsb25ncyB0byAqL1xuXHRxdWV1ZTogc3RyaW5nO1xuXHQvKiogSm9iIHByaW9yaXR5IChoaWdoZXIgPSBtb3JlIGltcG9ydGFudCkgKi9cblx0cHJpb3JpdHk6IG51bWJlcjtcblx0LyoqIE51bWJlciBvZiBhdHRlbXB0cyBtYWRlIHNvIGZhciAqL1xuXHRhdHRlbXB0czogbnVtYmVyO1xuXHQvKiogTWF4aW11bSByZXRyeSBhdHRlbXB0cyAqL1xuXHRtYXhSZXRyaWVzOiBudW1iZXI7XG5cdC8qKiBUaW1lc3RhbXAgd2hlbiBqb2Igd2FzIGNyZWF0ZWQgKi9cblx0Y3JlYXRlZEF0OiBEYXRlO1xuXHQvKiogRGVsYXkgYmVmb3JlIHByb2Nlc3NpbmcgKG1zKSAqL1xuXHRkZWxheT86IG51bWJlcjtcblx0LyoqIEpvYiB0aW1lb3V0IChtcykgKi9cblx0dGltZW91dD86IG51bWJlcjtcblx0LyoqIE9yaWdpbmFsIHJhdyBqb2IgZnJvbSBwcm92aWRlciAqL1xuXHRyYXc6IHVua25vd247XG5cdC8qKiBNYXJrIGpvYiBhcyBjb21wbGV0ZWQgKi9cblx0Y29tcGxldGU6ICgpID0+IFByb21pc2U8dm9pZD47XG5cdC8qKiBNYXJrIGpvYiBhcyBmYWlsZWQgKG9wdGlvbmFsbHkgcmVxdWV1ZSkgKi9cblx0ZmFpbDogKGVycm9yOiBFcnJvciwgcmVxdWV1ZT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogV29ya2VyIGFkYXB0ZXIgaW50ZXJmYWNlIC0gaW1wbGVtZW50ZWQgYnkgZWFjaCBqb2IgYmFja2VuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckFkYXB0ZXIge1xuXHQvKiogUHJvdmlkZXIgbmFtZSAoZS5nLiwgXCJidWxsbXFcIiwgXCJpbi1tZW1vcnlcIikgKi9cblx0cmVhZG9ubHkgcHJvdmlkZXI6IHN0cmluZztcblxuXHQvKiogQ29ubmVjdCB0byB0aGUgam9iIGJhY2tlbmQgKi9cblx0Y29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKiBEaXNjb25uZWN0IGZyb20gdGhlIGpvYiBiYWNrZW5kICovXG5cdGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKipcblx0ICogU3RhcnQgcHJvY2Vzc2luZyBqb2JzIGZyb20gYSBxdWV1ZVxuXHQgKiBAcGFyYW0gY29uZmlnIFdvcmtlciB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25cblx0ICogQHBhcmFtIGhhbmRsZXIgQ2FsbGJhY2sgZm9yIGVhY2ggam9iXG5cdCAqL1xuXHRwcm9jZXNzKGNvbmZpZzogV29ya2VyVHJpZ2dlck9wdHMsIGhhbmRsZXI6IChqb2I6IFdvcmtlckpvYikgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIEFkZCBhIGpvYiB0byBhIHF1ZXVlIChmb3IgcHJvZ3JhbW1hdGljIGRpc3BhdGNoaW5nKVxuXHQgKiBAcGFyYW0gcXVldWUgUXVldWUgbmFtZVxuXHQgKiBAcGFyYW0gZGF0YSBKb2IgcGF5bG9hZFxuXHQgKiBAcGFyYW0gb3B0cyBKb2Igb3B0aW9uc1xuXHQgKi9cblx0YWRkSm9iKFxuXHRcdHF1ZXVlOiBzdHJpbmcsXG5cdFx0ZGF0YTogdW5rbm93bixcblx0XHRvcHRzPzoge1xuXHRcdFx0cHJpb3JpdHk/OiBudW1iZXI7XG5cdFx0XHRkZWxheT86IG51bWJlcjtcblx0XHRcdHJldHJpZXM/OiBudW1iZXI7XG5cdFx0XHR0aW1lb3V0PzogbnVtYmVyO1xuXHRcdFx0am9iSWQ/OiBzdHJpbmc7XG5cdFx0fSxcblx0KTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdC8qKiBTdG9wIHByb2Nlc3NpbmcgYSBzcGVjaWZpYyBxdWV1ZSAqL1xuXHRzdG9wUHJvY2Vzc2luZyhxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKiogQ2hlY2sgaWYgY29ubmVjdGVkICovXG5cdGlzQ29ubmVjdGVkKCk6IGJvb2xlYW47XG5cblx0LyoqIEhlYWx0aCBjaGVjayAqL1xuXHRoZWFsdGhDaGVjaygpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG5cdC8qKiBHZXQgcXVldWUgc3RhdHMgKi9cblx0Z2V0UXVldWVTdGF0cyhxdWV1ZTogc3RyaW5nKTogUHJvbWlzZTxXb3JrZXJRdWV1ZVN0YXRzPjtcbn1cblxuLyoqXG4gKiBRdWV1ZSBzdGF0aXN0aWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyUXVldWVTdGF0cyB7XG5cdC8qKiBOdW1iZXIgb2Ygam9icyB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZCAqL1xuXHR3YWl0aW5nOiBudW1iZXI7XG5cdC8qKiBOdW1iZXIgb2Ygam9icyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkICovXG5cdGFjdGl2ZTogbnVtYmVyO1xuXHQvKiogTnVtYmVyIG9mIGNvbXBsZXRlZCBqb2JzICovXG5cdGNvbXBsZXRlZDogbnVtYmVyO1xuXHQvKiogTnVtYmVyIG9mIGZhaWxlZCBqb2JzICovXG5cdGZhaWxlZDogbnVtYmVyO1xuXHQvKiogTnVtYmVyIG9mIGRlbGF5ZWQgam9icyAqL1xuXHRkZWxheWVkOiBudW1iZXI7XG59XG5cbi8qKlxuICogV29ya2Zsb3cgbW9kZWwgd2l0aCB3b3JrZXIgdHJpZ2dlciBjb25maWd1cmF0aW9uXG4gKi9cbmludGVyZmFjZSBXb3JrZXJXb3JrZmxvd01vZGVsIHtcblx0cGF0aDogc3RyaW5nO1xuXHRjb25maWc6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0dmVyc2lvbjogc3RyaW5nO1xuXHRcdHRyaWdnZXI/OiB7XG5cdFx0XHR3b3JrZXI/OiBXb3JrZXJUcmlnZ2VyT3B0cztcblx0XHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdFx0fTtcblx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHR9O1xufVxuXG4vKipcbiAqIFdvcmtlclRyaWdnZXIgLSBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB3b3JrZXItYmFzZWQgdHJpZ2dlcnNcbiAqXG4gKiBQcm92aWRlcyBiYWNrZ3JvdW5kIGpvYiBwcm9jZXNzaW5nIHdpdGg6XG4gKiAtIENvbmZpZ3VyYWJsZSBjb25jdXJyZW5jeSBwZXIgcXVldWVcbiAqIC0gQXV0b21hdGljIHJldHJpZXMgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gKiAtIEpvYiB0aW1lb3V0cyB3aXRoIGF1dG9tYXRpYyBmYWlsdXJlXG4gKiAtIFByaW9yaXR5LWJhc2VkIGpvYiBvcmRlcmluZ1xuICogLSBEZWxheWVkIGpvYiBzY2hlZHVsaW5nXG4gKiAtIFF1ZXVlIHN0YXRpc3RpY3MgYW5kIG1vbml0b3JpbmdcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdvcmtlclRyaWdnZXIgZXh0ZW5kcyBUcmlnZ2VyQmFzZSB7XG5cdHByb3RlY3RlZCBub2RlTWFwOiBHbG9iYWxPcHRpb25zID0ge30gYXMgR2xvYmFsT3B0aW9ucztcblx0cHJvdGVjdGVkIHJlYWRvbmx5IHRyYWNlciA9IHRyYWNlLmdldFRyYWNlcihcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJ0cmlnZ2VyLXdvcmtlci13b3JrZmxvd1wiLFxuXHRcdHByb2Nlc3MuZW52LlBST0pFQ1RfVkVSU0lPTiB8fCBcIjAuMC4xXCIsXG5cdCk7XG5cdHByb3RlY3RlZCByZWFkb25seSBsb2dnZXIgPSBuZXcgRGVmYXVsdExvZ2dlcigpO1xuXHQvKiogT0JTLTAyIFQ0IOKAlCBncmFjZWZ1bCBzaHV0ZG93biBmb3IgdGhlIE9UZWwgdHJhY2VyIHByb3ZpZGVyLCBpZiB0cmFjaW5nIHdhcyBlbmFibGVkLiAqL1xuXHRwcml2YXRlIHRyYWNpbmdTaHV0ZG93bjogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbCA9IG51bGw7XG5cdC8qKlxuXHQgKiB2MC43IFBSIDUg4oCUIHRoZSBcImRlZmF1bHRcIiBhZGFwdGVyLCB1c2VkIHdoZW4gYSB3b3JrZmxvdydzXG5cdCAqIGB0cmlnZ2VyLndvcmtlci5wcm92aWRlcmAgZmllbGQgaXMgb21pdHRlZCBBTkQgdGhlXG5cdCAqIGBCTE9LX1dPUktFUl9BREFQVEVSYCBlbnYgdmFyIGlzIHVuc2V0LiBTdWJjbGFzc2VzIE1BWSBzZXQgdGhpc1xuXHQgKiBmb3IgYmFjay1jb21wYXQgd2l0aCB0aGUgcHJlLXYwLjcgc2luZ2xlLWFkYXB0ZXIgcGF0dGVyblxuXHQgKiAoYGNsYXNzIFdvcmtlclNlcnZlciBleHRlbmRzIFdvcmtlclRyaWdnZXIgeyBwcm90ZWN0ZWQgYWRhcHRlciA9IG5ldyBOQVRTV29ya2VyQWRhcHRlcigpIH1gKS5cblx0ICpcblx0ICogV2hlbiB1bnNldCBBTkQgbm8gcGVyLXdvcmtmbG93IHByb3ZpZGVyIGlzIHNwZWNpZmllZCwgdGhlIGZhY3Rvcnlcblx0ICogZmFsbHMgYmFjayB0byBgaW4tbWVtb3J5YC4gVGhlIGZhY3RvcnkgcG9vbCAoYGFkYXB0ZXJzL2ZhY3RvcnkudHNgKVxuXHQgKiB0cmFja3Mgb25lIGNvbm5lY3RlZCBhZGFwdGVyIHBlciBwcm92aWRlciBzbyBtdWx0aXBsZSB3b3JrZmxvd3Ncblx0ICogd2l0aCB0aGUgc2FtZSBwcm92aWRlciBzaGFyZSBhIHNpbmdsZSBicm9rZXIgY29ubmVjdGlvbi5cblx0ICovXG5cdHByb3RlY3RlZCBhZGFwdGVyPzogV29ya2VyQWRhcHRlcjtcblxuXHQvKiogQWN0aXZlIHF1ZXVlcyBiZWluZyBwcm9jZXNzZWQgKi9cblx0cHJvdGVjdGVkIGFjdGl2ZVF1ZXVlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNSDigJQgYWRhcHRlciBwb29sLCBrZXllZCBieSBwcm92aWRlciBuYW1lLiBQb3B1bGF0ZWQgbGF6aWx5XG5cdCAqIGluc2lkZSBgbGlzdGVuKClgIGFzIHdvcmtmbG93cyBhcmUgbWF0Y2hlZCB0byBwcm92aWRlcnMuIEVhY2hcblx0ICogYWRhcHRlciBpcyBjb25uZWN0ZWQgb25jZSBhbmQgcmV1c2VkIGFjcm9zcyB3b3JrZmxvd3MgdGhhdCBzaGFyZVxuXHQgKiBpdHMgcHJvdmlkZXIuIERyYWluZWQgaW4gYHN0b3AoKWAuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYWRhcHRlclBvb2w6IE1hcDxzdHJpbmcsIFdvcmtlckFkYXB0ZXI+ID0gbmV3IE1hcCgpO1xuXG5cdC8vIFN1YmNsYXNzZXMgcHJvdmlkZSB0aGVzZVxuXHRwcm90ZWN0ZWQgYWJzdHJhY3Qgbm9kZXM6IFJlY29yZDxzdHJpbmcsIEJsb2tTZXJ2aWNlPHVua25vd24+Pjtcblx0cHJvdGVjdGVkIGFic3RyYWN0IHdvcmtmbG93czogUmVjb3JkPHN0cmluZywgV29ya2Zsb3dWMkJ1aWxkZXI+O1xuXG5cdC8vIENvbnN0cnVjdG9yIHJlbW92ZWQgaW4gdjAuNi4zIOKAlCBwcmUtZml4IGl0IGNhbGxlZCBgbG9hZE5vZGVzKClgICtcblx0Ly8gYGxvYWRXb3JrZmxvd3MoKWAsIGJ1dCBzdWJjbGFzc2VzIHVzZSBjbGFzcy1maWVsZCBhc3NpZ25tZW50cyBmb3Jcblx0Ly8gYG5vZGVzYCAvIGB3b3JrZmxvd3NgICh0aGUgY2Fub25pY2FsIFR5cGVTY3JpcHQgcGF0dGVybikuIFRob3NlXG5cdC8vIGZpZWxkcyBydW4gQUZURVIgc3VwZXIoKSwgc28gYWNjZXNzaW5nIGB0aGlzLm5vZGVzYCBmcm9tIHRoZSBwYXJlbnRcblx0Ly8gY29uc3RydWN0b3IgcmVhZCBgdW5kZWZpbmVkYCBhbmQgY3Jhc2hlZCB3aXRoXG5cdC8vIGBUeXBlRXJyb3I6IHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChPYmplY3Qua2V5cyh0aGlzLm5vZGVzKSlgLlxuXHQvLyBUaGUgcmVnaXN0cnkgaW5pdCBub3cgaGFwcGVucyBhdCB0aGUgc3RhcnQgb2YgYGxpc3RlbigpYCwgYWZ0ZXJcblx0Ly8gdGhlIHN1YmNsYXNzJ3MgZmllbGRzIGFyZSBpbml0aWFsaXplZC5cblxuXHQvKipcblx0ICogTG9hZCBub2RlcyBpbnRvIHRoZSBub2RlIG1hcFxuXHQgKi9cblx0bG9hZE5vZGVzKCk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcC5ub2RlcyA9IG5ldyBOb2RlTWFwKCk7XG5cdFx0Y29uc3Qgbm9kZUtleXMgPSBPYmplY3Qua2V5cyh0aGlzLm5vZGVzKTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBub2RlS2V5cykge1xuXHRcdFx0dGhpcy5ub2RlTWFwLm5vZGVzLmFkZE5vZGUoa2V5LCB0aGlzLm5vZGVzW2tleV0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkIHdvcmtmbG93cyBpbnRvIHRoZSB3b3JrZmxvdyBtYXBcblx0ICovXG5cdGxvYWRXb3JrZmxvd3MoKTogdm9pZCB7XG5cdFx0dGhpcy5ub2RlTWFwLndvcmtmbG93cyA9IHRoaXMud29ya2Zsb3dzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSB3b3JrZXIgcHJvY2Vzc29yIC0gbWFpbiBlbnRyeSBwb2ludFxuXHQgKi9cblx0YXN5bmMgbGlzdGVuKCk6IFByb21pc2U8bnVtYmVyPiB7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gdGhpcy5zdGFydENvdW50ZXIoKTtcblxuXHRcdC8vIE9CUy0wMiBUNCDigJQgb3B0LWluIGRpc3RyaWJ1dGVkIHRyYWNpbmcgZm9yIHdvcmtlciBqb2JzLiBXaGVuXG5cdFx0Ly8gT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIGlzIHNldCwgaW5zdGFsbCBhbiBPVGVsIFNESyBzbyB0aGUgc3BhbnNcblx0XHQvLyB0aGUgcnVubmVyIGNyZWF0ZXMgcGVyIGpvYi9zdGVwIGV4cG9ydCB0byBUZW1wby9KYWVnZXIvZXRjLiBNaXJyb3JzXG5cdFx0Ly8gSHR0cFRyaWdnZXIncyBCMSB3aXJpbmc7IG5vLW9wICsgemVybyBvdmVyaGVhZCB3aGVuIHRoZSBlbnYgdmFyIGlzIHVuc2V0LlxuXHRcdGF3YWl0IHRoaXMubWF5YmVCb290c3RyYXBUcmFjaW5nKCk7XG5cblx0XHQvLyBQb3B1bGF0ZSB0aGUgdHJpZ2dlcidzIG5vZGUgKyB3b3JrZmxvdyByZWdpc3RyaWVzIGZyb20gdGhlXG5cdFx0Ly8gc3ViY2xhc3MncyBgbm9kZXNgIC8gYHdvcmtmbG93c2AgZmllbGRzLiB2MC42LjMgZml4IOKAlCBwcmUtZml4XG5cdFx0Ly8gdGhlc2UgY2FsbHMgbGl2ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCBjcmFzaGVkIGJlY2F1c2UgY2xhc3Ncblx0XHQvLyBmaWVsZHMgaGF2ZW4ndCBydW4geWV0IGF0IHN1cGVyLWNvbnN0cnVjdG9yIHRpbWUuIFNlZSB0aGUgY29tbWVudFxuXHRcdC8vIHdoZXJlIHRoZSBvbGQgY29uc3RydWN0b3IgdXNlZCB0byBsaXZlIGZvciB0aGUgZnVsbCByZWFzb24uXG5cdFx0dGhpcy5sb2FkTm9kZXMoKTtcblx0XHR0aGlzLmxvYWRXb3JrZmxvd3MoKTtcblxuXHRcdC8vIEY2ICh3b3JrZXIgcGFydCkg4oCUIGZlZWQgdGhlIFdvcmtmbG93UmVnaXN0cnkgZnJvbSB0aGUgd29ya2VyIG5vZGVNYXAuXG5cdFx0Ly8gV29ya2VyLW9ubHkgZGVwbG95bWVudHMgbmV2ZXIgaW5zdGFudGlhdGUgYW4gSHR0cFRyaWdnZXIsIHNvIHdpdGhvdXRcblx0XHQvLyB0aGlzIHRoZSByZWdpc3RyeSBpcyBlbXB0eSBhbmQgYW55IHRyaWdnZXItbGV2ZWwgLyBwcm9jZXNzLWdsb2JhbFxuXHRcdC8vIG1pZGRsZXdhcmUgbmFtZSBvciBgc3Vid29ya2Zsb3c6YCBzdGVwIGZhaWxzIGF0IHJ1bnRpbWUuIFdvcmtmbG93c1xuXHRcdC8vIGZsYWdnZWQgYG1pZGRsZXdhcmU6IHRydWVgIGFyZSByZWdpc3RlcmVkIHdpdGggYGlzTWlkZGxld2FyZWAuXG5cdFx0dGhpcy5yZWdpc3RlcldvcmtmbG93c0Zyb21Ob2RlTWFwKHRoaXMubG9nZ2VyKTtcblxuXHRcdC8vIEYxNCAod29ya2VyIHBhcnQpIOKAlCBzZWVkIEJMT0tfR0xPQkFMX01JRERMRVdBUkUgZnJvbSBlbnYuIE9ubHlcblx0XHQvLyBIdHRwVHJpZ2dlciBkaWQgdGhpcyBiZWZvcmUsIHNvIGEgcHVyZSB3b3JrZXIgcHJvY2VzcyBzaWxlbnRseVxuXHRcdC8vIGRyb3BwZWQgdGhlIGRvY3VtZW50ZWQgZW52LXZhciBjb25maWd1cmF0aW9uLlxuXHRcdHRoaXMuc2VlZEdsb2JhbE1pZGRsZXdhcmVGcm9tRW52KHRoaXMubG9nZ2VyKTtcblxuXHRcdHRyeSB7XG5cdFx0XHQvLyBUaWVyIDIgcXVpY2std2lucyBmb2xsb3ctdXAgwrcgaW5zdGFsbCBjcmFzaCBoYW5kbGVycyArIHJlY292ZXJcblx0XHRcdC8vIG9ycGhhbmVkIHJ1bnMgZnJvbSBhIHByZXZpb3VzIChkZWFkKSBwcm9jZXNzLiBJZGVtcG90ZW50ICsgb3B0LW91dFxuXHRcdFx0Ly8gdmlhIGBCTE9LX0NSQVNIX0FVVE9GTElQX0RJU0FCTEVEPTFgLlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0V29ya2VyVHJpZ2dlci5pbnN0YWxsQ3Jhc2hIYW5kbGVycyh0aGlzLmxvZ2dlcik7XG5cdFx0XHRcdGNvbnN0IG9ycGhhbmVkID0gV29ya2VyVHJpZ2dlci5yZWNvdmVyT3JwaGFuZWRSdW5zKHVuZGVmaW5lZCwgdGhpcy5sb2dnZXIpO1xuXHRcdFx0XHRpZiAob3JwaGFuZWQgPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKGBbY3Jhc2gtYXV0b2ZsaXBdIGZsaXBwZWQgJHtvcnBoYW5lZH0gb3JwaGFuZWQgcnVuKHMpIHRvIGNyYXNoZWQgb24gYm9vdGApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtjcmFzaC1hdXRvZmxpcF0gc2V0dXAgZmFpbGVkOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGllciAyIGZvbGxvdy11cCDCtyBzdGFydCB0aGUgcGVyaW9kaWMgc3RvcmFnZSBqYW5pdG9yLlxuXHRcdFx0Ly8gSWRlbXBvdGVudCAoc2luZ2xldG9uKTsgb3B0LW91dCB2aWEgYEJMT0tfSkFOSVRPUl9ESVNBQkxFRD0xYC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdEphbml0b3IuZ2V0SW5zdGFuY2UoUnVuVHJhY2tlci5nZXRJbnN0YW5jZSgpLmdldFN0b3JlKCksIHRoaXMubG9nZ2VyKS5zdGFydCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbamFuaXRvcl0gc2V0dXAgZmFpbGVkOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKX1gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGllciAyIGZvbGxvdy11cCDCtyBpbnN0YWxsIGdyYWNlZnVsIHNodXRkb3duIGhhbmRsZXJzXG5cdFx0XHQvLyAoU0lHVEVSTSAvIFNJR0lOVCkuIElkZW1wb3RlbnQ7IG9wdC1vdXQgdmlhXG5cdFx0XHQvLyBgQkxPS19HUkFDRUZVTF9TSFVURE9XTl9ESVNBQkxFRD0xYC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdFdvcmtlclRyaWdnZXIuaW5zdGFsbFNodXRkb3duSGFuZGxlcnModGhpcywgdGhpcy5sb2dnZXIpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbc2h1dGRvd25dIHNldHVwIGZhaWxlZDogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZpbmQgYWxsIHdvcmtmbG93cyB3aXRoIHdvcmtlciB0cmlnZ2Vyc1xuXHRcdFx0Y29uc3Qgd29ya2VyV29ya2Zsb3dzID0gdGhpcy5nZXRXb3JrZXJXb3JrZmxvd3MoKTtcblxuXHRcdFx0aWYgKHdvcmtlcldvcmtmbG93cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKFwiTm8gd29ya2Zsb3dzIHdpdGggd29ya2VyIHRyaWdnZXJzIGZvdW5kXCIpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5lbmRDb3VudGVyKHN0YXJ0VGltZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHByb2Nlc3NpbmcgZWFjaCBxdWV1ZSwgZGlzcGF0Y2hpbmcgdG8gdGhlIHJpZ2h0IGFkYXB0ZXJcblx0XHRcdC8vIGJhc2VkIG9uIHRoZSB3b3JrZmxvdydzIGBwcm92aWRlcmAgZmllbGQgKHdpdGggYmFjay1jb21wYXRcblx0XHRcdC8vIGZhbGxiYWNrIHRvIGB0aGlzLmFkYXB0ZXJgIHdoZW4gc3ViY2xhc3NlcyBzdGlsbCBzZXQgaXQpLlxuXHRcdFx0Zm9yIChjb25zdCB3b3JrZmxvdyBvZiB3b3JrZXJXb3JrZmxvd3MpIHtcblx0XHRcdFx0Y29uc3QgY29uZmlnID0gd29ya2Zsb3cuY29uZmlnLnRyaWdnZXI/LndvcmtlciBhcyBXb3JrZXJUcmlnZ2VyT3B0cztcblx0XHRcdFx0Y29uc3QgYWRhcHRlciA9IGF3YWl0IHRoaXMucmVzb2x2ZUFkYXB0ZXJGb3JXb3JrZmxvdyhjb25maWcpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXG5cdFx0XHRcdFx0YFN0YXJ0aW5nIHdvcmtlciBmb3IgcXVldWU6ICR7Y29uZmlnLnF1ZXVlfSB2aWEgJHthZGFwdGVyLnByb3ZpZGVyfSAoY29uY3VycmVuY3k9JHtjb25maWcuY29uY3VycmVuY3l9LCByZXRyaWVzPSR7Y29uZmlnLnJldHJpZXN9KWAsXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0dGhpcy5hY3RpdmVRdWV1ZXMuYWRkKGNvbmZpZy5xdWV1ZSk7XG5cblx0XHRcdFx0YXdhaXQgYWRhcHRlci5wcm9jZXNzKGNvbmZpZywgYXN5bmMgKGpvYikgPT4ge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuaGFuZGxlSm9iKGpvYiwgd29ya2Zsb3csIGNvbmZpZyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYFdvcmtlciB0cmlnZ2VyIHN0YXJ0ZWQuIFByb2Nlc3NpbmcgJHt3b3JrZXJXb3JrZmxvd3MubGVuZ3RofSBxdWV1ZShzKWApO1xuXG5cdFx0XHQvLyBFbmFibGUgSE1SIGluIGRldmVsb3BtZW50IG1vZGVcblx0XHRcdGlmIChwcm9jZXNzLmVudi5CTE9LX0hNUiA9PT0gXCJ0cnVlXCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVuYWJsZUhvdFJlbG9hZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5lbmRDb3VudGVyKHN0YXJ0VGltZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gc3RhcnQgd29ya2VyIHRyaWdnZXI6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3AgYWxsIHdvcmtlcnMgYW5kIGRpc2Nvbm5lY3Rcblx0ICovXG5cdC8qKlxuXHQgKiBPQlMtMDIgVDQg4oCUIGluc3RhbGwgdGhlIE9wZW5UZWxlbWV0cnkgU0RLIGF0IGJvb3Qgd2hlbiBhbiBPVExQIGVuZHBvaW50IGlzXG5cdCAqIGNvbmZpZ3VyZWQsIHNvIHRoZSBzcGFucyB0aGUgcnVubmVyIGFscmVhZHkgY3JlYXRlcyBmb3Igd29ya2VyIGpvYnMgZXhwb3J0XG5cdCAqIHRvIGEgYmFja2VuZCAoVGVtcG8vSmFlZ2VyL+KApikuIE5vLW9wIHdoZW4gYE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVGAgaXNcblx0ICogdW5zZXQgb3IgYEJMT0tfVFJBQ0lOR19ESVNBQkxFRD0xYC4gU3RvcmVzIHRoZSBzaHV0ZG93biBzbyBgc3RvcCgpYCBmbHVzaGVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBtYXliZUJvb3RzdHJhcFRyYWNpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHByb2Nlc3MuZW52LkJMT0tfVFJBQ0lOR19ESVNBQkxFRCA9PT0gXCIxXCIpIHJldHVybjtcblx0XHRjb25zdCBiYXNlID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCB8fCBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQ7XG5cdFx0aWYgKCFiYXNlKSByZXR1cm47XG5cdFx0Y29uc3QgZW5kcG9pbnQgPSBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UID8gYmFzZSA6IGAke2Jhc2UucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS92MS90cmFjZXNgO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBib290c3RyYXBUcmFjaW5nKHtcblx0XHRcdFx0c2VydmljZU5hbWU6IHByb2Nlc3MuZW52LkFQUF9OQU1FIHx8IHByb2Nlc3MuZW52LlBST0pFQ1RfTkFNRSB8fCBcImJsb2std29ya2VyXCIsXG5cdFx0XHRcdHNlcnZpY2VWZXJzaW9uOiBwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04sXG5cdFx0XHRcdGV4cG9ydGVyOiBcIm90bHBcIixcblx0XHRcdFx0ZW5kcG9pbnQsXG5cdFx0XHR9KTtcblx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50cmFjaW5nU2h1dGRvd24gPSByZXN1bHQuc2h1dGRvd247XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgW2Jsb2tdW3RyYWNpbmddIE9UTFAgZGlzdHJpYnV0ZWQgdHJhY2luZyBlbmFibGVkIOKGkiAke2VuZHBvaW50fWApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFx0XCJbYmxva11bdHJhY2luZ10gT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIGlzIHNldCBidXQgdGhlIE9UZWwgdHJhY2UgU0RLIGlzbid0IGluc3RhbGxlZCDigJQgdHJhY2luZyBpcyBPRkYuXCIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIGZhaWxlZCB0byBpbml0aWFsaXplOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBPQlMtMDIgVDQg4oCUIGZsdXNoIHBlbmRpbmcgc3BhbnMgYmVmb3JlIGRyYWluaW5nIHNvIHRoZSBsYXN0IGpvYnMnXG5cdFx0Ly8gc3BhbnMgYXJlbid0IGxvc3Qgb24gc2h1dGRvd24uXG5cdFx0aWYgKHRoaXMudHJhY2luZ1NodXRkb3duKSB7XG5cdFx0XHRhd2FpdCB0aGlzLnRyYWNpbmdTaHV0ZG93bigpLmNhdGNoKChlcnIpID0+XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbYmxva11bdHJhY2luZ10gc2h1dGRvd24gZmFpbGVkOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy50cmFjaW5nU2h1dGRvd24gPSBudWxsO1xuXHRcdH1cblx0XHQvLyBTdG9wIGVhY2ggcXVldWUgb24gaXRzIG93bmluZyBhZGFwdGVyIOKAlCBhZGFwdGVycyBhcmUgdHJhY2tlZFxuXHRcdC8vIGluIHRoZSBwb29sIHNvIG11bHRpLXByb3ZpZGVyIHdvcmtlcnMgYWxsIGRyYWluIGNsZWFubHkuXG5cdFx0Zm9yIChjb25zdCBxdWV1ZSBvZiB0aGlzLmFjdGl2ZVF1ZXVlcykge1xuXHRcdFx0Zm9yIChjb25zdCBhZGFwdGVyIG9mIHRoaXMuYWRhcHRlclBvb2wudmFsdWVzKCkpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBhZGFwdGVyLnN0b3BQcm9jZXNzaW5nKHF1ZXVlKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0Lyogc3dhbGxvdyDigJQgYWRhcHRlciBtYXkgbm90IG93biB0aGlzIHF1ZXVlICovXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgU3RvcHBlZCBwcm9jZXNzaW5nIHF1ZXVlOiAke3F1ZXVlfWApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGl2ZVF1ZXVlcy5jbGVhcigpO1xuXHRcdC8vIERpc2Nvbm5lY3QgZXZlcnkgYWRhcHRlciB3ZSBldmVyIGNvbm5lY3RlZC5cblx0XHRmb3IgKGNvbnN0IGFkYXB0ZXIgb2YgdGhpcy5hZGFwdGVyUG9vbC52YWx1ZXMoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgYWRhcHRlci5kaXNjb25uZWN0KCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtibG9rXVt3b3JrZXJdIGRpc2Nvbm5lY3QgZmFpbGVkOiAkeyhlcnIgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYWRhcHRlclBvb2wuY2xlYXIoKTtcblx0XHR0aGlzLmRlc3Ryb3lNb25pdG9yaW5nKCk7XG5cdFx0dGhpcy5sb2dnZXIubG9nKFwiV29ya2VyIHRyaWdnZXIgc3RvcHBlZFwiKTtcblx0fVxuXG5cdHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBvbkhtcldvcmtmbG93Q2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMubG9nZ2VyLmxvZyhcIltITVJdIFdvcmtlciB3b3JrZmxvdyBjaGFuZ2VkLCByZWxvYWRpbmcuLi5cIik7XG5cdFx0YXdhaXQgdGhpcy53YWl0Rm9ySW5GbGlnaHRSZXF1ZXN0cygpO1xuXHRcdGF3YWl0IHRoaXMuc3RvcCgpO1xuXHRcdHRoaXMubG9hZFdvcmtmbG93cygpO1xuXHRcdGF3YWl0IHRoaXMubGlzdGVuKCk7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGF0Y2ggYSBqb2IgdG8gYSB3b3JrZXIgcXVldWVcblx0ICovXG5cdGFzeW5jIGRpc3BhdGNoKFxuXHRcdHF1ZXVlOiBzdHJpbmcsXG5cdFx0ZGF0YTogdW5rbm93bixcblx0XHRvcHRzPzoge1xuXHRcdFx0cHJpb3JpdHk/OiBudW1iZXI7XG5cdFx0XHRkZWxheT86IG51bWJlcjtcblx0XHRcdHJldHJpZXM/OiBudW1iZXI7XG5cdFx0XHR0aW1lb3V0PzogbnVtYmVyO1xuXHRcdFx0am9iSWQ/OiBzdHJpbmc7XG5cdFx0fSxcblx0KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHQvLyBCYWNrLWNvbXBhdDogd2hlbiBhIHN1YmNsYXNzIHNldCBgdGhpcy5hZGFwdGVyYCwgdXNlIGl0LlxuXHRcdC8vIE90aGVyd2lzZSBkaXNwYXRjaCB2aWEgdGhlIGZpcnN0IHBvb2wgYWRhcHRlciDigJQgdHlwaWNhbGx5IHRoZVxuXHRcdC8vIG9ubHkgb25lIHdoZW4gYSBwcm9jZXNzIG93bnMgb25lIHRyaWdnZXIgd29ya2Zsb3cuXG5cdFx0Y29uc3QgYWRhcHRlciA9XG5cdFx0XHR0aGlzLmFkYXB0ZXIgPz9cblx0XHRcdCh0aGlzLmFkYXB0ZXJQb29sLnNpemUgPiAwID8gKHRoaXMuYWRhcHRlclBvb2wudmFsdWVzKCkubmV4dCgpLnZhbHVlIGFzIFdvcmtlckFkYXB0ZXIpIDogdW5kZWZpbmVkKTtcblx0XHRpZiAoIWFkYXB0ZXIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XCJbYmxva11bd29ya2VyXSBkaXNwYXRjaCgpIGNhbGxlZCBiZWZvcmUgYW55IGFkYXB0ZXIgaXMgY29ubmVjdGVkLiBDYWxsIGxpc3RlbigpIGZpcnN0LCBvciBzZXQgdGhpcy5hZGFwdGVyIG9uIHRoZSBzdWJjbGFzcy5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBhZGFwdGVyLmFkZEpvYihxdWV1ZSwgZGF0YSwgb3B0cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHN0YXRpc3RpY3MgZm9yIGEgcXVldWVcblx0ICovXG5cdGFzeW5jIGdldFF1ZXVlU3RhdHMocXVldWU6IHN0cmluZyk6IFByb21pc2U8V29ya2VyUXVldWVTdGF0cz4ge1xuXHRcdGNvbnN0IGFkYXB0ZXIgPVxuXHRcdFx0dGhpcy5hZGFwdGVyID8/XG5cdFx0XHQodGhpcy5hZGFwdGVyUG9vbC5zaXplID4gMCA/ICh0aGlzLmFkYXB0ZXJQb29sLnZhbHVlcygpLm5leHQoKS52YWx1ZSBhcyBXb3JrZXJBZGFwdGVyKSA6IHVuZGVmaW5lZCk7XG5cdFx0aWYgKCFhZGFwdGVyKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiW2Jsb2tdW3dvcmtlcl0gZ2V0UXVldWVTdGF0cygpIGNhbGxlZCBiZWZvcmUgYW55IGFkYXB0ZXIgaXMgY29ubmVjdGVkLiBDYWxsIGxpc3RlbigpIGZpcnN0LCBvciBzZXQgdGhpcy5hZGFwdGVyIG9uIHRoZSBzdWJjbGFzcy5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBhZGFwdGVyLmdldFF1ZXVlU3RhdHMocXVldWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBsaXN0IG9mIGFjdGl2ZSBxdWV1ZXNcblx0ICovXG5cdGdldEFjdGl2ZVF1ZXVlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy5hY3RpdmVRdWV1ZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHYwLjcgUFIgNSDigJQgcGljayB0aGUgYWRhcHRlciBmb3IgYSB3b3JrZmxvdydzIGBwcm92aWRlcmAgZmllbGQuXG5cdCAqXG5cdCAqIFJlc29sdXRpb24gb3JkZXI6XG5cdCAqICAgMS4gU3ViY2xhc3Mtc2V0IGB0aGlzLmFkYXB0ZXJgIChiYWNrLWNvbXBhdDogcHJlLXYwLjcgcGF0dGVyblxuXHQgKiAgICAgIHdoZXJlIG9uZSBwcm9jZXNzIGJpbmRzIHRvIG9uZSBhZGFwdGVyIGF0IGNvbnN0cnVjdGlvbiB0aW1lKS5cblx0ICogICAyLiBQZXItd29ya2Zsb3cgYHByb3ZpZGVyYCBmaWVsZCwgbG9va2VkIHVwIHZpYSB0aGUgZmFjdG9yeS5cblx0ICogICAzLiBgQkxPS19XT1JLRVJfQURBUFRFUmAgZW52IHZhci5cblx0ICogICA0LiBgaW4tbWVtb3J5YCBmYWxsYmFjay5cblx0ICpcblx0ICogQWRhcHRlcnMgYXJlIGNvbm5lY3RlZCBvbiBmaXJzdCB1c2UgYW5kIHBvb2xlZCBwZXIgcHJvdmlkZXIgc29cblx0ICogbXVsdGlwbGUgd29ya2Zsb3dzIHNoYXJpbmcgYSBwcm92aWRlciBzaGFyZSBvbmUgYnJva2VyXG5cdCAqIGNvbm5lY3Rpb24uIEhlYWx0aC1kZXBlbmRlbmN5IHJlZ2lzdHJhdGlvbiBhbHNvIGhhcHBlbnMgaGVyZSBzb1xuXHQgKiBlYWNoIHByb3ZpZGVyIGlzIHRyYWNrZWQgaW5kaXZpZHVhbGx5IGluIGAvaGVhbHRoYC5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyByZXNvbHZlQWRhcHRlckZvcldvcmtmbG93KGNvbmZpZzogV29ya2VyVHJpZ2dlck9wdHMpOiBQcm9taXNlPFdvcmtlckFkYXB0ZXI+IHtcblx0XHQvLyBTdWJjbGFzcyBvdmVycmlkZSB3aW5zIGZvciBiYWNrLWNvbXBhdC5cblx0XHRpZiAodGhpcy5hZGFwdGVyKSB7XG5cdFx0XHRpZiAoIXRoaXMuYWRhcHRlci5pc0Nvbm5lY3RlZCgpKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuYWRhcHRlci5jb25uZWN0KCk7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgQ29ubmVjdGVkIHRvICR7dGhpcy5hZGFwdGVyLnByb3ZpZGVyfSB3b3JrZXIgc3lzdGVtIChzdWJjbGFzcyBhZGFwdGVyKWApO1xuXHRcdFx0XHR0aGlzLnJlZ2lzdGVyQWRhcHRlckhlYWx0aCh0aGlzLmFkYXB0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gUG9vbC10cmFjayBzbyBzdG9wKCkgY2FuIGRyYWluIGl0LlxuXHRcdFx0dGhpcy5hZGFwdGVyUG9vbC5zZXQodGhpcy5hZGFwdGVyLnByb3ZpZGVyLCB0aGlzLmFkYXB0ZXIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuYWRhcHRlcjtcblx0XHR9XG5cblx0XHQvLyBMYXp5LWltcG9ydCB0aGUgZmFjdG9yeSBzbyB0aGUgd29ya2VyIHBhY2thZ2UgZG9lc24ndCBwdWxsIGluXG5cdFx0Ly8gZXZlcnkgYWRhcHRlciBvbiBpbXBvcnQg4oCUIG9ubHkgdGhlIG9uZXMgYWN0dWFsbHkgZXhlcmNpc2VkLlxuXHRcdGNvbnN0IHsgcmVzb2x2ZVByb3ZpZGVyLCBjcmVhdGVXb3JrZXJBZGFwdGVyIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2FkYXB0ZXJzL2ZhY3RvcnlcIik7XG5cdFx0Y29uc3QgcHJvdmlkZXIgPSByZXNvbHZlUHJvdmlkZXIoY29uZmlnLnByb3ZpZGVyKTtcblx0XHRsZXQgYWRhcHRlciA9IHRoaXMuYWRhcHRlclBvb2wuZ2V0KHByb3ZpZGVyKTtcblx0XHRpZiAoIWFkYXB0ZXIpIHtcblx0XHRcdGFkYXB0ZXIgPSBjcmVhdGVXb3JrZXJBZGFwdGVyKHByb3ZpZGVyKTtcblx0XHRcdGF3YWl0IGFkYXB0ZXIuY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5sb2dnZXIubG9nKGBDb25uZWN0ZWQgdG8gJHthZGFwdGVyLnByb3ZpZGVyfSB3b3JrZXIgc3lzdGVtYCk7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyQWRhcHRlckhlYWx0aChhZGFwdGVyKTtcblx0XHRcdHRoaXMuYWRhcHRlclBvb2wuc2V0KHByb3ZpZGVyLCBhZGFwdGVyKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFkYXB0ZXI7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyQWRhcHRlckhlYWx0aChhZGFwdGVyOiBXb3JrZXJBZGFwdGVyKTogdm9pZCB7XG5cdFx0dGhpcy5yZWdpc3RlckhlYWx0aERlcGVuZGVuY3koYHdvcmtlci0ke2FkYXB0ZXIucHJvdmlkZXJ9YCwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgaGVhbHRoeSA9IGF3YWl0IGFkYXB0ZXIuaGVhbHRoQ2hlY2soKTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXR1czogaGVhbHRoeSA/IChcImhlYWx0aHlcIiBhcyBjb25zdCkgOiAoXCJ1bmhlYWx0aHlcIiBhcyBjb25zdCksXG5cdFx0XHRcdGxhc3RDaGVja2VkOiBEYXRlLm5vdygpLFxuXHRcdFx0XHRtZXNzYWdlOiBoZWFsdGh5ID8gXCJDb25uZWN0ZWRcIiA6IFwiQ29ubmVjdGlvbiBsb3N0XCIsXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgd29ya2Zsb3dzIHRoYXQgaGF2ZSB3b3JrZXIgdHJpZ2dlcnNcblx0ICovXG5cdHByb3RlY3RlZCBnZXRXb3JrZXJXb3JrZmxvd3MoKTogV29ya2VyV29ya2Zsb3dNb2RlbFtdIHtcblx0XHRjb25zdCB3b3JrZmxvd3M6IFdvcmtlcldvcmtmbG93TW9kZWxbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBbcGF0aCwgd29ya2Zsb3ddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubm9kZU1hcC53b3JrZmxvd3MgfHwge30pKSB7XG5cdFx0XHRjb25zdCB3b3JrZmxvd0NvbmZpZyA9ICh3b3JrZmxvdyBhcyB1bmtub3duIGFzIHsgX2NvbmZpZzogV29ya2VyV29ya2Zsb3dNb2RlbFtcImNvbmZpZ1wiXSB9KS5fY29uZmlnO1xuXG5cdFx0XHQvLyBGMTEg4oCUIGRpc2NvdmVyIHRoZSB3b3JrZXIgdHJpZ2dlciBieSBkaXJlY3Qga2V5IGFjY2VzcywgTk9UIGJ5XG5cdFx0XHQvLyBpbnNwZWN0aW5nIG9ubHkgdGhlIEZJUlNUIGtleS4gQSBtdWx0aS10cmlnZ2VyIHdvcmtmbG93IHN1Y2ggYXNcblx0XHRcdC8vIGB0cmlnZ2VyOiB7IGh0dHA6IHsuLi59LCB3b3JrZXI6IHsgcXVldWU6IFwiam9ic1wiIH0gfWAgZGVjbGFyZXNcblx0XHRcdC8vIGB3b3JrZXJgIHNlY29uZDsgdGhlIG9sZCBgT2JqZWN0LmtleXModHJpZ2dlcilbMF0gPT09IFwid29ya2VyXCJgXG5cdFx0XHQvLyBjaGVjayBzaWxlbnRseSBkcm9wcGVkIGl0LCBtYWtpbmcgZGlzY292ZXJ5IGRlcGVuZCBvbiBKUyBvYmplY3Rcblx0XHRcdC8vIGtleSBpbnNlcnRpb24gb3JkZXIuIEV2ZXJ5IHNpYmxpbmcgdHJpZ2dlciAoSFRUUC9TU0UvV2ViaG9vaylcblx0XHRcdC8vIGFscmVhZHkgcmVhZHMgaXRzIGtleSBkaXJlY3RseS5cblx0XHRcdGlmICh3b3JrZmxvd0NvbmZpZz8udHJpZ2dlcj8ud29ya2VyKSB7XG5cdFx0XHRcdHdvcmtmbG93cy5wdXNoKHtcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdGNvbmZpZzogd29ya2Zsb3dDb25maWcsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB3b3JrZmxvd3M7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGFuIGluY29taW5nIGpvYlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGhhbmRsZUpvYihqb2I6IFdvcmtlckpvYiwgd29ya2Zsb3c6IFdvcmtlcldvcmtmbG93TW9kZWwsIGNvbmZpZzogV29ya2VyVHJpZ2dlck9wdHMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBqb2JJZCA9IGpvYi5pZCB8fCB1dWlkKCk7XG5cdFx0Y29uc3QgZGVmYXVsdE1ldGVyID0gbWV0cmljcy5nZXRNZXRlcihcImRlZmF1bHRcIik7XG5cdFx0Y29uc3Qgd29ya2VySm9icyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwid29ya2VyX2pvYnNfcHJvY2Vzc2VkXCIsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldvcmtlciBqb2JzIHByb2Nlc3NlZFwiLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHdvcmtlckVycm9ycyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwid29ya2VyX2pvYnNfZmFpbGVkXCIsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldvcmtlciBqb2IgZmFpbHVyZXNcIixcblx0XHR9KTtcblx0XHRjb25zdCB3b3JrZXJSZXRyaWVzID0gZGVmYXVsdE1ldGVyLmNyZWF0ZUNvdW50ZXIoXCJ3b3JrZXJfam9ic19yZXRyaWVkXCIsIHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIldvcmtlciBqb2IgcmV0cmllc1wiLFxuXHRcdH0pO1xuXG5cdFx0YXdhaXQgdGhpcy50cmFjZXIuc3RhcnRBY3RpdmVTcGFuKGB3b3JrZXI6JHtjb25maWcucXVldWV9YCwgYXN5bmMgKHNwYW46IFNwYW4pID0+IHtcblx0XHRcdC8vIEYyIOKAlCBnaXZlIGVhY2ggam9iIGl0cyBPV04gQ29uZmlndXJhdGlvbiBzbyBjb25jdXJyZW50IGpvYnNcblx0XHRcdC8vIChgY29uY3VycmVuY3kgPiAxYCwgb3IgdHdvIHF1ZXVlcyBpbiBvbmUgcHJvY2VzcykgbmV2ZXIgcmVhZCBhXG5cdFx0XHQvLyBzdGVwIGxpc3QgLyBuYW1lIC8gdHJpZ2dlciBjb25maWcgYW5vdGhlciBqb2IncyBgaW5pdCgpYFxuXHRcdFx0Ly8gb3Zlcndyb3RlLiBEZWNsYXJlZCBvdXRzaWRlIHRoZSB0cnkgc28gdGhlIGNhdGNoIGNhbiBmbGlwIHRoZVxuXHRcdFx0Ly8gcnVuJ3Mgc3RhdHVzIHZpYSB0aGUgcGVyLWpvYiBjb25maWcgbmFtZS5cblx0XHRcdGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuXHRcdFx0Ly8gRjQg4oCUIGNhcHR1cmVkIGZyb20gY3JlYXRlQ29udGV4dCBzbyB0aGUgdGltZW91dCBwYXRoIGNhbiBhYm9ydFxuXHRcdFx0Ly8gdGhlIGRldGFjaGVkIHJ1biBjb29wZXJhdGl2ZWx5LlxuXHRcdFx0bGV0IHJ1bkN0eDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cblx0XHRcdFx0Ly8gQnVnIDAzIOKAlCByZXNvbHZlIHRoZSBhbHJlYWR5LWxvYWRlZCB3b3JrZmxvdyBvYmplY3QgZnJvbSB0aGVcblx0XHRcdFx0Ly8gaW4tbWVtb3J5IG5vZGVNYXAgYW5kIHBhc3MgaXQgYXMgdGhlIGBwcmVsb2FkZWRgIGFyZyAobWlycm9yc1xuXHRcdFx0XHQvLyBIVFRQKS4gVGhpcyByb3V0ZXMgaW5pdCB0aHJvdWdoIHRoZSBwcmVsb2FkZWQgYnJhbmNoIGFuZCBza2lwc1xuXHRcdFx0XHQvLyB0aGUgZGlzay1iYXNlZCBgTG9jYWxTdG9yYWdlYCByZXNvbHZlciB3aG9zZSBkb3QgaGV1cmlzdGljXG5cdFx0XHRcdC8vIHJlamVjdGVkIGRvdHRlZCBgZG9tYWluLmFjdGlvbmAgd29ya2Zsb3cgbmFtZXMgKFwiRmlsZSB0eXBlIG5vdFxuXHRcdFx0XHQvLyBzdXBwb3J0ZWRcIikuIEZhbGxiYWNrIHRvIGB3b3JrZmxvdy5jb25maWdgIHNvIGBwcmVsb2FkZWRgIGlzXG5cdFx0XHRcdC8vIG5ldmVyIHVuZGVmaW5lZCAod2hpY2ggd291bGQgcmUtdHJpZ2dlciB0aGUgZGlzayBicmFuY2gpLlxuXHRcdFx0XHRjb25zdCBwcmVsb2FkZWQgPVxuXHRcdFx0XHRcdCh0aGlzLm5vZGVNYXAud29ya2Zsb3dzICYmICh0aGlzLm5vZGVNYXAud29ya2Zsb3dzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVt3b3JrZmxvdy5wYXRoXSkgPz9cblx0XHRcdFx0XHR3b3JrZmxvdy5jb25maWc7XG5cblx0XHRcdFx0Ly8gRjIg4oCUIGluaXRpYWxpemUgdGhlIHBlci1qb2IgQ29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIHRoZSBzaGFyZWRcblx0XHRcdFx0Ly8gYHRoaXMuY29uZmlndXJhdGlvbmAuXG5cdFx0XHRcdGF3YWl0IGNvbmZpZ3VyYXRpb24uaW5pdCh3b3JrZmxvdy5wYXRoLCB0aGlzLm5vZGVNYXAsIHByZWxvYWRlZCk7XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbnRleHQg4oCUIGJpbmQgaXQgdG8gdGhlIHBlci1qb2IgQ29uZmlndXJhdGlvbiAoRjIpLlxuXHRcdFx0XHRjb25zdCBjdHg6IENvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkLCB3b3JrZmxvdy5wYXRoLCBqb2JJZCwgY29uZmlndXJhdGlvbik7XG5cdFx0XHRcdHJ1bkN0eCA9IGN0eDtcblxuXHRcdFx0XHQvLyBQb3B1bGF0ZSByZXF1ZXN0IHdpdGggam9iIGRhdGFcblx0XHRcdFx0Y3R4LnJlcXVlc3QgPSB7XG5cdFx0XHRcdFx0Ym9keTogam9iLmRhdGEsXG5cdFx0XHRcdFx0aGVhZGVyczogam9iLmhlYWRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHt9LFxuXHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0cXVldWU6IGpvYi5xdWV1ZSxcblx0XHRcdFx0XHRcdGpvYklkOiBqb2IuaWQsXG5cdFx0XHRcdFx0XHRhdHRlbXB0OiBTdHJpbmcoam9iLmF0dGVtcHRzKSxcblx0XHRcdFx0XHRcdHByaW9yaXR5OiBTdHJpbmcoam9iLnByaW9yaXR5KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9IGFzIHVua25vd24gYXMgUmVxdWVzdENvbnRleHQ7XG5cblx0XHRcdFx0Ly8gU3RvcmUgd29ya2VyIG1ldGFkYXRhIGluIGNvbnRleHRcblx0XHRcdFx0aWYgKCFjdHgudmFycykgY3R4LnZhcnMgPSB7fTtcblx0XHRcdFx0Y3R4LnZhcnMuX3dvcmtlcl9qb2IgPSB7XG5cdFx0XHRcdFx0aWQ6IGpvYi5pZCxcblx0XHRcdFx0XHRxdWV1ZTogam9iLnF1ZXVlLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiBTdHJpbmcoam9iLmF0dGVtcHRzKSxcblx0XHRcdFx0XHRtYXhSZXRyaWVzOiBTdHJpbmcoam9iLm1heFJldHJpZXMpLFxuXHRcdFx0XHRcdHByaW9yaXR5OiBTdHJpbmcoam9iLnByaW9yaXR5KSxcblx0XHRcdFx0XHRjcmVhdGVkQXQ6IGpvYi5jcmVhdGVkQXQudG9JU09TdHJpbmcoKSxcblx0XHRcdFx0XHRkZWxheTogU3RyaW5nKGpvYi5kZWxheSA/PyAwKSxcblx0XHRcdFx0XHR0aW1lb3V0OiBTdHJpbmcoam9iLnRpbWVvdXQgPz8gMCksXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y3R4LmxvZ2dlci5sb2coXG5cdFx0XHRcdFx0YFByb2Nlc3Npbmcgam9iICR7am9iSWR9IGZyb20gJHtjb25maWcucXVldWV9IChhdHRlbXB0ICR7am9iLmF0dGVtcHRzICsgMX0vJHtqb2IubWF4UmV0cmllcyArIDF9KWAsXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gdjAuNiDCtyBhcHBseSB0aGUgbWVyZ2VkIG1pZGRsZXdhcmUgY2hhaW4gKHByb2Nlc3MtZ2xvYmFsIOKGklxuXHRcdFx0XHQvLyB3b3JrZmxvdy1sZXZlbCDihpIgdHJpZ2dlci1sZXZlbCkgb24gdGhlIHNhbWUgY3R4IHRoZSBtYWluXG5cdFx0XHRcdC8vIHdvcmtmbG93IHdpbGwgc2VlLiBTdGF0ZSBtdXRhdGlvbnMgZnJvbSBtaWRkbGV3YXJlXG5cdFx0XHRcdC8vIChlLmcuIGN0eC5zdGF0ZS5pZGVudGl0eSkgY2FycnkgZm9yd2FyZC4gTWlkZGxld2FyZSB0aGF0XG5cdFx0XHRcdC8vIHRocm93cyAodmlhIGBAYmxva2pzL3Rocm93YCkgcHJvcGFnYXRlcyB0byB0aGUgb3V0ZXJcblx0XHRcdFx0Ly8gY2F0Y2ggYW5kIGlzIHJvdXRlZCB0aHJvdWdoIHRoZSB3b3JrZXIncyByZXRyeSAvIERMUVxuXHRcdFx0XHQvLyBsb2dpYyBleGFjdGx5IGxpa2UgYSBtYWluLXdvcmtmbG93IGVycm9yLlxuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBGMiDigJQgcGFzcyB0aGUgcGVyLWpvYiBgY29uZmlndXJhdGlvbmAgc28gdHJpZ2dlci1sZXZlbFxuXHRcdFx0XHQvLyAoYHRyaWdnZXIud29ya2VyLm1pZGRsZXdhcmVgKSBhbmQgd29ya2Zsb3ctbGV2ZWwgbWlkZGxld2FyZVxuXHRcdFx0XHQvLyBhcmUgcmVhZCBmcm9tIHRoZSBvYmplY3QgVEhJUyBqb2IgaW5pdGlhbGl6ZWQuIFdpdGhvdXQgaXQgdGhlXG5cdFx0XHRcdC8vIGNoYWluIHdvdWxkIHJlYWQgdGhlIG5ldmVyLWluaXRpYWxpemVkIHNoYXJlZCBgdGhpcy5jb25maWd1cmF0aW9uYFxuXHRcdFx0XHQvLyAodGhlIHdvcmtlciBubyBsb25nZXIgY2FsbHMgYHRoaXMuY29uZmlndXJhdGlvbi5pbml0YCkgYW5kXG5cdFx0XHRcdC8vIHNpbGVudGx5IGRyb3AgZXZlcnl0aGluZyBidXQgdGhlIHByb2Nlc3MtZ2xvYmFsIGNoYWluLlxuXHRcdFx0XHRhd2FpdCB0aGlzLmFwcGx5TWlkZGxld2FyZUNoYWluKGN0eCwgdGhpcy5ub2RlTWFwLCBjb25maWd1cmF0aW9uKTtcblxuXHRcdFx0XHQvLyBFeGVjdXRlIHdvcmtmbG93IHdpdGggdGltZW91dCBpZiBjb25maWd1cmVkLlxuXHRcdFx0XHQvLyBGMiDigJQgcGFzcyB0aGUgcGVyLWpvYiBgY29uZmlndXJhdGlvbmAgaW50byBgcnVuYCBzbyB0aGUgcnVubmVyXG5cdFx0XHRcdC8vIHJlYWRzIHRoZSBzYW1lIG9iamVjdCB0aGlzIGpvYiBpbml0aWFsaXplZC5cblx0XHRcdFx0bGV0IHJlc3BvbnNlOiBUcmlnZ2VyUmVzcG9uc2U7XG5cdFx0XHRcdGlmIChjb25maWcudGltZW91dCAmJiBjb25maWcudGltZW91dCA+IDApIHtcblx0XHRcdFx0XHRyZXNwb25zZSA9IGF3YWl0IHRoaXMuZXhlY3V0ZVdpdGhUaW1lb3V0KGN0eCwgY29uZmlnLnRpbWVvdXQsIGNvbmZpZ3VyYXRpb24pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ydW4oY3R4LCBjb25maWd1cmF0aW9uKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdC8vIFNldCBzcGFuIGF0dHJpYnV0ZXNcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIHRydWUpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImpvYl9pZFwiLCBqb2JJZCk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwicXVldWVcIiwgY29uZmlnLnF1ZXVlKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJhdHRlbXB0c1wiLCBqb2IuYXR0ZW1wdHMpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImVsYXBzZWRfbXNcIiwgZW5kIC0gc3RhcnQpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LIH0pO1xuXG5cdFx0XHRcdC8vIFJlY29yZCBtZXRyaWNzXG5cdFx0XHRcdHdvcmtlckpvYnMuYWRkKDEsIHtcblx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdHF1ZXVlOiBjb25maWcucXVldWUsXG5cdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogY29uZmlndXJhdGlvbi5uYW1lLFxuXHRcdFx0XHRcdHN1Y2Nlc3M6IFwidHJ1ZVwiLFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjdHgubG9nZ2VyLmxvZyhgSm9iIGNvbXBsZXRlZCBpbiAkeyhlbmQgLSBzdGFydCkudG9GaXhlZCgyKX1tczogJHtqb2JJZH1gKTtcblxuXHRcdFx0XHQvLyBNYXJrIGpvYiBhcyBjb21wbGV0ZWRcblx0XHRcdFx0YXdhaXQgam9iLmNvbXBsZXRlKCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2U7XG5cblx0XHRcdFx0Ly8gVGllciAyICM1ICsgIzcg4oCUIGRlZmVycmVkIGRpc3BhdGNoIChkZWxheS9UVEwvZGVib3VuY2UpLlxuXHRcdFx0XHQvLyBUaGUgcnVuIHdhcyBkZWZlcnJlZCB0byBhIGZ1dHVyZSB0aW1lcjsgQUNLIHdpdGhvdXQgcmV0cnkuXG5cdFx0XHRcdC8vIFRoZSBpbi1wcm9jZXNzIHNjaGVkdWxlciBvd25zIHRoZSBldmVudHVhbCBkaXNwYXRjaCwgTk9UXG5cdFx0XHRcdC8vIHRoZSBicm9rZXIg4oCUIHJlLXF1ZXVlaW5nIGhlcmUgd291bGQgY3JlYXRlIGEgZHVwbGljYXRlLlxuXHRcdFx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZWZlcnJlZERpc3BhdGNoU2lnbmFsKSB7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImRlZmVycmVkXCIsIHRydWUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiZGVmZXJyZWRfc3RhdHVzXCIsIGVycm9yLmluZm8uc3RhdHVzKTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LLCBtZXNzYWdlOiBgZGVmZXJyZWQ6JHtlcnJvci5pbmZvLnN0YXR1c31gIH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKFxuXHRcdFx0XHRcdFx0YFtzY2hlZHVsaW5nXSBqb2IgJHtqb2JJZH0gcnVuSWQ9JHtlcnJvci5pbmZvLnJ1bklkfSBzdGF0dXM9JHtlcnJvci5pbmZvLnN0YXR1c30gYCArXG5cdFx0XHRcdFx0XHRcdGBzY2hlZHVsZWRBdD0ke2Vycm9yLmluZm8uc2NoZWR1bGVkQXR9IHBpbmdDb3VudD0ke2Vycm9yLmluZm8ucGluZ0NvdW50fSDihpIgQUNLIChubyByZXF1ZXVlKWAsXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGF3YWl0IGpvYi5jb21wbGV0ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFBSIDEtNSBwb2xpc2gg4oCUIHF1ZXVlLW1vZGUgVFRMIGVsYXBzZWQuIFRoZSBydW4gaXMgYWxyZWFkeVxuXHRcdFx0XHQvLyBmbGlwcGVkIHRvIGBleHBpcmVkYCAoc2VlIFRyaWdnZXJCYXNlIHF1ZXVlIGJyYW5jaCk7IEFDS1xuXHRcdFx0XHQvLyB3aXRob3V0IHJldHJ5IHNvIHRoZSBicm9rZXIgZG9lc24ndCByZWRlbGl2ZXIg4oCUIHRoZSBydW5cblx0XHRcdFx0Ly8gd2lsbCBuZXZlciBzdWNjZWVkICh0aW1lciB3b24ndCByZS1maXJlKS4gRGlzdGluY3QgZnJvbVxuXHRcdFx0XHQvLyB0aGUgdGhyb3R0bGVkIE5BQ0sgYmVsb3cuXG5cdFx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFF1ZXVlRXhwaXJlZEVycm9yKSB7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInF1ZXVlX2V4cGlyZWRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSywgbWVzc2FnZTogXCJxdWV1ZV9leHBpcmVkXCIgfSk7XG5cblx0XHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXG5cdFx0XHRcdFx0XHRgW2NvbmN1cnJlbmN5XSBqb2IgJHtqb2JJZH0gcnVuSWQ9JHtlcnJvci5pbmZvLnJ1bklkfSBrZXk9JyR7ZXJyb3IuaW5mby5jb25jdXJyZW5jeUtleX0nIGAgK1xuXHRcdFx0XHRcdFx0XHRgcXVldWVFeHBpcmVkQXQ9JHtlcnJvci5pbmZvLnF1ZXVlRXhwaXJlZEF0fSDihpIgQUNLIChubyByZXF1ZXVlLCBydW4gZXhwaXJlZClgLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuY29tcGxldGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUaWVyIDIgIzYg4oCUIGNvbmN1cnJlbmN5IGdhdGUgZGVuaWFsLiBEaXN0aW5jdCBmcm9tIGEgbm9ybWFsXG5cdFx0XHRcdC8vIGZhaWx1cmU6IE5BQ0sgd2l0aCByZWRlbGl2ZXJ5IHNvIHRoZSBicm9rZXIgcmUtcXVldWVzIHRoZVxuXHRcdFx0XHQvLyBqb2Igd2l0aCBpdHMgZXhpc3RpbmcgYmFjay1vZmYgc2VtYW50aWNzLiBEb2Vzbid0IGNvdW50XG5cdFx0XHRcdC8vIGFnYWluc3QgdGhlIHdvcmtmbG93J3MgcmV0cnkgYnVkZ2V0IChkaWZmZXJlbnQgaW52YXJpYW50KS5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHBhc3MgYHdpbGxSZXRyeTogdHJ1ZWAgcmVnYXJkbGVzcyBvZiBgam9iLmF0dGVtcHRzYFxuXHRcdFx0XHQvLyBiZWNhdXNlIHRocm90dGxpbmcgaXMgYSB0cmFuc2llbnQgcmVzb3VyY2Ugc3RhdGUsIG5vdCBhXG5cdFx0XHRcdC8vIHBlcm1hbmVudCBmYWlsdXJlLlxuXHRcdFx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBDb25jdXJyZW5jeUxpbWl0RXJyb3IpIHtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInN1Y2Nlc3NcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwid2lsbF9yZXRyeVwiLCB0cnVlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInRocm90dGxlZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LLCBtZXNzYWdlOiBcImNvbmN1cnJlbmN5X2xpbWl0X3JlYWNoZWRcIiB9KTtcblxuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhcblx0XHRcdFx0XHRcdGBbY29uY3VycmVuY3ldIGpvYiAke2pvYklkfSBrZXk9JyR7ZXJyb3IuaW5mby5jb25jdXJyZW5jeUtleX0nIGAgK1xuXHRcdFx0XHRcdFx0XHRgbGltaXQ9JHtlcnJvci5pbmZvLmNvbmN1cnJlbmN5TGltaXR9IGluRmxpZ2h0PSR7ZXJyb3IuaW5mby5jdXJyZW50SW5GbGlnaHR9IOKGkiBOQUNLICsgcmVkZWxpdmVyeWAsXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdHdvcmtlclJldHJpZXMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0XHRxdWV1ZTogY29uZmlnLnF1ZXVlLFxuXHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogY29uZmlndXJhdGlvbj8ubmFtZSB8fCBcInVua25vd25cIixcblx0XHRcdFx0XHRcdHJlYXNvbjogXCJ0aHJvdHRsZWRcIixcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGF3YWl0IGpvYi5mYWlsKGVycm9yIGFzIEVycm9yLCB0cnVlKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGMyDigJQgdGhlIHJ1biB3YXMgY2FuY2VsbGVkIGJ5IGFuIG9wZXJhdG9yXG5cdFx0XHRcdC8vIChgUE9TVCAvX19ibG9rL3J1bnMvOnJ1bklkL2NhbmNlbGApLiBgUnVubmVyU3RlcHNgIHRocm93c1xuXHRcdFx0XHQvLyBgUnVuQ2FuY2VsbGVkRXJyb3JgLCB3aGljaCBgVHJpZ2dlckJhc2UucnVuYCByZS10aHJvd3Ncblx0XHRcdFx0Ly8gdW50b3VjaGVkIChzdGF0dXMgYWxyZWFkeSBmbGlwcGVkIHRvIGBjYW5jZWxsZWRgKS4gVGhlIHJ1biBpc1xuXHRcdFx0XHQvLyB0ZXJtaW5hbCDigJQgQUNLIHRoZSBicm9rZXIgV0lUSE9VVCByZXF1ZXVlIHNvIHRoZVxuXHRcdFx0XHQvLyBkZWxpYmVyYXRlbHktY2FuY2VsbGVkLCBvZnRlbiBub24taWRlbXBvdGVudCB3b3JrIGRvZXNuJ3QgcnVuXG5cdFx0XHRcdC8vIGFnYWluIG9uIHJlZGVsaXZlcnkuXG5cdFx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFJ1bkNhbmNlbGxlZEVycm9yKSB7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImNhbmNlbGxlZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLk9LLCBtZXNzYWdlOiBcInJ1bl9jYW5jZWxsZWRcIiB9KTtcblxuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgSm9iICR7am9iSWR9IGNhbmNlbGxlZCAocnVuIGFscmVhZHkgdGVybWluYWwpIOKGkiBBQ0sgKG5vIHJlcXVldWUpYCk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuY29tcGxldGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGNCAvIEYyNCDigJQgdHJpZ2dlci1sZXZlbCBgY29uZmlnLnRpbWVvdXRgIGVsYXBzZWQuIFRoZSBkZXRhY2hlZFxuXHRcdFx0XHQvLyBydW4gd2FzIGFscmVhZHkgYWJvcnRlZCB2aWEgYGN0eC5zaWduYWxgIGluc2lkZVxuXHRcdFx0XHQvLyBgZXhlY3V0ZVdpdGhUaW1lb3V0YCwgc28gaXQgdW53aW5kcyB3aXRoIGBSdW5DYW5jZWxsZWRFcnJvcmBcblx0XHRcdFx0Ly8gYXQgdGhlIG5leHQgYmV0d2Vlbi1zdGVwIGNoZWNrLiBGbGlwIHRoZSBydW4gcmVjb3JkIHRvIHRoZVxuXHRcdFx0XHQvLyBkZWRpY2F0ZWQgYHRpbWVkT3V0YCBzdGF0dXMgKG1hdGNoaW5nIHRoZSBwZXItc3RlcFxuXHRcdFx0XHQvLyBgbWF4RHVyYXRpb25gIHRheG9ub215KSBpbnN0ZWFkIG9mIHJvdXRpbmcgdGhyb3VnaCB0aGUgZ2VuZXJpY1xuXHRcdFx0XHQvLyByZXRyeS9ETFEgcGF0aCwgYW5kIEFDSyB3aXRob3V0IHJlcXVldWUuXG5cdFx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFdvcmtlclRpbWVvdXRFcnJvcikge1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ0aW1lZF9vdXRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogXCJqb2JfdGltZWRfb3V0XCIgfSk7XG5cblx0XHRcdFx0XHRjb25zdCB0aW1lZE91dFJ1bklkID0gZXJyb3IucnVuSWQgPz8gKHJ1bkN0eCBhcyB7IF90cmFjZVJ1bklkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5fdHJhY2VSdW5JZDtcblx0XHRcdFx0XHRpZiAodGltZWRPdXRSdW5JZCkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0UnVuVHJhY2tlci5nZXRJbnN0YW5jZSgpLm1hcmtSdW5UaW1lZE91dCh0aW1lZE91dFJ1bklkLCB7XG5cdFx0XHRcdFx0XHRcdFx0c3RlcElkOiBcIl9fd29ya2VyX3RpbWVvdXRfX1wiLFxuXHRcdFx0XHRcdFx0XHRcdG1heER1cmF0aW9uTXM6IGVycm9yLnRpbWVvdXRNcyxcblx0XHRcdFx0XHRcdFx0XHRhdHRlbXB0c0V4aGF1c3RlZDogam9iLmF0dGVtcHRzICsgMSxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChtYXJrRXJyKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdGBbYmxva11bd29ya2VyXSBtYXJrUnVuVGltZWRPdXQgZmFpbGVkIGZvciBydW4gJHt0aW1lZE91dFJ1bklkfTogJHttYXJrRXJyIGluc3RhbmNlb2YgRXJyb3IgPyBtYXJrRXJyLm1lc3NhZ2UgOiBTdHJpbmcobWFya0Vycil9YCxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR3b3JrZXJFcnJvcnMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0XHRxdWV1ZTogY29uZmlnLnF1ZXVlLFxuXHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogY29uZmlndXJhdGlvbj8ubmFtZSB8fCBcInVua25vd25cIixcblx0XHRcdFx0XHRcdHJlYXNvbjogXCJ0aW1lb3V0XCIsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XHRcdGBKb2IgJHtqb2JJZH0gdGltZWQgb3V0IGFmdGVyICR7ZXJyb3IudGltZW91dE1zfW1zIOKGkiBydW4gZmxpcHBlZCB0byB0aW1lZE91dCwgQUNLIChubyByZXF1ZXVlKWAsXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGF3YWl0IGpvYi5jb21wbGV0ZSgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNob3VsZFJldHJ5ID0gam9iLmF0dGVtcHRzIDwgam9iLm1heFJldHJpZXM7XG5cblx0XHRcdFx0Ly8gU2V0IHNwYW4gZXJyb3Jcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIGZhbHNlKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ3aWxsX3JldHJ5XCIsIHNob3VsZFJldHJ5KTtcblx0XHRcdFx0c3Bhbi5yZWNvcmRFeGNlcHRpb24oZXJyb3IgYXMgRXJyb3IpO1xuXHRcdFx0XHRzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLCBtZXNzYWdlOiBlcnJvck1lc3NhZ2UgfSk7XG5cblx0XHRcdFx0aWYgKHNob3VsZFJldHJ5KSB7XG5cdFx0XHRcdFx0Ly8gUmV0cnkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLiBgY29uZmlnLmRlbGF5YCB3aWRlbmVkIHRvXG5cdFx0XHRcdFx0Ly8gYHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZGAgaW4gVGllciAyICM1IChkdXJhdGlvbiBzdHJpbmdzKS5cblx0XHRcdFx0XHQvLyBgY2FsY3VsYXRlQmFja29mZmAgb25seSBoYW5kbGVzIG51bWJlcnM7IG5vcm1hbGl6ZSB2aWFcblx0XHRcdFx0XHQvLyB0cnlQYXJzZUR1cmF0aW9uLiBGYWlsLW9wZW4gdG8gdW5kZWZpbmVkIOKGkiBkZWZhdWx0IGJhY2tvZmYuXG5cdFx0XHRcdFx0Y29uc3QgZGVsYXlNcyA9XG5cdFx0XHRcdFx0XHR0eXBlb2YgY29uZmlnLmRlbGF5ID09PSBcIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdD8gY29uZmlnLmRlbGF5XG5cdFx0XHRcdFx0XHRcdDogdHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdD8gKHRyeVBhcnNlRHVyYXRpb24oY29uZmlnLmRlbGF5KSA/PyB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0Y29uc3QgYmFja29mZk1zID0gdGhpcy5jYWxjdWxhdGVCYWNrb2ZmKGpvYi5hdHRlbXB0cywgZGVsYXlNcyk7XG5cdFx0XHRcdFx0d29ya2VyUmV0cmllcy5hZGQoMSwge1xuXHRcdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRcdHF1ZXVlOiBjb25maWcucXVldWUsXG5cdFx0XHRcdFx0XHR3b3JrZmxvd19uYW1lOiBjb25maWd1cmF0aW9uPy5uYW1lIHx8IFwidW5rbm93blwiLFxuXHRcdFx0XHRcdFx0YXR0ZW1wdDogU3RyaW5nKGpvYi5hdHRlbXB0cyArIDEpLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFx0XHRgSm9iICR7am9iSWR9IGZhaWxlZCAoYXR0ZW1wdCAke2pvYi5hdHRlbXB0cyArIDF9LyR7am9iLm1heFJldHJpZXMgKyAxfSksIHJldHJ5aW5nIGluICR7YmFja29mZk1zfW1zOiAke2Vycm9yTWVzc2FnZX1gLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuZmFpbChlcnJvciBhcyBFcnJvciwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gTWF4IHJldHJpZXMgZXhoYXVzdGVkIC0gc2VuZCB0byBETFFcblx0XHRcdFx0XHR3b3JrZXJFcnJvcnMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0XHRxdWV1ZTogY29uZmlnLnF1ZXVlLFxuXHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogY29uZmlndXJhdGlvbj8ubmFtZSB8fCBcInVua25vd25cIixcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcdFx0YEpvYiAke2pvYklkfSBwZXJtYW5lbnRseSBmYWlsZWQgYWZ0ZXIgJHtqb2IuYXR0ZW1wdHMgKyAxfSBhdHRlbXB0czogJHtlcnJvck1lc3NhZ2V9YCxcblx0XHRcdFx0XHRcdChlcnJvciBhcyBFcnJvcikuc3RhY2ssXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGF3YWl0IGpvYi5mYWlsKGVycm9yIGFzIEVycm9yLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdHNwYW4uZW5kKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZSB3b3JrZmxvdyB3aXRoIGEgdGltZW91dC5cblx0ICpcblx0ICogRjQg4oCUIG9uIHRpbWVvdXQsIGZpcmUgdGhlIGN0eCBBYm9ydENvbnRyb2xsZXIgc28gdGhlIGRldGFjaGVkIGBydW5gXG5cdCAqIHVud2luZHMgY29vcGVyYXRpdmVseSAoaXQgdGhyb3dzIGBSdW5DYW5jZWxsZWRFcnJvcmAgYXQgdGhlIG5leHRcblx0ICogYmV0d2Vlbi1zdGVwIGNoZWNrOyBsb25nIHVuaW50ZXJydXB0aWJsZSBub2RlcyBzaG91bGQgc3RpbGwgcG9sbFxuXHQgKiBgY3R4LnNpZ25hbC5hYm9ydGVkYCkuIFRoZSBwcm9taXNlIHJlamVjdHMgd2l0aCBhIGRlZGljYXRlZFxuXHQgKiB7QGxpbmsgV29ya2VyVGltZW91dEVycm9yfSBjYXJyeWluZyB0aGUgcnVuIGlkIHNvIGBoYW5kbGVKb2JgJ3MgY2F0Y2ggY2FuXG5cdCAqIGZsaXAgdGhlIHJ1biByZWNvcmQgdG8gYHRpbWVkT3V0YCAoRjI0KS4gVGhlIHNlY29uZCBgcnVuYCAoYnJva2VyXG5cdCAqIHJlZGVsaXZlcnkpIGlzIHByZXZlbnRlZCBiZWNhdXNlIHdlIEFDSyB3aXRob3V0IHJlcXVldWUgb24gdGltZW91dC5cblx0ICpcblx0ICogRjIg4oCUIGBjb25maWd1cmF0aW9uYCBpcyB0aGUgcGVyLWpvYiBDb25maWd1cmF0aW9uOyB0aHJlYWRlZCBpbnRvIGBydW5gLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFzeW5jIGV4ZWN1dGVXaXRoVGltZW91dChcblx0XHRjdHg6IENvbnRleHQsXG5cdFx0dGltZW91dE1zOiBudW1iZXIsXG5cdFx0Y29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sXG5cdCk6IFByb21pc2U8VHJpZ2dlclJlc3BvbnNlPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPFRyaWdnZXJSZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0bGV0IHNldHRsZWQgPSBmYWxzZTtcblx0XHRcdGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmIChzZXR0bGVkKSByZXR1cm47XG5cdFx0XHRcdHNldHRsZWQgPSB0cnVlO1xuXG5cdFx0XHRcdC8vIEY0IOKAlCBhYm9ydCB0aGUgZGV0YWNoZWQgcnVuIHNvIGl0IHN0b3BzIGV4ZWN1dGluZyByYXRoZXIgdGhhblxuXHRcdFx0XHQvLyBjb250aW51aW5nIHRvIHNldHRsZSBpdHMgb3duIHJ1biByZWNvcmQgb3V0IG9mIGJhbmQuXG5cdFx0XHRcdGNvbnN0IHByaXZhdGVTbG90ID0gY3R4Ll9QUklWQVRFXyBhcyB7IGFib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlciB9IHwgbnVsbDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwcml2YXRlU2xvdD8uYWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHQvKiBiZXN0LWVmZm9ydCDigJQgYWJvcnQgbmV2ZXIgdGhyb3dzLCBidXQgZ3VhcmQgYW55d2F5ICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBydW5JZCA9IChjdHggYXMgeyBfdHJhY2VSdW5JZD86IHN0cmluZyB9KS5fdHJhY2VSdW5JZDtcblx0XHRcdFx0cmVqZWN0KG5ldyBXb3JrZXJUaW1lb3V0RXJyb3IodGltZW91dE1zLCBydW5JZCkpO1xuXHRcdFx0fSwgdGltZW91dE1zKTtcblxuXHRcdFx0dGhpcy5ydW4oY3R4LCBjb25maWd1cmF0aW9uKVxuXHRcdFx0XHQudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHRcdFx0XHRpZiAoc2V0dGxlZCkgcmV0dXJuOyAvLyBhbHJlYWR5IHRpbWVkIG91dCDigJQgaWdub3JlIHRoZSBsYXRlIHJlc3VsdFxuXHRcdFx0XHRcdHNldHRsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0XHRcdFx0aWYgKHNldHRsZWQpIHJldHVybjsgLy8gYWxyZWFkeSByZWplY3RlZCB3aXRoIFdvcmtlclRpbWVvdXRFcnJvclxuXHRcdFx0XHRcdHNldHRsZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZSBleHBvbmVudGlhbCBiYWNrb2ZmIGRlbGF5XG5cdCAqIEZvcm11bGE6IG1pbihiYXNlRGVsYXkgKiAyXmF0dGVtcHQsIDMwMDAwKSArIGppdHRlclxuXHQgKi9cblx0cHJvdGVjdGVkIGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdDogbnVtYmVyLCBiYXNlRGVsYXk/OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdGNvbnN0IGJhc2UgPSBiYXNlRGVsYXkgPz8gMTAwMDtcblx0XHRjb25zdCBtYXhEZWxheSA9IDMwMDAwOyAvLyAzMCBzZWNvbmRzIG1heFxuXHRcdGNvbnN0IGV4cG9uZW50aWFsID0gTWF0aC5taW4oYmFzZSAqIDIgKiogYXR0ZW1wdCwgbWF4RGVsYXkpO1xuXHRcdGNvbnN0IGppdHRlciA9IE1hdGgucmFuZG9tKCkgKiBleHBvbmVudGlhbCAqIDAuMTsgLy8gMTAlIGppdHRlclxuXHRcdHJldHVybiBNYXRoLmZsb29yKGV4cG9uZW50aWFsICsgaml0dGVyKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBXb3JrZXJUcmlnZ2VyO1xuIl19
694
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2VyVHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Xb3JrZXJUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFrRCxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFFTixxQkFBcUIsRUFFckIsYUFBYSxFQUViLGFBQWEsRUFDYixzQkFBc0IsRUFFdEIsT0FBTyxFQUNQLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixXQUFXLEVBR1gsZ0JBQWdCLEdBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFhLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBQzVCLFNBQVMsQ0FBUztJQUNsQyxpRkFBaUY7SUFDakUsS0FBSyxDQUFVO0lBRS9CLFlBQVksU0FBaUIsRUFBRSxLQUFjO1FBQzVDLEtBQUssQ0FBQyx1QkFBdUIsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRDtBQXFIRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFnQixhQUFjLFNBQVEsV0FBVztJQUM1QyxPQUFPLEdBQWtCLEVBQW1CLENBQUM7SUFDcEMs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QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya2VyVHJpZ2dlciAtIEJhY2tncm91bmQgam9iIHByb2Nlc3NpbmcgZm9yIEJsb2sgd29ya2Zsb3dzXG4gKlxuICogRXh0ZW5kcyBUcmlnZ2VyQmFzZSB0byBzdXBwb3J0IGxvbmctcnVubmluZyBiYWNrZ3JvdW5kIGpvYnM6XG4gKiAtIENvbmN1cnJlbmN5IGNvbnRyb2xzIChtYXggTiBjb25jdXJyZW50IGpvYnMpXG4gKiAtIFJldHJ5IGxvZ2ljIHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxuICogLSBKb2IgdGltZW91dHNcbiAqIC0gSm9iIHByaW9yaXR5IGFuZCBkZWxheSBzY2hlZHVsaW5nXG4gKiAtIERlYWQgbGV0dGVyIHF1ZXVlIHN1cHBvcnRcbiAqXG4gKiBQYXR0ZXJuOlxuICogMS4gbG9hZE5vZGVzKCkgLSBMb2FkIGF2YWlsYWJsZSBub2RlcyBpbnRvIE5vZGVNYXBcbiAqIDIuIGxvYWRXb3JrZmxvd3MoKSAtIExvYWQgd29ya2Zsb3dzIHdpdGggd29ya2VyIHRyaWdnZXJzXG4gKiAzLiBsaXN0ZW4oKSAtIENvbm5lY3QgdG8gam9iIGJhY2tlbmQgYW5kIHN0YXJ0IHByb2Nlc3NpbmdcbiAqIDQuIEZvciBlYWNoIGpvYjpcbiAqICAgIC0gQ3JlYXRlIGNvbnRleHQgd2l0aCB0aGlzLmNyZWF0ZUNvbnRleHQoKVxuICogICAgLSBQb3B1bGF0ZSBjdHgucmVxdWVzdCB3aXRoIGpvYiBkYXRhXG4gKiAgICAtIEV4ZWN1dGUgd29ya2Zsb3cgdmlhIHRoaXMucnVuKGN0eClcbiAqICAgIC0gQWNrIG9uIHN1Y2Nlc3MsIHJldHJ5IG9yIERMUSBvbiBmYWlsdXJlXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBXb3JrZXJUcmlnZ2VyT3B0cywgdHlwZSBXb3JrZmxvd1YyQnVpbGRlciwgdHJ5UGFyc2VEdXJhdGlvbiB9IGZyb20gXCJAYmxva2pzL2hlbHBlclwiO1xuaW1wb3J0IHtcblx0dHlwZSBCbG9rU2VydmljZSxcblx0Q29uY3VycmVuY3lMaW1pdEVycm9yLFxuXHRDb25jdXJyZW5jeU1ldHJpY3MsXG5cdENvbmZpZ3VyYXRpb24sXG5cdERlYm91bmNlQ29vcmRpbmF0b3IsXG5cdERlZmF1bHRMb2dnZXIsXG5cdERlZmVycmVkRGlzcGF0Y2hTaWduYWwsXG5cdHR5cGUgR2xvYmFsT3B0aW9ucyxcblx0SmFuaXRvcixcblx0Tm9kZU1hcCxcblx0UXVldWVFeHBpcmVkRXJyb3IsXG5cdFJ1bkNhbmNlbGxlZEVycm9yLFxuXHRSdW5UcmFja2VyLFxuXHRUcmlnZ2VyQmFzZSxcblx0dHlwZSBUcmlnZ2VyUmVzcG9uc2UsXG5cdFdvcmtmbG93UmVnaXN0cnksXG5cdGJvb3RzdHJhcFRyYWNpbmcsXG59IGZyb20gXCJAYmxva2pzL3J1bm5lclwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0LCBOb2RlQmFzZSwgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQGJsb2tqcy9zaGFyZWRcIjtcbmltcG9ydCB7IHR5cGUgU3BhbiwgU3BhblN0YXR1c0NvZGUsIG1ldHJpY3MsIHRyYWNlIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbi8qKlxuICogRjQgLyBGMjQg4oCUIHRocm93biBieSBgZXhlY3V0ZVdpdGhUaW1lb3V0YCB3aGVuIGEgd29ya2VyIGpvYiBleGNlZWRzIGl0c1xuICogdHJpZ2dlci1sZXZlbCBgY29uZmlnLnRpbWVvdXRgLiBBIGRlZGljYXRlZCB0eXBlIChpbnN0ZWFkIG9mIGEgcGxhaW5cbiAqIGBFcnJvcmApIGxldHMgYGhhbmRsZUpvYmAncyBjYXRjaCBkaXNjcmltaW5hdGUgdGhlIHRpbWVvdXQ6IGl0IGFib3J0cyB0aGVcbiAqIGRldGFjaGVkIHJ1biB2aWEgYGN0eC5zaWduYWxgIGFuZCBmbGlwcyB0aGUgcnVuIHJlY29yZCB0byBgdGltZWRPdXRgXG4gKiAobWF0Y2hpbmcgdGhlIHBlci1zdGVwIGBtYXhEdXJhdGlvbmAgdGF4b25vbXkpIHJhdGhlciB0aGFuIHJvdXRpbmcgdGhlXG4gKiB0aW1lb3V0IHRocm91Z2ggdGhlIGdlbmVyaWMgcmV0cnkvRExRIHBhdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZXJUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyByZWFkb25seSB0aW1lb3V0TXM6IG51bWJlcjtcblx0LyoqIFJ1biBpZCBvZiB0aGUgYWJvcnRlZCBydW4sIHdoZW4ga25vd24g4oCUIHVzZWQgdG8gZmxpcCBzdGF0dXMgdG8gYHRpbWVkT3V0YC4gKi9cblx0cHVibGljIHJlYWRvbmx5IHJ1bklkPzogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKHRpbWVvdXRNczogbnVtYmVyLCBydW5JZD86IHN0cmluZykge1xuXHRcdHN1cGVyKGBKb2IgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCk7XG5cdFx0dGhpcy5uYW1lID0gXCJXb3JrZXJUaW1lb3V0RXJyb3JcIjtcblx0XHR0aGlzLnRpbWVvdXRNcyA9IHRpbWVvdXRNcztcblx0XHR0aGlzLnJ1bklkID0gcnVuSWQ7XG5cdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFdvcmtlclRpbWVvdXRFcnJvci5wcm90b3R5cGUpO1xuXHR9XG59XG5cbi8qKlxuICogSm9iIHJlY2VpdmVkIGZyb20gd29ya2VyIHF1ZXVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VySm9iIHtcblx0LyoqIFVuaXF1ZSBqb2IgSUQgKi9cblx0aWQ6IHN0cmluZztcblx0LyoqIEpvYiBkYXRhIHBheWxvYWQgKi9cblx0ZGF0YTogdW5rbm93bjtcblx0LyoqIEpvYiBtZXRhZGF0YSBoZWFkZXJzICovXG5cdGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdC8qKiBRdWV1ZSBuYW1lIHRoaXMgam9iIGJlbG9uZ3MgdG8gKi9cblx0cXVldWU6IHN0cmluZztcblx0LyoqIEpvYiBwcmlvcml0eSAoaGlnaGVyID0gbW9yZSBpbXBvcnRhbnQpICovXG5cdHByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBOdW1iZXIgb2YgYXR0ZW1wdHMgbWFkZSBzbyBmYXIgKi9cblx0YXR0ZW1wdHM6IG51bWJlcjtcblx0LyoqIE1heGltdW0gcmV0cnkgYXR0ZW1wdHMgKi9cblx0bWF4UmV0cmllczogbnVtYmVyO1xuXHQvKiogVGltZXN0YW1wIHdoZW4gam9iIHdhcyBjcmVhdGVkICovXG5cdGNyZWF0ZWRBdDogRGF0ZTtcblx0LyoqIERlbGF5IGJlZm9yZSBwcm9jZXNzaW5nIChtcykgKi9cblx0ZGVsYXk/OiBudW1iZXI7XG5cdC8qKiBKb2IgdGltZW91dCAobXMpICovXG5cdHRpbWVvdXQ/OiBudW1iZXI7XG5cdC8qKiBPcmlnaW5hbCByYXcgam9iIGZyb20gcHJvdmlkZXIgKi9cblx0cmF3OiB1bmtub3duO1xuXHQvKiogTWFyayBqb2IgYXMgY29tcGxldGVkICovXG5cdGNvbXBsZXRlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHQvKiogTWFyayBqb2IgYXMgZmFpbGVkIChvcHRpb25hbGx5IHJlcXVldWUpICovXG5cdGZhaWw6IChlcnJvcjogRXJyb3IsIHJlcXVldWU/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIFdvcmtlciBhZGFwdGVyIGludGVyZmFjZSAtIGltcGxlbWVudGVkIGJ5IGVhY2ggam9iIGJhY2tlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJBZGFwdGVyIHtcblx0LyoqIFByb3ZpZGVyIG5hbWUgKGUuZy4sIFwiYnVsbG1xXCIsIFwiaW4tbWVtb3J5XCIpICovXG5cdHJlYWRvbmx5IHByb3ZpZGVyOiBzdHJpbmc7XG5cblx0LyoqIENvbm5lY3QgdG8gdGhlIGpvYiBiYWNrZW5kICovXG5cdGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKiogRGlzY29ubmVjdCBmcm9tIHRoZSBqb2IgYmFja2VuZCAqL1xuXHRkaXNjb25uZWN0KCk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHByb2Nlc3Npbmcgam9icyBmcm9tIGEgcXVldWVcblx0ICogQHBhcmFtIGNvbmZpZyBXb3JrZXIgdHJpZ2dlciBjb25maWd1cmF0aW9uXG5cdCAqIEBwYXJhbSBoYW5kbGVyIENhbGxiYWNrIGZvciBlYWNoIGpvYlxuXHQgKi9cblx0cHJvY2Vzcyhjb25maWc6IFdvcmtlclRyaWdnZXJPcHRzLCBoYW5kbGVyOiAoam9iOiBXb3JrZXJKb2IpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiBBZGQgYSBqb2IgdG8gYSBxdWV1ZSAoZm9yIHByb2dyYW1tYXRpYyBkaXNwYXRjaGluZylcblx0ICogQHBhcmFtIHF1ZXVlIFF1ZXVlIG5hbWVcblx0ICogQHBhcmFtIGRhdGEgSm9iIHBheWxvYWRcblx0ICogQHBhcmFtIG9wdHMgSm9iIG9wdGlvbnNcblx0ICovXG5cdGFkZEpvYihcblx0XHRxdWV1ZTogc3RyaW5nLFxuXHRcdGRhdGE6IHVua25vd24sXG5cdFx0b3B0cz86IHtcblx0XHRcdHByaW9yaXR5PzogbnVtYmVyO1xuXHRcdFx0ZGVsYXk/OiBudW1iZXI7XG5cdFx0XHRyZXRyaWVzPzogbnVtYmVyO1xuXHRcdFx0dGltZW91dD86IG51bWJlcjtcblx0XHRcdGpvYklkPzogc3RyaW5nO1xuXHRcdH0sXG5cdCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHQvKiogU3RvcCBwcm9jZXNzaW5nIGEgc3BlY2lmaWMgcXVldWUgKi9cblx0c3RvcFByb2Nlc3NpbmcocXVldWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cblx0LyoqIENoZWNrIGlmIGNvbm5lY3RlZCAqL1xuXHRpc0Nvbm5lY3RlZCgpOiBib29sZWFuO1xuXG5cdC8qKiBIZWFsdGggY2hlY2sgKi9cblx0aGVhbHRoQ2hlY2soKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHQvKiogR2V0IHF1ZXVlIHN0YXRzICovXG5cdGdldFF1ZXVlU3RhdHMocXVldWU6IHN0cmluZyk6IFByb21pc2U8V29ya2VyUXVldWVTdGF0cz47XG59XG5cbi8qKlxuICogUXVldWUgc3RhdGlzdGljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlclF1ZXVlU3RhdHMge1xuXHQvKiogTnVtYmVyIG9mIGpvYnMgd2FpdGluZyB0byBiZSBwcm9jZXNzZWQgKi9cblx0d2FpdGluZzogbnVtYmVyO1xuXHQvKiogTnVtYmVyIG9mIGpvYnMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZCAqL1xuXHRhY3RpdmU6IG51bWJlcjtcblx0LyoqIE51bWJlciBvZiBjb21wbGV0ZWQgam9icyAqL1xuXHRjb21wbGV0ZWQ6IG51bWJlcjtcblx0LyoqIE51bWJlciBvZiBmYWlsZWQgam9icyAqL1xuXHRmYWlsZWQ6IG51bWJlcjtcblx0LyoqIE51bWJlciBvZiBkZWxheWVkIGpvYnMgKi9cblx0ZGVsYXllZDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IG1vZGVsIHdpdGggd29ya2VyIHRyaWdnZXIgY29uZmlndXJhdGlvblxuICovXG5pbnRlcmZhY2UgV29ya2VyV29ya2Zsb3dNb2RlbCB7XG5cdHBhdGg6IHN0cmluZztcblx0Y29uZmlnOiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHZlcnNpb246IHN0cmluZztcblx0XHR0cmlnZ2VyPzoge1xuXHRcdFx0d29ya2VyPzogV29ya2VyVHJpZ2dlck9wdHM7XG5cdFx0XHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xuXHRcdH07XG5cdFx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcblx0fTtcbn1cblxuLyoqXG4gKiBXb3JrZXJUcmlnZ2VyIC0gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igd29ya2VyLWJhc2VkIHRyaWdnZXJzXG4gKlxuICogUHJvdmlkZXMgYmFja2dyb3VuZCBqb2IgcHJvY2Vzc2luZyB3aXRoOlxuICogLSBDb25maWd1cmFibGUgY29uY3VycmVuY3kgcGVyIHF1ZXVlXG4gKiAtIEF1dG9tYXRpYyByZXRyaWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZlxuICogLSBKb2IgdGltZW91dHMgd2l0aCBhdXRvbWF0aWMgZmFpbHVyZVxuICogLSBQcmlvcml0eS1iYXNlZCBqb2Igb3JkZXJpbmdcbiAqIC0gRGVsYXllZCBqb2Igc2NoZWR1bGluZ1xuICogLSBRdWV1ZSBzdGF0aXN0aWNzIGFuZCBtb25pdG9yaW5nXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXb3JrZXJUcmlnZ2VyIGV4dGVuZHMgVHJpZ2dlckJhc2Uge1xuXHRwcm90ZWN0ZWQgbm9kZU1hcDogR2xvYmFsT3B0aW9ucyA9IHt9IGFzIEdsb2JhbE9wdGlvbnM7XG5cdHByb3RlY3RlZCByZWFkb25seSB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoXG5cdFx0cHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FIHx8IFwidHJpZ2dlci13b3JrZXItd29ya2Zsb3dcIixcblx0XHRwcm9jZXNzLmVudi5QUk9KRUNUX1ZFUlNJT04gfHwgXCIwLjAuMVwiLFxuXHQpO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nZ2VyID0gbmV3IERlZmF1bHRMb2dnZXIoKTtcblx0LyoqIE9CUy0wMiBUNCDigJQgZ3JhY2VmdWwgc2h1dGRvd24gZm9yIHRoZSBPVGVsIHRyYWNlciBwcm92aWRlciwgaWYgdHJhY2luZyB3YXMgZW5hYmxlZC4gKi9cblx0cHJpdmF0ZSB0cmFjaW5nU2h1dGRvd246ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGwgPSBudWxsO1xuXHQvKipcblx0ICogdjAuNyBQUiA1IOKAlCB0aGUgXCJkZWZhdWx0XCIgYWRhcHRlciwgdXNlZCB3aGVuIGEgd29ya2Zsb3cnc1xuXHQgKiBgdHJpZ2dlci53b3JrZXIucHJvdmlkZXJgIGZpZWxkIGlzIG9taXR0ZWQgQU5EIHRoZVxuXHQgKiBgQkxPS19XT1JLRVJfQURBUFRFUmAgZW52IHZhciBpcyB1bnNldC4gU3ViY2xhc3NlcyBNQVkgc2V0IHRoaXNcblx0ICogZm9yIGJhY2stY29tcGF0IHdpdGggdGhlIHByZS12MC43IHNpbmdsZS1hZGFwdGVyIHBhdHRlcm5cblx0ICogKGBjbGFzcyBXb3JrZXJTZXJ2ZXIgZXh0ZW5kcyBXb3JrZXJUcmlnZ2VyIHsgcHJvdGVjdGVkIGFkYXB0ZXIgPSBuZXcgTkFUU1dvcmtlckFkYXB0ZXIoKSB9YCkuXG5cdCAqXG5cdCAqIFdoZW4gdW5zZXQgQU5EIG5vIHBlci13b3JrZmxvdyBwcm92aWRlciBpcyBzcGVjaWZpZWQsIHRoZSBmYWN0b3J5XG5cdCAqIGZhbGxzIGJhY2sgdG8gYGluLW1lbW9yeWAuIFRoZSBmYWN0b3J5IHBvb2wgKGBhZGFwdGVycy9mYWN0b3J5LnRzYClcblx0ICogdHJhY2tzIG9uZSBjb25uZWN0ZWQgYWRhcHRlciBwZXIgcHJvdmlkZXIgc28gbXVsdGlwbGUgd29ya2Zsb3dzXG5cdCAqIHdpdGggdGhlIHNhbWUgcHJvdmlkZXIgc2hhcmUgYSBzaW5nbGUgYnJva2VyIGNvbm5lY3Rpb24uXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYWRhcHRlcj86IFdvcmtlckFkYXB0ZXI7XG5cblx0LyoqIEFjdGl2ZSBxdWV1ZXMgYmVpbmcgcHJvY2Vzc2VkICovXG5cdHByb3RlY3RlZCBhY3RpdmVRdWV1ZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG5cdC8qKlxuXHQgKiB2MC43IFBSIDUg4oCUIGFkYXB0ZXIgcG9vbCwga2V5ZWQgYnkgcHJvdmlkZXIgbmFtZS4gUG9wdWxhdGVkIGxhemlseVxuXHQgKiBpbnNpZGUgYGxpc3RlbigpYCBhcyB3b3JrZmxvd3MgYXJlIG1hdGNoZWQgdG8gcHJvdmlkZXJzLiBFYWNoXG5cdCAqIGFkYXB0ZXIgaXMgY29ubmVjdGVkIG9uY2UgYW5kIHJldXNlZCBhY3Jvc3Mgd29ya2Zsb3dzIHRoYXQgc2hhcmVcblx0ICogaXRzIHByb3ZpZGVyLiBEcmFpbmVkIGluIGBzdG9wKClgLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFkYXB0ZXJQb29sOiBNYXA8c3RyaW5nLCBXb3JrZXJBZGFwdGVyPiA9IG5ldyBNYXAoKTtcblxuXHQvLyBTdWJjbGFzc2VzIHByb3ZpZGUgdGhlc2Vcblx0cHJvdGVjdGVkIGFic3RyYWN0IG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBCbG9rU2VydmljZTx1bmtub3duPj47XG5cdHByb3RlY3RlZCBhYnN0cmFjdCB3b3JrZmxvd3M6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93VjJCdWlsZGVyPjtcblxuXHQvLyBDb25zdHJ1Y3RvciByZW1vdmVkIGluIHYwLjYuMyDigJQgcHJlLWZpeCBpdCBjYWxsZWQgYGxvYWROb2RlcygpYCArXG5cdC8vIGBsb2FkV29ya2Zsb3dzKClgLCBidXQgc3ViY2xhc3NlcyB1c2UgY2xhc3MtZmllbGQgYXNzaWdubWVudHMgZm9yXG5cdC8vIGBub2Rlc2AgLyBgd29ya2Zsb3dzYCAodGhlIGNhbm9uaWNhbCBUeXBlU2NyaXB0IHBhdHRlcm4pLiBUaG9zZVxuXHQvLyBmaWVsZHMgcnVuIEFGVEVSIHN1cGVyKCksIHNvIGFjY2Vzc2luZyBgdGhpcy5ub2Rlc2AgZnJvbSB0aGUgcGFyZW50XG5cdC8vIGNvbnN0cnVjdG9yIHJlYWQgYHVuZGVmaW5lZGAgYW5kIGNyYXNoZWQgd2l0aFxuXHQvLyBgVHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoT2JqZWN0LmtleXModGhpcy5ub2RlcykpYC5cblx0Ly8gVGhlIHJlZ2lzdHJ5IGluaXQgbm93IGhhcHBlbnMgYXQgdGhlIHN0YXJ0IG9mIGBsaXN0ZW4oKWAsIGFmdGVyXG5cdC8vIHRoZSBzdWJjbGFzcydzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuXG5cblx0LyoqXG5cdCAqIExvYWQgbm9kZXMgaW50byB0aGUgbm9kZSBtYXBcblx0ICovXG5cdGxvYWROb2RlcygpOiB2b2lkIHtcblx0XHR0aGlzLm5vZGVNYXAubm9kZXMgPSBuZXcgTm9kZU1hcCgpO1xuXHRcdC8vIFJlZ2lzdGVyIGVhY2ggbm9kZSB1bmRlciBpdHMgb3duIG5vZGUubmFtZSAodGhlIGNhbm9uaWNhbCB1c2U6IHJlZiwgQURSXG5cdFx0Ly8gMDAwMikg4oCUIHRoZSBOb2Rlcy50cyBtYXAga2V5cyBhcmUgY29zbWV0aWM7IHRoZSBjb2xsaXNpb24gZ3VhcmQgY2F0Y2hlcyBkdXBzLlxuXHRcdHRoaXMubm9kZU1hcC5ub2Rlcy5hZGROb2RlcyhPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpIGFzIHVua25vd24gYXMgTm9kZUJhc2VbXSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZCB3b3JrZmxvd3MgaW50byB0aGUgd29ya2Zsb3cgbWFwXG5cdCAqL1xuXHRsb2FkV29ya2Zsb3dzKCk6IHZvaWQge1xuXHRcdHRoaXMubm9kZU1hcC53b3JrZmxvd3MgPSB0aGlzLndvcmtmbG93cztcblx0fVxuXG5cdC8qKlxuXHQgKiBTdGFydCB0aGUgd29ya2VyIHByb2Nlc3NvciAtIG1haW4gZW50cnkgcG9pbnRcblx0ICovXG5cdGFzeW5jIGxpc3RlbigpOiBQcm9taXNlPG51bWJlcj4ge1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuc3RhcnRDb3VudGVyKCk7XG5cblx0XHQvLyBPQlMtMDIgVDQg4oCUIG9wdC1pbiBkaXN0cmlidXRlZCB0cmFjaW5nIGZvciB3b3JrZXIgam9icy4gV2hlblxuXHRcdC8vIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBpcyBzZXQsIGluc3RhbGwgYW4gT1RlbCBTREsgc28gdGhlIHNwYW5zXG5cdFx0Ly8gdGhlIHJ1bm5lciBjcmVhdGVzIHBlciBqb2Ivc3RlcCBleHBvcnQgdG8gVGVtcG8vSmFlZ2VyL2V0Yy4gTWlycm9yc1xuXHRcdC8vIEh0dHBUcmlnZ2VyJ3MgQjEgd2lyaW5nOyBuby1vcCArIHplcm8gb3ZlcmhlYWQgd2hlbiB0aGUgZW52IHZhciBpcyB1bnNldC5cblx0XHRhd2FpdCB0aGlzLm1heWJlQm9vdHN0cmFwVHJhY2luZygpO1xuXG5cdFx0Ly8gUG9wdWxhdGUgdGhlIHRyaWdnZXIncyBub2RlICsgd29ya2Zsb3cgcmVnaXN0cmllcyBmcm9tIHRoZVxuXHRcdC8vIHN1YmNsYXNzJ3MgYG5vZGVzYCAvIGB3b3JrZmxvd3NgIGZpZWxkcy4gdjAuNi4zIGZpeCDigJQgcHJlLWZpeFxuXHRcdC8vIHRoZXNlIGNhbGxzIGxpdmVkIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgY3Jhc2hlZCBiZWNhdXNlIGNsYXNzXG5cdFx0Ly8gZmllbGRzIGhhdmVuJ3QgcnVuIHlldCBhdCBzdXBlci1jb25zdHJ1Y3RvciB0aW1lLiBTZWUgdGhlIGNvbW1lbnRcblx0XHQvLyB3aGVyZSB0aGUgb2xkIGNvbnN0cnVjdG9yIHVzZWQgdG8gbGl2ZSBmb3IgdGhlIGZ1bGwgcmVhc29uLlxuXHRcdHRoaXMubG9hZE5vZGVzKCk7XG5cdFx0dGhpcy5sb2FkV29ya2Zsb3dzKCk7XG5cblx0XHQvLyBGNiAod29ya2VyIHBhcnQpIOKAlCBmZWVkIHRoZSBXb3JrZmxvd1JlZ2lzdHJ5IGZyb20gdGhlIHdvcmtlciBub2RlTWFwLlxuXHRcdC8vIFdvcmtlci1vbmx5IGRlcGxveW1lbnRzIG5ldmVyIGluc3RhbnRpYXRlIGFuIEh0dHBUcmlnZ2VyLCBzbyB3aXRob3V0XG5cdFx0Ly8gdGhpcyB0aGUgcmVnaXN0cnkgaXMgZW1wdHkgYW5kIGFueSB0cmlnZ2VyLWxldmVsIC8gcHJvY2Vzcy1nbG9iYWxcblx0XHQvLyBtaWRkbGV3YXJlIG5hbWUgb3IgYHN1YndvcmtmbG93OmAgc3RlcCBmYWlscyBhdCBydW50aW1lLiBXb3JrZmxvd3Ncblx0XHQvLyBmbGFnZ2VkIGBtaWRkbGV3YXJlOiB0cnVlYCBhcmUgcmVnaXN0ZXJlZCB3aXRoIGBpc01pZGRsZXdhcmVgLlxuXHRcdHRoaXMucmVnaXN0ZXJXb3JrZmxvd3NGcm9tTm9kZU1hcCh0aGlzLmxvZ2dlcik7XG5cblx0XHQvLyBGMTQgKHdvcmtlciBwYXJ0KSDigJQgc2VlZCBCTE9LX0dMT0JBTF9NSURETEVXQVJFIGZyb20gZW52LiBPbmx5XG5cdFx0Ly8gSHR0cFRyaWdnZXIgZGlkIHRoaXMgYmVmb3JlLCBzbyBhIHB1cmUgd29ya2VyIHByb2Nlc3Mgc2lsZW50bHlcblx0XHQvLyBkcm9wcGVkIHRoZSBkb2N1bWVudGVkIGVudi12YXIgY29uZmlndXJhdGlvbi5cblx0XHR0aGlzLnNlZWRHbG9iYWxNaWRkbGV3YXJlRnJvbUVudih0aGlzLmxvZ2dlcik7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gVGllciAyIHF1aWNrLXdpbnMgZm9sbG93LXVwIMK3IGluc3RhbGwgY3Jhc2ggaGFuZGxlcnMgKyByZWNvdmVyXG5cdFx0XHQvLyBvcnBoYW5lZCBydW5zIGZyb20gYSBwcmV2aW91cyAoZGVhZCkgcHJvY2Vzcy4gSWRlbXBvdGVudCArIG9wdC1vdXRcblx0XHRcdC8vIHZpYSBgQkxPS19DUkFTSF9BVVRPRkxJUF9ESVNBQkxFRD0xYC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdFdvcmtlclRyaWdnZXIuaW5zdGFsbENyYXNoSGFuZGxlcnModGhpcy5sb2dnZXIpO1xuXHRcdFx0XHRjb25zdCBvcnBoYW5lZCA9IFdvcmtlclRyaWdnZXIucmVjb3Zlck9ycGhhbmVkUnVucyh1bmRlZmluZWQsIHRoaXMubG9nZ2VyKTtcblx0XHRcdFx0aWYgKG9ycGhhbmVkID4gMCkge1xuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgW2NyYXNoLWF1dG9mbGlwXSBmbGlwcGVkICR7b3JwaGFuZWR9IG9ycGhhbmVkIHJ1bihzKSB0byBjcmFzaGVkIG9uIGJvb3RgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbY3Jhc2gtYXV0b2ZsaXBdIHNldHVwIGZhaWxlZDogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpZXIgMiBmb2xsb3ctdXAgwrcgc3RhcnQgdGhlIHBlcmlvZGljIHN0b3JhZ2UgamFuaXRvci5cblx0XHRcdC8vIElkZW1wb3RlbnQgKHNpbmdsZXRvbik7IG9wdC1vdXQgdmlhIGBCTE9LX0pBTklUT1JfRElTQUJMRUQ9MWAuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRKYW5pdG9yLmdldEluc3RhbmNlKFJ1blRyYWNrZXIuZ2V0SW5zdGFuY2UoKS5nZXRTdG9yZSgpLCB0aGlzLmxvZ2dlcikuc3RhcnQoKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2phbml0b3JdIHNldHVwIGZhaWxlZDogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpZXIgMiBmb2xsb3ctdXAgwrcgaW5zdGFsbCBncmFjZWZ1bCBzaHV0ZG93biBoYW5kbGVyc1xuXHRcdFx0Ly8gKFNJR1RFUk0gLyBTSUdJTlQpLiBJZGVtcG90ZW50OyBvcHQtb3V0IHZpYVxuXHRcdFx0Ly8gYEJMT0tfR1JBQ0VGVUxfU0hVVERPV05fRElTQUJMRUQ9MWAuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRXb3JrZXJUcmlnZ2VyLmluc3RhbGxTaHV0ZG93bkhhbmRsZXJzKHRoaXMsIHRoaXMubG9nZ2VyKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW3NodXRkb3duXSBzZXR1cCBmYWlsZWQ6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGaW5kIGFsbCB3b3JrZmxvd3Mgd2l0aCB3b3JrZXIgdHJpZ2dlcnNcblx0XHRcdGNvbnN0IHdvcmtlcldvcmtmbG93cyA9IHRoaXMuZ2V0V29ya2VyV29ya2Zsb3dzKCk7XG5cblx0XHRcdGlmICh3b3JrZXJXb3JrZmxvd3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhcIk5vIHdvcmtmbG93cyB3aXRoIHdvcmtlciB0cmlnZ2VycyBmb3VuZFwiKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCBwcm9jZXNzaW5nIGVhY2ggcXVldWUsIGRpc3BhdGNoaW5nIHRvIHRoZSByaWdodCBhZGFwdGVyXG5cdFx0XHQvLyBiYXNlZCBvbiB0aGUgd29ya2Zsb3cncyBgcHJvdmlkZXJgIGZpZWxkICh3aXRoIGJhY2stY29tcGF0XG5cdFx0XHQvLyBmYWxsYmFjayB0byBgdGhpcy5hZGFwdGVyYCB3aGVuIHN1YmNsYXNzZXMgc3RpbGwgc2V0IGl0KS5cblx0XHRcdGZvciAoY29uc3Qgd29ya2Zsb3cgb2Ygd29ya2VyV29ya2Zsb3dzKSB7XG5cdFx0XHRcdGNvbnN0IGNvbmZpZyA9IHdvcmtmbG93LmNvbmZpZy50cmlnZ2VyPy53b3JrZXIgYXMgV29ya2VyVHJpZ2dlck9wdHM7XG5cdFx0XHRcdGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCB0aGlzLnJlc29sdmVBZGFwdGVyRm9yV29ya2Zsb3coY29uZmlnKTtcblx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKFxuXHRcdFx0XHRcdGBTdGFydGluZyB3b3JrZXIgZm9yIHF1ZXVlOiAke2NvbmZpZy5xdWV1ZX0gdmlhICR7YWRhcHRlci5wcm92aWRlcn0gKGNvbmN1cnJlbmN5PSR7Y29uZmlnLmNvbmN1cnJlbmN5fSwgcmV0cmllcz0ke2NvbmZpZy5yZXRyaWVzfSlgLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHRoaXMuYWN0aXZlUXVldWVzLmFkZChjb25maWcucXVldWUpO1xuXG5cdFx0XHRcdGF3YWl0IGFkYXB0ZXIucHJvY2Vzcyhjb25maWcsIGFzeW5jIChqb2IpID0+IHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLmhhbmRsZUpvYihqb2IsIHdvcmtmbG93LCBjb25maWcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5sb2dnZXIubG9nKGBXb3JrZXIgdHJpZ2dlciBzdGFydGVkLiBQcm9jZXNzaW5nICR7d29ya2VyV29ya2Zsb3dzLmxlbmd0aH0gcXVldWUocylgKTtcblxuXHRcdFx0Ly8gRW5hYmxlIEhNUiBpbiBkZXZlbG9wbWVudCBtb2RlXG5cdFx0XHRpZiAocHJvY2Vzcy5lbnYuQkxPS19ITVIgPT09IFwidHJ1ZVwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lbmFibGVIb3RSZWxvYWQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuZW5kQ291bnRlcihzdGFydFRpbWUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0YXJ0IHdvcmtlciB0cmlnZ2VyOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wIGFsbCB3b3JrZXJzIGFuZCBkaXNjb25uZWN0XG5cdCAqL1xuXHQvKipcblx0ICogT0JTLTAyIFQ0IOKAlCBpbnN0YWxsIHRoZSBPcGVuVGVsZW1ldHJ5IFNESyBhdCBib290IHdoZW4gYW4gT1RMUCBlbmRwb2ludCBpc1xuXHQgKiBjb25maWd1cmVkLCBzbyB0aGUgc3BhbnMgdGhlIHJ1bm5lciBhbHJlYWR5IGNyZWF0ZXMgZm9yIHdvcmtlciBqb2JzIGV4cG9ydFxuXHQgKiB0byBhIGJhY2tlbmQgKFRlbXBvL0phZWdlci/igKYpLiBOby1vcCB3aGVuIGBPVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRgIGlzXG5cdCAqIHVuc2V0IG9yIGBCTE9LX1RSQUNJTkdfRElTQUJMRUQ9MWAuIFN0b3JlcyB0aGUgc2h1dGRvd24gc28gYHN0b3AoKWAgZmx1c2hlcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgbWF5YmVCb290c3RyYXBUcmFjaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChwcm9jZXNzLmVudi5CTE9LX1RSQUNJTkdfRElTQUJMRUQgPT09IFwiMVwiKSByZXR1cm47XG5cdFx0Y29uc3QgYmFzZSA9IHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9UUkFDRVNfRU5EUE9JTlQgfHwgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UO1xuXHRcdGlmICghYmFzZSkgcmV0dXJuO1xuXHRcdGNvbnN0IGVuZHBvaW50ID0gcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVCA/IGJhc2UgOiBgJHtiYXNlLnJlcGxhY2UoL1xcLyQvLCBcIlwiKX0vdjEvdHJhY2VzYDtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgYm9vdHN0cmFwVHJhY2luZyh7XG5cdFx0XHRcdHNlcnZpY2VOYW1lOiBwcm9jZXNzLmVudi5BUFBfTkFNRSB8fCBwcm9jZXNzLmVudi5QUk9KRUNUX05BTUUgfHwgXCJibG9rLXdvcmtlclwiLFxuXHRcdFx0XHRzZXJ2aWNlVmVyc2lvbjogcHJvY2Vzcy5lbnYuUFJPSkVDVF9WRVJTSU9OLFxuXHRcdFx0XHRleHBvcnRlcjogXCJvdGxwXCIsXG5cdFx0XHRcdGVuZHBvaW50LFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdHRoaXMudHJhY2luZ1NodXRkb3duID0gcmVzdWx0LnNodXRkb3duO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYFtibG9rXVt0cmFjaW5nXSBPVExQIGRpc3RyaWJ1dGVkIHRyYWNpbmcgZW5hYmxlZCDihpIgJHtlbmRwb2ludH1gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcdFwiW2Jsb2tdW3RyYWNpbmddIE9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVCBpcyBzZXQgYnV0IHRoZSBPVGVsIHRyYWNlIFNESyBpc24ndCBpbnN0YWxsZWQg4oCUIHRyYWNpbmcgaXMgT0ZGLlwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYFtibG9rXVt0cmFjaW5nXSBmYWlsZWQgdG8gaW5pdGlhbGl6ZTogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gT0JTLTAyIFQ0IOKAlCBmbHVzaCBwZW5kaW5nIHNwYW5zIGJlZm9yZSBkcmFpbmluZyBzbyB0aGUgbGFzdCBqb2JzJ1xuXHRcdC8vIHNwYW5zIGFyZW4ndCBsb3N0IG9uIHNodXRkb3duLlxuXHRcdGlmICh0aGlzLnRyYWNpbmdTaHV0ZG93bikge1xuXHRcdFx0YXdhaXQgdGhpcy50cmFjaW5nU2h1dGRvd24oKS5jYXRjaCgoZXJyKSA9PlxuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgW2Jsb2tdW3RyYWNpbmddIHNodXRkb3duIGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMudHJhY2luZ1NodXRkb3duID0gbnVsbDtcblx0XHR9XG5cdFx0Ly8gU3RvcCBlYWNoIHF1ZXVlIG9uIGl0cyBvd25pbmcgYWRhcHRlciDigJQgYWRhcHRlcnMgYXJlIHRyYWNrZWRcblx0XHQvLyBpbiB0aGUgcG9vbCBzbyBtdWx0aS1wcm92aWRlciB3b3JrZXJzIGFsbCBkcmFpbiBjbGVhbmx5LlxuXHRcdGZvciAoY29uc3QgcXVldWUgb2YgdGhpcy5hY3RpdmVRdWV1ZXMpIHtcblx0XHRcdGZvciAoY29uc3QgYWRhcHRlciBvZiB0aGlzLmFkYXB0ZXJQb29sLnZhbHVlcygpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgYWRhcHRlci5zdG9wUHJvY2Vzc2luZyhxdWV1ZSk7XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdC8qIHN3YWxsb3cg4oCUIGFkYXB0ZXIgbWF5IG5vdCBvd24gdGhpcyBxdWV1ZSAqL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmxvZ2dlci5sb2coYFN0b3BwZWQgcHJvY2Vzc2luZyBxdWV1ZTogJHtxdWV1ZX1gKTtcblx0XHR9XG5cdFx0dGhpcy5hY3RpdmVRdWV1ZXMuY2xlYXIoKTtcblx0XHQvLyBEaXNjb25uZWN0IGV2ZXJ5IGFkYXB0ZXIgd2UgZXZlciBjb25uZWN0ZWQuXG5cdFx0Zm9yIChjb25zdCBhZGFwdGVyIG9mIHRoaXMuYWRhcHRlclBvb2wudmFsdWVzKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGFkYXB0ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBbYmxva11bd29ya2VyXSBkaXNjb25uZWN0IGZhaWxlZDogJHsoZXJyIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFkYXB0ZXJQb29sLmNsZWFyKCk7XG5cdFx0dGhpcy5kZXN0cm95TW9uaXRvcmluZygpO1xuXHRcdHRoaXMubG9nZ2VyLmxvZyhcIldvcmtlciB0cmlnZ2VyIHN0b3BwZWRcIik7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgb25IbXJXb3JrZmxvd0NoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmxvZ2dlci5sb2coXCJbSE1SXSBXb3JrZXIgd29ya2Zsb3cgY2hhbmdlZCwgcmVsb2FkaW5nLi4uXCIpO1xuXHRcdGF3YWl0IHRoaXMud2FpdEZvckluRmxpZ2h0UmVxdWVzdHMoKTtcblx0XHRhd2FpdCB0aGlzLnN0b3AoKTtcblx0XHR0aGlzLmxvYWRXb3JrZmxvd3MoKTtcblx0XHRhd2FpdCB0aGlzLmxpc3RlbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BhdGNoIGEgam9iIHRvIGEgd29ya2VyIHF1ZXVlXG5cdCAqL1xuXHRhc3luYyBkaXNwYXRjaChcblx0XHRxdWV1ZTogc3RyaW5nLFxuXHRcdGRhdGE6IHVua25vd24sXG5cdFx0b3B0cz86IHtcblx0XHRcdHByaW9yaXR5PzogbnVtYmVyO1xuXHRcdFx0ZGVsYXk/OiBudW1iZXI7XG5cdFx0XHRyZXRyaWVzPzogbnVtYmVyO1xuXHRcdFx0dGltZW91dD86IG51bWJlcjtcblx0XHRcdGpvYklkPzogc3RyaW5nO1xuXHRcdH0sXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Ly8gQmFjay1jb21wYXQ6IHdoZW4gYSBzdWJjbGFzcyBzZXQgYHRoaXMuYWRhcHRlcmAsIHVzZSBpdC5cblx0XHQvLyBPdGhlcndpc2UgZGlzcGF0Y2ggdmlhIHRoZSBmaXJzdCBwb29sIGFkYXB0ZXIg4oCUIHR5cGljYWxseSB0aGVcblx0XHQvLyBvbmx5IG9uZSB3aGVuIGEgcHJvY2VzcyBvd25zIG9uZSB0cmlnZ2VyIHdvcmtmbG93LlxuXHRcdGNvbnN0IGFkYXB0ZXIgPVxuXHRcdFx0dGhpcy5hZGFwdGVyID8/XG5cdFx0XHQodGhpcy5hZGFwdGVyUG9vbC5zaXplID4gMCA/ICh0aGlzLmFkYXB0ZXJQb29sLnZhbHVlcygpLm5leHQoKS52YWx1ZSBhcyBXb3JrZXJBZGFwdGVyKSA6IHVuZGVmaW5lZCk7XG5cdFx0aWYgKCFhZGFwdGVyKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiW2Jsb2tdW3dvcmtlcl0gZGlzcGF0Y2goKSBjYWxsZWQgYmVmb3JlIGFueSBhZGFwdGVyIGlzIGNvbm5lY3RlZC4gQ2FsbCBsaXN0ZW4oKSBmaXJzdCwgb3Igc2V0IHRoaXMuYWRhcHRlciBvbiB0aGUgc3ViY2xhc3MuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYWRhcHRlci5hZGRKb2IocXVldWUsIGRhdGEsIG9wdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBzdGF0aXN0aWNzIGZvciBhIHF1ZXVlXG5cdCAqL1xuXHRhc3luYyBnZXRRdWV1ZVN0YXRzKHF1ZXVlOiBzdHJpbmcpOiBQcm9taXNlPFdvcmtlclF1ZXVlU3RhdHM+IHtcblx0XHRjb25zdCBhZGFwdGVyID1cblx0XHRcdHRoaXMuYWRhcHRlciA/P1xuXHRcdFx0KHRoaXMuYWRhcHRlclBvb2wuc2l6ZSA+IDAgPyAodGhpcy5hZGFwdGVyUG9vbC52YWx1ZXMoKS5uZXh0KCkudmFsdWUgYXMgV29ya2VyQWRhcHRlcikgOiB1bmRlZmluZWQpO1xuXHRcdGlmICghYWRhcHRlcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIltibG9rXVt3b3JrZXJdIGdldFF1ZXVlU3RhdHMoKSBjYWxsZWQgYmVmb3JlIGFueSBhZGFwdGVyIGlzIGNvbm5lY3RlZC4gQ2FsbCBsaXN0ZW4oKSBmaXJzdCwgb3Igc2V0IHRoaXMuYWRhcHRlciBvbiB0aGUgc3ViY2xhc3MuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYWRhcHRlci5nZXRRdWV1ZVN0YXRzKHF1ZXVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgbGlzdCBvZiBhY3RpdmUgcXVldWVzXG5cdCAqL1xuXHRnZXRBY3RpdmVRdWV1ZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMuYWN0aXZlUXVldWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiB2MC43IFBSIDUg4oCUIHBpY2sgdGhlIGFkYXB0ZXIgZm9yIGEgd29ya2Zsb3cncyBgcHJvdmlkZXJgIGZpZWxkLlxuXHQgKlxuXHQgKiBSZXNvbHV0aW9uIG9yZGVyOlxuXHQgKiAgIDEuIFN1YmNsYXNzLXNldCBgdGhpcy5hZGFwdGVyYCAoYmFjay1jb21wYXQ6IHByZS12MC43IHBhdHRlcm5cblx0ICogICAgICB3aGVyZSBvbmUgcHJvY2VzcyBiaW5kcyB0byBvbmUgYWRhcHRlciBhdCBjb25zdHJ1Y3Rpb24gdGltZSkuXG5cdCAqICAgMi4gUGVyLXdvcmtmbG93IGBwcm92aWRlcmAgZmllbGQsIGxvb2tlZCB1cCB2aWEgdGhlIGZhY3RvcnkuXG5cdCAqICAgMy4gYEJMT0tfV09SS0VSX0FEQVBURVJgIGVudiB2YXIuXG5cdCAqICAgNC4gYGluLW1lbW9yeWAgZmFsbGJhY2suXG5cdCAqXG5cdCAqIEFkYXB0ZXJzIGFyZSBjb25uZWN0ZWQgb24gZmlyc3QgdXNlIGFuZCBwb29sZWQgcGVyIHByb3ZpZGVyIHNvXG5cdCAqIG11bHRpcGxlIHdvcmtmbG93cyBzaGFyaW5nIGEgcHJvdmlkZXIgc2hhcmUgb25lIGJyb2tlclxuXHQgKiBjb25uZWN0aW9uLiBIZWFsdGgtZGVwZW5kZW5jeSByZWdpc3RyYXRpb24gYWxzbyBoYXBwZW5zIGhlcmUgc29cblx0ICogZWFjaCBwcm92aWRlciBpcyB0cmFja2VkIGluZGl2aWR1YWxseSBpbiBgL2hlYWx0aGAuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgcmVzb2x2ZUFkYXB0ZXJGb3JXb3JrZmxvdyhjb25maWc6IFdvcmtlclRyaWdnZXJPcHRzKTogUHJvbWlzZTxXb3JrZXJBZGFwdGVyPiB7XG5cdFx0Ly8gU3ViY2xhc3Mgb3ZlcnJpZGUgd2lucyBmb3IgYmFjay1jb21wYXQuXG5cdFx0aWYgKHRoaXMuYWRhcHRlcikge1xuXHRcdFx0aWYgKCF0aGlzLmFkYXB0ZXIuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmFkYXB0ZXIuY29ubmVjdCgpO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYENvbm5lY3RlZCB0byAke3RoaXMuYWRhcHRlci5wcm92aWRlcn0gd29ya2VyIHN5c3RlbSAoc3ViY2xhc3MgYWRhcHRlcilgKTtcblx0XHRcdFx0dGhpcy5yZWdpc3RlckFkYXB0ZXJIZWFsdGgodGhpcy5hZGFwdGVyKTtcblx0XHRcdH1cblx0XHRcdC8vIFBvb2wtdHJhY2sgc28gc3RvcCgpIGNhbiBkcmFpbiBpdC5cblx0XHRcdHRoaXMuYWRhcHRlclBvb2wuc2V0KHRoaXMuYWRhcHRlci5wcm92aWRlciwgdGhpcy5hZGFwdGVyKTtcblx0XHRcdHJldHVybiB0aGlzLmFkYXB0ZXI7XG5cdFx0fVxuXG5cdFx0Ly8gTGF6eS1pbXBvcnQgdGhlIGZhY3Rvcnkgc28gdGhlIHdvcmtlciBwYWNrYWdlIGRvZXNuJ3QgcHVsbCBpblxuXHRcdC8vIGV2ZXJ5IGFkYXB0ZXIgb24gaW1wb3J0IOKAlCBvbmx5IHRoZSBvbmVzIGFjdHVhbGx5IGV4ZXJjaXNlZC5cblx0XHRjb25zdCB7IHJlc29sdmVQcm92aWRlciwgY3JlYXRlV29ya2VyQWRhcHRlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi9hZGFwdGVycy9mYWN0b3J5XCIpO1xuXHRcdGNvbnN0IHByb3ZpZGVyID0gcmVzb2x2ZVByb3ZpZGVyKGNvbmZpZy5wcm92aWRlcik7XG5cdFx0bGV0IGFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXJQb29sLmdldChwcm92aWRlcik7XG5cdFx0aWYgKCFhZGFwdGVyKSB7XG5cdFx0XHRhZGFwdGVyID0gY3JlYXRlV29ya2VyQWRhcHRlcihwcm92aWRlcik7XG5cdFx0XHRhd2FpdCBhZGFwdGVyLmNvbm5lY3QoKTtcblx0XHRcdHRoaXMubG9nZ2VyLmxvZyhgQ29ubmVjdGVkIHRvICR7YWRhcHRlci5wcm92aWRlcn0gd29ya2VyIHN5c3RlbWApO1xuXHRcdFx0dGhpcy5yZWdpc3RlckFkYXB0ZXJIZWFsdGgoYWRhcHRlcik7XG5cdFx0XHR0aGlzLmFkYXB0ZXJQb29sLnNldChwcm92aWRlciwgYWRhcHRlcik7XG5cdFx0fVxuXHRcdHJldHVybiBhZGFwdGVyO1xuXHR9XG5cblx0cHJpdmF0ZSByZWdpc3RlckFkYXB0ZXJIZWFsdGgoYWRhcHRlcjogV29ya2VyQWRhcHRlcik6IHZvaWQge1xuXHRcdHRoaXMucmVnaXN0ZXJIZWFsdGhEZXBlbmRlbmN5KGB3b3JrZXItJHthZGFwdGVyLnByb3ZpZGVyfWAsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IGhlYWx0aHkgPSBhd2FpdCBhZGFwdGVyLmhlYWx0aENoZWNrKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGF0dXM6IGhlYWx0aHkgPyAoXCJoZWFsdGh5XCIgYXMgY29uc3QpIDogKFwidW5oZWFsdGh5XCIgYXMgY29uc3QpLFxuXHRcdFx0XHRsYXN0Q2hlY2tlZDogRGF0ZS5ub3coKSxcblx0XHRcdFx0bWVzc2FnZTogaGVhbHRoeSA/IFwiQ29ubmVjdGVkXCIgOiBcIkNvbm5lY3Rpb24gbG9zdFwiLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIHdvcmtmbG93cyB0aGF0IGhhdmUgd29ya2VyIHRyaWdnZXJzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0V29ya2VyV29ya2Zsb3dzKCk6IFdvcmtlcldvcmtmbG93TW9kZWxbXSB7XG5cdFx0Y29uc3Qgd29ya2Zsb3dzOiBXb3JrZXJXb3JrZmxvd01vZGVsW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgW3BhdGgsIHdvcmtmbG93XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm5vZGVNYXAud29ya2Zsb3dzIHx8IHt9KSkge1xuXHRcdFx0Y29uc3Qgd29ya2Zsb3dDb25maWcgPSAod29ya2Zsb3cgYXMgdW5rbm93biBhcyB7IF9jb25maWc6IFdvcmtlcldvcmtmbG93TW9kZWxbXCJjb25maWdcIl0gfSkuX2NvbmZpZztcblxuXHRcdFx0Ly8gRjExIOKAlCBkaXNjb3ZlciB0aGUgd29ya2VyIHRyaWdnZXIgYnkgZGlyZWN0IGtleSBhY2Nlc3MsIE5PVCBieVxuXHRcdFx0Ly8gaW5zcGVjdGluZyBvbmx5IHRoZSBGSVJTVCBrZXkuIEEgbXVsdGktdHJpZ2dlciB3b3JrZmxvdyBzdWNoIGFzXG5cdFx0XHQvLyBgdHJpZ2dlcjogeyBodHRwOiB7Li4ufSwgd29ya2VyOiB7IHF1ZXVlOiBcImpvYnNcIiB9IH1gIGRlY2xhcmVzXG5cdFx0XHQvLyBgd29ya2VyYCBzZWNvbmQ7IHRoZSBvbGQgYE9iamVjdC5rZXlzKHRyaWdnZXIpWzBdID09PSBcIndvcmtlclwiYFxuXHRcdFx0Ly8gY2hlY2sgc2lsZW50bHkgZHJvcHBlZCBpdCwgbWFraW5nIGRpc2NvdmVyeSBkZXBlbmQgb24gSlMgb2JqZWN0XG5cdFx0XHQvLyBrZXkgaW5zZXJ0aW9uIG9yZGVyLiBFdmVyeSBzaWJsaW5nIHRyaWdnZXIgKEhUVFAvU1NFL1dlYmhvb2spXG5cdFx0XHQvLyBhbHJlYWR5IHJlYWRzIGl0cyBrZXkgZGlyZWN0bHkuXG5cdFx0XHRpZiAod29ya2Zsb3dDb25maWc/LnRyaWdnZXI/Lndvcmtlcikge1xuXHRcdFx0XHR3b3JrZmxvd3MucHVzaCh7XG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHRjb25maWc6IHdvcmtmbG93Q29uZmlnLFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gd29ya2Zsb3dzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBhbiBpbmNvbWluZyBqb2Jcblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBoYW5kbGVKb2Ioam9iOiBXb3JrZXJKb2IsIHdvcmtmbG93OiBXb3JrZXJXb3JrZmxvd01vZGVsLCBjb25maWc6IFdvcmtlclRyaWdnZXJPcHRzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgam9iSWQgPSBqb2IuaWQgfHwgdXVpZCgpO1xuXHRcdGNvbnN0IGRlZmF1bHRNZXRlciA9IG1ldHJpY3MuZ2V0TWV0ZXIoXCJkZWZhdWx0XCIpO1xuXHRcdGNvbnN0IHdvcmtlckpvYnMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcIndvcmtlcl9qb2JzX3Byb2Nlc3NlZFwiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJXb3JrZXIgam9icyBwcm9jZXNzZWRcIixcblx0XHR9KTtcblx0XHRjb25zdCB3b3JrZXJFcnJvcnMgPSBkZWZhdWx0TWV0ZXIuY3JlYXRlQ291bnRlcihcIndvcmtlcl9qb2JzX2ZhaWxlZFwiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJXb3JrZXIgam9iIGZhaWx1cmVzXCIsXG5cdFx0fSk7XG5cdFx0Y29uc3Qgd29ya2VyUmV0cmllcyA9IGRlZmF1bHRNZXRlci5jcmVhdGVDb3VudGVyKFwid29ya2VyX2pvYnNfcmV0cmllZFwiLCB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJXb3JrZXIgam9iIHJldHJpZXNcIixcblx0XHR9KTtcblxuXHRcdGF3YWl0IHRoaXMudHJhY2VyLnN0YXJ0QWN0aXZlU3Bhbihgd29ya2VyOiR7Y29uZmlnLnF1ZXVlfWAsIGFzeW5jIChzcGFuOiBTcGFuKSA9PiB7XG5cdFx0XHQvLyBGMiDigJQgZ2l2ZSBlYWNoIGpvYiBpdHMgT1dOIENvbmZpZ3VyYXRpb24gc28gY29uY3VycmVudCBqb2JzXG5cdFx0XHQvLyAoYGNvbmN1cnJlbmN5ID4gMWAsIG9yIHR3byBxdWV1ZXMgaW4gb25lIHByb2Nlc3MpIG5ldmVyIHJlYWQgYVxuXHRcdFx0Ly8gc3RlcCBsaXN0IC8gbmFtZSAvIHRyaWdnZXIgY29uZmlnIGFub3RoZXIgam9iJ3MgYGluaXQoKWBcblx0XHRcdC8vIG92ZXJ3cm90ZS4gRGVjbGFyZWQgb3V0c2lkZSB0aGUgdHJ5IHNvIHRoZSBjYXRjaCBjYW4gZmxpcCB0aGVcblx0XHRcdC8vIHJ1bidzIHN0YXR1cyB2aWEgdGhlIHBlci1qb2IgY29uZmlnIG5hbWUuXG5cdFx0XHRjb25zdCBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcblx0XHRcdC8vIEY0IOKAlCBjYXB0dXJlZCBmcm9tIGNyZWF0ZUNvbnRleHQgc28gdGhlIHRpbWVvdXQgcGF0aCBjYW4gYWJvcnRcblx0XHRcdC8vIHRoZSBkZXRhY2hlZCBydW4gY29vcGVyYXRpdmVseS5cblx0XHRcdGxldCBydW5DdHg6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cdFx0XHRcdC8vIEJ1ZyAwMyDigJQgcmVzb2x2ZSB0aGUgYWxyZWFkeS1sb2FkZWQgd29ya2Zsb3cgb2JqZWN0IGZyb20gdGhlXG5cdFx0XHRcdC8vIGluLW1lbW9yeSBub2RlTWFwIGFuZCBwYXNzIGl0IGFzIHRoZSBgcHJlbG9hZGVkYCBhcmcgKG1pcnJvcnNcblx0XHRcdFx0Ly8gSFRUUCkuIFRoaXMgcm91dGVzIGluaXQgdGhyb3VnaCB0aGUgcHJlbG9hZGVkIGJyYW5jaCBhbmQgc2tpcHNcblx0XHRcdFx0Ly8gdGhlIGRpc2stYmFzZWQgYExvY2FsU3RvcmFnZWAgcmVzb2x2ZXIgd2hvc2UgZG90IGhldXJpc3RpY1xuXHRcdFx0XHQvLyByZWplY3RlZCBkb3R0ZWQgYGRvbWFpbi5hY3Rpb25gIHdvcmtmbG93IG5hbWVzIChcIkZpbGUgdHlwZSBub3Rcblx0XHRcdFx0Ly8gc3VwcG9ydGVkXCIpLiBGYWxsYmFjayB0byBgd29ya2Zsb3cuY29uZmlnYCBzbyBgcHJlbG9hZGVkYCBpc1xuXHRcdFx0XHQvLyBuZXZlciB1bmRlZmluZWQgKHdoaWNoIHdvdWxkIHJlLXRyaWdnZXIgdGhlIGRpc2sgYnJhbmNoKS5cblx0XHRcdFx0Y29uc3QgcHJlbG9hZGVkID1cblx0XHRcdFx0XHQodGhpcy5ub2RlTWFwLndvcmtmbG93cyAmJiAodGhpcy5ub2RlTWFwLndvcmtmbG93cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbd29ya2Zsb3cucGF0aF0pID8/XG5cdFx0XHRcdFx0d29ya2Zsb3cuY29uZmlnO1xuXG5cdFx0XHRcdC8vIEYyIOKAlCBpbml0aWFsaXplIHRoZSBwZXItam9iIENvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiB0aGUgc2hhcmVkXG5cdFx0XHRcdC8vIGB0aGlzLmNvbmZpZ3VyYXRpb25gLlxuXHRcdFx0XHRhd2FpdCBjb25maWd1cmF0aW9uLmluaXQod29ya2Zsb3cucGF0aCwgdGhpcy5ub2RlTWFwLCBwcmVsb2FkZWQpO1xuXG5cdFx0XHRcdC8vIENyZWF0ZSBjb250ZXh0IOKAlCBiaW5kIGl0IHRvIHRoZSBwZXItam9iIENvbmZpZ3VyYXRpb24gKEYyKS5cblx0XHRcdFx0Y29uc3QgY3R4OiBDb250ZXh0ID0gdGhpcy5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCwgd29ya2Zsb3cucGF0aCwgam9iSWQsIGNvbmZpZ3VyYXRpb24pO1xuXHRcdFx0XHRydW5DdHggPSBjdHg7XG5cblx0XHRcdFx0Ly8gUG9wdWxhdGUgcmVxdWVzdCB3aXRoIGpvYiBkYXRhXG5cdFx0XHRcdGN0eC5yZXF1ZXN0ID0ge1xuXHRcdFx0XHRcdGJvZHk6IGpvYi5kYXRhLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGpvYi5oZWFkZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiB7fSxcblx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdHF1ZXVlOiBqb2IucXVldWUsXG5cdFx0XHRcdFx0XHRqb2JJZDogam9iLmlkLFxuXHRcdFx0XHRcdFx0YXR0ZW1wdDogU3RyaW5nKGpvYi5hdHRlbXB0cyksXG5cdFx0XHRcdFx0XHRwcmlvcml0eTogU3RyaW5nKGpvYi5wcmlvcml0eSksXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSBhcyB1bmtub3duIGFzIFJlcXVlc3RDb250ZXh0O1xuXG5cdFx0XHRcdC8vIFN0b3JlIHdvcmtlciBtZXRhZGF0YSBpbiBjb250ZXh0XG5cdFx0XHRcdGlmICghY3R4LnZhcnMpIGN0eC52YXJzID0ge307XG5cdFx0XHRcdGN0eC52YXJzLl93b3JrZXJfam9iID0ge1xuXHRcdFx0XHRcdGlkOiBqb2IuaWQsXG5cdFx0XHRcdFx0cXVldWU6IGpvYi5xdWV1ZSxcblx0XHRcdFx0XHRhdHRlbXB0czogU3RyaW5nKGpvYi5hdHRlbXB0cyksXG5cdFx0XHRcdFx0bWF4UmV0cmllczogU3RyaW5nKGpvYi5tYXhSZXRyaWVzKSxcblx0XHRcdFx0XHRwcmlvcml0eTogU3RyaW5nKGpvYi5wcmlvcml0eSksXG5cdFx0XHRcdFx0Y3JlYXRlZEF0OiBqb2IuY3JlYXRlZEF0LnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcdFx0ZGVsYXk6IFN0cmluZyhqb2IuZGVsYXkgPz8gMCksXG5cdFx0XHRcdFx0dGltZW91dDogU3RyaW5nKGpvYi50aW1lb3V0ID8/IDApLFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGN0eC5sb2dnZXIubG9nKFxuXHRcdFx0XHRcdGBQcm9jZXNzaW5nIGpvYiAke2pvYklkfSBmcm9tICR7Y29uZmlnLnF1ZXVlfSAoYXR0ZW1wdCAke2pvYi5hdHRlbXB0cyArIDF9LyR7am9iLm1heFJldHJpZXMgKyAxfSlgLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIHYwLjYgwrcgYXBwbHkgdGhlIG1lcmdlZCBtaWRkbGV3YXJlIGNoYWluIChwcm9jZXNzLWdsb2JhbCDihpJcblx0XHRcdFx0Ly8gd29ya2Zsb3ctbGV2ZWwg4oaSIHRyaWdnZXItbGV2ZWwpIG9uIHRoZSBzYW1lIGN0eCB0aGUgbWFpblxuXHRcdFx0XHQvLyB3b3JrZmxvdyB3aWxsIHNlZS4gU3RhdGUgbXV0YXRpb25zIGZyb20gbWlkZGxld2FyZVxuXHRcdFx0XHQvLyAoZS5nLiBjdHguc3RhdGUuaWRlbnRpdHkpIGNhcnJ5IGZvcndhcmQuIE1pZGRsZXdhcmUgdGhhdFxuXHRcdFx0XHQvLyB0aHJvd3MgKHZpYSBgQGJsb2tqcy90aHJvd2ApIHByb3BhZ2F0ZXMgdG8gdGhlIG91dGVyXG5cdFx0XHRcdC8vIGNhdGNoIGFuZCBpcyByb3V0ZWQgdGhyb3VnaCB0aGUgd29ya2VyJ3MgcmV0cnkgLyBETFFcblx0XHRcdFx0Ly8gbG9naWMgZXhhY3RseSBsaWtlIGEgbWFpbi13b3JrZmxvdyBlcnJvci5cblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gRjIg4oCUIHBhc3MgdGhlIHBlci1qb2IgYGNvbmZpZ3VyYXRpb25gIHNvIHRyaWdnZXItbGV2ZWxcblx0XHRcdFx0Ly8gKGB0cmlnZ2VyLndvcmtlci5taWRkbGV3YXJlYCkgYW5kIHdvcmtmbG93LWxldmVsIG1pZGRsZXdhcmVcblx0XHRcdFx0Ly8gYXJlIHJlYWQgZnJvbSB0aGUgb2JqZWN0IFRISVMgam9iIGluaXRpYWxpemVkLiBXaXRob3V0IGl0IHRoZVxuXHRcdFx0XHQvLyBjaGFpbiB3b3VsZCByZWFkIHRoZSBuZXZlci1pbml0aWFsaXplZCBzaGFyZWQgYHRoaXMuY29uZmlndXJhdGlvbmBcblx0XHRcdFx0Ly8gKHRoZSB3b3JrZXIgbm8gbG9uZ2VyIGNhbGxzIGB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdGApIGFuZFxuXHRcdFx0XHQvLyBzaWxlbnRseSBkcm9wIGV2ZXJ5dGhpbmcgYnV0IHRoZSBwcm9jZXNzLWdsb2JhbCBjaGFpbi5cblx0XHRcdFx0YXdhaXQgdGhpcy5hcHBseU1pZGRsZXdhcmVDaGFpbihjdHgsIHRoaXMubm9kZU1hcCwgY29uZmlndXJhdGlvbik7XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSB3b3JrZmxvdyB3aXRoIHRpbWVvdXQgaWYgY29uZmlndXJlZC5cblx0XHRcdFx0Ly8gRjIg4oCUIHBhc3MgdGhlIHBlci1qb2IgYGNvbmZpZ3VyYXRpb25gIGludG8gYHJ1bmAgc28gdGhlIHJ1bm5lclxuXHRcdFx0XHQvLyByZWFkcyB0aGUgc2FtZSBvYmplY3QgdGhpcyBqb2IgaW5pdGlhbGl6ZWQuXG5cdFx0XHRcdGxldCByZXNwb25zZTogVHJpZ2dlclJlc3BvbnNlO1xuXHRcdFx0XHRpZiAoY29uZmlnLnRpbWVvdXQgJiYgY29uZmlnLnRpbWVvdXQgPiAwKSB7XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXaXRoVGltZW91dChjdHgsIGNvbmZpZy50aW1lb3V0LCBjb25maWd1cmF0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNwb25zZSA9IGF3YWl0IHRoaXMucnVuKGN0eCwgY29uZmlndXJhdGlvbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBlbmQgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuXHRcdFx0XHQvLyBTZXQgc3BhbiBhdHRyaWJ1dGVzXG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCB0cnVlKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJqb2JfaWRcIiwgam9iSWQpO1xuXHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInF1ZXVlXCIsIGNvbmZpZy5xdWV1ZSk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwiYXR0ZW1wdHNcIiwgam9iLmF0dGVtcHRzKTtcblx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJlbGFwc2VkX21zXCIsIGVuZCAtIHN0YXJ0KTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcblxuXHRcdFx0XHQvLyBSZWNvcmQgbWV0cmljc1xuXHRcdFx0XHR3b3JrZXJKb2JzLmFkZCgxLCB7XG5cdFx0XHRcdFx0ZW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblx0XHRcdFx0XHRxdWV1ZTogY29uZmlnLnF1ZXVlLFxuXHRcdFx0XHRcdHdvcmtmbG93X25hbWU6IGNvbmZpZ3VyYXRpb24ubmFtZSxcblx0XHRcdFx0XHRzdWNjZXNzOiBcInRydWVcIixcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Y3R4LmxvZ2dlci5sb2coYEpvYiBjb21wbGV0ZWQgaW4gJHsoZW5kIC0gc3RhcnQpLnRvRml4ZWQoMil9bXM6ICR7am9iSWR9YCk7XG5cblx0XHRcdFx0Ly8gTWFyayBqb2IgYXMgY29tcGxldGVkXG5cdFx0XHRcdGF3YWl0IGpvYi5jb21wbGV0ZSgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlO1xuXG5cdFx0XHRcdC8vIFRpZXIgMiAjNSArICM3IOKAlCBkZWZlcnJlZCBkaXNwYXRjaCAoZGVsYXkvVFRML2RlYm91bmNlKS5cblx0XHRcdFx0Ly8gVGhlIHJ1biB3YXMgZGVmZXJyZWQgdG8gYSBmdXR1cmUgdGltZXI7IEFDSyB3aXRob3V0IHJldHJ5LlxuXHRcdFx0XHQvLyBUaGUgaW4tcHJvY2VzcyBzY2hlZHVsZXIgb3ducyB0aGUgZXZlbnR1YWwgZGlzcGF0Y2gsIE5PVFxuXHRcdFx0XHQvLyB0aGUgYnJva2VyIOKAlCByZS1xdWV1ZWluZyBoZXJlIHdvdWxkIGNyZWF0ZSBhIGR1cGxpY2F0ZS5cblx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgRGVmZXJyZWREaXNwYXRjaFNpZ25hbCkge1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJkZWZlcnJlZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcImRlZmVycmVkX3N0YXR1c1wiLCBlcnJvci5pbmZvLnN0YXR1cyk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSywgbWVzc2FnZTogYGRlZmVycmVkOiR7ZXJyb3IuaW5mby5zdGF0dXN9YCB9KTtcblxuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmxvZyhcblx0XHRcdFx0XHRcdGBbc2NoZWR1bGluZ10gam9iICR7am9iSWR9IHJ1bklkPSR7ZXJyb3IuaW5mby5ydW5JZH0gc3RhdHVzPSR7ZXJyb3IuaW5mby5zdGF0dXN9IGAgK1xuXHRcdFx0XHRcdFx0XHRgc2NoZWR1bGVkQXQ9JHtlcnJvci5pbmZvLnNjaGVkdWxlZEF0fSBwaW5nQ291bnQ9JHtlcnJvci5pbmZvLnBpbmdDb3VudH0g4oaSIEFDSyAobm8gcmVxdWV1ZSlgLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuY29tcGxldGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQUiAxLTUgcG9saXNoIOKAlCBxdWV1ZS1tb2RlIFRUTCBlbGFwc2VkLiBUaGUgcnVuIGlzIGFscmVhZHlcblx0XHRcdFx0Ly8gZmxpcHBlZCB0byBgZXhwaXJlZGAgKHNlZSBUcmlnZ2VyQmFzZSBxdWV1ZSBicmFuY2gpOyBBQ0tcblx0XHRcdFx0Ly8gd2l0aG91dCByZXRyeSBzbyB0aGUgYnJva2VyIGRvZXNuJ3QgcmVkZWxpdmVyIOKAlCB0aGUgcnVuXG5cdFx0XHRcdC8vIHdpbGwgbmV2ZXIgc3VjY2VlZCAodGltZXIgd29uJ3QgcmUtZmlyZSkuIERpc3RpbmN0IGZyb21cblx0XHRcdFx0Ly8gdGhlIHRocm90dGxlZCBOQUNLIGJlbG93LlxuXHRcdFx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBRdWV1ZUV4cGlyZWRFcnJvcikge1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJxdWV1ZV9leHBpcmVkXCIsIHRydWUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuT0ssIG1lc3NhZ2U6IFwicXVldWVfZXhwaXJlZFwiIH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIubG9nKFxuXHRcdFx0XHRcdFx0YFtjb25jdXJyZW5jeV0gam9iICR7am9iSWR9IHJ1bklkPSR7ZXJyb3IuaW5mby5ydW5JZH0ga2V5PScke2Vycm9yLmluZm8uY29uY3VycmVuY3lLZXl9JyBgICtcblx0XHRcdFx0XHRcdFx0YHF1ZXVlRXhwaXJlZEF0PSR7ZXJyb3IuaW5mby5xdWV1ZUV4cGlyZWRBdH0g4oaSIEFDSyAobm8gcmVxdWV1ZSwgcnVuIGV4cGlyZWQpYCxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0YXdhaXQgam9iLmNvbXBsZXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGllciAyICM2IOKAlCBjb25jdXJyZW5jeSBnYXRlIGRlbmlhbC4gRGlzdGluY3QgZnJvbSBhIG5vcm1hbFxuXHRcdFx0XHQvLyBmYWlsdXJlOiBOQUNLIHdpdGggcmVkZWxpdmVyeSBzbyB0aGUgYnJva2VyIHJlLXF1ZXVlcyB0aGVcblx0XHRcdFx0Ly8gam9iIHdpdGggaXRzIGV4aXN0aW5nIGJhY2stb2ZmIHNlbWFudGljcy4gRG9lc24ndCBjb3VudFxuXHRcdFx0XHQvLyBhZ2FpbnN0IHRoZSB3b3JrZmxvdydzIHJldHJ5IGJ1ZGdldCAoZGlmZmVyZW50IGludmFyaWFudCkuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBwYXNzIGB3aWxsUmV0cnk6IHRydWVgIHJlZ2FyZGxlc3Mgb2YgYGpvYi5hdHRlbXB0c2Bcblx0XHRcdFx0Ly8gYmVjYXVzZSB0aHJvdHRsaW5nIGlzIGEgdHJhbnNpZW50IHJlc291cmNlIHN0YXRlLCBub3QgYVxuXHRcdFx0XHQvLyBwZXJtYW5lbnQgZmFpbHVyZS5cblx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgQ29uY3VycmVuY3lMaW1pdEVycm9yKSB7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJzdWNjZXNzXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcIndpbGxfcmV0cnlcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJ0aHJvdHRsZWRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSywgbWVzc2FnZTogXCJjb25jdXJyZW5jeV9saW1pdF9yZWFjaGVkXCIgfSk7XG5cblx0XHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coXG5cdFx0XHRcdFx0XHRgW2NvbmN1cnJlbmN5XSBqb2IgJHtqb2JJZH0ga2V5PScke2Vycm9yLmluZm8uY29uY3VycmVuY3lLZXl9JyBgICtcblx0XHRcdFx0XHRcdFx0YGxpbWl0PSR7ZXJyb3IuaW5mby5jb25jdXJyZW5jeUxpbWl0fSBpbkZsaWdodD0ke2Vycm9yLmluZm8uY3VycmVudEluRmxpZ2h0fSDihpIgTkFDSyArIHJlZGVsaXZlcnlgLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHR3b3JrZXJSZXRyaWVzLmFkZCgxLCB7XG5cdFx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdFx0cXVldWU6IGNvbmZpZy5xdWV1ZSxcblx0XHRcdFx0XHRcdHdvcmtmbG93X25hbWU6IGNvbmZpZ3VyYXRpb24/Lm5hbWUgfHwgXCJ1bmtub3duXCIsXG5cdFx0XHRcdFx0XHRyZWFzb246IFwidGhyb3R0bGVkXCIsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuZmFpbChlcnJvciBhcyBFcnJvciwgdHJ1ZSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRjMg4oCUIHRoZSBydW4gd2FzIGNhbmNlbGxlZCBieSBhbiBvcGVyYXRvclxuXHRcdFx0XHQvLyAoYFBPU1QgL19fYmxvay9ydW5zLzpydW5JZC9jYW5jZWxgKS4gYFJ1bm5lclN0ZXBzYCB0aHJvd3Ncblx0XHRcdFx0Ly8gYFJ1bkNhbmNlbGxlZEVycm9yYCwgd2hpY2ggYFRyaWdnZXJCYXNlLnJ1bmAgcmUtdGhyb3dzXG5cdFx0XHRcdC8vIHVudG91Y2hlZCAoc3RhdHVzIGFscmVhZHkgZmxpcHBlZCB0byBgY2FuY2VsbGVkYCkuIFRoZSBydW4gaXNcblx0XHRcdFx0Ly8gdGVybWluYWwg4oCUIEFDSyB0aGUgYnJva2VyIFdJVEhPVVQgcmVxdWV1ZSBzbyB0aGVcblx0XHRcdFx0Ly8gZGVsaWJlcmF0ZWx5LWNhbmNlbGxlZCwgb2Z0ZW4gbm9uLWlkZW1wb3RlbnQgd29yayBkb2Vzbid0IHJ1blxuXHRcdFx0XHQvLyBhZ2FpbiBvbiByZWRlbGl2ZXJ5LlxuXHRcdFx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBSdW5DYW5jZWxsZWRFcnJvcikge1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRBdHRyaWJ1dGUoXCJjYW5jZWxsZWRcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSywgbWVzc2FnZTogXCJydW5fY2FuY2VsbGVkXCIgfSk7XG5cblx0XHRcdFx0XHR0aGlzLmxvZ2dlci5sb2coYEpvYiAke2pvYklkfSBjYW5jZWxsZWQgKHJ1biBhbHJlYWR5IHRlcm1pbmFsKSDihpIgQUNLIChubyByZXF1ZXVlKWApO1xuXG5cdFx0XHRcdFx0YXdhaXQgam9iLmNvbXBsZXRlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRjQgLyBGMjQg4oCUIHRyaWdnZXItbGV2ZWwgYGNvbmZpZy50aW1lb3V0YCBlbGFwc2VkLiBUaGUgZGV0YWNoZWRcblx0XHRcdFx0Ly8gcnVuIHdhcyBhbHJlYWR5IGFib3J0ZWQgdmlhIGBjdHguc2lnbmFsYCBpbnNpZGVcblx0XHRcdFx0Ly8gYGV4ZWN1dGVXaXRoVGltZW91dGAsIHNvIGl0IHVud2luZHMgd2l0aCBgUnVuQ2FuY2VsbGVkRXJyb3JgXG5cdFx0XHRcdC8vIGF0IHRoZSBuZXh0IGJldHdlZW4tc3RlcCBjaGVjay4gRmxpcCB0aGUgcnVuIHJlY29yZCB0byB0aGVcblx0XHRcdFx0Ly8gZGVkaWNhdGVkIGB0aW1lZE91dGAgc3RhdHVzIChtYXRjaGluZyB0aGUgcGVyLXN0ZXBcblx0XHRcdFx0Ly8gYG1heER1cmF0aW9uYCB0YXhvbm9teSkgaW5zdGVhZCBvZiByb3V0aW5nIHRocm91Z2ggdGhlIGdlbmVyaWNcblx0XHRcdFx0Ly8gcmV0cnkvRExRIHBhdGgsIGFuZCBBQ0sgd2l0aG91dCByZXF1ZXVlLlxuXHRcdFx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBXb3JrZXJUaW1lb3V0RXJyb3IpIHtcblx0XHRcdFx0XHRzcGFuLnNldEF0dHJpYnV0ZShcInN1Y2Nlc3NcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwidGltZWRfb3V0XCIsIHRydWUpO1xuXHRcdFx0XHRcdHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsIG1lc3NhZ2U6IFwiam9iX3RpbWVkX291dFwiIH0pO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGltZWRPdXRSdW5JZCA9IGVycm9yLnJ1bklkID8/IChydW5DdHggYXMgeyBfdHJhY2VSdW5JZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkKT8uX3RyYWNlUnVuSWQ7XG5cdFx0XHRcdFx0aWYgKHRpbWVkT3V0UnVuSWQpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFJ1blRyYWNrZXIuZ2V0SW5zdGFuY2UoKS5tYXJrUnVuVGltZWRPdXQodGltZWRPdXRSdW5JZCwge1xuXHRcdFx0XHRcdFx0XHRcdHN0ZXBJZDogXCJfX3dvcmtlcl90aW1lb3V0X19cIixcblx0XHRcdFx0XHRcdFx0XHRtYXhEdXJhdGlvbk1zOiBlcnJvci50aW1lb3V0TXMsXG5cdFx0XHRcdFx0XHRcdFx0YXR0ZW1wdHNFeGhhdXN0ZWQ6IGpvYi5hdHRlbXB0cyArIDEsXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAobWFya0Vycikge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XHRcdFx0XHRgW2Jsb2tdW3dvcmtlcl0gbWFya1J1blRpbWVkT3V0IGZhaWxlZCBmb3IgcnVuICR7dGltZWRPdXRSdW5JZH06ICR7bWFya0VyciBpbnN0YW5jZW9mIEVycm9yID8gbWFya0Vyci5tZXNzYWdlIDogU3RyaW5nKG1hcmtFcnIpfWAsXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0d29ya2VyRXJyb3JzLmFkZCgxLCB7XG5cdFx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdFx0cXVldWU6IGNvbmZpZy5xdWV1ZSxcblx0XHRcdFx0XHRcdHdvcmtmbG93X25hbWU6IGNvbmZpZ3VyYXRpb24/Lm5hbWUgfHwgXCJ1bmtub3duXCIsXG5cdFx0XHRcdFx0XHRyZWFzb246IFwidGltZW91dFwiLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFx0XHRgSm9iICR7am9iSWR9IHRpbWVkIG91dCBhZnRlciAke2Vycm9yLnRpbWVvdXRNc31tcyDihpIgcnVuIGZsaXBwZWQgdG8gdGltZWRPdXQsIEFDSyAobm8gcmVxdWV1ZSlgLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuY29tcGxldGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzaG91bGRSZXRyeSA9IGpvYi5hdHRlbXB0cyA8IGpvYi5tYXhSZXRyaWVzO1xuXG5cdFx0XHRcdC8vIFNldCBzcGFuIGVycm9yXG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwic3VjY2Vzc1wiLCBmYWxzZSk7XG5cdFx0XHRcdHNwYW4uc2V0QXR0cmlidXRlKFwid2lsbF9yZXRyeVwiLCBzaG91bGRSZXRyeSk7XG5cdFx0XHRcdHNwYW4ucmVjb3JkRXhjZXB0aW9uKGVycm9yIGFzIEVycm9yKTtcblx0XHRcdFx0c3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5FUlJPUiwgbWVzc2FnZTogZXJyb3JNZXNzYWdlIH0pO1xuXG5cdFx0XHRcdGlmIChzaG91bGRSZXRyeSkge1xuXHRcdFx0XHRcdC8vIFJldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZi4gYGNvbmZpZy5kZWxheWAgd2lkZW5lZCB0b1xuXHRcdFx0XHRcdC8vIGBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWRgIGluIFRpZXIgMiAjNSAoZHVyYXRpb24gc3RyaW5ncykuXG5cdFx0XHRcdFx0Ly8gYGNhbGN1bGF0ZUJhY2tvZmZgIG9ubHkgaGFuZGxlcyBudW1iZXJzOyBub3JtYWxpemUgdmlhXG5cdFx0XHRcdFx0Ly8gdHJ5UGFyc2VEdXJhdGlvbi4gRmFpbC1vcGVuIHRvIHVuZGVmaW5lZCDihpIgZGVmYXVsdCBiYWNrb2ZmLlxuXHRcdFx0XHRcdGNvbnN0IGRlbGF5TXMgPVxuXHRcdFx0XHRcdFx0dHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gXCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHQ/IGNvbmZpZy5kZWxheVxuXHRcdFx0XHRcdFx0XHQ6IHR5cGVvZiBjb25maWcuZGVsYXkgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0XHQ/ICh0cnlQYXJzZUR1cmF0aW9uKGNvbmZpZy5kZWxheSkgPz8gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGNvbnN0IGJhY2tvZmZNcyA9IHRoaXMuY2FsY3VsYXRlQmFja29mZihqb2IuYXR0ZW1wdHMsIGRlbGF5TXMpO1xuXHRcdFx0XHRcdHdvcmtlclJldHJpZXMuYWRkKDEsIHtcblx0XHRcdFx0XHRcdGVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0XHRxdWV1ZTogY29uZmlnLnF1ZXVlLFxuXHRcdFx0XHRcdFx0d29ya2Zsb3dfbmFtZTogY29uZmlndXJhdGlvbj8ubmFtZSB8fCBcInVua25vd25cIixcblx0XHRcdFx0XHRcdGF0dGVtcHQ6IFN0cmluZyhqb2IuYXR0ZW1wdHMgKyAxKSxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcdFx0YEpvYiAke2pvYklkfSBmYWlsZWQgKGF0dGVtcHQgJHtqb2IuYXR0ZW1wdHMgKyAxfS8ke2pvYi5tYXhSZXRyaWVzICsgMX0pLCByZXRyeWluZyBpbiAke2JhY2tvZmZNc31tczogJHtlcnJvck1lc3NhZ2V9YCxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0YXdhaXQgam9iLmZhaWwoZXJyb3IgYXMgRXJyb3IsIHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE1heCByZXRyaWVzIGV4aGF1c3RlZCAtIHNlbmQgdG8gRExRXG5cdFx0XHRcdFx0d29ya2VyRXJyb3JzLmFkZCgxLCB7XG5cdFx0XHRcdFx0XHRlbnY6IHByb2Nlc3MuZW52Lk5PREVfRU5WLFxuXHRcdFx0XHRcdFx0cXVldWU6IGNvbmZpZy5xdWV1ZSxcblx0XHRcdFx0XHRcdHdvcmtmbG93X25hbWU6IGNvbmZpZ3VyYXRpb24/Lm5hbWUgfHwgXCJ1bmtub3duXCIsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XHRcdGBKb2IgJHtqb2JJZH0gcGVybWFuZW50bHkgZmFpbGVkIGFmdGVyICR7am9iLmF0dGVtcHRzICsgMX0gYXR0ZW1wdHM6ICR7ZXJyb3JNZXNzYWdlfWAsXG5cdFx0XHRcdFx0XHQoZXJyb3IgYXMgRXJyb3IpLnN0YWNrLFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRhd2FpdCBqb2IuZmFpbChlcnJvciBhcyBFcnJvciwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRzcGFuLmVuZCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGUgd29ya2Zsb3cgd2l0aCBhIHRpbWVvdXQuXG5cdCAqXG5cdCAqIEY0IOKAlCBvbiB0aW1lb3V0LCBmaXJlIHRoZSBjdHggQWJvcnRDb250cm9sbGVyIHNvIHRoZSBkZXRhY2hlZCBgcnVuYFxuXHQgKiB1bndpbmRzIGNvb3BlcmF0aXZlbHkgKGl0IHRocm93cyBgUnVuQ2FuY2VsbGVkRXJyb3JgIGF0IHRoZSBuZXh0XG5cdCAqIGJldHdlZW4tc3RlcCBjaGVjazsgbG9uZyB1bmludGVycnVwdGlibGUgbm9kZXMgc2hvdWxkIHN0aWxsIHBvbGxcblx0ICogYGN0eC5zaWduYWwuYWJvcnRlZGApLiBUaGUgcHJvbWlzZSByZWplY3RzIHdpdGggYSBkZWRpY2F0ZWRcblx0ICoge0BsaW5rIFdvcmtlclRpbWVvdXRFcnJvcn0gY2FycnlpbmcgdGhlIHJ1biBpZCBzbyBgaGFuZGxlSm9iYCdzIGNhdGNoIGNhblxuXHQgKiBmbGlwIHRoZSBydW4gcmVjb3JkIHRvIGB0aW1lZE91dGAgKEYyNCkuIFRoZSBzZWNvbmQgYHJ1bmAgKGJyb2tlclxuXHQgKiByZWRlbGl2ZXJ5KSBpcyBwcmV2ZW50ZWQgYmVjYXVzZSB3ZSBBQ0sgd2l0aG91dCByZXF1ZXVlIG9uIHRpbWVvdXQuXG5cdCAqXG5cdCAqIEYyIOKAlCBgY29uZmlndXJhdGlvbmAgaXMgdGhlIHBlci1qb2IgQ29uZmlndXJhdGlvbjsgdGhyZWFkZWQgaW50byBgcnVuYC5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBleGVjdXRlV2l0aFRpbWVvdXQoXG5cdFx0Y3R4OiBDb250ZXh0LFxuXHRcdHRpbWVvdXRNczogbnVtYmVyLFxuXHRcdGNvbmZpZ3VyYXRpb24/OiBDb25maWd1cmF0aW9uLFxuXHQpOiBQcm9taXNlPFRyaWdnZXJSZXNwb25zZT4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTxUcmlnZ2VyUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGxldCBzZXR0bGVkID0gZmFsc2U7XG5cdFx0XHRjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoc2V0dGxlZCkgcmV0dXJuO1xuXHRcdFx0XHRzZXR0bGVkID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBGNCDigJQgYWJvcnQgdGhlIGRldGFjaGVkIHJ1biBzbyBpdCBzdG9wcyBleGVjdXRpbmcgcmF0aGVyIHRoYW5cblx0XHRcdFx0Ly8gY29udGludWluZyB0byBzZXR0bGUgaXRzIG93biBydW4gcmVjb3JkIG91dCBvZiBiYW5kLlxuXHRcdFx0XHRjb25zdCBwcml2YXRlU2xvdCA9IGN0eC5fUFJJVkFURV8gYXMgeyBhYm9ydENvbnRyb2xsZXI/OiBBYm9ydENvbnRyb2xsZXIgfSB8IG51bGw7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHJpdmF0ZVNsb3Q/LmFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcblx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0LyogYmVzdC1lZmZvcnQg4oCUIGFib3J0IG5ldmVyIHRocm93cywgYnV0IGd1YXJkIGFueXdheSAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcnVuSWQgPSAoY3R4IGFzIHsgX3RyYWNlUnVuSWQ/OiBzdHJpbmcgfSkuX3RyYWNlUnVuSWQ7XG5cdFx0XHRcdHJlamVjdChuZXcgV29ya2VyVGltZW91dEVycm9yKHRpbWVvdXRNcywgcnVuSWQpKTtcblx0XHRcdH0sIHRpbWVvdXRNcyk7XG5cblx0XHRcdHRoaXMucnVuKGN0eCwgY29uZmlndXJhdGlvbilcblx0XHRcdFx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0XHRcdFx0aWYgKHNldHRsZWQpIHJldHVybjsgLy8gYWxyZWFkeSB0aW1lZCBvdXQg4oCUIGlnbm9yZSB0aGUgbGF0ZSByZXN1bHRcblx0XHRcdFx0XHRzZXR0bGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdFx0XHRcdGlmIChzZXR0bGVkKSByZXR1cm47IC8vIGFscmVhZHkgcmVqZWN0ZWQgd2l0aCBXb3JrZXJUaW1lb3V0RXJyb3Jcblx0XHRcdFx0XHRzZXR0bGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGUgZXhwb25lbnRpYWwgYmFja29mZiBkZWxheVxuXHQgKiBGb3JtdWxhOiBtaW4oYmFzZURlbGF5ICogMl5hdHRlbXB0LCAzMDAwMCkgKyBqaXR0ZXJcblx0ICovXG5cdHByb3RlY3RlZCBjYWxjdWxhdGVCYWNrb2ZmKGF0dGVtcHQ6IG51bWJlciwgYmFzZURlbGF5PzogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRjb25zdCBiYXNlID0gYmFzZURlbGF5ID8/IDEwMDA7XG5cdFx0Y29uc3QgbWF4RGVsYXkgPSAzMDAwMDsgLy8gMzAgc2Vjb25kcyBtYXhcblx0XHRjb25zdCBleHBvbmVudGlhbCA9IE1hdGgubWluKGJhc2UgKiAyICoqIGF0dGVtcHQsIG1heERlbGF5KTtcblx0XHRjb25zdCBqaXR0ZXIgPSBNYXRoLnJhbmRvbSgpICogZXhwb25lbnRpYWwgKiAwLjE7IC8vIDEwJSBqaXR0ZXJcblx0XHRyZXR1cm4gTWF0aC5mbG9vcihleHBvbmVudGlhbCArIGppdHRlcik7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV29ya2VyVHJpZ2dlcjtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blokjs/trigger-worker",
3
- "version": "0.7.0",
3
+ "version": "1.1.0",
4
4
  "files": ["dist"],
5
5
  "description": "Worker-based trigger for Blok workflows - supports background job processing with concurrency, retries, and scheduling",
6
6
  "type": "module",
@@ -15,9 +15,9 @@
15
15
  "author": "Deskree Technologies Inc.",
16
16
  "license": "Apache-2.0",
17
17
  "dependencies": {
18
- "@blokjs/helper": "^0.7.0",
19
- "@blokjs/runner": "^0.7.0",
20
- "@blokjs/shared": "^0.7.0",
18
+ "@blokjs/helper": "^1.1.0",
19
+ "@blokjs/runner": "^1.1.0",
20
+ "@blokjs/shared": "^1.1.0",
21
21
  "@opentelemetry/api": "^1.9.0",
22
22
  "uuid": "^11.1.0"
23
23
  },