@discordeno/gateway 19.0.0-next.7740cfd → 19.0.0-next.7fee7aa

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Shard.d.ts CHANGED
@@ -1,5 +1,8 @@
1
- import type { DiscordGatewayPayload } from '@discordeno/types';
2
- import type { BotStatusUpdate, ShardEvents, ShardGatewayConfig, ShardHeart, ShardSocketRequest } from './types.js';
1
+ import type { AtLeastOne, BigString, Camelize, DiscordGatewayPayload, DiscordMember, RequestGuildMembers } from '@discordeno/types';
2
+ import { Collection } from '@discordeno/utils';
3
+ import WebSocket from 'ws';
4
+ import type { RequestMemberRequest } from './manager.js';
5
+ import type { BotStatusUpdate, ShardEvents, ShardGatewayConfig, ShardHeart, ShardSocketRequest, StatusUpdate, UpdateVoiceState } from './types.js';
3
6
  import { ShardState } from './types.js';
4
7
  export declare class Shard {
5
8
  /** The id of the shard */
@@ -30,6 +33,18 @@ export declare class Shard {
30
33
  resolves: Map<"READY" | "RESUMED" | "INVALID_SESSION", (payload: DiscordGatewayPayload) => void>;
31
34
  /** Shard bucket. Only access this if you know what you are doing. Bucket for handling shard request rate limits. */
32
35
  bucket: import("@discordeno/utils").LeakyBucket;
36
+ /** This managers cache related settings. */
37
+ cache: {
38
+ requestMembers: {
39
+ /**
40
+ * Whether or not request member requests should be cached.
41
+ * @default false
42
+ */
43
+ enabled: boolean;
44
+ /** The pending requests. */
45
+ pending: Collection<string, RequestMemberRequest>;
46
+ };
47
+ };
33
48
  constructor(options: ShardCreateOptions);
34
49
  /** The gateway configuration which is used to connect to Discord. */
35
50
  get gatewayConfig(): ShardGatewayConfig;
@@ -53,9 +68,11 @@ export declare class Shard {
53
68
  /** Shutdown the this. Forcefully disconnect the shard from Discord. The shard may not attempt to reconnect with Discord. */
54
69
  shutdown(): Promise<void>;
55
70
  /** Handle a gateway connection close. */
56
- handleClose(close: CloseEvent): Promise<void>;
71
+ handleClose(close: WebSocket.CloseEvent): Promise<void>;
72
+ /** Handles a incoming gateway packet. */
73
+ handleDiscordPacket(packet: DiscordGatewayPayload): Promise<void>;
57
74
  /** Handle an incoming gateway message. */
58
- handleMessage(message: MessageEvent): Promise<void>;
75
+ handleMessage(message: WebSocket.MessageEvent): Promise<void>;
59
76
  /**
60
77
  * Override in order to make the shards presence.
61
78
  * async in case devs create the presence based on eg. database values.
@@ -68,6 +85,74 @@ export declare class Shard {
68
85
  startHeartbeating(interval: number): void;
69
86
  /** Stop the heartbeating process with discord. */
70
87
  stopHeartbeating(): void;
88
+ /**
89
+ * Connects the bot user to a voice or stage channel.
90
+ *
91
+ * This function sends the _Update Voice State_ gateway command over the gateway behind the scenes.
92
+ *
93
+ * @param guildId - The ID of the guild the voice channel to leave is in.
94
+ * @param channelId - The ID of the channel you want to join.
95
+ *
96
+ * @remarks
97
+ * Requires the `CONNECT` permission.
98
+ *
99
+ * Fires a _Voice State Update_ gateway event.
100
+ *
101
+ * @see {@link https://discord.com/developers/docs/topics/gateway#update-voice-state}
102
+ */
103
+ joinVoiceChannel(guildId: BigString, channelId: BigString, options?: AtLeastOne<Omit<UpdateVoiceState, 'guildId' | 'channelId'>>): Promise<void>;
104
+ /**
105
+ * Edits the bot status in all shards that this gateway manages.
106
+ *
107
+ * @param data The status data to set the bots status to.
108
+ * @returns Promise<void>
109
+ */
110
+ editBotStatus(data: StatusUpdate): Promise<void>;
111
+ /**
112
+ * Edits the bot's status on one shard.
113
+ *
114
+ * @param shardId The shard id to edit the status for.
115
+ * @param data The status data to set the bots status to.
116
+ * @returns Promise<void>
117
+ */
118
+ editShardStatus(data: StatusUpdate): Promise<void>;
119
+ /**
120
+ * Fetches the list of members for a guild over the gateway.
121
+ *
122
+ * @param guildId - The ID of the guild to get the list of members for.
123
+ * @param options - The parameters for the fetching of the members.
124
+ *
125
+ * @remarks
126
+ * If requesting the entire member list:
127
+ * - Requires the `GUILD_MEMBERS` intent.
128
+ *
129
+ * If requesting presences ({@link RequestGuildMembers.presences | presences} set to `true`):
130
+ * - Requires the `GUILD_PRESENCES` intent.
131
+ *
132
+ * If requesting a prefix ({@link RequestGuildMembers.query | query} non-`undefined`):
133
+ * - Returns a maximum of 100 members.
134
+ *
135
+ * If requesting a users by ID ({@link RequestGuildMembers.userIds | userIds} non-`undefined`):
136
+ * - Returns a maximum of 100 members.
137
+ *
138
+ * Fires a _Guild Members Chunk_ gateway event for every 1000 members fetched.
139
+ *
140
+ * @see {@link https://discord.com/developers/docs/topics/gateway#request-guild-members}
141
+ */
142
+ requestMembers(guildId: BigString, options?: Omit<RequestGuildMembers, 'guildId'>): Promise<Camelize<DiscordMember[]>>;
143
+ /**
144
+ * Leaves the voice channel the bot user is currently in.
145
+ *
146
+ * This function sends the _Update Voice State_ gateway command over the gateway behind the scenes.
147
+ *
148
+ * @param guildId - The ID of the guild the voice channel to leave is in.
149
+ *
150
+ * @remarks
151
+ * Fires a _Voice State Update_ gateway event.
152
+ *
153
+ * @see {@link https://discord.com/developers/docs/topics/gateway#update-voice-state}
154
+ */
155
+ leaveVoiceChannel(guildId: BigString): Promise<void>;
71
156
  }
72
157
  export interface ShardCreateOptions {
73
158
  /** The shard id */
@@ -1 +1 @@
1
- {"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/Shard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAA;AAI1F,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAClH,OAAO,EAAyB,UAAU,EAAE,MAAM,YAAY,CAAA;AAE9D,qBAAa,KAAK;IAChB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,qFAAqF;IACrF,UAAU,EAAE,kBAAkB,CAAA;IAC9B,kDAAkD;IAClD,KAAK,EAAE,UAAU,CAAA;IACjB,4HAA4H;IAC5H,2BAA2B,EAAE,MAAM,CAAM;IACzC,4CAA4C;IAC5C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAO;IAC5C,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAQ;IACtC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,0CAA0C;IAC1C,KAAK,aAAqB;IAC1B,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,CAAK;IAC7B,wCAAwC;IACxC,MAAM,EAAE,WAAW,CAAK;IACxB,qGAAqG;IACrG,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CAAK;IACnD,mFAAmF;IACnF,QAAQ,yDAA8D,qBAAqB,KAAK,IAAI,EAAG;IACvG,oHAAoH;IACpH,MAAM,0CAIJ;gBAEW,OAAO,EAAE,kBAAkB;IAWxC,qEAAqE;IACrE,IAAI,aAAa,IAAK,kBAAkB,CAEvC;IAED,6JAA6J;IAC7J,qBAAqB,IAAK,MAAM;IAO1B,YAAY,CAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD,yDAAyD;IACzD,KAAK,CAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM1C,kHAAkH;IAC5G,OAAO,IAAK,OAAO,CAAC,KAAK,CAAC;IA2ChC,4GAA4G;IACtG,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAmDhC,iEAAiE;IACjE,MAAM,IAAK,OAAO;IAIlB,sEAAsE;IAChE,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IAiD9B;;OAEG;IACG,IAAI,CAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa7E,4HAA4H;IACtH,QAAQ,IAAK,OAAO,CAAC,IAAI,CAAC;IAKhC,yCAAyC;IACnC,WAAW,CAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DpD,0CAA0C;IACpC,aAAa,CAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiJ1D;;;;OAIG;IACG,YAAY,IAAK,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAK3D,uNAAuN;IACjN,eAAe,IAAK,OAAO,CAAC,IAAI,CAAC;IAKvC,4EAA4E;IAC5E,iBAAiB,CAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IA6D1C,kDAAkD;IAClD,gBAAgB,IAAK,IAAI;CAO1B;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,6BAA6B;IAC7B,UAAU,EAAE,kBAAkB,CAAA;IAC9B,kDAAkD;IAClD,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/Shard.ts"],"names":[],"mappings":"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"}
package/dist/Shard.js CHANGED
@@ -1,2 +1,2 @@
1
- import{GatewayCloseEventCodes as e,GatewayOpcodes as t}from"@discordeno/types";import{camelize as s,createLeakyBucket as i,delay as n}from"@discordeno/utils";import{inflateSync as a}from"zlib";import{ShardSocketCloseCodes as r,ShardState as h}from"./types.js";export class Shard{maxRequestsPerRateLimitTick=120;previousSequenceNumber=null;rateLimitResetInterval=6e4;state=h.Offline;resumeGatewayUrl="";events={};offlineSendQueue=[];resolves=new Map;bucket=i({max:120,refillInterval:6e4,refillAmount:120});constructor(e){this.id=e.id,this.connection=e.connection,this.events=e.events,this.heart={acknowledged:!1,interval:45e3}}get gatewayConfig(){return this.connection}calculateSafeRequests(){let e=this.maxRequestsPerRateLimitTick-2*Math.ceil(this.rateLimitResetInterval/this.heart.interval);return e<0?0:e}async checkOffline(e){this.isOpen()||await new Promise(t=>{e?this.offlineSendQueue.unshift(t):this.offlineSendQueue.push(t)})}close(e,t){if(this.socket?.readyState===WebSocket.OPEN)return this.socket?.close(e,t)}async connect(){[h.Identifying,h.Resuming].includes(this.state)||(this.state=h.Connecting),this.events.connecting?.(this);let e=new URL(this.gatewayConfig.url);"wss://gateway.discord.gg"===e.origin&&(this.state===h.Resuming&&(e=new URL(this.resumeGatewayUrl)),e.searchParams.set("v",this.gatewayConfig.version.toString()),e.searchParams.set("encoding","json"));let t=new WebSocket(e.toString());return this.socket=t,t.onerror=e=>console.log({error:e}),t.onclose=async e=>await this.handleClose(e),t.onmessage=async e=>await this.handleMessage(e),await new Promise(e=>{t.onopen=()=>{[h.Identifying,h.Resuming].includes(this.state)||(this.state=h.Unidentified),this.events.connected?.(this),e(this)}})}async identify(){return this.isOpen()&&(console.log(`CLOSING EXISTING SHARD: #${this.id}`),this.close(r.ReIdentifying,"Re-identifying closure of old connection.")),this.state=h.Identifying,this.events.identifying?.(this),this.isOpen()||await this.connect(),await this.requestIdentify(),this.send({op:t.Identify,d:{token:`Bot ${this.gatewayConfig.token}`,compress:this.gatewayConfig.compress,properties:this.gatewayConfig.properties,intents:this.gatewayConfig.intents,shard:[this.id,this.gatewayConfig.totalShards],presence:await this.makePresence?.()}},!0),await new Promise(e=>{this.resolves.set("READY",()=>{this.events.identified?.(this),e()}),this.resolves.set("INVALID_SESSION",()=>{this.resolves.delete("READY"),e()})})}isOpen(){return this.socket?.readyState===WebSocket.OPEN}async resume(){return(this.isOpen()&&this.close(r.ResumeClosingOldConnection,"Reconnecting the shard, closing old connection."),this.sessionId)?(this.state=h.Resuming,await this.connect(),this.send({op:t.Resume,d:{token:`Bot ${this.gatewayConfig.token}`,session_id:this.sessionId,seq:this.previousSequenceNumber??0}},!0),await new Promise(e=>{this.resolves.set("RESUMED",()=>e()),this.resolves.set("INVALID_SESSION",()=>{this.resolves.delete("RESUMED"),e()})})):await this.identify()}async send(e,t=!1){await this.checkOffline(t),await this.bucket.acquire(1,t),await this.checkOffline(t),this.socket?.send(JSON.stringify(e))}async shutdown(){this.close(r.Shutdown,"Shard shutting down."),this.state=h.Offline}async handleClose(t){switch(this.stopHeartbeating(),t.code){case r.TestingFinished:this.state=h.Offline,this.events.disconnected?.(this);return;case r.Shutdown:case r.ReIdentifying:case r.Resharded:case r.ResumeClosingOldConnection:case r.ZombiedConnection:this.state=h.Disconnected,this.events.disconnected?.(this);return;case e.UnknownOpcode:case e.NotAuthenticated:case e.InvalidSeq:case e.RateLimited:case e.SessionTimedOut:return this.state=h.Identifying,this.events.disconnected?.(this),await this.identify();case e.AuthenticationFailed:case e.InvalidShard:case e.ShardingRequired:case e.InvalidApiVersion:case e.InvalidIntents:case e.DisallowedIntents:throw this.state=h.Offline,this.events.disconnected?.(this),Error(t.reason||"Discord gave no reason! GG! You broke Discord!");case e.UnknownError:case e.DecodeError:case e.AlreadyAuthenticated:default:return this.state=h.Resuming,this.events.disconnected?.(this),await this.resume()}}async handleMessage(e){let r=e.data;if(this.gatewayConfig.compress&&r instanceof Blob&&(r=a(await r.arrayBuffer()).toString()),"string"!=typeof r)return;let o=JSON.parse(r);switch(this.heart.lastAck=Date.now(),this.heart.lastBeat&&!this.heart.acknowledged&&(this.heart.rtt=this.heart.lastAck-this.heart.lastBeat),this.heart.acknowledged=!0,o.op){case t.Heartbeat:if(!this.isOpen())return;this.heart.lastBeat=Date.now(),this.socket?.send(JSON.stringify({op:t.Heartbeat,d:this.previousSequenceNumber})),this.events.heartbeat?.(this);break;case t.Hello:{let c=o.d.heartbeat_interval;this.startHeartbeating(c),this.state!==h.Resuming&&(this.bucket=i({max:this.calculateSafeRequests(),refillInterval:6e4,refillAmount:this.calculateSafeRequests(),waiting:this.bucket.waiting})),this.events.hello?.(this);break}case t.HeartbeatACK:this.events.heartbeatAck?.(this);break;case t.Reconnect:this.events.requestedReconnect?.(this),await this.resume();break;case t.InvalidSession:{let d=o.d;if(this.events.invalidSession?.(this,d),await n(Math.floor((4*Math.random()+1)*1e3)),this.resolves.get("INVALID_SESSION")?.(o),this.resolves.delete("INVALID_SESSION"),!d){await this.identify();break}await this.resume()}}if("RESUMED"===o.t)this.state=h.Connected,this.events.resumed?.(this),this.offlineSendQueue.map(e=>e()),this.resolves.get("RESUMED")?.(o),this.resolves.delete("RESUMED");else if("READY"===o.t){let l=o.d;this.resumeGatewayUrl=l.resume_gateway_url,this.sessionId=l.session_id,this.state=h.Connected,this.offlineSendQueue.map(e=>e()),this.resolves.get("READY")?.(o),this.resolves.delete("READY")}null!==o.s&&(this.previousSequenceNumber=o.s),this.events.message?.(this,s(o))}async makePresence(){}async requestIdentify(){}startHeartbeating(e){this.heart.interval=e,[h.Disconnected,h.Offline].includes(this.state)&&(this.state=h.Unidentified);let s=Math.ceil(this.heart.interval*(Math.random()||.5));this.heart.timeoutId=setTimeout(()=>{this.socket?.send(JSON.stringify({op:t.Heartbeat,d:this.previousSequenceNumber})),this.heart.lastBeat=Date.now(),this.heart.acknowledged=!1,this.heart.intervalId=setInterval(async()=>{if(!this.heart.acknowledged)return this.close(r.ZombiedConnection,"Zombied connection, did not receive an heartbeat ACK in time."),await this.identify();this.heart.acknowledged=!1,this.socket?.send(JSON.stringify({op:t.Heartbeat,d:this.previousSequenceNumber})),this.heart.lastBeat=Date.now(),this.events.heartbeat?.(this)},this.heart.interval)},s)}stopHeartbeating(){clearInterval(this.heart.intervalId),clearTimeout(this.heart.timeoutId)}}export default Shard;
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpc2NvcmRHYXRld2F5UGF5bG9hZCwgRGlzY29yZEhlbGxvLCBEaXNjb3JkUmVhZHkgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgY3JlYXRlTGVha3lCdWNrZXQsIGRlbGF5IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBpbmZsYXRlU3luYyB9IGZyb20gJ3psaWInXG5pbXBvcnQgdHlwZSB7IEJvdFN0YXR1c1VwZGF0ZSwgU2hhcmRFdmVudHMsIFNoYXJkR2F0ZXdheUNvbmZpZywgU2hhcmRIZWFydCwgU2hhcmRTb2NrZXRSZXF1ZXN0IH0gZnJvbSAnLi90eXBlcy5qcydcbmltcG9ydCB7IFNoYXJkU29ja2V0Q2xvc2VDb2RlcywgU2hhcmRTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjbGFzcyBTaGFyZCB7XG4gIC8qKiBUaGUgaWQgb2YgdGhlIHNoYXJkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6IEFycmF5PChfPzogdW5rbm93bikgPT4gdm9pZD4gPSBbXVxuICAvKiogUmVzb2x2ZSBpbnRlcm5hbCB3YWl0aW5nIHN0YXRlcy4gTWFwcGVkIGJ5IFNlbGVjdGVkRXZlbnRzID0+IFJlc29sdmVGdW5jdGlvbiAqL1xuICByZXNvbHZlcyA9IG5ldyBNYXA8J1JFQURZJyB8ICdSRVNVTUVEJyB8ICdJTlZBTElEX1NFU1NJT04nLCAocGF5bG9hZDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkPigpXG4gIC8qKiBTaGFyZCBidWNrZXQuIE9ubHkgYWNjZXNzIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBCdWNrZXQgZm9yIGhhbmRsaW5nIHNoYXJkIHJlcXVlc3QgcmF0ZSBsaW1pdHMuICovXG4gIGJ1Y2tldCA9IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICBtYXg6IDEyMCxcbiAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgcmVmaWxsQW1vdW50OiAxMjBcbiAgfSlcblxuICBjb25zdHJ1Y3RvciAob3B0aW9uczogU2hhcmRDcmVhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWRcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBvcHRpb25zLmNvbm5lY3Rpb25cbiAgICB0aGlzLmV2ZW50cyA9IG9wdGlvbnMuZXZlbnRzXG5cbiAgICB0aGlzLmhlYXJ0ID0ge1xuICAgICAgYWNrbm93bGVkZ2VkOiBmYWxzZSxcbiAgICAgIGludGVydmFsOiA0NTAwMFxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgZ2F0ZXdheSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkLiAqL1xuICBnZXQgZ2F0ZXdheUNvbmZpZyAoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogQ2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgcmVxdWVzdHMgd2hpY2ggY2FuIHNhZmVseSBiZSBtYWRlIHBlciByYXRlIGxpbWl0IGludGVydmFsLCBiZWZvcmUgdGhlIGdhdGV3YXkgZ2V0cyBkaXNjb25uZWN0ZWQgZHVlIHRvIGFuIGV4Y2VlZGVkIHJhdGUgbGltaXQuICovXG4gIGNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyAoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lIChoaWdoUHJpb3JpdHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyBnZXQgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuXG4gICAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICAgIGVsc2UgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLnB1c2gocmVzb2x2ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBzb2NrZXQgY29ubmVjdGlvbiB0byBkaXNjb3JkIGlmIHByZXNlbnQuICovXG4gIGNsb3NlIChjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikgcmV0dXJuXG5cbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LmNsb3NlKGNvZGUsIHJlYXNvbilcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0ICgpOiBQcm9taXNlPFNoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgbGV0IHVybCA9IG5ldyBVUkwodGhpcy5nYXRld2F5Q29uZmlnLnVybClcbiAgICAvLyBJZiBub3QgY29ubmVjdGluZyB0byBhIHByb3h5IGJ1dCBkaXJlY3RseSB0byBkaXNjb3JkIG5lZWQgdG8gaGFuZGxlIHJlc3VtaW5nXG4gICAgaWYgKHVybC5vcmlnaW4gPT09ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICB1cmwgPSBuZXcgVVJMKHRoaXMucmVzdW1lR2F0ZXdheVVybClcbiAgICAgIH1cbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2JywgdGhpcy5nYXRld2F5Q29uZmlnLnZlcnNpb24udG9TdHJpbmcoKSlcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybC50b1N0cmluZygpKVxuXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcblxuICAgIC8vIFRPRE86IHByb3BlciBldmVudCBoYW5kbGluZ1xuICAgIHNvY2tldC5vbmVycm9yID0gKGV2ZW50KSA9PiBjb25zb2xlLmxvZyh7IGVycm9yOiBldmVudCB9KVxuXG4gICAgc29ja2V0Lm9uY2xvc2UgPSBhc3luYyAoZXZlbnQpID0+IGF3YWl0IHRoaXMuaGFuZGxlQ2xvc2UoZXZlbnQpXG5cbiAgICBzb2NrZXQub25tZXNzYWdlID0gYXN5bmMgKG1lc3NhZ2UpID0+IGF3YWl0IHRoaXMuaGFuZGxlTWVzc2FnZShtZXNzYWdlKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUsXG4gICAgICAgIC8vIGlmIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QgZG9lcyBub3QgY29tZSBmcm9tIGFuIGlkZW50aWZ5IG9yIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuVW5pZGVudGlmaWVkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudHMuY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXNvbHZlKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBJZGVudGlmeSB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuIElmIG5vdCBjb25uZWN0ZWQsIHRoaXMgd2lsbCBhbHNvIGNvbm5lY3QgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBpZGVudGlmeSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBuZXcgaWRlbnRpZnkgaGFzIGJlZW4gcmVxdWVzdGVkIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGFscmVhZHkgYSBjb25uZWN0aW9uIG9wZW4uXG4gICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIG9sZCBjb25uZWN0aW9uIGFuZCBoZWFydGJlYXRpbmcgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgY29uc29sZS5sb2coYENMT1NJTkcgRVhJU1RJTkcgU0hBUkQ6ICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgLy8gV2FpdCB1bnRpbCBhbiBpZGVudGlmeSBpcyBmcmVlIGZvciB0aGlzIHRoaXMuXG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0SWRlbnRpZnkoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZT8uKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRUFEWScsICgpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMuaWRlbnRpZmllZD8uKHRoaXMpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkLlxuICAgICAgLy8gVGhpcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgdGhvdWdoIGFuZCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IGlkZW50aWZ5IGFjdGlvbi5cbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gRGlzY29yZCBpcyBjdXJyZW50bHkgb3Blbi4gKi9cbiAgaXNPcGVuICgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOXG4gIH1cblxuICAvKiogQXR0ZW1wdCB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNoYXJkcyBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIHJlc3VtZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgUkVTVU1JTkdcIiwgeyBzaGFyZElkIH0pO1xuICAgIC8vIEl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0byByZXN1bWUgdGhlIFNoYXJkcyBzZXNzaW9uLlxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2hhcmQgaXMgc3RpbGwgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZm9yY2VmdWxseSBjbG9zZSBpdC5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24sICdSZWNvbm5lY3RpbmcgdGhlIHNoYXJkLCBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgLy8gU2hhcmQgaGFzIG5ldmVyIGlkZW50aWZpZWQsIHNvIHdlIGNhbm5vdCByZXN1bWUuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JZCkge1xuICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcbiAgICAgIC8vICAgXCJHVyBERUJVR1wiLFxuICAgICAgLy8gICBgW0Vycm9yXSBUcnlpbmcgdG8gcmVzdW1lIGEgc2hhcmQgKGlkOiAke3NoYXJkSWR9KSB0aGF0IHdhcyBub3QgZmlyc3QgaWRlbnRpZmllZC5gLFxuICAgICAgLy8gKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuXG4gICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYFtTSEFSRF0gVHJ5aW5nIHRvIHJlc3VtZSBhIHNoYXJkIChpZDogJHt0aGlzLmlkfSkgd2hpY2ggd2FzIG5ldmVyIGlkZW50aWZpZWRgKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5SZXN1bWluZ1xuXG4gICAgLy8gQmVmb3JlIHdlIGNhbiByZXN1bWUsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS5cbiAgICBhd2FpdCB0aGlzLmNvbm5lY3QoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVzdW1lLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgdG9rZW46IGBCb3QgJHt0aGlzLmdhdGV3YXlDb25maWcudG9rZW59YCxcbiAgICAgICAgICBzZXNzaW9uX2lkOiB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICBzZXE6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlciA/PyAwXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVTVU1FRCcsICgpID0+IHJlc29sdmUoKSlcbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkXG4gICAgICAvLyBOb3QgZXJyb3JpbmcgaGVyZSBzaW5jZSBpdCBpcyBlYXN5IHRoYXQgdGhpcyBoYXBwZW5zLCBhbHNvIGl0IHdvdWxkIGJlIG5vdCBjYXRjaGFibGVcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogU2VuZCBhIG1lc3NhZ2UgdG8gRGlzY29yZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaFByaW9yaXR5PWZhbHNlXSAtIFdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW5kIGFzYXAuXG4gICAqL1xuICBhc3luYyBzZW5kIChtZXNzYWdlOiBTaGFyZFNvY2tldFJlcXVlc3QsIGhpZ2hQcmlvcml0eSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmVmb3JlIGFjcXVpcmluZyBhIHRva2VuIGZyb20gdGhlIGJ1Y2tldCwgY2hlY2sgd2hldGhlciB0aGUgc2hhcmQgaXMgY3VycmVudGx5IG9mZmxpbmUgb3Igbm90LlxuICAgIC8vIEVsc2UgYnVja2V0IGFuZCB0b2tlbiB3YWl0IHRpbWUganVzdCBnZXQgd2FzdGVkLlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIGF3YWl0IHRoaXMuYnVja2V0LmFjcXVpcmUoMSwgaGlnaFByaW9yaXR5KVxuXG4gICAgLy8gSXQncyBwb3NzaWJsZSwgdGhhdCB0aGUgc2hhcmQgd2VudCBvZmZsaW5lIGFmdGVyIGEgdG9rZW4gaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUgYnVja2V0LlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIHRoaXMuc29ja2V0Py5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqIFNodXRkb3duIHRoZSB0aGlzLiBGb3JjZWZ1bGx5IGRpc2Nvbm5lY3QgdGhlIHNoYXJkIGZyb20gRGlzY29yZC4gVGhlIHNoYXJkIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgd2l0aCBEaXNjb3JkLiAqL1xuICBhc3luYyBzaHV0ZG93biAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd24sICdTaGFyZCBzaHV0dGluZyBkb3duLicpXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZS4gKi9cbiAgYXN5bmMgaGFuZGxlQ2xvc2UgKGNsb3NlOiBDbG9zZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgQ0xPU0VEXCIsIHsgc2hhcmRJZCwgcGF5bG9hZDogZXZlbnQgfSk7XG5cbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgc3dpdGNoIChjbG9zZS5jb2RlKSB7XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5UZXN0aW5nRmluaXNoZWQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gT24gdGhlc2UgY29kZXMgYSBtYW51YWwgc3RhcnQgd2lsbCBiZSBkb25lLlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZUlkZW50aWZ5aW5nOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbjoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICAvLyBnYXRld2F5LmRlYnVnKFwiR1cgQ0xPU0VEX1JFQ09OTkVDVFwiLCB7IHNoYXJkSWQsIHBheWxvYWQ6IGV2ZW50IH0pO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgd2hpY2ggcmVxdWlyZSBhIG5ldyBpZGVudGlmeS5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duT3Bjb2RlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vdEF1dGhlbnRpY2F0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuSW52YWxpZFNlcTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5SYXRlTGltaXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TZXNzaW9uVGltZWRPdXQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICB9XG4gICAgICAvLyBXaGVuIHRoZXNlIGNvZGVzIGFyZSByZWNlaXZlZCBzb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcuXG4gICAgICAvLyBPbiB0aG9zZSB3ZSBjYW5ub3Qgc3RhcnQgYSByZWNvbm5lY3QgYXR0ZW1wdC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BdXRoZW50aWNhdGlvbkZhaWxlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2hhcmQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2hhcmRpbmdSZXF1aXJlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkQXBpVmVyc2lvbjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkSW50ZW50czpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EaXNhbGxvd2VkSW50ZW50czoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNsb3NlLnJlYXNvbiB8fCAnRGlzY29yZCBnYXZlIG5vIHJlYXNvbiEgR0chIFlvdSBicm9rZSBEaXNjb3JkIScpXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIG9uIHdoaWNoIGEgcmVzdW1lIGlzIGFsbG93ZWQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bkVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRlY29kZUVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkFscmVhZHlBdXRoZW50aWNhdGVkOlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5SZXN1bWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc3VtZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UgKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwcmVQcm9jZXNzTWVzc2FnZSA9IG1lc3NhZ2UuZGF0YVxuXG4gICAgLy8gSWYgbWVzc2FnZSBjb21wcmVzc2lvbiBpcyBlbmFibGVkLFxuICAgIC8vIERpc2NvcmQgbWlnaHQgc2VuZCB6bGliIGNvbXByZXNzZWQgcGF5bG9hZHMuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcyAmJiBwcmVQcm9jZXNzTWVzc2FnZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgIHByZVByb2Nlc3NNZXNzYWdlID0gaW5mbGF0ZVN5bmMoYXdhaXQgcHJlUHJvY2Vzc01lc3NhZ2UuYXJyYXlCdWZmZXIoKSkudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIC8vIFNhZmVndWFyZCBpbmNhc2UgZGVjb21wcmVzc2lvbiBmYWlsZWQgdG8gbWFrZSBhIHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByZVByb2Nlc3NNZXNzYWdlICE9PSAnc3RyaW5nJykgcmV0dXJuXG5cbiAgICBjb25zdCBtZXNzYWdlRGF0YSA9IEpTT04ucGFyc2UocHJlUHJvY2Vzc01lc3NhZ2UpIGFzIERpc2NvcmRHYXRld2F5UGF5bG9hZFxuXG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKVxuICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0aW5nIHRoZSByb3VuZCB0cmlwIHRpbWUgZm9yIHVzZXJzIHdobyBuZWVkIGl0LlxuICAgIGlmICh0aGlzLmhlYXJ0Lmxhc3RCZWF0ICYmICF0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCkge1xuICAgICAgdGhpcy5oZWFydC5ydHQgPSB0aGlzLmhlYXJ0Lmxhc3RBY2sgLSB0aGlzLmhlYXJ0Lmxhc3RCZWF0XG4gICAgfVxuICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gdHJ1ZVxuICAgIC8vIEVkZ2UgY2FzZSBlbmQhXG5cbiAgICBzd2l0Y2ggKG1lc3NhZ2VEYXRhLm9wKSB7XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdDoge1xuICAgICAgICAvLyBUT0RPOiBjYW4gdGhpcyBhY3R1YWxseSBoYXBwZW5cbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICAvLyBEaXNjb3JkIHJhbmRvbWx5IHNlbmRzIHRoaXMgcmVxdWlyaW5nIGFuIGltbWVkaWF0ZSBoZWFydGJlYXQgYmFjay5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWxsbzoge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IChtZXNzYWdlRGF0YS5kIGFzIERpc2NvcmRIZWxsbykuaGVhcnRiZWF0X2ludGVydmFsXG5cbiAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbClcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIC8vIEhFTExPIGhhcyBiZWVuIHNlbmQgb24gYSBub24gcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBzZXNzaW9uLFxuICAgICAgICAgIC8vIHRoZXJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpbnRlcnZhbCBoYXMgYmVlbiByZXNldCB0b28uXG4gICAgICAgICAgdGhpcy5idWNrZXQgPSBjcmVhdGVMZWFreUJ1Y2tldCh7XG4gICAgICAgICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICAgICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICAgICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICAgICAgICAvLyBXYWl0aW5nIGFjcXVpcmVzIHNob3VsZCBub3QgYmUgbG9zdCBvbiBhIHJlLWlkZW50aWZ5LlxuICAgICAgICAgICAgd2FpdGluZzogdGhpcy5idWNrZXQud2FpdGluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWxsbz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0QUNLOiB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdEFjaz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuUmVjb25uZWN0OiB7XG4gICAgICAgIC8vICAgZ2F0ZXdheS5kZWJ1ZyhcIkdXIFJFQ09OTkVDVFwiLCB7IHNoYXJkSWQgfSk7XG5cbiAgICAgICAgdGhpcy5ldmVudHMucmVxdWVzdGVkUmVjb25uZWN0Py4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSW52YWxpZFNlc3Npb246IHtcbiAgICAgICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgSU5WQUxJRF9TRVNTSU9OXCIsIHsgc2hhcmRJZCwgcGF5bG9hZDogbWVzc2FnZURhdGEgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VtYWJsZSA9IG1lc3NhZ2VEYXRhLmQgYXMgYm9vbGVhblxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmludmFsaWRTZXNzaW9uPy4odGhpcywgcmVzdW1hYmxlKVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiAxIGFuZCA1XG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVzdW1pbmdcbiAgICAgICAgYXdhaXQgZGVsYXkoTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDQgKyAxKSAqIDEwMDApKVxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdJTlZBTElEX1NFU1NJT04nKT8uKG1lc3NhZ2VEYXRhKVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnSU5WQUxJRF9TRVNTSU9OJylcblxuICAgICAgICAvLyBXaGVuIHJlc3VtYWJsZSBpcyBmYWxzZSB3ZSBuZWVkIHRvIHJlLWlkZW50aWZ5XG4gICAgICAgIGlmICghcmVzdW1hYmxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNlc3Npb24gaXMgaW52YWxpZCBidXQgYXBwYXJlbnRseSBpdCBpcyByZXN1bWFibGVcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1lc3NhZ2VEYXRhLnQgPT09ICdSRVNVTUVEJykge1xuICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIFJFU1VNRURcIiwgeyBzaGFyZElkIH0pO1xuXG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcbiAgICAgIHRoaXMuZXZlbnRzLnJlc3VtZWQ/Lih0aGlzKVxuXG4gICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLm1hcCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKVxuXG4gICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVTVU1FRCcpPy4obWVzc2FnZURhdGEpXG4gICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpXG4gICAgfSBlbHNlIGlmIChtZXNzYWdlRGF0YS50ID09PSAnUkVBRFknKSB7XG4gICAgICAvLyBJbXBvcnRhbnQgZm9yIGZ1dHVyZSByZXN1bWVzLlxuXG4gICAgICBjb25zdCBwYXlsb2FkID0gbWVzc2FnZURhdGEuZCBhcyBEaXNjb3JkUmVhZHlcblxuICAgICAgdGhpcy5yZXN1bWVHYXRld2F5VXJsID0gcGF5bG9hZC5yZXN1bWVfZ2F0ZXdheV91cmxcblxuICAgICAgdGhpcy5zZXNzaW9uSWQgPSBwYXlsb2FkLnNlc3Npb25faWRcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuXG4gICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgLy8gSW1wb3J0YW50IHdoZW4gdGhpcyBpcyBhIHJlLWlkZW50aWZ5XG4gICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubWFwKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRUFEWScpPy4obWVzc2FnZURhdGEpXG4gICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVBRFknKVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIGl0IGlzIHByZXNlbnRcbiAgICAvLyBgc2AgY2FuIGJlIGVpdGhlciBgbnVsbGAgb3IgYSBgbnVtYmVyYC5cbiAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHVwZGF0ZSBtaXNzZXMgd2hlbiBgc2AgaXMgYDBgIHdlIGNoZWNrIGFnYWluc3QgbnVsbC5cbiAgICBpZiAobWVzc2FnZURhdGEucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID0gbWVzc2FnZURhdGEuc1xuICAgIH1cblxuICAgIC8vIFRoZSBuZWNlc3NhcnkgaGFuZGxpbmcgcmVxdWlyZWQgZm9yIHRoZSBTaGFyZHMgY29ubmVjdGlvbiBoYXMgYmVlbiBmaW5pc2hlZC5cbiAgICAvLyBOb3cgdGhlIGV2ZW50IGNhbiBiZSBzYWZlbHkgZm9yd2FyZGVkLlxuICAgIHRoaXMuZXZlbnRzLm1lc3NhZ2U/Lih0aGlzLCBjYW1lbGl6ZShtZXNzYWdlRGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc2hhcmRzIHByZXNlbmNlLlxuICAgKiBhc3luYyBpbiBjYXNlIGRldnMgY3JlYXRlIHRoZSBwcmVzZW5jZSBiYXNlZCBvbiBlZy4gZGF0YWJhc2UgdmFsdWVzLlxuICAgKiBQYXNzaW5nIHRoZSBzaGFyZCdzIGlkIHRoZXJlIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgZGV2IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLlxuICAgKi9cbiAgYXN5bmMgbWFrZVByZXNlbmNlICgpOiBQcm9taXNlPEJvdFN0YXR1c1VwZGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLXJldHVyblxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqIFRoaXMgZnVuY3Rpb24gY29tbXVuaWNhdGVzIHdpdGggdGhlIG1hbmFnZW1lbnQgcHJvY2VzcywgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIGl0cyBmcmVlIHRvIGlkZW50aWZ5LiBXaGVuIHRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgc2hhcmQgaXMgYWxsb3dlZCB0byBzZW5kIGFuIGlkZW50aWZ5IHBheWxvYWQgdG8gZGlzY29yZC4gKi9cbiAgYXN5bmMgcmVxdWVzdElkZW50aWZ5ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUT0RPOiBob3cgdG8gaGFuZGxlIHRoaXNcbiAgICAvLyByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXF1ZXN0SWRlbnRpZnkodGhpcy5pZClcbiAgfVxuXG4gIC8qKiBTdGFydCBzZW5kaW5nIGhlYXJ0YmVhdCBwYXlsb2FkcyB0byBEaXNjb3JkIGluIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4gKi9cbiAgc3RhcnRIZWFydGJlYXRpbmcgKGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyAgIGdhdGV3YXkuZGVidWcoXCJHVyBIRUFSVEJFQVRJTkdfU1RBUlRFRFwiLCB7IHNoYXJkSWQsIGludGVydmFsIH0pO1xuXG4gICAgdGhpcy5oZWFydC5pbnRlcnZhbCA9IGludGVydmFsXG5cbiAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQncyBzdGF0ZSB0byBgVW5pZGVudGlmaWVkYFxuICAgIC8vIGlmIGhlYXJ0YmVhdGluZyBoYXMgbm90IGJlZW4gc3RhcnRlZCBkdWUgdG8gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoW1NoYXJkU3RhdGUuRGlzY29ubmVjdGVkLCBTaGFyZFN0YXRlLk9mZmxpbmVdLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICB9XG5cbiAgICAvLyBUaGUgZmlyc3QgaGVhcnRiZWF0IG5lZWRzIHRvIGJlIHNlbmQgd2l0aCBhIHJhbmRvbSBkZWxheSBiZXR3ZWVuIGAwYCBhbmQgYGludGVydmFsYFxuICAgIC8vIFVzaW5nIGEgYHNldFRpbWVvdXQoXywgaml0dGVyKWAgaGVyZSB0byBhY2NvbXBsaXNoIHRoYXQuXG4gICAgLy8gYE1hdGgucmFuZG9tKClgIGNhbiBiZSBgMGAgc28gd2UgdXNlIGAwLjVgIGlmIHRoaXMgaGFwcGVuc1xuICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nXG4gICAgY29uc3Qgaml0dGVyID0gTWF0aC5jZWlsKHRoaXMuaGVhcnQuaW50ZXJ2YWwgKiAoTWF0aC5yYW5kb20oKSB8fCAwLjUpKVxuICAgIHRoaXMuaGVhcnQudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlclxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAvLyBBZnRlciB0aGUgcmFuZG9tIGhlYXJ0YmVhdCBqaXR0ZXIgd2UgY2FuIHN0YXJ0IGEgbm9ybWFsIGludGVydmFsLlxuICAgICAgdGhpcy5oZWFydC5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBnYXRld2F5LmRlYnVnKFwiR1cgREVCVUdcIiwgYFJ1bm5pbmcgc2V0SW50ZXJ2YWwgaW4gaGVhcnRiZWF0IGZpbGUuIFNoYXJkOiAke3NoYXJkSWR9YCk7XG5cbiAgICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIEhFQVJUQkVBVElOR1wiLCB7IHNoYXJkSWQsIHNoYXJkOiBjdXJyZW50U2hhcmQgfSk7XG5cbiAgICAgICAgLy8gVGhlIFNoYXJkIGRpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgZnJvbSBEaXNjb3JkIGluIHRpbWUsXG4gICAgICAgIC8vIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBjb25uZWN0aW9uIGhhcyBmYWlsZWQgb3IgZ290IFwiem9tYmllZFwiLlxuICAgICAgICAvLyBUaGUgU2hhcmQgbmVlZHMgdG8gc3RhcnQgYSByZS1pZGVudGlmeSBhY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nLWV4YW1wbGUtZ2F0ZXdheS1oZWFydGJlYXQtYWNrXG4gICAgICAgIGlmICghdGhpcy5oZWFydC5hY2tub3dsZWRnZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbiwgJ1pvbWJpZWQgY29ubmVjdGlvbiwgZGlkIG5vdCByZWNlaXZlIGFuIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS4nKVxuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuICAgICAgfSwgdGhpcy5oZWFydC5pbnRlcnZhbClcbiAgICB9LCBqaXR0ZXIpXG4gIH1cblxuICAvKiogU3RvcCB0aGUgaGVhcnRiZWF0aW5nIHByb2Nlc3Mgd2l0aCBkaXNjb3JkLiAqL1xuICBzdG9wSGVhcnRiZWF0aW5nICgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciB0aGUgcmVndWxhciBoZWFydGJlYXQgaW50ZXJ2YWwuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0LmludGVydmFsSWQpXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBTaGFyZCBnb3QgY2xvc2VkIGJlZm9yZSB0aGUgZmlyc3Qgaml0dGVyZWQgaGVhcnRiZWF0LlxuICAgIC8vIFRvIGdvIHNhZmUgd2Ugc2hvdWxkIGNsZWFyIHRoZSByZWxhdGVkIHRpbWVvdXQgdG9vLlxuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0LnRpbWVvdXRJZClcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkQ3JlYXRlT3B0aW9ucyB7XG4gIC8qKiBUaGUgc2hhcmQgaWQgKi9cbiAgaWQ6IG51bWJlclxuICAvKiogVGhlIGNvbm5lY3Rpb24gZGV0YWlscyAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoZSBldmVudCBoYW5kbGVycyBmb3IgZXZlbnRzIG9uIHRoZSBzaGFyZC4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50c1xufVxuXG5leHBvcnQgZGVmYXVsdCBTaGFyZFxuIl0sIm5hbWVzIjpbIkdhdGV3YXlDbG9zZUV2ZW50Q29kZXMiLCJHYXRld2F5T3Bjb2RlcyIsImNhbWVsaXplIiwiY3JlYXRlTGVha3lCdWNrZXQiLCJkZWxheSIsImluZmxhdGVTeW5jIiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2hhcmRTdGF0ZSIsIlNoYXJkIiwibWF4UmVxdWVzdHNQZXJSYXRlTGltaXRUaWNrIiwicHJldmlvdXNTZXF1ZW5jZU51bWJlciIsInJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwiLCJzdGF0ZSIsIk9mZmxpbmUiLCJyZXN1bWVHYXRld2F5VXJsIiwiZXZlbnRzIiwib2ZmbGluZVNlbmRRdWV1ZSIsInJlc29sdmVzIiwiTWFwIiwiYnVja2V0IiwibWF4IiwicmVmaWxsSW50ZXJ2YWwiLCJyZWZpbGxBbW91bnQiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJpZCIsImNvbm5lY3Rpb24iLCJoZWFydCIsImFja25vd2xlZGdlZCIsImludGVydmFsIiwiZ2F0ZXdheUNvbmZpZyIsImNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyIsInNhZmVSZXF1ZXN0cyIsIk1hdGgiLCJjZWlsIiwiY2hlY2tPZmZsaW5lIiwiaGlnaFByaW9yaXR5IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bnNoaWZ0IiwicHVzaCIsImNsb3NlIiwiY29kZSIsInJlYXNvbiIsInNvY2tldCIsInJlYWR5U3RhdGUiLCJXZWJTb2NrZXQiLCJPUEVOIiwiY29ubmVjdCIsIklkZW50aWZ5aW5nIiwiUmVzdW1pbmciLCJpbmNsdWRlcyIsIkNvbm5lY3RpbmciLCJjb25uZWN0aW5nIiwidXJsIiwiVVJMIiwib3JpZ2luIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidmVyc2lvbiIsInRvU3RyaW5nIiwib25lcnJvciIsImV2ZW50IiwiY29uc29sZSIsImxvZyIsImVycm9yIiwib25jbG9zZSIsImhhbmRsZUNsb3NlIiwib25tZXNzYWdlIiwibWVzc2FnZSIsImhhbmRsZU1lc3NhZ2UiLCJvbm9wZW4iLCJVbmlkZW50aWZpZWQiLCJjb25uZWN0ZWQiLCJpZGVudGlmeSIsIlJlSWRlbnRpZnlpbmciLCJpZGVudGlmeWluZyIsInJlcXVlc3RJZGVudGlmeSIsInNlbmQiLCJvcCIsIklkZW50aWZ5IiwiZCIsInRva2VuIiwiY29tcHJlc3MiLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsIm1ha2VQcmVzZW5jZSIsImlkZW50aWZpZWQiLCJkZWxldGUiLCJyZXN1bWUiLCJSZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiIsInNlc3Npb25JZCIsIlJlc3VtZSIsInNlc3Npb25faWQiLCJzZXEiLCJhY3F1aXJlIiwiSlNPTiIsInN0cmluZ2lmeSIsInNodXRkb3duIiwiU2h1dGRvd24iLCJzdG9wSGVhcnRiZWF0aW5nIiwiVGVzdGluZ0ZpbmlzaGVkIiwiZGlzY29ubmVjdGVkIiwiUmVzaGFyZGVkIiwiWm9tYmllZENvbm5lY3Rpb24iLCJEaXNjb25uZWN0ZWQiLCJVbmtub3duT3Bjb2RlIiwiTm90QXV0aGVudGljYXRlZCIsIkludmFsaWRTZXEiLCJSYXRlTGltaXRlZCIsIlNlc3Npb25UaW1lZE91dCIsIkF1dGhlbnRpY2F0aW9uRmFpbGVkIiwiSW52YWxpZFNoYXJkIiwiU2hhcmRpbmdSZXF1aXJlZCIsIkludmFsaWRBcGlWZXJzaW9uIiwiSW52YWxpZEludGVudHMiLCJEaXNhbGxvd2VkSW50ZW50cyIsIkVycm9yIiwiVW5rbm93bkVycm9yIiwiRGVjb2RlRXJyb3IiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsInByZVByb2Nlc3NNZXNzYWdlIiwiZGF0YSIsIkJsb2IiLCJhcnJheUJ1ZmZlciIsIm1lc3NhZ2VEYXRhIiwicGFyc2UiLCJsYXN0QWNrIiwiRGF0ZSIsIm5vdyIsImxhc3RCZWF0IiwicnR0IiwiSGVhcnRiZWF0IiwiaGVhcnRiZWF0IiwiSGVsbG8iLCJoZWFydGJlYXRfaW50ZXJ2YWwiLCJzdGFydEhlYXJ0YmVhdGluZyIsIndhaXRpbmciLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwibWFwIiwicGF5bG9hZCIsInJlc3VtZV9nYXRld2F5X3VybCIsInMiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBU0EsMEJBQUFBLENBQXNCLENBQUVDLGtCQUFBQSxDQUFjLEtBQVEsbUJBQW1CLEFBQzFFLFFBQVNDLFlBQUFBLENBQVEsQ0FBRUMscUJBQUFBLENBQWlCLENBQUVDLFNBQUFBLENBQUssS0FBUSxtQkFBbUIsQUFDdEUsUUFBU0MsZUFBQUEsQ0FBVyxLQUFRLE1BQU0sQUFFbEMsUUFBU0MseUJBQUFBLENBQXFCLENBQUVDLGNBQUFBLENBQVUsS0FBUSxZQUFZLEFBRTlELFFBQU8sTUFBTUMsTUFRWEMsNEJBQXNDLEdBQUcsQUFFekNDLENBQUFBLHVCQUF3QyxJQUFJLEFBRTVDQyxDQUFBQSx1QkFBaUMsR0FBSyxBQU10Q0MsQ0FBQUEsTUFBUUwsRUFBV00sT0FBTyxBQUUxQkMsQ0FBQUEsaUJBQTJCLEVBQUUsQUFFN0JDLENBQUFBLE9BQXNCLENBQUMsQ0FBQyxBQUV4QkMsQ0FBQUEsaUJBQWlELEVBQUUsQUFFbkRDLENBQUFBLFNBQVcsSUFBSUMsR0FBd0YsQUFFdkdDLENBQUFBLE9BQVNoQixFQUFrQixDQUN6QmlCLElBQUssSUFDTEMsZUFBZ0IsSUFDaEJDLGFBQWMsR0FDaEIsRUFBRSxBQUVGQyxhQUFhQyxDQUEyQixDQUFFLENBQ3hDLElBQUksQ0FBQ0MsRUFBRSxDQUFHRCxFQUFRQyxFQUFFLENBQ3BCLElBQUksQ0FBQ0MsVUFBVSxDQUFHRixFQUFRRSxVQUFVLENBQ3BDLElBQUksQ0FBQ1gsTUFBTSxDQUFHUyxFQUFRVCxNQUFNLENBRTVCLElBQUksQ0FBQ1ksS0FBSyxDQUFHLENBQ1hDLGFBQWMsQ0FBQSxFQUNkQyxTQUFVLElBQ1osQ0FDRixDQUdBLElBQUlDLGVBQXFDLENBQ3ZDLE9BQU8sSUFBSSxDQUFDSixVQUFVLEFBQ3hCLENBR0FLLHVCQUFpQyxDQUUvQixJQUFNQyxFQUFlLElBQUksQ0FB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
1
+ import{GatewayCloseEventCodes as e,GatewayIntents as t,GatewayOpcodes as s}from"@discordeno/types";import{camelize as i,Collection as n,createLeakyBucket as a,delay as r,logger as h}from"@discordeno/utils";import{inflateSync as o}from"node:zlib";import d from"ws";import{ShardSocketCloseCodes as c,ShardState as l}from"./types.js";export class Shard{maxRequestsPerRateLimitTick=120;previousSequenceNumber=null;rateLimitResetInterval=6e4;state=l.Offline;resumeGatewayUrl="";events={};offlineSendQueue=[];resolves=new Map;bucket=a({max:120,refillInterval:6e4,refillAmount:120});cache={requestMembers:{enabled:!1,pending:new n}};constructor(e){this.id=e.id,this.connection=e.connection,this.events=e.events,this.heart={acknowledged:!1,interval:45e3}}get gatewayConfig(){return this.connection}calculateSafeRequests(){let e=this.maxRequestsPerRateLimitTick-2*Math.ceil(this.rateLimitResetInterval/this.heart.interval);return e<0?0:e}async checkOffline(e){this.isOpen()||await new Promise(t=>{e?this.offlineSendQueue.unshift(t):this.offlineSendQueue.push(t)})}close(e,t){if(this.socket?.readyState===d.OPEN)return this.socket?.close(e,t)}async connect(){[l.Identifying,l.Resuming].includes(this.state)||(this.state=l.Connecting),this.events.connecting?.(this);let e=new URL(this.gatewayConfig.url);"wss://gateway.discord.gg"===e.origin&&(this.state===l.Resuming&&(e=new URL(this.resumeGatewayUrl)),e.searchParams.set("v",this.gatewayConfig.version.toString()),e.searchParams.set("encoding","json"));let t=new d(e.toString());return this.socket=t,t.onerror=e=>console.log({error:e}),t.onclose=async e=>await this.handleClose(e),t.onmessage=async e=>await this.handleMessage(e),await new Promise(e=>{t.onopen=()=>{[l.Identifying,l.Resuming].includes(this.state)||(this.state=l.Unidentified),this.events.connected?.(this),e(this)}})}async identify(){return this.isOpen()&&(console.log(`CLOSING EXISTING SHARD: #${this.id}`),this.close(c.ReIdentifying,"Re-identifying closure of old connection.")),this.state=l.Identifying,this.events.identifying?.(this),this.isOpen()||await this.connect(),await this.requestIdentify(),this.send({op:s.Identify,d:{token:`Bot ${this.gatewayConfig.token}`,compress:this.gatewayConfig.compress,properties:this.gatewayConfig.properties,intents:this.gatewayConfig.intents,shard:[this.id,this.gatewayConfig.totalShards],presence:await this.makePresence?.()}},!0),await new Promise(e=>{this.resolves.set("READY",()=>{this.events.identified?.(this),e()}),this.resolves.set("INVALID_SESSION",()=>{this.resolves.delete("READY"),e()})})}isOpen(){return this.socket?.readyState===d.OPEN}async resume(){return(this.isOpen()&&this.close(c.ResumeClosingOldConnection,"Reconnecting the shard, closing old connection."),this.sessionId)?(this.state=l.Resuming,await this.connect(),this.send({op:s.Resume,d:{token:`Bot ${this.gatewayConfig.token}`,session_id:this.sessionId,seq:this.previousSequenceNumber??0}},!0),await new Promise(e=>{this.resolves.set("RESUMED",()=>e()),this.resolves.set("INVALID_SESSION",()=>{this.resolves.delete("RESUMED"),e()})})):await this.identify()}async send(e,t=!1){await this.checkOffline(t),await this.bucket.acquire(1,t),await this.checkOffline(t),this.socket?.send(JSON.stringify(e))}async shutdown(){this.close(c.Shutdown,"Shard shutting down."),this.state=l.Offline}async handleClose(t){switch(this.stopHeartbeating(),t.code){case c.TestingFinished:this.state=l.Offline,this.events.disconnected?.(this);return;case c.Shutdown:case c.ReIdentifying:case c.Resharded:case c.ResumeClosingOldConnection:case c.ZombiedConnection:this.state=l.Disconnected,this.events.disconnected?.(this);return;case e.UnknownOpcode:case e.NotAuthenticated:case e.InvalidSeq:case e.RateLimited:case e.SessionTimedOut:return this.state=l.Identifying,this.events.disconnected?.(this),await this.identify();case e.AuthenticationFailed:case e.InvalidShard:case e.ShardingRequired:case e.InvalidApiVersion:case e.InvalidIntents:case e.DisallowedIntents:throw this.state=l.Offline,this.events.disconnected?.(this),Error(t.reason||"Discord gave no reason! GG! You broke Discord!");case e.UnknownError:case e.DecodeError:case e.AlreadyAuthenticated:default:return this.state=l.Resuming,this.events.disconnected?.(this),await this.resume()}}async handleDiscordPacket(e){switch(this.heart.lastAck=Date.now(),this.heart.lastBeat&&!this.heart.acknowledged&&(this.heart.rtt=this.heart.lastAck-this.heart.lastBeat),this.heart.acknowledged=!0,e.op){case s.Heartbeat:if(!this.isOpen())return;this.heart.lastBeat=Date.now(),this.socket?.send(JSON.stringify({op:s.Heartbeat,d:this.previousSequenceNumber})),this.events.heartbeat?.(this);break;case s.Hello:{let t=e.d.heartbeat_interval;this.startHeartbeating(t),this.state!==l.Resuming&&(this.bucket=a({max:this.calculateSafeRequests(),refillInterval:6e4,refillAmount:this.calculateSafeRequests(),waiting:this.bucket.waiting})),this.events.hello?.(this);break}case s.HeartbeatACK:this.events.heartbeatAck?.(this);break;case s.Reconnect:this.events.requestedReconnect?.(this),await this.resume();break;case s.InvalidSession:{let n=e.d;if(this.events.invalidSession?.(this,n),await r(Math.floor((4*Math.random()+1)*1e3)),this.resolves.get("INVALID_SESSION")?.(e),this.resolves.delete("INVALID_SESSION"),!n){await this.identify();break}await this.resume()}}if("RESUMED"===e.t)this.state=l.Connected,this.events.resumed?.(this),this.offlineSendQueue.map(e=>e()),this.resolves.get("RESUMED")?.(e),this.resolves.delete("RESUMED");else if("READY"===e.t){let h=e.d;this.resumeGatewayUrl=h.resume_gateway_url,this.sessionId=h.session_id,this.state=l.Connected,this.offlineSendQueue.map(e=>e()),this.resolves.get("READY")?.(e),this.resolves.delete("READY")}null!==e.s&&(this.previousSequenceNumber=e.s),this.events.message?.(this,i(e))}async handleMessage(e){let t=e.data;if(this.gatewayConfig.compress&&t instanceof Blob&&(t=o(await t.arrayBuffer()).toString()),"string"==typeof t)return await this.handleDiscordPacket(JSON.parse(t))}async makePresence(){}async requestIdentify(){}startHeartbeating(e){this.heart.interval=e,[l.Disconnected,l.Offline].includes(this.state)&&(this.state=l.Unidentified);let t=Math.ceil(this.heart.interval*(Math.random()||.5));this.heart.timeoutId=setTimeout(()=>{this.isOpen()&&(this.socket?.send(JSON.stringify({op:s.Heartbeat,d:this.previousSequenceNumber})),this.heart.lastBeat=Date.now(),this.heart.acknowledged=!1,this.heart.intervalId=setInterval(async()=>{if(this.isOpen()){if(!this.heart.acknowledged)return this.close(c.ZombiedConnection,"Zombied connection, did not receive an heartbeat ACK in time."),await this.identify();this.heart.acknowledged=!1,this.socket?.send(JSON.stringify({op:s.Heartbeat,d:this.previousSequenceNumber})),this.heart.lastBeat=Date.now(),this.events.heartbeat?.(this)}},this.heart.interval))},t)}stopHeartbeating(){clearInterval(this.heart.intervalId),clearTimeout(this.heart.timeoutId)}async joinVoiceChannel(e,t,i){return h.debug(`[Shard] joinVoiceChannel guildId: ${e} channelId: ${t}`),await this.send({op:s.VoiceStateUpdate,d:{guild_id:e.toString(),channel_id:t.toString(),self_mute:Boolean(i?.selfMute),self_deaf:i?.selfDeaf??!0}})}async editBotStatus(e){return h.debug(`[Shard] editBotStatus data: ${JSON.stringify(e)}`),await this.editShardStatus(e)}async editShardStatus(e){return h.debug(`[Shard] editShardStatus shardId: ${this.id} -> data: ${JSON.stringify(e)}`),await this.send({op:s.PresenceUpdate,d:{since:null,afk:!1,activities:e.activities,status:e.status}})}async requestMembers(e,i){if(this.connection.intents&&(!i?.limit||i.limit>1)&&!(this.connection.intents&t.GuildMembers))throw Error("MISSING_INTENT_GUILD_MEMBERS");i?.userIds?.length&&(h.debug(`[Shard] requestMembers guildId: ${e} -> setting user limit based on userIds length: ${i.userIds.length}`),i.limit=i.userIds.length);let n=`${e}-${Date.now()}`;return this.cache.requestMembers?.enabled?await new Promise(t=>{this.cache.requestMembers?.pending.set(n,{nonce:n,resolve:t,members:[]}),h.debug(`[Shard] requestMembers guildId: ${e} -> requesting members -> data: ${JSON.stringify(i)}`),this.send({op:s.RequestGuildMembers,d:{guild_id:e.toString(),query:i?.query??(i?.limit?void 0:""),limit:i?.limit??0,presences:i?.presences??!1,user_ids:i?.userIds?.map(e=>e.toString()),nonce:n}})}):(h.debug(`[Shard] requestMembers guildId: ${e} -> skipping cache -> options ${JSON.stringify(i)}`),await this.send({op:s.RequestGuildMembers,d:{guild_id:e.toString(),query:i?.query??(i?.limit?void 0:""),limit:i?.limit??0,presences:i?.presences??!1,user_ids:i?.userIds?.map(e=>e.toString()),nonce:n}}),[])}async leaveVoiceChannel(e){return h.debug(`[Shard] leaveVoiceChannel guildId: ${e} Shard ${this.id}`),await this.send({op:s.VoiceStateUpdate,d:{guild_id:e.toString(),channel_id:null,self_mute:!1,self_deaf:!1}})}}export default Shard;
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEF0TGVhc3RPbmUsXG4gIEJpZ1N0cmluZyxcbiAgQ2FtZWxpemUsXG4gIERpc2NvcmRHYXRld2F5UGF5bG9hZCxcbiAgRGlzY29yZEhlbGxvLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkUmVhZHksXG4gIFJlcXVlc3RHdWlsZE1lbWJlcnMsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgR2F0ZXdheUNsb3NlRXZlbnRDb2RlcywgR2F0ZXdheUludGVudHMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgQ29sbGVjdGlvbiwgY3JlYXRlTGVha3lCdWNrZXQsIGRlbGF5LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGluZmxhdGVTeW5jIH0gZnJvbSAnbm9kZTp6bGliJ1xuaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cydcbmltcG9ydCB0eXBlIHsgUmVxdWVzdE1lbWJlclJlcXVlc3QgfSBmcm9tICcuL21hbmFnZXIuanMnXG5pbXBvcnQgdHlwZSB7IEJvdFN0YXR1c1VwZGF0ZSwgU2hhcmRFdmVudHMsIFNoYXJkR2F0ZXdheUNvbmZpZywgU2hhcmRIZWFydCwgU2hhcmRTb2NrZXRSZXF1ZXN0LCBTdGF0dXNVcGRhdGUsIFVwZGF0ZVZvaWNlU3RhdGUgfSBmcm9tICcuL3R5cGVzLmpzJ1xuaW1wb3J0IHsgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLCBTaGFyZFN0YXRlIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNsYXNzIFNoYXJkIHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2hhcmQgKi9cbiAgaWQ6IG51bWJlclxuICAvKiogVGhlIGNvbm5lY3Rpb24gY29uZmlnIGRldGFpbHMgdGhhdCB0aGlzIHNoYXJkIHdpbGwgdXNlZCB0byBjb25uZWN0IHRvIGRpc2NvcmQuICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZ1xuICAvKiogVGhpcyBjb250YWlucyBhbGwgdGhlIGhlYXJ0YmVhdCBpbmZvcm1hdGlvbiAqL1xuICBoZWFydDogU2hhcmRIZWFydFxuICAvKiogVGhlIG1heGltdW0gb2YgcmVxdWVzdHMgd2hpY2ggY2FuIGJlIHNlbmQgdG8gZGlzY29yZCBwZXIgcmF0ZSBsaW1pdCB0aWNrLiBUeXBpY2FsbHkgdGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIGNoYW5nZWQuICovXG4gIG1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljazogbnVtYmVyID0gMTIwXG4gIC8qKiBUaGUgcHJldmlvdXMgcGF5bG9hZCBzZXF1ZW5jZSBudW1iZXIuICovXG4gIHByZXZpb3VzU2VxdWVuY2VOdW1iZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIC8qKiBJbiB3aGljaCBpbnRlcnZhbCAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgZ2F0ZXdheSByZXNldHMgaXQncyByYXRlIGxpbWl0LiAqL1xuICByYXRlTGltaXRSZXNldEludGVydmFsOiBudW1iZXIgPSA2MDAwMFxuICAvKiogQ3VycmVudCBzZXNzaW9uIGlkIG9mIHRoZSBzaGFyZCBpZiBwcmVzZW50LiAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmdcbiAgLyoqIFRoaXMgY29udGFpbnMgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHRvIERpc2NvcmQsIGlmIGN1cnJlbnRseSBjb25uZWN0ZWQuICovXG4gIHNvY2tldD86IFdlYlNvY2tldFxuICAvKiogQ3VycmVudCBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgdGhpcy4gKi9cbiAgc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgLyoqIFRoZSB1cmwgcHJvdmlkZWQgYnkgZGlzY29yZCB0byB1c2Ugd2hlbiByZXN1bWluZyBhIGNvbm5lY3Rpb24gZm9yIHRoaXMgdGhpcy4gKi9cbiAgcmVzdW1lR2F0ZXdheVVybDogc3RyaW5nID0gJydcbiAgLyoqIFRoZSBzaGFyZCByZWxhdGVkIGV2ZW50IGhhbmRsZXJzLiAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzID0ge31cbiAgLyoqIENhY2hlIGZvciBwZW5kaW5nIGdhdGV3YXkgcmVxdWVzdHMgd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBzZW5kIHdoaWxlIHRoZSBnYXRld2F5IHdlbnQgb2ZmbGluZS4gKi9cbiAgb2ZmbGluZVNlbmRRdWV1ZTogQXJyYXk8KF8/OiB1bmtub3duKSA9PiB2b2lkPiA9IFtdXG4gIC8qKiBSZXNvbHZlIGludGVybmFsIHdhaXRpbmcgc3RhdGVzLiBNYXBwZWQgYnkgU2VsZWN0ZWRFdmVudHMgPT4gUmVzb2x2ZUZ1bmN0aW9uICovXG4gIHJlc29sdmVzID0gbmV3IE1hcDwnUkVBRFknIHwgJ1JFU1VNRUQnIHwgJ0lOVkFMSURfU0VTU0lPTicsIChwYXlsb2FkOiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpID0+IHZvaWQ+KClcbiAgLyoqIFNoYXJkIGJ1Y2tldC4gT25seSBhY2Nlc3MgdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuIEJ1Y2tldCBmb3IgaGFuZGxpbmcgc2hhcmQgcmVxdWVzdCByYXRlIGxpbWl0cy4gKi9cbiAgYnVja2V0ID0gY3JlYXRlTGVha3lCdWNrZXQoe1xuICAgIG1heDogMTIwLFxuICAgIHJlZmlsbEludGVydmFsOiA2MDAwMCxcbiAgICByZWZpbGxBbW91bnQ6IDEyMCxcbiAgfSlcblxuICAvKiogVGhpcyBtYW5hZ2VycyBjYWNoZSByZWxhdGVkIHNldHRpbmdzLiAqL1xuICBjYWNoZSA9IHtcbiAgICByZXF1ZXN0TWVtYmVyczoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAvKiogVGhlIHBlbmRpbmcgcmVxdWVzdHMuICovXG4gICAgICBwZW5kaW5nOiBuZXcgQ29sbGVjdGlvbjxzdHJpbmcsIFJlcXVlc3RNZW1iZXJSZXF1ZXN0PigpLFxuICAgIH0sXG4gIH1cblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZFxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG9wdGlvbnMuY29ubmVjdGlvblxuICAgIHRoaXMuZXZlbnRzID0gb3B0aW9ucy5ldmVudHNcblxuICAgIHRoaXMuaGVhcnQgPSB7XG4gICAgICBhY2tub3dsZWRnZWQ6IGZhbHNlLFxuICAgICAgaW50ZXJ2YWw6IDQ1MDAwLFxuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgZ2F0ZXdheSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkLiAqL1xuICBnZXQgZ2F0ZXdheUNvbmZpZygpOiBTaGFyZEdhdGV3YXlDb25maWcge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25cbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiByZXF1ZXN0cyB3aGljaCBjYW4gc2FmZWx5IGJlIG1hZGUgcGVyIHJhdGUgbGltaXQgaW50ZXJ2YWwsIGJlZm9yZSB0aGUgZ2F0ZXdheSBnZXRzIGRpc2Nvbm5lY3RlZCBkdWUgdG8gYW4gZXhjZWVkZWQgcmF0ZSBsaW1pdC4gKi9cbiAgY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCk6IG51bWJlciB7XG4gICAgLy8gKiAyIGFkZHMgZXh0cmEgc2FmZXR5IGxheWVyIGZvciBkaXNjb3JkcyBPUCAxIHJlcXVlc3RzIHRoYXQgd2UgbmVlZCB0byByZXNwb25kIHRvXG4gICAgY29uc3Qgc2FmZVJlcXVlc3RzID0gdGhpcy5tYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2sgLSBNYXRoLmNlaWwodGhpcy5yYXRlTGltaXRSZXNldEludGVydmFsIC8gdGhpcy5oZWFydC5pbnRlcnZhbCkgKiAyXG5cbiAgICByZXR1cm4gc2FmZVJlcXVlc3RzIDwgMCA/IDAgOiBzYWZlUmVxdWVzdHNcbiAgfVxuXG4gIGFzeW5jIGNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHk6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIEhpZ2hlciBwcmlvcml0eSByZXF1ZXN0cyBnZXQgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuXG4gICAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICAgIGVsc2UgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLnB1c2gocmVzb2x2ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBzb2NrZXQgY29ubmVjdGlvbiB0byBkaXNjb3JkIGlmIHByZXNlbnQuICovXG4gIGNsb3NlKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb2NrZXQ/LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSByZXR1cm5cblxuICAgIHJldHVybiB0aGlzLnNvY2tldD8uY2xvc2UoY29kZSwgcmVhc29uKVxuICB9XG5cbiAgLyoqIENvbm5lY3QgdGhlIHNoYXJkIHdpdGggdGhlIGdhdGV3YXkgYW5kIHN0YXJ0IGhlYXJ0YmVhdGluZy4gVGhpcyB3aWxsIG5vdCBpZGVudGlmeSB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTxTaGFyZD4ge1xuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCB0byBgQ29ubmVjdGluZ2Agc3RhdGUsXG4gICAgLy8gaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoIVtTaGFyZFN0YXRlLklkZW50aWZ5aW5nLCBTaGFyZFN0YXRlLlJlc3VtaW5nXS5pbmNsdWRlcyh0aGlzLnN0YXRlKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuQ29ubmVjdGluZ1xuICAgIH1cbiAgICB0aGlzLmV2ZW50cy5jb25uZWN0aW5nPy4odGhpcylcblxuICAgIGxldCB1cmwgPSBuZXcgVVJMKHRoaXMuZ2F0ZXdheUNvbmZpZy51cmwpXG4gICAgLy8gSWYgbm90IGNvbm5lY3RpbmcgdG8gYSBwcm94eSBidXQgZGlyZWN0bHkgdG8gZGlzY29yZCBuZWVkIHRvIGhhbmRsZSByZXN1bWluZ1xuICAgIGlmICh1cmwub3JpZ2luID09PSAnd3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnJykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFNoYXJkU3RhdGUuUmVzdW1pbmcpIHtcbiAgICAgICAgdXJsID0gbmV3IFVSTCh0aGlzLnJlc3VtZUdhdGV3YXlVcmwpXG4gICAgICB9XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndicsIHRoaXMuZ2F0ZXdheUNvbmZpZy52ZXJzaW9uLnRvU3RyaW5nKCkpXG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnZW5jb2RpbmcnLCAnanNvbicpXG4gICAgfVxuXG4gICAgY29uc3Qgc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwudG9TdHJpbmcoKSlcblxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG5cbiAgICAvLyBUT0RPOiBwcm9wZXIgZXZlbnQgaGFuZGxpbmdcbiAgICBzb2NrZXQub25lcnJvciA9IChldmVudCkgPT4gY29uc29sZS5sb2coeyBlcnJvcjogZXZlbnQgfSlcblxuICAgIHNvY2tldC5vbmNsb3NlID0gYXN5bmMgKGV2ZW50KSA9PiBhd2FpdCB0aGlzLmhhbmRsZUNsb3NlKGV2ZW50KVxuXG4gICAgc29ja2V0Lm9ubWVzc2FnZSA9IGFzeW5jIChtZXNzYWdlKSA9PiBhd2FpdCB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZSlcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc29ja2V0Lm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBVbmlkZW50aWZpZWRgIHN0YXRlLFxuICAgICAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgICAgICBpZiAoIVtTaGFyZFN0YXRlLklkZW50aWZ5aW5nLCBTaGFyZFN0YXRlLlJlc3VtaW5nXS5pbmNsdWRlcyh0aGlzLnN0YXRlKSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXZlbnRzLmNvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmVzb2x2ZSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKiogSWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiBJZiBub3QgY29ubmVjdGVkLCB0aGlzIHdpbGwgYWxzbyBjb25uZWN0IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gKi9cbiAgYXN5bmMgaWRlbnRpZnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQSBuZXcgaWRlbnRpZnkgaGFzIGJlZW4gcmVxdWVzdGVkIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIGFscmVhZHkgYSBjb25uZWN0aW9uIG9wZW4uXG4gICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gY2xvc2UgdGhlIG9sZCBjb25uZWN0aW9uIGFuZCBoZWFydGJlYXRpbmcgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgY29uc29sZS5sb2coYENMT1NJTkcgRVhJU1RJTkcgU0hBUkQ6ICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgLy8gV2FpdCB1bnRpbCBhbiBpZGVudGlmeSBpcyBmcmVlIGZvciB0aGlzIHRoaXMuXG4gICAgYXdhaXQgdGhpcy5yZXF1ZXN0SWRlbnRpZnkoKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZT8uKCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRUFEWScsICgpID0+IHtcbiAgICAgICAgdGhpcy5ldmVudHMuaWRlbnRpZmllZD8uKHRoaXMpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsXG4gICAgICAvLyBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkLlxuICAgICAgLy8gVGhpcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgdGhvdWdoIGFuZCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IGlkZW50aWZ5IGFjdGlvbi5cbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gRGlzY29yZCBpcyBjdXJyZW50bHkgb3Blbi4gKi9cbiAgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU5cbiAgfVxuXG4gIC8qKiBBdHRlbXB0IHRvIHJlc3VtZSB0aGUgcHJldmlvdXMgc2hhcmRzIHNlc3Npb24gd2l0aCB0aGUgZ2F0ZXdheS4gKi9cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vICAgZ2F0ZXdheS5kZWJ1ZyhcIkdXIFJFU1VNSU5HXCIsIHsgc2hhcmRJZCB9KTtcbiAgICAvLyBJdCBoYXMgYmVlbiByZXF1ZXN0ZWQgdG8gcmVzdW1lIHRoZSBTaGFyZHMgc2Vzc2lvbi5cbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNoYXJkIGlzIHN0aWxsIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5IHRoZXJlZm9yZSB3ZSBuZWVkIHRvIGZvcmNlZnVsbHkgY2xvc2UgaXQuXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uLCAnUmVjb25uZWN0aW5nIHRoZSBzaGFyZCwgY2xvc2luZyBvbGQgY29ubmVjdGlvbi4nKVxuICAgIH1cblxuICAgIC8vIFNoYXJkIGhhcyBuZXZlciBpZGVudGlmaWVkLCBzbyB3ZSBjYW5ub3QgcmVzdW1lLlxuICAgIGlmICghdGhpcy5zZXNzaW9uSWQpIHtcbiAgICAgIC8vIGdhdGV3YXkuZGVidWcoXG4gICAgICAvLyAgIFwiR1cgREVCVUdcIixcbiAgICAgIC8vICAgYFtFcnJvcl0gVHJ5aW5nIHRvIHJlc3VtZSBhIHNoYXJkIChpZDogJHtzaGFyZElkfSkgdGhhdCB3YXMgbm90IGZpcnN0IGlkZW50aWZpZWQuYCxcbiAgICAgIC8vICk7XG5cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlkZW50aWZ5KClcblxuICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGBbU0hBUkRdIFRyeWluZyB0byByZXN1bWUgYSBzaGFyZCAoaWQ6ICR7dGhpcy5pZH0pIHdoaWNoIHdhcyBuZXZlciBpZGVudGlmaWVkYCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuUmVzdW1pbmdcblxuICAgIC8vIEJlZm9yZSB3ZSBjYW4gcmVzdW1lLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHdpdGggRGlzY29yZCdzIGdhdGV3YXkuXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0KClcblxuICAgIHRoaXMuc2VuZChcbiAgICAgIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlc3VtZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHRva2VuOiBgQm90ICR7dGhpcy5nYXRld2F5Q29uZmlnLnRva2VufWAsXG4gICAgICAgICAgc2Vzc2lvbl9pZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgc2VxOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPz8gMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgIClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ1JFU1VNRUQnLCAoKSA9PiByZXNvbHZlKCkpXG4gICAgICAvLyBJZiBpdCBpcyBhdHRlbXB0ZWQgdG8gcmVzdW1lIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIGlkLFxuICAgICAgLy8gRGlzY29yZCBzZW5kcyBhbiBpbnZhbGlkIHNlc3Npb24gcGF5bG9hZFxuICAgICAgLy8gTm90IGVycm9yaW5nIGhlcmUgc2luY2UgaXQgaXMgZWFzeSB0aGF0IHRoaXMgaGFwcGVucywgYWxzbyBpdCB3b3VsZCBiZSBub3QgY2F0Y2hhYmxlXG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnSU5WQUxJRF9TRVNTSU9OJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIFNlbmQgYSBtZXNzYWdlIHRvIERpc2NvcmQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZ2hQcmlvcml0eT1mYWxzZV0gLSBXaGV0aGVyIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgc2VuZCBhc2FwLlxuICAgKi9cbiAgYXN5bmMgc2VuZChtZXNzYWdlOiBTaGFyZFNvY2tldFJlcXVlc3QsIGhpZ2hQcmlvcml0eSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmVmb3JlIGFjcXVpcmluZyBhIHRva2VuIGZyb20gdGhlIGJ1Y2tldCwgY2hlY2sgd2hldGhlciB0aGUgc2hhcmQgaXMgY3VycmVudGx5IG9mZmxpbmUgb3Igbm90LlxuICAgIC8vIEVsc2UgYnVja2V0IGFuZCB0b2tlbiB3YWl0IHRpbWUganVzdCBnZXQgd2FzdGVkLlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIGF3YWl0IHRoaXMuYnVja2V0LmFjcXVpcmUoMSwgaGlnaFByaW9yaXR5KVxuXG4gICAgLy8gSXQncyBwb3NzaWJsZSwgdGhhdCB0aGUgc2hhcmQgd2VudCBvZmZsaW5lIGFmdGVyIGEgdG9rZW4gaGFzIGJlZW4gYWNxdWlyZWQgZnJvbSB0aGUgYnVja2V0LlxuICAgIGF3YWl0IHRoaXMuY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eSlcblxuICAgIHRoaXMuc29ja2V0Py5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKVxuICB9XG5cbiAgLyoqIFNodXRkb3duIHRoZSB0aGlzLiBGb3JjZWZ1bGx5IGRpc2Nvbm5lY3QgdGhlIHNoYXJkIGZyb20gRGlzY29yZC4gVGhlIHNoYXJkIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgd2l0aCBEaXNjb3JkLiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93biwgJ1NoYXJkIHNodXR0aW5nIGRvd24uJylcbiAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIH1cblxuICAvKiogSGFuZGxlIGEgZ2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlLiAqL1xuICBhc3luYyBoYW5kbGVDbG9zZShjbG9zZTogV2ViU29ja2V0LkNsb3NlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyAgIGdhdGV3YXkuZGVidWcoXCJHVyBDTE9TRURcIiwgeyBzaGFyZElkLCBwYXlsb2FkOiBldmVudCB9KTtcblxuICAgIHRoaXMuc3RvcEhlYXJ0YmVhdGluZygpXG5cbiAgICBzd2l0Y2ggKGNsb3NlLmNvZGUpIHtcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlRlc3RpbmdGaW5pc2hlZDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBPbiB0aGVzZSBjb2RlcyBhIG1hbnVhbCBzdGFydCB3aWxsIGJlIGRvbmUuXG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93bjpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmc6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXNoYXJkZWQ6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbjpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlpvbWJpZWRDb25uZWN0aW9uOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkRpc2Nvbm5lY3RlZFxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIC8vIGdhdGV3YXkuZGVidWcoXCJHVyBDTE9TRURfUkVDT05ORUNUXCIsIHsgc2hhcmRJZCwgcGF5bG9hZDogZXZlbnQgfSk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gR2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlcyB3aGljaCByZXF1aXJlIGEgbmV3IGlkZW50aWZ5LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25PcGNvZGU6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuTm90QXV0aGVudGljYXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2VxOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlJhdGVMaW1pdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlNlc3Npb25UaW1lZE91dDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5JZGVudGlmeWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgIH1cbiAgICAgIC8vIFdoZW4gdGhlc2UgY29kZXMgYXJlIHJlY2VpdmVkIHNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZy5cbiAgICAgIC8vIE9uIHRob3NlIHdlIGNhbm5vdCBzdGFydCBhIHJlY29ubmVjdCBhdHRlbXB0LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkF1dGhlbnRpY2F0aW9uRmFpbGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTaGFyZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TaGFyZGluZ1JlcXVpcmVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRBcGlWZXJzaW9uOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRJbnRlbnRzOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRpc2FsbG93ZWRJbnRlbnRzOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2xvc2UucmVhc29uIHx8ICdEaXNjb3JkIGdhdmUgbm8gcmVhc29uISBHRyEgWW91IGJyb2tlIERpc2NvcmQhJylcbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgb24gd2hpY2ggYSByZXN1bWUgaXMgYWxsb3dlZC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duRXJyb3I6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuRGVjb2RlRXJyb3I6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuQWxyZWFkeUF1dGhlbnRpY2F0ZWQ6XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlJlc3VtaW5nXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzdW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogSGFuZGxlcyBhIGluY29taW5nIGdhdGV3YXkgcGFja2V0LiAqL1xuICBhc3luYyBoYW5kbGVEaXNjb3JkUGFja2V0KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKVxuICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0aW5nIHRoZSByb3VuZCB0cmlwIHRpbWUgZm9yIHVzZXJzIHdobyBuZWVkIGl0LlxuICAgIGlmICh0aGlzLmhlYXJ0Lmxhc3RCZWF0ICYmICF0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCkge1xuICAgICAgdGhpcy5oZWFydC5ydHQgPSB0aGlzLmhlYXJ0Lmxhc3RBY2sgLSB0aGlzLmhlYXJ0Lmxhc3RCZWF0XG4gICAgfVxuICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gdHJ1ZVxuICAgIC8vIEVkZ2UgY2FzZSBlbmQhXG5cbiAgICBzd2l0Y2ggKHBhY2tldC5vcCkge1xuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQ6IHtcbiAgICAgICAgLy8gVE9ETzogY2FuIHRoaXMgYWN0dWFsbHkgaGFwcGVuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcbiAgICAgICAgLy8gRGlzY29yZCByYW5kb21seSBzZW5kcyB0aGlzIHJlcXVpcmluZyBhbiBpbW1lZGlhdGUgaGVhcnRiZWF0IGJhY2suXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWxsbzoge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IChwYWNrZXQuZCBhcyBEaXNjb3JkSGVsbG8pLmhlYXJ0YmVhdF9pbnRlcnZhbFxuXG4gICAgICAgIHRoaXMuc3RhcnRIZWFydGJlYXRpbmcoaW50ZXJ2YWwpXG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09IFNoYXJkU3RhdGUuUmVzdW1pbmcpIHtcbiAgICAgICAgICAvLyBIRUxMTyBoYXMgYmVlbiBzZW5kIG9uIGEgbm9uIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgc2Vzc2lvbixcbiAgICAgICAgICAvLyB0aGVyZWZvcmUgdGhlIHJhdGUgbGltaXQgaW50ZXJ2YWwgaGFzIGJlZW4gcmVzZXQgdG9vLlxuICAgICAgICAgIHRoaXMuYnVja2V0ID0gY3JlYXRlTGVha3lCdWNrZXQoe1xuICAgICAgICAgICAgbWF4OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgcmVmaWxsSW50ZXJ2YWw6IDYwMDAwLFxuICAgICAgICAgICAgcmVmaWxsQW1vdW50OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgLy8gV2FpdGluZyBhY3F1aXJlcyBzaG91bGQgbm90IGJlIGxvc3Qgb24gYSByZS1pZGVudGlmeS5cbiAgICAgICAgICAgIHdhaXRpbmc6IHRoaXMuYnVja2V0LndhaXRpbmcsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlbGxvPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXRBQ0s6IHtcbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0QWNrPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5SZWNvbm5lY3Q6IHtcbiAgICAgICAgLy8gICBnYXRld2F5LmRlYnVnKFwiR1cgUkVDT05ORUNUXCIsIHsgc2hhcmRJZCB9KTtcblxuICAgICAgICB0aGlzLmV2ZW50cy5yZXF1ZXN0ZWRSZWNvbm5lY3Q/Lih0aGlzKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5JbnZhbGlkU2Vzc2lvbjoge1xuICAgICAgICAvLyAgIGdhdGV3YXkuZGVidWcoXCJHVyBJTlZBTElEX1NFU1NJT05cIiwgeyBzaGFyZElkLCBwYXlsb2FkOiBwYWNrZXQgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VtYWJsZSA9IHBhY2tldC5kIGFzIGJvb2xlYW5cblxuICAgICAgICB0aGlzLmV2ZW50cy5pbnZhbGlkU2Vzc2lvbj8uKHRoaXMsIHJlc3VtYWJsZSlcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIGEgcmFuZG9tIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gMSBhbmQgNVxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3Jlc3VtaW5nXG4gICAgICAgIGF3YWl0IGRlbGF5KE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiA0ICsgMSkgKiAxMDAwKSlcblxuICAgICAgICB0aGlzLnJlc29sdmVzLmdldCgnSU5WQUxJRF9TRVNTSU9OJyk/LihwYWNrZXQpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdJTlZBTElEX1NFU1NJT04nKVxuXG4gICAgICAgIC8vIFdoZW4gcmVzdW1hYmxlIGlzIGZhbHNlIHdlIG5lZWQgdG8gcmUtaWRlbnRpZnlcbiAgICAgICAgaWYgKCFyZXN1bWFibGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2Vzc2lvbiBpcyBpbnZhbGlkIGJ1dCBhcHBhcmVudGx5IGl0IGlzIHJlc3VtYWJsZVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFja2V0LnQgPT09ICdSRVNVTUVEJykge1xuICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIFJFU1VNRURcIiwgeyBzaGFyZElkIH0pO1xuXG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcbiAgICAgIHRoaXMuZXZlbnRzLnJlc3VtZWQ/Lih0aGlzKVxuXG4gICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLm1hcCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKVxuXG4gICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVTVU1FRCcpPy4ocGFja2V0KVxuICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgIH0gZWxzZSBpZiAocGFja2V0LnQgPT09ICdSRUFEWScpIHtcbiAgICAgIC8vIEltcG9ydGFudCBmb3IgZnV0dXJlIHJlc3VtZXMuXG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBwYWNrZXQuZCBhcyBEaXNjb3JkUmVhZHlcblxuICAgICAgdGhpcy5yZXN1bWVHYXRld2F5VXJsID0gcGF5bG9hZC5yZXN1bWVfZ2F0ZXdheV91cmxcblxuICAgICAgdGhpcy5zZXNzaW9uSWQgPSBwYXlsb2FkLnNlc3Npb25faWRcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuXG4gICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgLy8gSW1wb3J0YW50IHdoZW4gdGhpcyBpcyBhIHJlLWlkZW50aWZ5XG4gICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubWFwKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRUFEWScpPy4ocGFja2V0KVxuICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFQURZJylcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNlcXVlbmNlIG51bWJlciBpZiBpdCBpcyBwcmVzZW50XG4gICAgLy8gYHNgIGNhbiBiZSBlaXRoZXIgYG51bGxgIG9yIGEgYG51bWJlcmAuXG4gICAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB1cGRhdGUgbWlzc2VzIHdoZW4gYHNgIGlzIGAwYCB3ZSBjaGVjayBhZ2FpbnN0IG51bGwuXG4gICAgaWYgKHBhY2tldC5zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPSBwYWNrZXQuc1xuICAgIH1cblxuICAgIC8vIFRoZSBuZWNlc3NhcnkgaGFuZGxpbmcgcmVxdWlyZWQgZm9yIHRoZSBTaGFyZHMgY29ubmVjdGlvbiBoYXMgYmVlbiBmaW5pc2hlZC5cbiAgICAvLyBOb3cgdGhlIGV2ZW50IGNhbiBiZSBzYWZlbHkgZm9yd2FyZGVkLlxuICAgIHRoaXMuZXZlbnRzLm1lc3NhZ2U/Lih0aGlzLCBjYW1lbGl6ZShwYWNrZXQpKVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UobWVzc2FnZTogV2ViU29ja2V0Lk1lc3NhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwcmVQcm9jZXNzTWVzc2FnZSA9IG1lc3NhZ2UuZGF0YVxuXG4gICAgLy8gSWYgbWVzc2FnZSBjb21wcmVzc2lvbiBpcyBlbmFibGVkLFxuICAgIC8vIERpc2NvcmQgbWlnaHQgc2VuZCB6bGliIGNvbXByZXNzZWQgcGF5bG9hZHMuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcyAmJiBwcmVQcm9jZXNzTWVzc2FnZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgIHByZVByb2Nlc3NNZXNzYWdlID0gaW5mbGF0ZVN5bmMoYXdhaXQgcHJlUHJvY2Vzc01lc3NhZ2UuYXJyYXlCdWZmZXIoKSkudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIC8vIFNhZmVndWFyZCBpbmNhc2UgZGVjb21wcmVzc2lvbiBmYWlsZWQgdG8gbWFrZSBhIHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByZVByb2Nlc3NNZXNzYWdlICE9PSAnc3RyaW5nJykgcmV0dXJuXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVEaXNjb3JkUGFja2V0KEpTT04ucGFyc2UocHJlUHJvY2Vzc01lc3NhZ2UpIGFzIERpc2NvcmRHYXRld2F5UGF5bG9hZClcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzaGFyZHMgcHJlc2VuY2UuXG4gICAqIGFzeW5jIGluIGNhc2UgZGV2cyBjcmVhdGUgdGhlIHByZXNlbmNlIGJhc2VkIG9uIGVnLiBkYXRhYmFzZSB2YWx1ZXMuXG4gICAqIFBhc3NpbmcgdGhlIHNoYXJkJ3MgaWQgdGhlcmUgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBkZXYgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICBhc3luYyBtYWtlUHJlc2VuY2UoKTogUHJvbWlzZTxCb3RTdGF0dXNVcGRhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1yZXR1cm5cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBtYW5hZ2VtZW50IHByb2Nlc3MsIGluIG9yZGVyIHRvIGtub3cgd2hldGhlciBpdHMgZnJlZSB0byBpZGVudGlmeS4gV2hlbiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIGlzIGFsbG93ZWQgdG8gc2VuZCBhbiBpZGVudGlmeSBwYXlsb2FkIHRvIGRpc2NvcmQuICovXG4gIGFzeW5jIHJlcXVlc3RJZGVudGlmeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUT0RPOiBob3cgdG8gaGFuZGxlIHRoaXNcbiAgICAvLyByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXF1ZXN0SWRlbnRpZnkodGhpcy5pZClcbiAgfVxuXG4gIC8qKiBTdGFydCBzZW5kaW5nIGhlYXJ0YmVhdCBwYXlsb2FkcyB0byBEaXNjb3JkIGluIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4gKi9cbiAgc3RhcnRIZWFydGJlYXRpbmcoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIC8vICAgZ2F0ZXdheS5kZWJ1ZyhcIkdXIEhFQVJUQkVBVElOR19TVEFSVEVEXCIsIHsgc2hhcmRJZCwgaW50ZXJ2YWwgfSk7XG5cbiAgICB0aGlzLmhlYXJ0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCdzIHN0YXRlIHRvIGBVbmlkZW50aWZpZWRgXG4gICAgLy8gaWYgaGVhcnRiZWF0aW5nIGhhcyBub3QgYmVlbiBzdGFydGVkIGR1ZSB0byBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmIChbU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWQsIFNoYXJkU3RhdGUuT2ZmbGluZV0uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBoZWFydGJlYXQgbmVlZHMgdG8gYmUgc2VuZCB3aXRoIGEgcmFuZG9tIGRlbGF5IGJldHdlZW4gYDBgIGFuZCBgaW50ZXJ2YWxgXG4gICAgLy8gVXNpbmcgYSBgc2V0VGltZW91dChfLCBqaXR0ZXIpYCBoZXJlIHRvIGFjY29tcGxpc2ggdGhhdC5cbiAgICAvLyBgTWF0aC5yYW5kb20oKWAgY2FuIGJlIGAwYCBzbyB3ZSB1c2UgYDAuNWAgaWYgdGhpcyBoYXBwZW5zXG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmdcbiAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmNlaWwodGhpcy5oZWFydC5pbnRlcnZhbCAqIChNYXRoLnJhbmRvbSgpIHx8IDAuNSkpXG4gICAgdGhpcy5oZWFydC50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyLFxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcbiAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2VcblxuICAgICAgLy8gQWZ0ZXIgdGhlIHJhbmRvbSBoZWFydGJlYXQgaml0dGVyIHdlIGNhbiBzdGFydCBhIG5vcm1hbCBpbnRlcnZhbC5cbiAgICAgIHRoaXMuaGVhcnQuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cbiAgICAgICAgLy8gZ2F0ZXdheS5kZWJ1ZyhcIkdXIERFQlVHXCIsIGBSdW5uaW5nIHNldEludGVydmFsIGluIGhlYXJ0YmVhdCBmaWxlLiBTaGFyZDogJHtzaGFyZElkfWApO1xuXG4gICAgICAgIC8vIGdhdGV3YXkuZGVidWcoXCJHVyBIRUFSVEJFQVRJTkdcIiwgeyBzaGFyZElkLCBzaGFyZDogY3VycmVudFNoYXJkIH0pO1xuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBkaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGZyb20gRGlzY29yZCBpbiB0aW1lLFxuICAgICAgICAvLyB0aGVyZWZvcmUgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkIG9yIGdvdCBcInpvbWJpZWRcIi5cbiAgICAgICAgLy8gVGhlIFNoYXJkIG5lZWRzIHRvIHN0YXJ0IGEgcmUtaWRlbnRpZnkgYWN0aW9uIGFjY29yZGluZ2x5LlxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I2hlYXJ0YmVhdGluZy1leGFtcGxlLWdhdGV3YXktaGVhcnRiZWF0LWFja1xuICAgICAgICBpZiAoIXRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuWm9tYmllZENvbm5lY3Rpb24sICdab21iaWVkIGNvbm5lY3Rpb24sIGRpZCBub3QgcmVjZWl2ZSBhbiBoZWFydGJlYXQgQUNLIGluIHRpbWUuJylcblxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2VcblxuICAgICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5oZWFydC5sYXN0QmVhdCA9IERhdGUubm93KClcblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuICAgICAgfSwgdGhpcy5oZWFydC5pbnRlcnZhbClcbiAgICB9LCBqaXR0ZXIpXG4gIH1cblxuICAvKiogU3RvcCB0aGUgaGVhcnRiZWF0aW5nIHByb2Nlc3Mgd2l0aCBkaXNjb3JkLiAqL1xuICBzdG9wSGVhcnRiZWF0aW5nKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRoZSByZWd1bGFyIGhlYXJ0YmVhdCBpbnRlcnZhbC5cbiAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnQuaW50ZXJ2YWxJZClcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIFNoYXJkIGdvdCBjbG9zZWQgYmVmb3JlIHRoZSBmaXJzdCBqaXR0ZXJlZCBoZWFydGJlYXQuXG4gICAgLy8gVG8gZ28gc2FmZSB3ZSBzaG91bGQgY2xlYXIgdGhlIHJlbGF0ZWQgdGltZW91dCB0b28uXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnQudGltZW91dElkKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3RzIHRoZSBib3QgdXNlciB0byBhIHZvaWNlIG9yIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgeW91IHdhbnQgdG8gam9pbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDT05ORUNUYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9Wb2ljZSBTdGF0ZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGFzeW5jIGpvaW5Wb2ljZUNoYW5uZWwoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNoYW5uZWxJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBdExlYXN0T25lPE9taXQ8VXBkYXRlVm9pY2VTdGF0ZSwgJ2d1aWxkSWQnIHwgJ2NoYW5uZWxJZCc+PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2hhcmRdIGpvaW5Wb2ljZUNoYW5uZWwgZ3VpbGRJZDogJHtndWlsZElkfSBjaGFubmVsSWQ6ICR7Y2hhbm5lbElkfWApXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgIGQ6IHtcbiAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhbm5lbF9pZDogY2hhbm5lbElkLnRvU3RyaW5nKCksXG4gICAgICAgIHNlbGZfbXV0ZTogQm9vbGVhbihvcHRpb25zPy5zZWxmTXV0ZSksXG4gICAgICAgIHNlbGZfZGVhZjogb3B0aW9ucz8uc2VsZkRlYWYgPz8gdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90IHN0YXR1cyBpbiBhbGwgc2hhcmRzIHRoYXQgdGhpcyBnYXRld2F5IG1hbmFnZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gICAqL1xuICBhc3luYyBlZGl0Qm90U3RhdHVzKGRhdGE6IFN0YXR1c1VwZGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBlZGl0Qm90U3RhdHVzIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YClcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5lZGl0U2hhcmRTdGF0dXMoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90J3Mgc3RhdHVzIG9uIG9uZSBzaGFyZC5cbiAgICpcbiAgICogQHBhcmFtIHNoYXJkSWQgVGhlIHNoYXJkIGlkIHRvIGVkaXQgdGhlIHN0YXR1cyBmb3IuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+XG4gICAqL1xuICBhc3luYyBlZGl0U2hhcmRTdGF0dXMoZGF0YTogU3RhdHVzVXBkYXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBbU2hhcmRdIGVkaXRTaGFyZFN0YXR1cyBzaGFyZElkOiAke3RoaXMuaWR9IC0+IGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YClcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5QcmVzZW5jZVVwZGF0ZSxcbiAgICAgIGQ6IHtcbiAgICAgICAgc2luY2U6IG51bGwsXG4gICAgICAgIGFmazogZmFsc2UsXG4gICAgICAgIGFjdGl2aXRpZXM6IGRhdGEuYWN0aXZpdGllcyxcbiAgICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIGEgZ3VpbGQgb3ZlciB0aGUgZ2F0ZXdheS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiByZXF1ZXN0aW5nIHRoZSBlbnRpcmUgbWVtYmVyIGxpc3Q6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBHVUlMRF9NRU1CRVJTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgcHJlc2VuY2VzICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5wcmVzZW5jZXMgfCBwcmVzZW5jZXN9IHNldCB0byBgdHJ1ZWApOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfUFJFU0VOQ0VTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSBwcmVmaXggKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnF1ZXJ5IHwgcXVlcnl9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSB1c2VycyBieSBJRCAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMudXNlcklkcyB8IHVzZXJJZHN9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlcnMgQ2h1bmtfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IDEwMDAgbWVtYmVycyBmZXRjaGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXF1ZXN0LWd1aWxkLW1lbWJlcnN9XG4gICAqL1xuICBhc3luYyByZXF1ZXN0TWVtYmVycyhndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFJlcXVlc3RHdWlsZE1lbWJlcnMsICdndWlsZElkJz4pOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJbXT4+IHtcbiAgICAvLyBZb3UgY2FuIHJlcXVlc3QgMSBtZW1iZXIgd2l0aG91dCB0aGUgaW50ZW50XG4gICAgLy8gQ2hlY2sgaWYgaW50ZW50cyBpcyBub3QgMCBhcyBwcm94eSB3cyB3b24ndCBzZXQgaW50ZW50cyBpbiBvdGhlciBpbnN0YW5jZXNcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uLmludGVudHMgJiYgKCFvcHRpb25zPy5saW1pdCB8fCBvcHRpb25zLmxpbWl0ID4gMSkgJiYgISh0aGlzLmNvbm5lY3Rpb24uaW50ZW50cyAmIEdhdGV3YXlJbnRlbnRzLkd1aWxkTWVtYmVycykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTUlTU0lOR19JTlRFTlRfR1VJTERfTUVNQkVSUycpXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LnVzZXJJZHM/Lmxlbmd0aCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbU2hhcmRdIHJlcXVlc3RNZW1iZXJzIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gLT4gc2V0dGluZyB1c2VyIGxpbWl0IGJhc2VkIG9uIHVzZXJJZHMgbGVuZ3RoOiAke29wdGlvbnMudXNlcklkcy5sZW5ndGh9YClcbiAgICAgIG9wdGlvbnMubGltaXQgPSBvcHRpb25zLnVzZXJJZHMubGVuZ3RoXG4gICAgfVxuXG4gICAgY29uc3Qgbm9uY2UgPSBgJHtndWlsZElkfS0ke0RhdGUubm93KCl9YFxuXG4gICAgLy8gR2F0ZXdheSBkb2VzIG5vdCByZXF1aXJlIGNhY2hpbmcgdGhlc2UgcmVxdWVzdHMgc28gZGlyZWN0bHkgc2VuZCBhbmQgcmV0dXJuXG4gICAgaWYgKCF0aGlzLmNhY2hlLnJlcXVlc3RNZW1iZXJzPy5lbmFibGVkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtTaGFyZF0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBza2lwcGluZyBjYWNoZSAtPiBvcHRpb25zICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgIGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXF1ZXN0R3VpbGRNZW1iZXJzLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyBJZiBhIHF1ZXJ5IGlzIHByb3ZpZGVkIHVzZSBpdCwgT1IgaWYgYSBsaW1pdCBpcyBOT1QgcHJvdmlkZWQgdXNlIFwiXCJcbiAgICAgICAgICBxdWVyeTogb3B0aW9ucz8ucXVlcnkgPz8gKG9wdGlvbnM/LmxpbWl0ID8gdW5kZWZpbmVkIDogJycpLFxuICAgICAgICAgIGxpbWl0OiBvcHRpb25zPy5saW1pdCA/PyAwLFxuICAgICAgICAgIHByZXNlbmNlczogb3B0aW9ucz8ucHJlc2VuY2VzID8/IGZhbHNlLFxuICAgICAgICAgIHVzZXJfaWRzOiBvcHRpb25zPy51c2VySWRzPy5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuY2FjaGUucmVxdWVzdE1lbWJlcnM/LnBlbmRpbmcuc2V0KG5vbmNlLCB7IG5vbmNlLCByZXNvbHZlLCBtZW1iZXJzOiBbXSB9KVxuXG4gICAgICBsb2dnZXIuZGVidWcoYFtTaGFyZF0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiByZXF1ZXN0aW5nIG1lbWJlcnMgLT4gZGF0YTogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgdGhpcy5zZW5kKHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlcXVlc3RHdWlsZE1lbWJlcnMsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBndWlsZF9pZDogZ3VpbGRJZC50b1N0cmluZygpLFxuICAgICAgICAgIC8vIElmIGEgcXVlcnkgaXMgcHJvdmlkZWQgdXNlIGl0LCBPUiBpZiBhIGxpbWl0IGlzIE5PVCBwcm92aWRlZCB1c2UgXCJcIlxuICAgICAgICAgIHF1ZXJ5OiBvcHRpb25zPy5xdWVyeSA/PyAob3B0aW9ucz8ubGltaXQgPyB1bmRlZmluZWQgOiAnJyksXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnM/LmxpbWl0ID8/IDAsXG4gICAgICAgICAgcHJlc2VuY2VzOiBvcHRpb25zPy5wcmVzZW5jZXMgPz8gZmFsc2UsXG4gICAgICAgICAgdXNlcl9pZHM6IG9wdGlvbnM/LnVzZXJJZHM/Lm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIExlYXZlcyB0aGUgdm9pY2UgY2hhbm5lbCB0aGUgYm90IHVzZXIgaXMgY3VycmVudGx5IGluLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBfVXBkYXRlIFZvaWNlIFN0YXRlXyBnYXRld2F5IGNvbW1hbmQgb3ZlciB0aGUgZ2F0ZXdheSBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSB2b2ljZSBjaGFubmVsIHRvIGxlYXZlIGlzIGluLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9Wb2ljZSBTdGF0ZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGFzeW5jIGxlYXZlVm9pY2VDaGFubmVsKGd1aWxkSWQ6IEJpZ1N0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBsZWF2ZVZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IFNoYXJkICR7dGhpcy5pZH1gKVxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlZvaWNlU3RhdGVVcGRhdGUsXG4gICAgICBkOiB7XG4gICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYW5uZWxfaWQ6IG51bGwsXG4gICAgICAgIHNlbGZfbXV0ZTogZmFsc2UsXG4gICAgICAgIHNlbGZfZGVhZjogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZENyZWF0ZU9wdGlvbnMge1xuICAvKiogVGhlIHNoYXJkIGlkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGRldGFpbHMgKi9cbiAgY29ubmVjdGlvbjogU2hhcmRHYXRld2F5Q29uZmlnXG4gIC8qKiBUaGUgZXZlbnQgaGFuZGxlcnMgZm9yIGV2ZW50cyBvbiB0aGUgc2hhcmQuICovXG4gIGV2ZW50czogU2hhcmRFdmVudHNcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hhcmRcbiJdLCJuYW1lcyI6WyJHYXRld2F5Q2xvc2VFdmVudENvZGVzIiwiR2F0ZXdheUludGVudHMiLCJHYXRld2F5T3Bjb2RlcyIsImNhbWVsaXplIiwiQ29sbGVjdGlvbiIsImNyZWF0ZUxlYWt5QnVja2V0IiwiZGVsYXkiLCJsb2dnZXIiLCJpbmZsYXRlU3luYyIsIldlYlNvY2tldCIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlNoYXJkU3RhdGUiLCJTaGFyZCIsIm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayIsInByZXZpb3VzU2VxdWVuY2VOdW1iZXIiLCJyYXRlTGltaXRSZXNldEludGVydmFsIiwic3RhdGUiLCJPZmZsaW5lIiwicmVzdW1lR2F0ZXdheVVybCIsImV2ZW50cyIsIm9mZmxpbmVTZW5kUXVldWUiLCJyZXNvbHZlcyIsIk1hcCIsImJ1Y2tldCIsIm1heCIsInJlZmlsbEludGVydmFsIiwicmVmaWxsQW1vdW50IiwiY2FjaGUiLCJyZXF1ZXN0TWVtYmVycyIsImVuYWJsZWQiLCJwZW5kaW5nIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiaWQiLCJjb25uZWN0aW9uIiwiaGVhcnQiLCJhY2tub3dsZWRnZWQiLCJpbnRlcnZhbCIsImdhdGV3YXlDb25maWciLCJjYWxjdWxhdGVTYWZlUmVxdWVzdHMiLCJzYWZlUmVxdWVzdHMiLCJNYXRoIiwiY2VpbCIsImNoZWNrT2ZmbGluZSIsImhpZ2hQcmlvcml0eSIsImlzT3BlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwidW5zaGlmdCIsInB1c2giLCJjbG9zZSIsImNvZGUiLCJyZWFzb24iLCJzb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsImNvbm5lY3QiLCJJZGVudGlmeWluZyIsIlJlc3VtaW5nIiwiaW5jbHVkZXMiLCJDb25uZWN0aW5nIiwiY29ubmVjdGluZyIsInVybCIsIlVSTCIsIm9yaWdpbiIsInNlYXJjaFBhcmFtcyIsInNldCIsInZlcnNpb24iLCJ0b1N0cmluZyIsIm9uZXJyb3IiLCJldmVudCIsImNvbnNvbGUiLCJsb2ciLCJlcnJvciIsIm9uY2xvc2UiLCJoYW5kbGVDbG9zZSIsIm9ubWVzc2FnZSIsIm1lc3NhZ2UiLCJoYW5kbGVNZXNzYWdlIiwib25vcGVuIiwiVW5pZGVudGlmaWVkIiwiY29ubmVjdGVkIiwiaWRlbnRpZnkiLCJSZUlkZW50aWZ5aW5nIiwiaWRlbnRpZnlpbmciLCJyZXF1ZXN0SWRlbnRpZnkiLCJzZW5kIiwib3AiLCJJZGVudGlmeSIsImQiLCJ0b2tlbiIsImNvbXByZXNzIiwicHJvcGVydGllcyIsImludGVudHMiLCJzaGFyZCIsInRvdGFsU2hhcmRzIiwicHJlc2VuY2UiLCJtYWtlUHJlc2VuY2UiLCJpZGVudGlmaWVkIiwiZGVsZXRlIiwicmVzdW1lIiwiUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24iLCJzZXNzaW9uSWQiLCJSZXN1bWUiLCJzZXNzaW9uX2lkIiwic2VxIiwiYWNxdWlyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzaHV0ZG93biIsIlNodXRkb3duIiwic3RvcEhlYXJ0YmVhdGluZyIsIlRlc3RpbmdGaW5pc2hlZCIsImRpc2Nvbm5lY3RlZCIsIlJlc2hhcmRlZCIsIlpvbWJpZWRDb25uZWN0aW9uIiwiRGlzY29ubmVjdGVkIiwiVW5rbm93bk9wY29kZSIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiUmF0ZUxpbWl0ZWQiLCJTZXNzaW9uVGltZWRPdXQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIlVua25vd25FcnJvciIsIkRlY29kZUVycm9yIiwiQWxyZWFkeUF1dGhlbnRpY2F0ZWQiLCJoYW5kbGVEaXNjb3JkUGFja2V0IiwicGFja2V0IiwibGFzdEFjayIsIkRhdGUiLCJub3ciLCJsYXN0QmVhdCIsInJ0dCIsIkhlYXJ0YmVhdCIsImhlYXJ0YmVhdCIsIkhlbGxvIiwiaGVhcnRiZWF0X2ludGVydmFsIiwic3RhcnRIZWFydGJlYXRpbmciLCJ3YWl0aW5nIiwiaGVsbG8iLCJIZWFydGJlYXRBQ0siLCJoZWFydGJlYXRBY2siLCJSZWNvbm5lY3QiLCJyZXF1ZXN0ZWRSZWNvbm5lY3QiLCJJbnZhbGlkU2Vzc2lvbiIsInJlc3VtYWJsZSIsImludmFsaWRTZXNzaW9uIiwiZmxvb3IiLCJyYW5kb20iLCJnZXQiLCJ0IiwiQ29ubmVjdGVkIiwicmVzdW1lZCIsIm1hcCIsInBheWxvYWQiLCJyZXN1bWVfZ2F0ZXdheV91cmwiLCJzIiwicHJlUHJvY2Vzc01lc3NhZ2UiLCJkYXRhIiwiQmxvYiIsImFycmF5QnVmZmVyIiwicGFyc2UiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImpvaW5Wb2ljZUNoYW5uZWwiLCJndWlsZElkIiwiY2hhbm5lbElkIiwiZGVidWciLCJWb2ljZVN0YXRlVXBkYXRlIiwiZ3VpbGRfaWQiLCJjaGFubmVsX2lkIiwic2VsZl9tdXRlIiwiQm9vbGVhbiIsInNlbGZNdXRlIiwic2VsZl9kZWFmIiwic2VsZkRlYWYiLCJlZGl0Qm90U3RhdHVzIiwiZWRpdFNoYXJkU3RhdHVzIiwiUHJlc2VuY2VVcGRhdGUiLCJzaW5jZSIsImFmayIsImFjdGl2aXRpZXMiLCJzdGF0dXMiLCJsaW1pdCIsIkd1aWxkTWVtYmVycyIsInVzZXJJZHMiLCJsZW5ndGgiLCJub25jZSIsIm1lbWJlcnMiLCJSZXF1ZXN0R3VpbGRNZW1iZXJzIiwicXVlcnkiLCJ1bmRlZmluZWQiLCJwcmVzZW5jZXMiLCJ1c2VyX2lkcyIsImxlYXZlVm9pY2VDaGFubmVsIl0sIm1hcHBpbmdzIjoiQUFVQSxPQUFTQSwwQkFBQUEsQ0FBc0IsQ0FBRUMsa0JBQUFBLENBQWMsQ0FBRUMsa0JBQUFBLENBQWMsS0FBUSxtQkFBbUIsQUFDMUYsUUFBU0MsWUFBQUEsQ0FBUSxDQUFFQyxjQUFBQSxDQUFVLENBQUVDLHFCQUFBQSxDQUFpQixDQUFFQyxTQUFBQSxDQUFLLENBQUVDLFVBQUFBLENBQU0sS0FBUSxtQkFBbUIsQUFDMUYsUUFBU0MsZUFBQUEsQ0FBVyxLQUFRLFdBQVcsQUFDdkMsUUFBT0MsTUFBZSxJQUFJLEFBRzFCLFFBQVNDLHlCQUFBQSxDQUFxQixDQUFFQyxjQUFBQSxDQUFVLEtBQVEsWUFBWSxBQUU5RCxRQUFPLE1BQU1DLE1BUVhDLDRCQUFzQyxHQUFHLEFBRXpDQyxDQUFBQSx1QkFBd0MsSUFBSSxBQUU1Q0MsQ0FBQUEsdUJBQWlDLEdBQUssQUFNdENDLENBQUFBLE1BQVFMLEVBQVdNLE9BQU8sQUFFMUJDLENBQUFBLGlCQUEyQixFQUFFLEFBRTdCQyxDQUFBQSxPQUFzQixDQUFDLENBQUMsQUFFeEJDLENBQUFBLGlCQUFpRCxFQUFFLEFBRW5EQyxDQUFBQSxTQUFXLElBQUlDLEdBQXdGLEFBRXZHQyxDQUFBQSxPQUFTbEIsRUFBa0IsQ0FDekJtQixJQUFLLElBQ0xDLGVBQWdCLElBQ2hCQyxhQUFjLEdBQ2hCLEVBQUUsQUFHRkMsQ0FBQUEsTUFBUSxDQUNOQyxlQUFnQixDQUtkQyxRQUFTLENBQUEsRUFFVEMsUUFBUyxJQUFJMUIsQ0FDZixDQUNGLENBQUMsQUFFRDJCLGFBQVlDLENBQTJCLENB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
package/dist/manager.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { Camelize, DiscordGetGatewayBot } from '@discordeno/types';
1
+ import type { AtLeastOne, BigString, Camelize, DiscordGetGatewayBot, DiscordMember, RequestGuildMembers } from '@discordeno/types';
2
2
  import type { LeakyBucket } from '@discordeno/utils';
3
+ import { Collection } from '@discordeno/utils';
3
4
  import Shard from './Shard.js';
4
- import type { ShardEvents } from './types.js';
5
+ import type { ShardEvents, StatusUpdate, UpdateVoiceState } from './types.js';
5
6
  export declare function createGatewayManager(options: CreateGatewayManagerOptions): GatewayManager;
6
7
  export interface CreateGatewayManagerOptions {
7
8
  /**
@@ -78,6 +79,18 @@ export interface CreateGatewayManagerOptions {
78
79
  version?: number;
79
80
  /** The events handlers */
80
81
  events: ShardEvents;
82
+ /** This managers cache related settings. */
83
+ cache?: {
84
+ requestMembers?: {
85
+ /**
86
+ * Whether or not request member requests should be cached.
87
+ * @default false
88
+ */
89
+ enabled?: boolean;
90
+ /** The pending requests. */
91
+ pending: Collection<string, RequestMemberRequest>;
92
+ };
93
+ };
81
94
  }
82
95
  export interface GatewayManager extends Required<CreateGatewayManagerOptions> {
83
96
  /** The max concurrency buckets. Those will be created when the `spawnShards` (which calls `prepareBuckets` under the hood) function gets called. */
@@ -108,5 +121,83 @@ export interface GatewayManager extends Required<CreateGatewayManagerOptions> {
108
121
  kill: (shardId: number) => Promise<void>;
109
122
  /** This function communicates with the parent manager, in order to know whether this manager is allowed to identify a new shard. */
110
123
  requestIdentify: () => Promise<void>;
124
+ /** Calculates the number of shards based on the guild id and total shards. */
125
+ calculateShardId: (guildId: BigString, totalShards?: number) => number;
126
+ /**
127
+ * Connects the bot user to a voice or stage channel.
128
+ *
129
+ * This function sends the _Update Voice State_ gateway command over the gateway behind the scenes.
130
+ *
131
+ * @param guildId - The ID of the guild the voice channel to leave is in.
132
+ * @param channelId - The ID of the channel you want to join.
133
+ *
134
+ * @remarks
135
+ * Requires the `CONNECT` permission.
136
+ *
137
+ * Fires a _Voice State Update_ gateway event.
138
+ *
139
+ * @see {@link https://discord.com/developers/docs/topics/gateway#update-voice-state}
140
+ */
141
+ joinVoiceChannel: (guildId: BigString, channelId: BigString, options?: AtLeastOne<Omit<UpdateVoiceState, 'guildId' | 'channelId'>>) => Promise<void>;
142
+ /**
143
+ * Edits the bot status in all shards that this gateway manages.
144
+ *
145
+ * @param data The status data to set the bots status to.
146
+ * @returns Promise<void>
147
+ */
148
+ editBotStatus: (data: StatusUpdate) => Promise<void>;
149
+ /**
150
+ * Edits the bot's status on one shard.
151
+ *
152
+ * @param shardId The shard id to edit the status for.
153
+ * @param data The status data to set the bots status to.
154
+ * @returns Promise<void>
155
+ */
156
+ editShardStatus: (shardId: number, data: StatusUpdate) => Promise<void>;
157
+ /**
158
+ * Fetches the list of members for a guild over the gateway.
159
+ *
160
+ * @param guildId - The ID of the guild to get the list of members for.
161
+ * @param options - The parameters for the fetching of the members.
162
+ *
163
+ * @remarks
164
+ * If requesting the entire member list:
165
+ * - Requires the `GUILD_MEMBERS` intent.
166
+ *
167
+ * If requesting presences ({@link RequestGuildMembers.presences | presences} set to `true`):
168
+ * - Requires the `GUILD_PRESENCES` intent.
169
+ *
170
+ * If requesting a prefix ({@link RequestGuildMembers.query | query} non-`undefined`):
171
+ * - Returns a maximum of 100 members.
172
+ *
173
+ * If requesting a users by ID ({@link RequestGuildMembers.userIds | userIds} non-`undefined`):
174
+ * - Returns a maximum of 100 members.
175
+ *
176
+ * Fires a _Guild Members Chunk_ gateway event for every 1000 members fetched.
177
+ *
178
+ * @see {@link https://discord.com/developers/docs/topics/gateway#request-guild-members}
179
+ */
180
+ requestMembers: (guildId: BigString, options?: Omit<RequestGuildMembers, 'guildId'>) => Promise<Camelize<DiscordMember[]>>;
181
+ /**
182
+ * Leaves the voice channel the bot user is currently in.
183
+ *
184
+ * This function sends the _Update Voice State_ gateway command over the gateway behind the scenes.
185
+ *
186
+ * @param guildId - The ID of the guild the voice channel to leave is in.
187
+ *
188
+ * @remarks
189
+ * Fires a _Voice State Update_ gateway event.
190
+ *
191
+ * @see {@link https://discord.com/developers/docs/topics/gateway#update-voice-state}
192
+ */
193
+ leaveVoiceChannel: (guildId: BigString) => Promise<void>;
194
+ }
195
+ export interface RequestMemberRequest {
196
+ /** The unique nonce for this request. */
197
+ nonce: string;
198
+ /** The resolver handler to run when all members arrive. */
199
+ resolve: (value: Camelize<DiscordMember[]> | PromiseLike<Camelize<DiscordMember[]>>) => void;
200
+ /** The members that have already arrived for this request. */
201
+ members: Camelize<DiscordMember[]>;
111
202
  }
112
203
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAqKzF;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oFAAoF;IACpF,UAAU,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,UAAU,CAAC,EAAE;QACX;;;WAGG;QACH,EAAE,EAAE,MAAM,CAAA;QACV;;;WAGG;QACH,OAAO,EAAE,MAAM,CAAA;QACf;;;WAGG;QACH,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ,CAAC,2BAA2B,CAAC;IAC3E,oJAAoJ;IACpJ,OAAO,EAAE,GAAG,CACV,MAAM,EACN;QACE,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;QAC/C,IAAI,EAAE,WAAW,CAAA;KAClB,CACF,CAAA;IACD,mCAAmC;IACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC1B,4EAA4E;IAC5E,oBAAoB,EAAE,MAAM,MAAM,CAAA;IAClC,gEAAgE;IAChE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IAC9C,8EAA8E;IAC9E,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,wCAAwC;IACxC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,2BAA2B;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,sLAAsL;IACtL,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5F,8HAA8H;IAC9H,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,4GAA4G;IAC5G,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,oIAAoI;IACpI,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
package/dist/manager.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createLeakyBucket as e,delay as t}from"@discordeno/utils";import r from"./Shard.js";export function createGatewayManager(s){s.connection||(s.connection={url:"wss://gateway.discord.gg",shards:1,sessionStartLimit:{maxConcurrency:1,remaining:1e3,total:1e3,resetAfter:864e5}});let o={events:s.events,compress:s.compress??!1,intents:s.intents??0,properties:{os:s.properties?.os??process.platform,browser:s.properties?.browser??"Discordeno",device:s.properties?.device??"Discordeno"},token:s.token,url:s.url??s.connection.url??"wss://gateway.discord.gg",version:s.version??10,connection:s.connection,totalShards:s.totalShards??s.connection.shards??1,lastShardId:s.lastShardId??0,firstShardId:s.firstShardId??0,totalWorkers:s.totalWorkers??4,shardsPerWorker:s.shardsPerWorker??25,spawnShardDelay:s.spawnShardDelay??5300,shards:new Map,buckets:new Map,calculateTotalShards:()=>o.totalShards<100?o.totalShards:Math.ceil(o.totalShards/(1===o.connection.sessionStartLimit.maxConcurrency?16:o.connection.sessionStartLimit.maxConcurrency))*o.connection.sessionStartLimit.maxConcurrency,calculateWorkerId(e){let t=Math.floor(e/o.shardsPerWorker);return t>=o.totalWorkers&&(t=o.totalWorkers-1),t},prepareBuckets(){for(let t=0;t<o.connection.sessionStartLimit.maxConcurrency;++t)o.buckets.set(t,{workers:[],leak:e({max:1,refillAmount:1,refillInterval:o.spawnShardDelay})});for(let r=o.firstShardId;r<=o.lastShardId;++r){if(r>=o.totalShards)throw Error(`Shard (id: ${r}) is bigger or equal to the used amount of used shards which is ${o.totalShards}`);let s=r%o.connection.sessionStartLimit.maxConcurrency,a=o.buckets.get(s);if(null==a)throw Error(`Shard (id: ${r}) got assigned to an illegal bucket id: ${s}, expected a bucket id between 0 and ${o.connection.sessionStartLimit.maxConcurrency-1}`);let n=o.calculateWorkerId(r),i=a.workers.find(e=>e.id===n);i?i.queue.push(r):a.workers.push({id:n,queue:[r]})}},async spawnShards(){o.prepareBuckets(),await Promise.all([...o.buckets.entries()].map(async([e,t])=>{for(let r of t.workers)for(let s of r.queue)await o.tellWorkerToIdentify(r.id,s,e)}))},async shutdown(e,r){o.shards.forEach(t=>t.close(e,r)),await t(5e3)},tellWorkerToIdentify:async(e,t,r)=>await o.identify(t),async identify(e){let t=this.shards.get(e);return t||(t=new r({id:e,connection:{compress:this.compress,intents:this.intents,properties:this.properties,token:this.token,totalShards:this.totalShards,url:this.url,version:this.version},events:s.events}),this.shards.set(e,t)),await t.identify()},async kill(e){let t=this.shards.get(e);if(t)return this.shards.delete(e),await t.shutdown()},async requestIdentify(){}};return o}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FtZWxpemUsIERpc2NvcmRHZXRHYXRld2F5Qm90IH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IExlYWt5QnVja2V0IH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVMZWFreUJ1Y2tldCwgZGVsYXkgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuaW1wb3J0IHR5cGUgeyBTaGFyZEV2ZW50cyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGlmICghb3B0aW9ucy5jb25uZWN0aW9uKSB7XG4gICAgb3B0aW9ucy5jb25uZWN0aW9uID0ge1xuICAgICAgdXJsOiAnd3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnJyxcbiAgICAgIHNoYXJkczogMSxcbiAgICAgIHNlc3Npb25TdGFydExpbWl0OiB7XG4gICAgICAgIG1heENvbmN1cnJlbmN5OiAxLFxuICAgICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICAgIHRvdGFsOiAxMDAwLFxuICAgICAgICByZXNldEFmdGVyOiAxMDAwICogNjAgKiA2MCAqIDI0LFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXRld2F5OiBHYXRld2F5TWFuYWdlciA9IHtcbiAgICBldmVudHM6IG9wdGlvbnMuZXZlbnRzLFxuICAgIGNvbXByZXNzOiBvcHRpb25zLmNvbXByZXNzID8/IGZhbHNlLFxuICAgIGludGVudHM6IG9wdGlvbnMuaW50ZW50cyA/PyAwLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG9zOiBvcHRpb25zLnByb3BlcnRpZXM/Lm9zID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICBicm93c2VyOiBvcHRpb25zLnByb3BlcnRpZXM/LmJyb3dzZXIgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgICAgZGV2aWNlOiBvcHRpb25zLnByb3BlcnRpZXM/LmRldmljZSA/PyAnRGlzY29yZGVubycsXG4gICAgfSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB1cmw6IG9wdGlvbnMudXJsID8/IG9wdGlvbnMuY29ubmVjdGlvbi51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IG9wdGlvbnMuY29ubmVjdGlvbixcbiAgICB0b3RhbFNoYXJkczogb3B0aW9ucy50b3RhbFNoYXJkcyA/PyBvcHRpb25zLmNvbm5lY3Rpb24uc2hhcmRzID8/IDEsXG4gICAgbGFzdFNoYXJkSWQ6IG9wdGlvbnMubGFzdFNoYXJkSWQgPz8gMCxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNoYXJkczogbmV3IE1hcCgpLFxuICAgIGJ1Y2tldHM6IG5ldyBNYXAoKSxcblxuICAgIGNhbGN1bGF0ZVRvdGFsU2hhcmRzKCkge1xuICAgICAgLy8gQm90cyB1bmRlciAxMDBrIHNlcnZlcnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRvdGFsIHNoYXJkcy5cbiAgICAgIGlmIChnYXRld2F5LnRvdGFsU2hhcmRzIDwgMTAwKSByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYSBtdWx0aXBsZSBvZiBgbWF4Q29uY3VycmVuY3lgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyAvXG4gICAgICAgICAgICAvLyBJZiBgbWF4Q29uY3VycmVuY3lgIGlzIDEgd2UgY2FuIHNhZmVseSB1c2UgMTYuXG4gICAgICAgICAgICAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpLFxuICAgICAgICApICogZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICAvLyBJZ25vcmUgZGVjaW1hbCBudW1iZXJzLlxuICAgICAgbGV0IHdvcmtlcklkID0gTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpXG4gICAgICAvLyBJZiB0aGUgd29ya2VySWQgb3ZlcmZsb3dzIHRoZSBtYXhpbWFsIGFsbG93ZWQgd29ya2VycyB3ZSBieSBkZWZhdWx0IGp1c3QgdXNlIHRvIGxhc3Qgd29ya2VyLlxuICAgICAgaWYgKHdvcmtlcklkID49IGdhdGV3YXkudG90YWxXb3JrZXJzKSB7XG4gICAgICAgIC8vIFRoZSBJZCBvZiB0aGUgbGFzdCBhdmFpbGFibGUgd29ya2VyIGlzIHRvdGFsIC0xXG4gICAgICAgIHdvcmtlcklkID0gZ2F0ZXdheS50b3RhbFdvcmtlcnMgLSAxXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JrZXJJZFxuICAgIH0sXG4gICAgcHJlcGFyZUJ1Y2tldHMoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeTsgKytpKSB7XG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5zZXQoaSwge1xuICAgICAgICAgIHdvcmtlcnM6IFtdLFxuICAgICAgICAgIGxlYWs6IGNyZWF0ZUxlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogMSxcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgbnVtYmVyIHdoaWNoIGlzIHByb3ZlbiB0byBiZSB3b3JraW5nIGRvbnQgY2hhbmdlXG4gICAgICAgICAgICByZWZpbGxJbnRlcnZhbDogZ2F0ZXdheS5zcGF3blNoYXJkRGVsYXksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIE9SR0FOSVpFIEFMTCBTSEFSRFMgSU5UTyBUSEVJUiBPV04gQlVDS0VUU1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBpZiAoc2hhcmRJZCA+PSBnYXRld2F5LnRvdGFsU2hhcmRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGlzIGJpZ2dlciBvciBlcXVhbCB0byB0aGUgdXNlZCBhbW91bnQgb2YgdXNlZCBzaGFyZHMgd2hpY2ggaXMgJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWNrZXRJZCA9IHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3lcbiAgICAgICAgY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChidWNrZXRJZClcbiAgICAgICAgaWYgKGJ1Y2tldCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNoYXJkIChpZDogJHtzaGFyZElkfSkgZ290IGFzc2lnbmVkIHRvIGFuIGlsbGVnYWwgYnVja2V0IGlkOiAke2J1Y2tldElkfSwgZXhwZWN0ZWQgYSBidWNrZXQgaWQgYmV0d2VlbiAwIGFuZCAke1xuICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgLSAxXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGSU5EIEEgUVVFVUUgSU4gVEhJUyBCVUNLRVQgVEhBVCBIQVMgU1BBQ0VcbiAgICAgICAgLy8gY29uc3Qgd29ya2VyID0gYnVja2V0LndvcmtlcnMuZmluZCgodykgPT4gdy5xdWV1ZS5sZW5ndGggPCBnYXRld2F5LnNoYXJkc1Blcldvcmtlcik7XG4gICAgICAgIGNvbnN0IHdvcmtlcklkID0gZ2F0ZXdheS5jYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKVxuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZClcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIC8vIElGIFRIRSBRVUVVRSBIQVMgU1BBQ0UgSlVTVCBBREQgSVQgVE8gVEhJUyBRVUVVRVxuICAgICAgICAgIHdvcmtlci5xdWV1ZS5wdXNoKHNoYXJkSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVja2V0LndvcmtlcnMucHVzaCh7IGlkOiB3b3JrZXJJZCwgcXVldWU6IFtzaGFyZElkXSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFBSRVBBUkVTIEFMTCBTSEFSRFMgSU4gU1BFQ0lGSUMgQlVDS0VUU1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIC8vIFByZWZlciBjb25jdXJyZW5jeSBvZiBmb3JFYWNoIGluc3RlYWQgb2YgZm9yb2ZcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC8vIGdhdGV3YXkuYnVja2V0cy5mb3JFYWNoKGFzeW5jIChidWNrZXQsIGJ1Y2tldElkKSA9PiB7XG4gICAgICAvLyAgIGZvciAoY29uc3Qgd29ya2VyIG9mIGJ1Y2tldC53b3JrZXJzKSB7XG4gICAgICAvLyAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgLy8gICAgICAgYXdhaXQgZ2F0ZXdheS50ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICB9LFxuICAgIGFzeW5jIHNodXRkb3duKGNvZGUsIHJlYXNvbikge1xuICAgICAgZ2F0ZXdheS5zaGFyZHMuZm9yRWFjaCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpXG5cbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApXG4gICAgfSxcbiAgICBhc3luYyB0ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXJJZCwgc2hhcmRJZCwgYnVja2V0SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IHRoaXMuY29tcHJlc3MsXG4gICAgICAgICAgICBpbnRlbnRzOiB0aGlzLmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiB0aGlzLnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuaWRlbnRpZnkoKVxuICAgIH0sXG4gICAgYXN5bmMga2lsbChzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBpZiAoIXNoYXJkKSByZXR1cm5cblxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuc2h1dGRvd24oKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKSB7fSxcbiAgfVxuXG4gIHJldHVybiBnYXRld2F5XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR2F0ZXdheU1hbmFnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBmaXJzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBmaXJzdFNoYXJkSWQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBsYXN0IFNoYXJkIHdoaWNoIHNob3VsZCBnZXQgY29udHJvbGxlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGxhc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3Bhd25pbmcgbmV4dCBzaGFyZC4gT1BUSU1BTCBJUyBBQk9WRSA1MTAwLiBZT1UgRE9OJ1QgV0FOVCBUTyBISVQgVEhFIFJBVEUgTElNSVQhISFcbiAgICogQGRlZmF1bHQgNTMwMFxuICAgKi9cbiAgc3Bhd25TaGFyZERlbGF5PzogbnVtYmVyXG4gIC8qKlxuICAgKiBUb3RhbCBhbW91bnQgb2Ygc2hhcmRzIHlvdXIgYm90IHVzZXMuIFVzZWZ1bCBmb3IgemVyby1kb3dudGltZSB1cGRhdGVzIG9yIHJlc2hhcmRpbmcuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHNoYXJkcyB0byBsb2FkIHBlciB3b3JrZXIuXG4gICAqIEBkZWZhdWx0IDI1XG4gICAqL1xuICBzaGFyZHNQZXJXb3JrZXI/OiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygd29ya2VycyB0byB1c2UgZm9yIHlvdXIgYm90LlxuICAgKiBAZGVmYXVsdCA0XG4gICAqL1xuICB0b3RhbFdvcmtlcnM/OiBudW1iZXJcbiAgLyoqIEltcG9ydGFudCBkYXRhIHdoaWNoIGlzIHVzZWQgYnkgdGhlIG1hbmFnZXIgdG8gY29ubmVjdCBzaGFyZHMgdG8gdGhlIGdhdGV3YXkuICovXG4gIGNvbm5lY3Rpb24/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD5cbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzPzogYm9vbGVhblxuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW50ZW50IHZhbHVlIG9mIHRoZSBldmVudHMgd2hpY2ggdGhlIHNoYXJkIHNob3VsZCByZWNlaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpbnRlbnRzPzogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsPzogc3RyaW5nXG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IG51bWJlclxuICAvKiogVGhlIGV2ZW50cyBoYW5kbGVycyAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICBsZWFrOiBMZWFreUJ1Y2tldFxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS4gRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy4gKi9cbiAgdGVsbFdvcmtlclRvSWRlbnRpZnk6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRlbGwgdGhlIG1hbmFnZXIgdG8gaWRlbnRpZnkgYSBTaGFyZC4gSWYgdGhpcyBTaGFyZCBpcyBub3QgYWxyZWFkeSBtYW5hZ2VkIHRoaXMgd2lsbCBhbHNvIGFkZCB0aGUgU2hhcmQgdG8gdGhlIG1hbmFnZXIuICovXG4gIGlkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBLaWxsIGEgc2hhcmQuIENsb3NlIGEgc2hhcmRzIGNvbm5lY3Rpb24gdG8gRGlzY29yZCdzIGdhdGV3YXkgKGlmIGFueSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBtYW5hZ2VyLiAqL1xuICBraWxsOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBwYXJlbnQgbWFuYWdlciwgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIHRoaXMgbWFuYWdlciBpcyBhbGxvd2VkIHRvIGlkZW50aWZ5IGEgbmV3IHNoYXJkLiAqL1xuICByZXF1ZXN0SWRlbnRpZnk6ICgpID0+IFByb21pc2U8dm9pZD5cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVMZWFreUJ1Y2tldCIsImRlbGF5IiwiU2hhcmQiLCJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uIiwidXJsIiwic2hhcmRzIiwic2Vzc2lvblN0YXJ0TGltaXQiLCJtYXhDb25jdXJyZW5jeSIsInJlbWFpbmluZyIsInRvdGFsIiwicmVzZXRBZnRlciIsImdhdGV3YXkiLCJldmVudHMiLCJjb21wcmVzcyIsImludGVudHMiLCJwcm9wZXJ0aWVzIiwib3MiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJicm93c2VyIiwiZGV2aWNlIiwidG9rZW4iLCJ2ZXJzaW9uIiwidG90YWxTaGFyZHMiLCJsYXN0U2hhcmRJZCIsImZpcnN0U2hhcmRJZCIsInRvdGFsV29ya2VycyIsInNoYXJkc1BlcldvcmtlciIsInNwYXduU2hhcmREZWxheSIsIk1hcCIsImJ1Y2tldHMiLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlV29ya2VySWQiLCJzaGFyZElkIiwid29ya2VySWQiLCJmbG9vciIsInByZXBhcmVCdWNrZXRzIiwiaSIsInNldCIsIndvcmtlcnMiLCJsZWFrIiwibWF4IiwicmVmaWxsQW1vdW50IiwicmVmaWxsSW50ZXJ2YWwiLCJFcnJvciIsImJ1Y2tldElkIiwiYnVja2V0IiwiZ2V0Iiwid29ya2VyIiwiZmluZCIsInciLCJpZCIsInF1ZXVlIiwicHVzaCIsInNwYXduU2hhcmRzIiwiUHJvbWlzZSIsImFsbCIsImVudHJpZXMiLCJtYXAiLCJ0ZWxsV29ya2VyVG9JZGVudGlmeSIsInNodXRkb3duIiwiY29kZSIsInJlYXNvbiIsImZvckVhY2giLCJzaGFyZCIsImNsb3NlIiwiaWRlbnRpZnkiLCJraWxsIiwiZGVsZXRlIiwicmVxdWVzdElkZW50aWZ5Il0sIm1hcHBpbmdzIjoiQUFFQSxPQUFTQSxxQkFBQUEsQ0FBaUIsQ0FBRUMsU0FBQUEsQ0FBSyxLQUFRLG1CQUFtQixBQUM1RCxRQUFPQyxNQUFXLFlBQVksQUFHOUIsUUFBTyxTQUFTQyxxQkFBcUJDLENBQW9DLENBQWtCLENBQ3BGQSxFQUFRQyxVQUFVLEVBQ3JCRCxDQUFBQSxFQUFRQyxVQUFVLENBQUcsQ0FDbkJDLElBQUssMkJBQ0xDLE9BQVEsRUFDUkMsa0JBQW1CLENBQ2pCQyxlQUFnQixFQUNoQkMsVUFBVyxJQUNYQyxNQUFPLElBQ1BDLFdBQVksS0FDZCxDQUNGLENBQUEsRUFHRixJQUFNQyxFQUEwQixDQUM5QkMsT0FBUVYsRUFBUVUsTUFBTSxDQUN0QkMsU0FBVVgsRUFBUVcsUUFBUSxFQUFJLENBQUEsRUFDOUJDLFFBQVNaLEVBQVFZLE9BQU8sRUFBSSxFQUM1QkMsV0FBWSxDQUNWQyxHQUFJZCxFQUFRYSxVQUFVLEVBQUVDLElBQU1DLFFBQVFDLFFBQVEsQ0FDOUNDLFFBQVNqQixFQUFRYSxVQUFVLEVBQUVJLFNBQVcsYUFDeENDLE9BQVFsQixFQUFRYSxVQUFVLEVBQUVLLFFBQVUsWUFDeEMsRUFDQUMsTUFBT25CLEVBQVFtQixLQUFLLENBQ3BCakIsSUFBS0YsRUFBUUUsR0FBRyxFQUFJRixFQUFRQyxVQUFVLENBQUNDLEdBQUcsRUFBSSwyQkFDOUNrQixRQUFTcEIsRUFBUW9CLE9BQU8sRUFBSSxHQUM1Qm5CLFdBQVlELEVBQVFDLFVBQVUsQ0FDOUJvQixZQUFhckIsRUFBUXFCLFdBQVcsRUFBSXJCLEVBQVFDLFVBQVUsQ0FBQ0UsTUFBTSxFQUFJLEVBQ2pFbUIsWUFBYXRCLEVBQVFzQixXQUFXLEVBQUksRUFDcENDLGFBQWN2QixFQUFRdUIsWUFBWSxFQUFJLEVBQ3RDQyxhQUFjeEIsRUFBUXdCLFlBQVksRUFBSSxFQUN0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
1
+ import{Collection as e,createLeakyBucket as t,delay as r,logger as a}from"@discordeno/utils";import s from"./Shard.js";export function createGatewayManager(n){n.connection||(n.connection={url:"wss://gateway.discord.gg",shards:1,sessionStartLimit:{maxConcurrency:1,remaining:1e3,total:1e3,resetAfter:864e5}});let o={events:n.events,compress:n.compress??!1,intents:n.intents??0,properties:{os:n.properties?.os??process.platform,browser:n.properties?.browser??"Discordeno",device:n.properties?.device??"Discordeno"},token:n.token,url:n.url??n.connection.url??"wss://gateway.discord.gg",version:n.version??10,connection:n.connection,totalShards:n.totalShards??n.connection.shards??1,lastShardId:n.lastShardId??0,firstShardId:n.firstShardId??0,totalWorkers:n.totalWorkers??4,shardsPerWorker:n.shardsPerWorker??25,spawnShardDelay:n.spawnShardDelay??5300,shards:new Map,buckets:new Map,cache:{requestMembers:{enabled:n.cache?.requestMembers?.enabled??!1,pending:new e}},calculateTotalShards:()=>o.totalShards<100?(a.debug(`[Gateway] Calculating total shards: ${o.totalShards}`),o.totalShards):(a.debug("[Gateway] Calculating total shards",o.totalShards,o.connection.sessionStartLimit.maxConcurrency),Math.ceil(o.totalShards/(1===o.connection.sessionStartLimit.maxConcurrency?16:o.connection.sessionStartLimit.maxConcurrency))*o.connection.sessionStartLimit.maxConcurrency),calculateWorkerId(e){let t=Math.floor(e/o.shardsPerWorker);return t>=o.totalWorkers&&(t=o.totalWorkers-1),a.debug(`[Gateway] Calculating workerId: Shard: ${e} -> Worker: ${t} -> Per Worker: ${o.shardsPerWorker} -> Total: ${o.totalWorkers}`),t},prepareBuckets(){for(let e=0;e<o.connection.sessionStartLimit.maxConcurrency;++e)a.debug(`[Gateway] Preparing buckets for concurrency: ${e}`),o.buckets.set(e,{workers:[],leak:t({max:1,refillAmount:1,refillInterval:o.spawnShardDelay})});for(let r=o.firstShardId;r<=o.lastShardId;++r){if(a.debug(`[Gateway] Preparing buckets for shard: ${r}`),r>=o.totalShards)throw Error(`Shard (id: ${r}) is bigger or equal to the used amount of used shards which is ${o.totalShards}`);let s=r%o.connection.sessionStartLimit.maxConcurrency,n=o.buckets.get(s);if(!n)throw Error(`Shard (id: ${r}) got assigned to an illegal bucket id: ${s}, expected a bucket id between 0 and ${o.connection.sessionStartLimit.maxConcurrency-1}`);let i=o.calculateWorkerId(r),d=n.workers.find(e=>e.id===i);d?d.queue.push(r):n.workers.push({id:i,queue:[r]})}},async spawnShards(){o.prepareBuckets(),await Promise.all([...o.buckets.entries()].map(async([e,t])=>{for(let r of t.workers)for(let a of r.queue)await o.tellWorkerToIdentify(r.id,a,e)}))},async shutdown(e,t){o.shards.forEach(r=>r.close(e,t)),await r(5e3)},tellWorkerToIdentify:async(e,t,r)=>(a.debug(`[Gateway] tell worker to identify (${e}, ${t}, ${r})`),await o.identify(t)),async identify(e){let t=this.shards.get(e);return a.debug(`[Gateway] identifying ${t?"existing":"new"} shard (${e})`),t||(t=new s({id:e,connection:{compress:this.compress,intents:this.intents,properties:this.properties,token:this.token,totalShards:this.totalShards,url:this.url,version:this.version},events:n.events}),this.shards.set(e,t)),await t.identify()},async kill(e){let t=this.shards.get(e);return t?(a.debug(`[Gateway] kill shard (${e})`),this.shards.delete(e),await t.shutdown()):a.debug(`[Gateway] kill shard but not found (${e})`)},async requestIdentify(){a.debug("[Gateway] requesting identify")},calculateShardId:(e,t)=>(t||(t=o.totalShards),1===t)?(a.debug("[Gateway] calculateShardId (1 shard)"),0):(a.debug(`[Gateway] calculateShardId (guildId: ${e}, totalShards: ${t})`),Number((BigInt(e)>>22n)%BigInt(t))),async joinVoiceChannel(e,t,r){let s=o.calculateShardId(e),n=o.shards.get(s);if(!n)throw Error(`Shard (id: ${s} not found`);a.debug(`[Gateway] joinVoiceChannel guildId: ${e} channelId: ${t}`),n.joinVoiceChannel(e,t,r)},async editBotStatus(e){a.debug(`[Gateway] editBotStatus data: ${JSON.stringify(e)}`),await Promise.all([...o.shards.values()].map(async t=>{o.editShardStatus(t.id,e)}))},async editShardStatus(e,t){let r=o.shards.get(e);if(!r)throw Error(`Shard (id: ${e}) not found.`);return a.debug(`[Gateway] editShardStatus shardId: ${e} -> data: ${JSON.stringify(t)}`),await r.editShardStatus(t)},async requestMembers(e,t){let r=o.calculateShardId(e),s=o.shards.get(r);if(!s)throw Error(`Shard (id: ${r}) not found.`);return a.debug(`[Gateway] requestMembers guildId: ${e} -> options ${JSON.stringify(t)}`),await s.requestMembers(e,t)},async leaveVoiceChannel(e){let t=o.calculateShardId(e),r=o.shards.get(t);if(!r)throw Error(`Shard (id: ${t} not found`);return a.debug(`[Gateway] leaveVoiceChannel guildId: ${e} Shard ${t}`),await r.leaveVoiceChannel(e)}};return o}
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXRMZWFzdE9uZSwgQmlnU3RyaW5nLCBDYW1lbGl6ZSwgRGlzY29yZEdldEdhdGV3YXlCb3QsIERpc2NvcmRNZW1iZXIsIFJlcXVlc3RHdWlsZE1lbWJlcnMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgTGVha3lCdWNrZXQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IENvbGxlY3Rpb24sIGNyZWF0ZUxlYWt5QnVja2V0LCBkZWxheSwgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgU2hhcmQgZnJvbSAnLi9TaGFyZC5qcydcbmltcG9ydCB0eXBlIHsgU2hhcmRFdmVudHMsIFN0YXR1c1VwZGF0ZSwgVXBkYXRlVm9pY2VTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGlmICghb3B0aW9ucy5jb25uZWN0aW9uKSB7XG4gICAgb3B0aW9ucy5jb25uZWN0aW9uID0ge1xuICAgICAgdXJsOiAnd3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnJyxcbiAgICAgIHNoYXJkczogMSxcbiAgICAgIHNlc3Npb25TdGFydExpbWl0OiB7XG4gICAgICAgIG1heENvbmN1cnJlbmN5OiAxLFxuICAgICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICAgIHRvdGFsOiAxMDAwLFxuICAgICAgICByZXNldEFmdGVyOiAxMDAwICogNjAgKiA2MCAqIDI0LFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICBjb25zdCBnYXRld2F5OiBHYXRld2F5TWFuYWdlciA9IHtcbiAgICBldmVudHM6IG9wdGlvbnMuZXZlbnRzLFxuICAgIGNvbXByZXNzOiBvcHRpb25zLmNvbXByZXNzID8/IGZhbHNlLFxuICAgIGludGVudHM6IG9wdGlvbnMuaW50ZW50cyA/PyAwLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIG9zOiBvcHRpb25zLnByb3BlcnRpZXM/Lm9zID8/IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICBicm93c2VyOiBvcHRpb25zLnByb3BlcnRpZXM/LmJyb3dzZXIgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgICAgZGV2aWNlOiBvcHRpb25zLnByb3BlcnRpZXM/LmRldmljZSA/PyAnRGlzY29yZGVubycsXG4gICAgfSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB1cmw6IG9wdGlvbnMudXJsID8/IG9wdGlvbnMuY29ubmVjdGlvbi51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IG9wdGlvbnMuY29ubmVjdGlvbixcbiAgICB0b3RhbFNoYXJkczogb3B0aW9ucy50b3RhbFNoYXJkcyA/PyBvcHRpb25zLmNvbm5lY3Rpb24uc2hhcmRzID8/IDEsXG4gICAgbGFzdFNoYXJkSWQ6IG9wdGlvbnMubGFzdFNoYXJkSWQgPz8gMCxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHNoYXJkczogbmV3IE1hcCgpLFxuICAgIGJ1Y2tldHM6IG5ldyBNYXAoKSxcbiAgICBjYWNoZToge1xuICAgICAgcmVxdWVzdE1lbWJlcnM6IHtcbiAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5jYWNoZT8ucmVxdWVzdE1lbWJlcnM/LmVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICAgIHBlbmRpbmc6IG5ldyBDb2xsZWN0aW9uKCksXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBjYWxjdWxhdGVUb3RhbFNoYXJkcygpIHtcbiAgICAgIC8vIEJvdHMgdW5kZXIgMTAwayBzZXJ2ZXJzIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0b3RhbCBzaGFyZHMuXG4gICAgICBpZiAoZ2F0ZXdheS50b3RhbFNoYXJkcyA8IDEwMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHM6ICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHNgLCBnYXRld2F5LnRvdGFsU2hhcmRzLCBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICAvLyBDYWxjdWxhdGUgYSBtdWx0aXBsZSBvZiBgbWF4Q29uY3VycmVuY3lgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyAvXG4gICAgICAgICAgICAvLyBJZiBgbWF4Q29uY3VycmVuY3lgIGlzIDEgd2UgY2FuIHNhZmVseSB1c2UgMTYuXG4gICAgICAgICAgICAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpLFxuICAgICAgICApICogZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICAvLyBJZ25vcmUgZGVjaW1hbCBudW1iZXJzLlxuICAgICAgbGV0IHdvcmtlcklkID0gTWF0aC5mbG9vcihzaGFyZElkIC8gZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpXG4gICAgICAvLyBJZiB0aGUgd29ya2VySWQgb3ZlcmZsb3dzIHRoZSBtYXhpbWFsIGFsbG93ZWQgd29ya2VycyB3ZSBieSBkZWZhdWx0IGp1c3QgdXNlIHRvIGxhc3Qgd29ya2VyLlxuICAgICAgaWYgKHdvcmtlcklkID49IGdhdGV3YXkudG90YWxXb3JrZXJzKSB7XG4gICAgICAgIC8vIFRoZSBJZCBvZiB0aGUgbGFzdCBhdmFpbGFibGUgd29ya2VyIGlzIHRvdGFsIC0xXG4gICAgICAgIHdvcmtlcklkID0gZ2F0ZXdheS50b3RhbFdvcmtlcnMgLSAxXG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFtHYXRld2F5XSBDYWxjdWxhdGluZyB3b3JrZXJJZDogU2hhcmQ6ICR7c2hhcmRJZH0gLT4gV29ya2VyOiAke3dvcmtlcklkfSAtPiBQZXIgV29ya2VyOiAke2dhdGV3YXkuc2hhcmRzUGVyV29ya2VyfSAtPiBUb3RhbDogJHtnYXRld2F5LnRvdGFsV29ya2Vyc31gLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4gd29ya2VySWRcbiAgICB9LFxuICAgIHByZXBhcmVCdWNrZXRzKCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3k7ICsraSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtHYXRld2F5XSBQcmVwYXJpbmcgYnVja2V0cyBmb3IgY29uY3VycmVuY3k6ICR7aX1gKVxuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuc2V0KGksIHtcbiAgICAgICAgICB3b3JrZXJzOiBbXSxcbiAgICAgICAgICBsZWFrOiBjcmVhdGVMZWFreUJ1Y2tldCh7XG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgICByZWZpbGxBbW91bnQ6IDEsXG4gICAgICAgICAgICAvLyBzcGVjaWFsIG51bWJlciB3aGljaCBpcyBwcm92ZW4gdG8gYmUgd29ya2luZyBkb250IGNoYW5nZVxuICAgICAgICAgICAgcmVmaWxsSW50ZXJ2YWw6IGdhdGV3YXkuc3Bhd25TaGFyZERlbGF5LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBPUkdBTklaRSBBTEwgU0hBUkRTIElOVE8gVEhFSVIgT1dOIEJVQ0tFVFNcbiAgICAgIGZvciAobGV0IHNoYXJkSWQgPSBnYXRld2F5LmZpcnN0U2hhcmRJZDsgc2hhcmRJZCA8PSBnYXRld2F5Lmxhc3RTaGFyZElkOyArK3NoYXJkSWQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gUHJlcGFyaW5nIGJ1Y2tldHMgZm9yIHNoYXJkOiAke3NoYXJkSWR9YClcbiAgICAgICAgaWYgKHNoYXJkSWQgPj0gZ2F0ZXdheS50b3RhbFNoYXJkcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBpcyBiaWdnZXIgb3IgZXF1YWwgdG8gdGhlIHVzZWQgYW1vdW50IG9mIHVzZWQgc2hhcmRzIHdoaWNoIGlzICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVja2V0SWQgPSBzaGFyZElkICUgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5XG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoYnVja2V0SWQpXG4gICAgICAgIGlmICghYnVja2V0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNoYXJkIChpZDogJHtzaGFyZElkfSkgZ290IGFzc2lnbmVkIHRvIGFuIGlsbGVnYWwgYnVja2V0IGlkOiAke2J1Y2tldElkfSwgZXhwZWN0ZWQgYSBidWNrZXQgaWQgYmV0d2VlbiAwIGFuZCAke1xuICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgLSAxXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBGSU5EIEEgUVVFVUUgSU4gVEhJUyBCVUNLRVQgVEhBVCBIQVMgU1BBQ0VcbiAgICAgICAgLy8gY29uc3Qgd29ya2VyID0gYnVja2V0LndvcmtlcnMuZmluZCgodykgPT4gdy5xdWV1ZS5sZW5ndGggPCBnYXRld2F5LnNoYXJkc1Blcldvcmtlcik7XG4gICAgICAgIGNvbnN0IHdvcmtlcklkID0gZ2F0ZXdheS5jYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKVxuICAgICAgICBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LmlkID09PSB3b3JrZXJJZClcbiAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgIC8vIElGIFRIRSBRVUVVRSBIQVMgU1BBQ0UgSlVTVCBBREQgSVQgVE8gVEhJUyBRVUVVRVxuICAgICAgICAgIHdvcmtlci5xdWV1ZS5wdXNoKHNoYXJkSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVja2V0LndvcmtlcnMucHVzaCh7IGlkOiB3b3JrZXJJZCwgcXVldWU6IFtzaGFyZElkXSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFBSRVBBUkVTIEFMTCBTSEFSRFMgSU4gU1BFQ0lGSUMgQlVDS0VUU1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIC8vIFByZWZlciBjb25jdXJyZW5jeSBvZiBmb3JFYWNoIGluc3RlYWQgb2YgZm9yb2ZcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9LFxuICAgIGFzeW5jIHNodXRkb3duKGNvZGUsIHJlYXNvbikge1xuICAgICAgZ2F0ZXdheS5zaGFyZHMuZm9yRWFjaCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpXG5cbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApXG4gICAgfSxcbiAgICBhc3luYyB0ZWxsV29ya2VyVG9JZGVudGlmeSh3b3JrZXJJZCwgc2hhcmRJZCwgYnVja2V0SWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIHRlbGwgd29ya2VyIHRvIGlkZW50aWZ5ICgke3dvcmtlcklkfSwgJHtzaGFyZElkfSwgJHtidWNrZXRJZH0pYClcbiAgICAgIHJldHVybiBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gaWRlbnRpZnlpbmcgJHtzaGFyZCA/ICdleGlzdGluZycgOiAnbmV3J30gc2hhcmQgKCR7c2hhcmRJZH0pYClcblxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IHRoaXMuY29tcHJlc3MsXG4gICAgICAgICAgICBpbnRlbnRzOiB0aGlzLmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiB0aGlzLnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuaWRlbnRpZnkoKVxuICAgIH0sXG4gICAgYXN5bmMga2lsbChzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gdGhpcy5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHJldHVybiBsb2dnZXIuZGVidWcoYFtHYXRld2F5XSBraWxsIHNoYXJkIGJ1dCBub3QgZm91bmQgKCR7c2hhcmRJZH0pYClcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0ga2lsbCBzaGFyZCAoJHtzaGFyZElkfSlgKVxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQuc2h1dGRvd24oKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFtHYXRld2F5XSByZXF1ZXN0aW5nIGlkZW50aWZ5YClcbiAgICB9LFxuXG4gICAgLy8gSGVscGVycyBtZXRob2RzIGJlbG93IHRoaXNcblxuICAgIGNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZCwgdG90YWxTaGFyZHMpIHtcbiAgICAgIC8vIElmIG5vbmUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgdG90YWwgc2hhcmRzIG51bWJlciBmcm9tIGdhdGV3YXkgb2JqZWN0LlxuICAgICAgaWYgKCF0b3RhbFNoYXJkcykgdG90YWxTaGFyZHMgPSBnYXRld2F5LnRvdGFsU2hhcmRzXG4gICAgICAvLyBJZiBpdCBpcyBvbmx5IDEgc2hhcmQsIGl0IHdpbGwgYWx3YXlzIGJlIHNoYXJkIGlkIDBcbiAgICAgIGlmICh0b3RhbFNoYXJkcyA9PT0gMSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFtHYXRld2F5XSBjYWxjdWxhdGVTaGFyZElkICgxIHNoYXJkKWApXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGNhbGN1bGF0ZVNoYXJkSWQgKGd1aWxkSWQ6ICR7Z3VpbGRJZH0sIHRvdGFsU2hhcmRzOiAke3RvdGFsU2hhcmRzfSlgKVxuICAgICAgcmV0dXJuIE51bWJlcigoQmlnSW50KGd1aWxkSWQpID4+IDIybikgJSBCaWdJbnQodG90YWxTaGFyZHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVm9pY2VDaGFubmVsKGd1aWxkSWQsIGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuICAgICAgY29uc3Qgc2hhcmQgPSBnYXRld2F5LnNoYXJkcy5nZXQoc2hhcmRJZClcbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0gbm90IGZvdW5kYClcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gam9pblZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IGNoYW5uZWxJZDogJHtjaGFubmVsSWR9YClcbiAgICAgIHNoYXJkLmpvaW5Wb2ljZUNoYW5uZWwoZ3VpbGRJZCwgY2hhbm5lbElkLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90U3RhdHVzKGRhdGEpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGVkaXRCb3RTdGF0dXMgZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIFsuLi5nYXRld2F5LnNoYXJkcy52YWx1ZXMoKV0ubWFwKGFzeW5jIChzaGFyZCkgPT4ge1xuICAgICAgICAgIGdhdGV3YXkuZWRpdFNoYXJkU3RhdHVzKHNoYXJkLmlkLCBkYXRhKVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNoYXJkU3RhdHVzKHNoYXJkSWQsIGRhdGEpIHtcbiAgICAgIGNvbnN0IHNoYXJkID0gZ2F0ZXdheS5zaGFyZHMuZ2V0KHNoYXJkSWQpXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBub3QgZm91bmQuYClcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gZWRpdFNoYXJkU3RhdHVzIHNoYXJkSWQ6ICR7c2hhcmRJZH0gLT4gZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKVxuICAgICAgcmV0dXJuIGF3YWl0IHNoYXJkLmVkaXRTaGFyZFN0YXR1cyhkYXRhKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXF1ZXN0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG4gICAgICBjb25zdCBzaGFyZCA9IGdhdGV3YXkuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgaWYgKCFzaGFyZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNoYXJkIChpZDogJHtzaGFyZElkfSkgbm90IGZvdW5kLmApXG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIHJlcXVlc3RNZW1iZXJzIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gLT4gb3B0aW9ucyAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICByZXR1cm4gYXdhaXQgc2hhcmQucmVxdWVzdE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVWb2ljZUNoYW5uZWwoZ3VpbGRJZCkge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuICAgICAgY29uc3Qgc2hhcmQgPSBnYXRld2F5LnNoYXJkcy5nZXQoc2hhcmRJZClcbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0gbm90IGZvdW5kYClcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gbGVhdmVWb2ljZUNoYW5uZWwgZ3VpbGRJZDogJHtndWlsZElkfSBTaGFyZCAke3NoYXJkSWR9YClcbiAgICAgIHJldHVybiBhd2FpdCBzaGFyZC5sZWF2ZVZvaWNlQ2hhbm5lbChndWlsZElkKVxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gZ2F0ZXdheVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgZmlyc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZmlyc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgbGFzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBsYXN0U2hhcmRJZD86IG51bWJlclxuICAvKipcbiAgICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNwYXduaW5nIG5leHQgc2hhcmQuIE9QVElNQUwgSVMgQUJPVkUgNTEwMC4gWU9VIERPTidUIFdBTlQgVE8gSElUIFRIRSBSQVRFIExJTUlUISEhXG4gICAqIEBkZWZhdWx0IDUzMDBcbiAgICovXG4gIHNwYXduU2hhcmREZWxheT86IG51bWJlclxuICAvKipcbiAgICogVG90YWwgYW1vdW50IG9mIHNoYXJkcyB5b3VyIGJvdCB1c2VzLiBVc2VmdWwgZm9yIHplcm8tZG93bnRpbWUgdXBkYXRlcyBvciByZXNoYXJkaW5nLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkcz86IG51bWJlclxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiBzaGFyZHMgdG8gbG9hZCBwZXIgd29ya2VyLlxuICAgKiBAZGVmYXVsdCAyNVxuICAgKi9cbiAgc2hhcmRzUGVyV29ya2VyPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgYW1vdW50IG9mIHdvcmtlcnMgdG8gdXNlIGZvciB5b3VyIGJvdC5cbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgdG90YWxXb3JrZXJzPzogbnVtYmVyXG4gIC8qKiBJbXBvcnRhbnQgZGF0YSB3aGljaCBpcyB1c2VkIGJ5IHRoZSBtYW5hZ2VyIHRvIGNvbm5lY3Qgc2hhcmRzIHRvIHRoZSBnYXRld2F5LiAqL1xuICBjb25uZWN0aW9uPzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+XG4gIC8qKiBXaGV0aGVyIGluY29taW5nIHBheWxvYWRzIGFyZSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb21wcmVzcz86IGJvb2xlYW5cbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50cz86IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllcz86IHtcbiAgICAvKiogT3BlcmF0aW5nIHN5c3RlbSB0aGUgc2hhcmQgcnVucyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZGFyd2luXCIgfCBcImxpbnV4XCIgfCBcIndpbmRvd3NcIlxuICAgICAqL1xuICAgIG9zOiBzdHJpbmdcbiAgICAvKiogVGhlIFwiYnJvd3NlclwiIHdoZXJlIHRoaXMgc2hhcmQgaXMgcnVubmluZyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgYnJvd3Nlcjogc3RyaW5nXG4gICAgLyoqIFRoZSBkZXZpY2Ugb24gd2hpY2ggdGhlIHNoYXJkIGlzIHJ1bm5pbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGRldmljZTogc3RyaW5nXG4gIH1cbiAgLyoqIEJvdCB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZCAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKiBUaGUgVVJMIG9mIHRoZSBnYXRld2F5IHdoaWNoIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwid3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnXCJcbiAgICovXG4gIHVybD86IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb24/OiBudW1iZXJcbiAgLyoqIFRoZSBldmVudHMgaGFuZGxlcnMgKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50c1xuICAvKiogVGhpcyBtYW5hZ2VycyBjYWNoZSByZWxhdGVkIHNldHRpbmdzLiAqL1xuICBjYWNoZT86IHtcbiAgICByZXF1ZXN0TWVtYmVycz86IHtcbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciBvciBub3QgcmVxdWVzdCBtZW1iZXIgcmVxdWVzdHMgc2hvdWxkIGJlIGNhY2hlZC5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAvKiogVGhlIHBlbmRpbmcgcmVxdWVzdHMuICovXG4gICAgICBwZW5kaW5nOiBDb2xsZWN0aW9uPHN0cmluZywgUmVxdWVzdE1lbWJlclJlcXVlc3Q+XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICBsZWFrOiBMZWFreUJ1Y2tldFxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS4gRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy4gKi9cbiAgdGVsbFdvcmtlclRvSWRlbnRpZnk6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRlbGwgdGhlIG1hbmFnZXIgdG8gaWRlbnRpZnkgYSBTaGFyZC4gSWYgdGhpcyBTaGFyZCBpcyBub3QgYWxyZWFkeSBtYW5hZ2VkIHRoaXMgd2lsbCBhbHNvIGFkZCB0aGUgU2hhcmQgdG8gdGhlIG1hbmFnZXIuICovXG4gIGlkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBLaWxsIGEgc2hhcmQuIENsb3NlIGEgc2hhcmRzIGNvbm5lY3Rpb24gdG8gRGlzY29yZCdzIGdhdGV3YXkgKGlmIGFueSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBtYW5hZ2VyLiAqL1xuICBraWxsOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBwYXJlbnQgbWFuYWdlciwgaW4gb3JkZXIgdG8ga25vdyB3aGV0aGVyIHRoaXMgbWFuYWdlciBpcyBhbGxvd2VkIHRvIGlkZW50aWZ5IGEgbmV3IHNoYXJkLiAqL1xuICByZXF1ZXN0SWRlbnRpZnk6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBzaGFyZHMgYmFzZWQgb24gdGhlIGd1aWxkIGlkIGFuZCB0b3RhbCBzaGFyZHMuICovXG4gIGNhbGN1bGF0ZVNoYXJkSWQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHRvdGFsU2hhcmRzPzogbnVtYmVyKSA9PiBudW1iZXJcbiAgLyoqXG4gICAqIENvbm5lY3RzIHRoZSBib3QgdXNlciB0byBhIHZvaWNlIG9yIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgeW91IHdhbnQgdG8gam9pbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDT05ORUNUYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9Wb2ljZSBTdGF0ZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGpvaW5Wb2ljZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcsIGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQXRMZWFzdE9uZTxPbWl0PFVwZGF0ZVZvaWNlU3RhdGUsICdndWlsZElkJyB8ICdjaGFubmVsSWQnPj4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBib3Qgc3RhdHVzIGluIGFsbCBzaGFyZHMgdGhhdCB0aGlzIGdhdGV3YXkgbWFuYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIHN0YXR1cyBkYXRhIHRvIHNldCB0aGUgYm90cyBzdGF0dXMgdG8uXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAgICovXG4gIGVkaXRCb3RTdGF0dXM6IChkYXRhOiBTdGF0dXNVcGRhdGUpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBib3QncyBzdGF0dXMgb24gb25lIHNoYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gc2hhcmRJZCBUaGUgc2hhcmQgaWQgdG8gZWRpdCB0aGUgc3RhdHVzIGZvci5cbiAgICogQHBhcmFtIGRhdGEgVGhlIHN0YXR1cyBkYXRhIHRvIHNldCB0aGUgYm90cyBzdGF0dXMgdG8uXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD5cbiAgICovXG4gIGVkaXRTaGFyZFN0YXR1czogKHNoYXJkSWQ6IG51bWJlciwgZGF0YTogU3RhdHVzVXBkYXRlKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIGEgZ3VpbGQgb3ZlciB0aGUgZ2F0ZXdheS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiByZXF1ZXN0aW5nIHRoZSBlbnRpcmUgbWVtYmVyIGxpc3Q6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBHVUlMRF9NRU1CRVJTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgcHJlc2VuY2VzICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5wcmVzZW5jZXMgfCBwcmVzZW5jZXN9IHNldCB0byBgdHJ1ZWApOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfUFJFU0VOQ0VTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSBwcmVmaXggKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnF1ZXJ5IHwgcXVlcnl9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSB1c2VycyBieSBJRCAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMudXNlcklkcyB8IHVzZXJJZHN9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlcnMgQ2h1bmtfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IDEwMDAgbWVtYmVycyBmZXRjaGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXF1ZXN0LWd1aWxkLW1lbWJlcnN9XG4gICAqL1xuICByZXF1ZXN0TWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IE9taXQ8UmVxdWVzdEd1aWxkTWVtYmVycywgJ2d1aWxkSWQnPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyW10+PlxuICAvKipcbiAgICogTGVhdmVzIHRoZSB2b2ljZSBjaGFubmVsIHRoZSBib3QgdXNlciBpcyBjdXJyZW50bHkgaW4uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1ZvaWNlIFN0YXRlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgbGVhdmVWb2ljZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0TWVtYmVyUmVxdWVzdCB7XG4gIC8qKiBUaGUgdW5pcXVlIG5vbmNlIGZvciB0aGlzIHJlcXVlc3QuICovXG4gIG5vbmNlOiBzdHJpbmdcbiAgLyoqIFRoZSByZXNvbHZlciBoYW5kbGVyIHRvIHJ1biB3aGVuIGFsbCBtZW1iZXJzIGFycml2ZS4gKi9cbiAgcmVzb2x2ZTogKHZhbHVlOiBDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyW10+IHwgUHJvbWlzZUxpa2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcltdPj4pID0+IHZvaWRcbiAgLyoqIFRoZSBtZW1iZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFycml2ZWQgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbWVtYmVyczogQ2FtZWxpemU8RGlzY29yZE1lbWJlcltdPlxufVxuIl0sIm5hbWVzIjpbIkNvbGxlY3Rpb24iLCJjcmVhdGVMZWFreUJ1Y2tldCIsImRlbGF5IiwibG9nZ2VyIiwiU2hhcmQiLCJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uIiwidXJsIiwic2hhcmRzIiwic2Vzc2lvblN0YXJ0TGltaXQiLCJtYXhDb25jdXJyZW5jeSIsInJlbWFpbmluZyIsInRvdGFsIiwicmVzZXRBZnRlciIsImdhdGV3YXkiLCJldmVudHMiLCJjb21wcmVzcyIsImludGVudHMiLCJwcm9wZXJ0aWVzIiwib3MiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJicm93c2VyIiwiZGV2aWNlIiwidG9rZW4iLCJ2ZXJzaW9uIiwidG90YWxTaGFyZHMiLCJsYXN0U2hhcmRJZCIsImZpcnN0U2hhcmRJZCIsInRvdGFsV29ya2VycyIsInNoYXJkc1BlcldvcmtlciIsInNwYXduU2hhcmREZWxheSIsIk1hcCIsImJ1Y2tldHMiLCJjYWNoZSIsInJlcXVlc3RNZW1iZXJzIiwiZW5hYmxlZCIsInBlbmRpbmciLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsImRlYnVnIiwiTWF0aCIsImNlaWwiLCJjYWxjdWxhdGVXb3JrZXJJZCIsInNoYXJkSWQiLCJ3b3JrZXJJZCIsImZsb29yIiwicHJlcGFyZUJ1Y2tldHMiLCJpIiwic2V0Iiwid29ya2VycyIsImxlYWsiLCJtYXgiLCJyZWZpbGxBbW91bnQiLCJyZWZpbGxJbnRlcnZhbCIsIkVycm9yIiwiYnVja2V0SWQiLCJidWNrZXQiLCJnZXQiLCJ3b3JrZXIiLCJmaW5kIiwidyIsImlkIiwicXVldWUiLCJwdXNoIiwic3Bhd25TaGFyZHMiLCJQcm9taXNlIiwiYWxsIiwiZW50cmllcyIsIm1hcCIsInRlbGxXb3JrZXJUb0lkZW50aWZ5Iiwic2h1dGRvd24iLCJjb2RlIiwicmVhc29uIiwiZm9yRWFjaCIsInNoYXJkIiwiY2xvc2UiLCJpZGVudGlmeSIsImtpbGwiLCJkZWxldGUiLCJyZXF1ZXN0SWRlbnRpZnkiLCJjYWxjdWxhdGVTaGFyZElkIiwiZ3VpbGRJZCIsIk51bWJlciIsIkJpZ0ludCIsImpvaW5Wb2ljZUNoYW5uZWwiLCJjaGFubmVsSWQiLCJlZGl0Qm90U3RhdHVzIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWx1ZXMiLCJlZGl0U2hhcmRTdGF0dXMiLCJsZWF2ZVZvaWNlQ2hhbm5lbCJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBU0EsY0FBQUEsQ0FBVSxDQUFFQyxxQkFBQUEsQ0FBaUIsQ0FBRUMsU0FBQUEsQ0FBSyxDQUFFQyxVQUFBQSxDQUFNLEtBQVEsbUJBQW1CLEFBQ2hGLFFBQU9DLE1BQVcsWUFBWSxBQUc5QixRQUFPLFNBQVNDLHFCQUFxQkMsQ0FBb0MsQ0FBa0IsQ0FDcEZBLEVBQVFDLFVBQVUsRUFDckJELENBQUFBLEVBQVFDLFVBQVUsQ0FBRyxDQUNuQkMsSUFBSywyQkFDTEMsT0FBUSxFQUNSQyxrQkFBbUIsQ0FDakJDLGVBQWdCLEVBQ2hCQyxVQUFXLElBQ1hDLE1BQU8sSUFDUEMsV0FBWSxLQUNkLENBQ0YsQ0FBQSxFQUdGLElBQU1DLEVBQTBCLENBQzlCQyxPQUFRVixFQUFRVSxNQUFNLENBQ3RCQyxTQUFVWCxFQUFRVyxRQUFRLEVBQUksQ0FBQSxFQUM5QkMsUUFBU1osRUFBUVksT0FBTyxFQUFJLEVBQzVCQyxXQUFZLENBQ1ZDLEdBQUlkLEVBQVFhLFVBQVUsRUFBRUMsSUFBTUMsUUFBUUMsUUFBUSxDQUM5Q0MsUUFBU2pCLEVBQVFhLFVBQVUsRUFBRUksU0FBVyxhQUN4Q0MsT0FBUWxCLEVBQVFhLFVBQVUsRUFBRUssUUFBVSxZQUN4QyxFQUNBQyxNQUFPbkIsRUFBUW1CLEtBQUssQ0FDcEJqQixJQUFLRixFQUFRRSxHQUFHLEVBQUlGLEVBQVFDLFVBQVUsQ0FBQ0MsR0FBRyxFQUFJLDJCQUM5Q2tCLFFBQVNwQixFQUFRb0IsT0FBTyxFQUFJLEdBQzVCbkIsV0FBWUQsRUFBUUMsVUFBVSxDQUM5Qm9CLFlBQWFyQixFQUFRcUIsV0FBVyxFQUFJckIsRUFBUUMsVUFBVSxD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
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import type { ActivityTypes, Camelize, DiscordGatewayPayload, GatewayOpcodes, PresenceStatus } from '@discordeno/types';
2
+ import type { ActivityTypes, Camelize, DiscordActivity, DiscordGatewayPayload, GatewayOpcodes, PresenceStatus } from '@discordeno/types';
3
3
  import type Shard from './Shard.js';
4
4
  export declare enum ShardState {
5
5
  /** Shard is fully connected to the gateway and receiving events from Discord. */
@@ -147,4 +147,22 @@ export interface BotActivity {
147
147
  type: ActivityTypes;
148
148
  url?: string;
149
149
  }
150
+ /** https://discord.com/developers/docs/topics/gateway#update-voice-state */
151
+ export interface UpdateVoiceState {
152
+ /** id of the guild */
153
+ guildId: string;
154
+ /** id of the voice channel client wants to join (null if disconnecting) */
155
+ channelId: string | null;
156
+ /** Is the client muted */
157
+ selfMute: boolean;
158
+ /** Is the client deafened */
159
+ selfDeaf: boolean;
160
+ }
161
+ /** https://discord.com/developers/docs/topics/gateway-events#update-presence */
162
+ export interface StatusUpdate {
163
+ /** The user's activities */
164
+ activities?: Camelize<Array<Omit<DiscordActivity, "created_at">>>;
165
+ /** The user's new status */
166
+ status: keyof typeof PresenceStatus;
167
+ }
150
168
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export var ShardState;!function(ShardState){ShardState[ShardState.Connected=0]="Connected",ShardState[ShardState.Connecting=1]="Connecting",ShardState[ShardState.Disconnected=2]="Disconnected",ShardState[ShardState.Unidentified=3]="Unidentified",ShardState[ShardState.Identifying=4]="Identifying",ShardState[ShardState.Resuming=5]="Resuming",ShardState[ShardState.Offline=6]="Offline"}(ShardState||(ShardState={}));export var ShardSocketCloseCodes;!function(ShardSocketCloseCodes){ShardSocketCloseCodes[ShardSocketCloseCodes.Shutdown=3e3]="Shutdown",ShardSocketCloseCodes[ShardSocketCloseCodes.ResumeClosingOldConnection=3024]="ResumeClosingOldConnection",ShardSocketCloseCodes[ShardSocketCloseCodes.ZombiedConnection=3010]="ZombiedConnection",ShardSocketCloseCodes[ShardSocketCloseCodes.TestingFinished=3064]="TestingFinished",ShardSocketCloseCodes[ShardSocketCloseCodes.Resharded=3065]="Resharded",ShardSocketCloseCodes[ShardSocketCloseCodes.ReIdentifying=3066]="ReIdentifying"}(ShardSocketCloseCodes||(ShardSocketCloseCodes={}));
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5VHlwZXMsIENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzLCBQcmVzZW5jZVN0YXR1cyB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHR5cGUgU2hhcmQgZnJvbSAnLi9TaGFyZC5qcydcblxuZXhwb3J0IGVudW0gU2hhcmRTdGF0ZSB7XG4gIC8qKiBTaGFyZCBpcyBmdWxseSBjb25uZWN0ZWQgdG8gdGhlIGdhdGV3YXkgYW5kIHJlY2VpdmluZyBldmVudHMgZnJvbSBEaXNjb3JkLiAqL1xuICBDb25uZWN0ZWQgPSAwLFxuICAvKiogU2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIHRoZSBnYXRld2F5LiBUaGlzIGlzIG9ubHkgdXNlZCBpZiB0aGUgc2hhcmQgaXMgbm90IGN1cnJlbnRseSB0cnlpbmcgdG8gaWRlbnRpZnkgb3IgcmVzdW1lLiAqL1xuICBDb25uZWN0aW5nID0gMSxcbiAgLyoqIFNoYXJkIGdvdCBkaXNjb25uZWN0ZWQgYW5kIHJlY29ubmVjdGlvbiBhY3Rpb25zIGhhdmUgYmVlbiBzdGFydGVkLiAqL1xuICBEaXNjb25uZWN0ZWQgPSAyLFxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBidXQgb25seSBoZWFydGJlYXRpbmcuIEF0IHRoaXMgc3RhdGUgdGhlIHNoYXJkIGhhcyBub3QgYmVlbiBpZGVudGlmaWVkIHdpdGggZGlzY29yZC4gKi9cbiAgVW5pZGVudGlmaWVkID0gMyxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byBpZGVudGlmeSB3aXRoIHRoZSBnYXRld2F5IHRvIGNyZWF0ZSBhIG5ldyBzZXNzaW9uLiAqL1xuICBJZGVudGlmeWluZyA9IDQsXG4gIC8qKiBTaGFyZCBpcyB0cnlpbmcgdG8gcmVzdW1lIGEgc2Vzc2lvbiB3aXRoIHRoZSBnYXRld2F5LiAqL1xuICBSZXN1bWluZyA9IDUsXG4gIC8qKiBTaGFyZCBnb3Qgc2h1dCBkb3duIHN0dWRpZWQgb3IgZHVlIHRvIGEgbm90IChzZWxmKSBmaXhhYmxlIGVycm9yIGFuZCBtYXkgbm90IGF0dGVtcHQgdG8gcmVjb25uZWN0IG9uIGl0cyBvd24uICovXG4gIE9mZmxpbmUgPSA2LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gIC8qKiBXaGV0aGVyIGluY29taW5nIHBheWxvYWRzIGFyZSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb21wcmVzczogYm9vbGVhblxuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW50ZW50IHZhbHVlIG9mIHRoZSBldmVudHMgd2hpY2ggdGhlIHNoYXJkIHNob3VsZCByZWNlaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpbnRlbnRzOiBudW1iZXJcbiAgLyoqIElkZW50aWZ5IHByb3BlcnRpZXMgdG8gdXNlICovXG4gIHByb3BlcnRpZXM6IHtcbiAgICAvKiogT3BlcmF0aW5nIHN5c3RlbSB0aGUgc2hhcmQgcnVucyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZGFyd2luXCIgfCBcImxpbnV4XCIgfCBcIndpbmRvd3NcIlxuICAgICAqL1xuICAgIG9zOiBzdHJpbmdcbiAgICAvKiogVGhlIFwiYnJvd3NlclwiIHdoZXJlIHRoaXMgc2hhcmQgaXMgcnVubmluZyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgYnJvd3Nlcjogc3RyaW5nXG4gICAgLyoqIFRoZSBkZXZpY2Ugb24gd2hpY2ggdGhlIHNoYXJkIGlzIHJ1bm5pbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGRldmljZTogc3RyaW5nXG4gIH1cbiAgLyoqIEJvdCB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZCAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKiBUaGUgVVJMIG9mIHRoZSBnYXRld2F5IHdoaWNoIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwid3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnXCJcbiAgICovXG4gIHVybDogc3RyaW5nXG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbjogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHNoYXJkcyB0byBjb25uZWN0IHRvIGFjcm9zcyB0aGUgZW50aXJlIGJvdC5cbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgdG90YWxTaGFyZHM6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkSGVhcnQge1xuICAvKiogV2hldGhlciBvciBub3QgdGhlIGhlYXJ0YmVhdCB3YXMgYWNrbm93bGVkZ2VkIGJ5IERpc2NvcmQgaW4gdGltZS4gKi9cbiAgYWNrbm93bGVkZ2VkOiBib29sZWFuXG4gIC8qKiBJbnRlcnZhbCBiZXR3ZWVuIGhlYXJ0YmVhdHMgcmVxdWVzdGVkIGJ5IERpc2NvcmQuICovXG4gIGludGVydmFsOiBudW1iZXJcbiAgLyoqIElkIG9mIHRoZSBpbnRlcnZhbCwgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgaGVhcnRiZWF0cy4gKi9cbiAgaW50ZXJ2YWxJZD86IE5vZGVKUy5UaW1lclxuICAvKiogVW5peCAoaW4gbWlsbGlzZWNvbmRzKSB0aW1lc3RhbXAgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZCBmcm9tIERpc2NvcmQuICovXG4gIGxhc3RBY2s/OiBudW1iZXJcbiAgLyoqIFVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IHdhcyBzZW50LiAqL1xuICBsYXN0QmVhdD86IG51bWJlclxuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlclxuICAvKiogSWQgb2YgdGhlIHRpbWVvdXQgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgc2luY2UgaXQncyBcInNwZWNpYWxcIi4gKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEV2ZW50cyB7XG4gIC8qKiBBIGhlYXJ0YmVhdCBoYXMgYmVlbiBzZW5kLiAqL1xuICBoZWFydGJlYXQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBTaGFyZCBoYXMgcmVjZWl2ZWQgYSBIZWxsbyBwYXlsb2FkLiAqL1xuICBoZWxsbz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBTaGFyZHMgc2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gKi9cbiAgaW52YWxpZFNlc3Npb24/OiAoc2hhcmQ6IFNoYXJkLCByZXN1bWFibGU6IGJvb2xlYW4pID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgcmVzdW1lZCBhbiBvbGQgc2Vzc2lvbi4gKi9cbiAgcmVzdW1lZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIERpc2NvcmQgaGFzIHJlcXVlc3RlZCB0aGUgU2hhcmQgdG8gcmVjb25uZWN0LiAqL1xuICByZXF1ZXN0ZWRSZWNvbm5lY3Q/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGRpc2Nvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGlkZW50aWZpZWQgaXRzZWxmIHdpdGggRGlzY29yZC4gKi9cbiAgaWRlbnRpZmllZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlIGZyb20gRGlzY29yZC4gKi9cbiAgbWVzc2FnZT86IChzaGFyZDogU2hhcmQsIHBheWxvYWQ6IENhbWVsaXplPERpc2NvcmRHYXRld2F5UGF5bG9hZD4pID0+IHVua25vd25cbn1cblxuZXhwb3J0IGVudW0gU2hhcmRTb2NrZXRDbG9zZUNvZGVzIHtcbiAgLyoqIEEgcmVndWxhciBTaGFyZCBzaHV0ZG93bi4gKi9cbiAgU2h1dGRvd24gPSAzMDAwLFxuICAvKiogQSByZXN1bWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24gPSAzMDI0LFxuICAvKiogRGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBpbiB0aW1lLlxuICAgKiBDbG9zaW5nIHRoZSBzaGFyZCBhbmQgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbi5cbiAgICovXG4gIFpvbWJpZWRDb25uZWN0aW9uID0gMzAxMCxcbiAgLyoqIERpc2NvcmRlbm8ncyBnYXRld2F5IHRlc3RzIGhhZSBiZWVuIGZpbmlzaGVkLCB0aGVyZWZvcmUgdGhlIFNoYXJkIGNhbiBiZSB0dXJuZWQgb2ZmLiAqL1xuICBUZXN0aW5nRmluaXNoZWQgPSAzMDY0LFxuICAvKiogU3BlY2lhbCBjbG9zZSBjb2RlIHJlc2VydmVkIGZvciBEaXNjb3JkZW5vJ3MgemVyby1kb3dudGltZSByZXNoYXJkaW5nIHN5c3RlbS4gKi9cbiAgUmVzaGFyZGVkID0gMzA2NSxcbiAgLyoqIFNoYXJkIGlzIHJlLWlkZW50aWZ5aW5nIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZUlkZW50aWZ5aW5nID0gMzA2Nixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZFNvY2tldFJlcXVlc3Qge1xuICAvKiogVGhlIE9QLUNvZGUgZm9yIHRoZSBwYXlsb2FkIHRvIHNlbmQuICovXG4gIG9wOiBHYXRld2F5T3Bjb2Rlc1xuICAvKiogUGF5bG9hZCBkYXRhLiAqL1xuICBkOiB1bmtub3duXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheS1ldmVudHMjdXBkYXRlLXByZXNlbmNlICovXG5leHBvcnQgaW50ZXJmYWNlIEJvdFN0YXR1c1VwZGF0ZSB7XG4gIC8vIC8qKiBVbml4IHRpbWUgKGluIG1pbGxpc2Vjb25kcykgb2Ygd2hlbiB0aGUgY2xpZW50IHdlbnQgaWRsZSwgb3IgbnVsbCBpZiB0aGUgY2xpZW50IGlzIG5vdCBpZGxlICovXG4gIHNpbmNlOiBudW1iZXIgfCBudWxsXG4gIC8qKiBUaGUgdXNlcidzIGFjdGl2aXRpZXMgKi9cbiAgYWN0aXZpdGllczogQm90QWN0aXZpdHlbXVxuICAvKiogVGhlIHVzZXIncyBuZXcgc3RhdHVzICovXG4gIHN0YXR1czoga2V5b2YgdHlwZW9mIFByZXNlbmNlU3RhdHVzXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheS1ldmVudHMjYWN0aXZpdHktb2JqZWN0ICovXG5leHBvcnQgaW50ZXJmYWNlIEJvdEFjdGl2aXR5IHtcbiAgbmFtZTogc3RyaW5nXG4gIHR5cGU6IEFjdGl2aXR5VHlwZXNcbiAgdXJsPzogc3RyaW5nXG59XG4iXSwibmFtZXMiOlsiU2hhcmRTdGF0ZSIsIkNvbm5lY3RlZCIsIkNvbm5lY3RpbmciLCJEaXNjb25uZWN0ZWQiLCJVbmlkZW50aWZpZWQiLCJJZGVudGlmeWluZyIsIlJlc3VtaW5nIiwiT2ZmbGluZSIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlNodXRkb3duIiwiUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24iLCJab21iaWVkQ29ubmVjdGlvbiIsIlRlc3RpbmdGaW5pc2hlZCIsIlJlc2hhcmRlZCIsIlJlSWRlbnRpZnlpbmciXSwibWFwcGluZ3MiOiJBQUFBLFdBR08scUJBQUtBLFVBQVUsRUFBVkEsV0FBQUEsV0FFVkMsVUFBWSxHQUFaQSxZQUZVRCxXQUFBQSxXQUlWRSxXQUFhLEdBQWJBLGFBSlVGLFdBQUFBLFdBTVZHLGFBQWUsR0FBZkEsZUFOVUgsV0FBQUEsV0FRVkksYUFBZSxHQUFmQSxlQVJVSixXQUFBQSxXQVVWSyxZQUFjLEdBQWRBLGNBVlVMLFdBQUFBLFdBWVZNLFNBQVcsR0FBWEEsV0FaVU4sV0FBQUEsV0FjVk8sUUFBVSxHQUFWQSxXQWRVUCxhQUFBQSwyQkFrSEwsZ0NBQUtRLHFCQUFxQixFQUFyQkEsc0JBQUFBLHNCQUVWQyxTQUFXLEtBQVhBLFdBRlVELHNCQUFBQSxzQkFJVkUsMkJBQTZCLE1BQTdCQSw2QkFKVUYsc0JBQUFBLHNCQVFWRyxrQkFBb0IsTUFBcEJBLG9CQVJVSCxzQkFBQUEsc0JBVVZJLGdCQUFrQixNQUFsQkEsa0JBVlVKLHNCQUFBQSxzQkFZVkssVUFBWSxNQUFaQSxZQVpVTCxzQkFBQUEsc0JBY1ZNLGNBQWdCLE1BQWhCQSxpQkFkVU4sd0JBQUFBIn0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5VHlwZXMsIENhbWVsaXplLCBEaXNjb3JkQWN0aXZpdHksIERpc2NvcmRHYXRld2F5UGF5bG9hZCwgR2F0ZXdheU9wY29kZXMsIFByZXNlbmNlU3RhdHVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM6IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllczoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsOiBzdHJpbmdcbiAgLyoqIFRoZSBnYXRld2F5IHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uOiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygc2hhcmRzIHRvIGNvbm5lY3QgdG8gYWNyb3NzIHRoZSBlbnRpcmUgYm90LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkczogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRIZWFydCB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhcnRiZWF0IHdhcyBhY2tub3dsZWRnZWQgYnkgRGlzY29yZCBpbiB0aW1lLiAqL1xuICBhY2tub3dsZWRnZWQ6IGJvb2xlYW5cbiAgLyoqIEludGVydmFsIGJldHdlZW4gaGVhcnRiZWF0cyByZXF1ZXN0ZWQgYnkgRGlzY29yZC4gKi9cbiAgaW50ZXJ2YWw6IG51bWJlclxuICAvKiogSWQgb2YgdGhlIGludGVydmFsLCB3aGljaCBpcyB1c2VkIGZvciBzZW5kaW5nIHRoZSBoZWFydGJlYXRzLiAqL1xuICBpbnRlcnZhbElkPzogTm9kZUpTLlRpbWVyXG4gIC8qKiBVbml4IChpbiBtaWxsaXNlY29uZHMpIHRpbWVzdGFtcCB3aGVuIHRoZSBsYXN0IGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkIGZyb20gRGlzY29yZC4gKi9cbiAgbGFzdEFjaz86IG51bWJlclxuICAvKiogVW5peCB0aW1lc3RhbXAgKGluIG1pbGxpc2Vjb25kcykgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgd2FzIHNlbnQuICovXG4gIGxhc3RCZWF0PzogbnVtYmVyXG4gIC8qKiBSb3VuZCB0cmlwIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgZnJvbSBTaGFyZCB0byBEaXNjb3JkIGFuZCBiYWNrLlxuICAgKiBDYWxjdWxhdGVkIHVzaW5nIHRoZSBoZWFydGJlYXQgc3lzdGVtLlxuICAgKiBOb3RlOiB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZCB1bnRpbCB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgaGFzIGhhcHBlbmVkLlxuICAgKi9cbiAgcnR0PzogbnVtYmVyXG4gIC8qKiBJZCBvZiB0aGUgdGltZW91dCB3aGljaCBpcyB1c2VkIGZvciBzZW5kaW5nIHRoZSBmaXJzdCBoZWFydGJlYXQgdG8gRGlzY29yZCBzaW5jZSBpdCdzIFwic3BlY2lhbFwiLiAqL1xuICB0aW1lb3V0SWQ/OiBOb2RlSlMuVGltZW91dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkRXZlbnRzIHtcbiAgLyoqIEEgaGVhcnRiZWF0IGhhcyBiZWVuIHNlbmQuICovXG4gIGhlYXJ0YmVhdD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIEEgaGVhcnRiZWF0IEFDSyB3YXMgcmVjZWl2ZWQuICovXG4gIGhlYXJ0YmVhdEFjaz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFNoYXJkIGhhcyByZWNlaXZlZCBhIEhlbGxvIHBheWxvYWQuICovXG4gIGhlbGxvPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIFNoYXJkcyBzZXNzaW9uIGhhcyBiZWVuIGludmFsaWRhdGVkLiAqL1xuICBpbnZhbGlkU2Vzc2lvbj86IChzaGFyZDogU2hhcmQsIHJlc3VtYWJsZTogYm9vbGVhbikgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdGFydGVkIGEgcmVzdW1lIGFjdGlvbi4gKi9cbiAgcmVzdW1pbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSByZXN1bWVkIGFuIG9sZCBzZXNzaW9uLiAqL1xuICByZXN1bWVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogRGlzY29yZCBoYXMgcmVxdWVzdGVkIHRoZSBTaGFyZCB0byByZWNvbm5lY3QuICovXG4gIHJlcXVlc3RlZFJlY29ubmVjdD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGNvbm5lY3Rpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGNvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQgZnJvbSBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgZGlzY29ubmVjdGVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdGFydGVkIHRvIGlkZW50aWZ5IGl0c2VsZiB0byBEaXNjb3JkLiAqL1xuICBpZGVudGlmeWluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gaWRlbnRpZmllZCBpdHNlbGYgd2l0aCBEaXNjb3JkLiAqL1xuICBpZGVudGlmaWVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyByZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSBEaXNjb3JkLiAqL1xuICBtZXNzYWdlPzogKHNoYXJkOiBTaGFyZCwgcGF5bG9hZDogQ2FtZWxpemU8RGlzY29yZEdhdGV3YXlQYXlsb2FkPikgPT4gdW5rbm93blxufVxuXG5leHBvcnQgZW51bSBTaGFyZFNvY2tldENsb3NlQ29kZXMge1xuICAvKiogQSByZWd1bGFyIFNoYXJkIHNodXRkb3duLiAqL1xuICBTaHV0ZG93biA9IDMwMDAsXG4gIC8qKiBBIHJlc3VtZSBoYXMgYmVlbiByZXF1ZXN0ZWQgYW5kIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiA9IDMwMjQsXG4gIC8qKiBEaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGluIHRpbWUuXG4gICAqIENsb3NpbmcgdGhlIHNoYXJkIGFuZCBjcmVhdGluZyBhIG5ldyBzZXNzaW9uLlxuICAgKi9cbiAgWm9tYmllZENvbm5lY3Rpb24gPSAzMDEwLFxuICAvKiogRGlzY29yZGVubydzIGdhdGV3YXkgdGVzdHMgaGFlIGJlZW4gZmluaXNoZWQsIHRoZXJlZm9yZSB0aGUgU2hhcmQgY2FuIGJlIHR1cm5lZCBvZmYuICovXG4gIFRlc3RpbmdGaW5pc2hlZCA9IDMwNjQsXG4gIC8qKiBTcGVjaWFsIGNsb3NlIGNvZGUgcmVzZXJ2ZWQgZm9yIERpc2NvcmRlbm8ncyB6ZXJvLWRvd250aW1lIHJlc2hhcmRpbmcgc3lzdGVtLiAqL1xuICBSZXNoYXJkZWQgPSAzMDY1LFxuICAvKiogU2hhcmQgaXMgcmUtaWRlbnRpZnlpbmcgdGhlcmVmb3JlIHRoZSBvbGQgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBjbG9zZWQuICovXG4gIFJlSWRlbnRpZnlpbmcgPSAzMDY2LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkU29ja2V0UmVxdWVzdCB7XG4gIC8qKiBUaGUgT1AtQ29kZSBmb3IgdGhlIHBheWxvYWQgdG8gc2VuZC4gKi9cbiAgb3A6IEdhdGV3YXlPcGNvZGVzXG4gIC8qKiBQYXlsb2FkIGRhdGEuICovXG4gIGQ6IHVua25vd25cbn1cblxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5LWV2ZW50cyN1cGRhdGUtcHJlc2VuY2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm90U3RhdHVzVXBkYXRlIHtcbiAgLy8gLyoqIFVuaXggdGltZSAoaW4gbWlsbGlzZWNvbmRzKSBvZiB3aGVuIHRoZSBjbGllbnQgd2VudCBpZGxlLCBvciBudWxsIGlmIHRoZSBjbGllbnQgaXMgbm90IGlkbGUgKi9cbiAgc2luY2U6IG51bWJlciB8IG51bGxcbiAgLyoqIFRoZSB1c2VyJ3MgYWN0aXZpdGllcyAqL1xuICBhY3Rpdml0aWVzOiBCb3RBY3Rpdml0eVtdXG4gIC8qKiBUaGUgdXNlcidzIG5ldyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBrZXlvZiB0eXBlb2YgUHJlc2VuY2VTdGF0dXNcbn1cblxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5LWV2ZW50cyNhY3Rpdml0eS1vYmplY3QgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm90QWN0aXZpdHkge1xuICBuYW1lOiBzdHJpbmdcbiAgdHlwZTogQWN0aXZpdHlUeXBlc1xuICB1cmw/OiBzdHJpbmdcbn1cblxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVWb2ljZVN0YXRlIHtcbiAgLyoqIGlkIG9mIHRoZSBndWlsZCAqL1xuICBndWlsZElkOiBzdHJpbmdcbiAgLyoqIGlkIG9mIHRoZSB2b2ljZSBjaGFubmVsIGNsaWVudCB3YW50cyB0byBqb2luIChudWxsIGlmIGRpc2Nvbm5lY3RpbmcpICovXG4gIGNoYW5uZWxJZDogc3RyaW5nIHwgbnVsbFxuICAvKiogSXMgdGhlIGNsaWVudCBtdXRlZCAqL1xuICBzZWxmTXV0ZTogYm9vbGVhblxuICAvKiogSXMgdGhlIGNsaWVudCBkZWFmZW5lZCAqL1xuICBzZWxmRGVhZjogYm9vbGVhblxufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXktZXZlbnRzI3VwZGF0ZS1wcmVzZW5jZSAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNVcGRhdGUge1xuICAvLyAvKiogVW5peCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIG9mIHdoZW4gdGhlIGNsaWVudCB3ZW50IGlkbGUsIG9yIG51bGwgaWYgdGhlIGNsaWVudCBpcyBub3QgaWRsZSAqL1xuICAvLyBzaW5jZTogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFRoZSB1c2VyJ3MgYWN0aXZpdGllcyAqL1xuICBhY3Rpdml0aWVzPzogQ2FtZWxpemU8QXJyYXk8T21pdDxEaXNjb3JkQWN0aXZpdHksIFwiY3JlYXRlZF9hdFwiPj4+XG4gIC8qKiBUaGUgdXNlcidzIG5ldyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBrZXlvZiB0eXBlb2YgUHJlc2VuY2VTdGF0dXNcbiAgLy8gLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBjbGllbnQgaXMgYWZrICovXG4gIC8vIGFmazogYm9vbGVhbjtcbn1cbiJdLCJuYW1lcyI6WyJTaGFyZFN0YXRlIiwiQ29ubmVjdGVkIiwiQ29ubmVjdGluZyIsIkRpc2Nvbm5lY3RlZCIsIlVuaWRlbnRpZmllZCIsIklkZW50aWZ5aW5nIiwiUmVzdW1pbmciLCJPZmZsaW5lIiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2h1dGRvd24iLCJSZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiIsIlpvbWJpZWRDb25uZWN0aW9uIiwiVGVzdGluZ0ZpbmlzaGVkIiwiUmVzaGFyZGVkIiwiUmVJZGVudGlmeWluZyJdLCJtYXBwaW5ncyI6IkFBQUEsV0FHTyxxQkFBS0EsVUFBVSxFQUFWQSxXQUFBQSxXQUVWQyxVQUFZLEdBQVpBLFlBRlVELFdBQUFBLFdBSVZFLFdBQWEsR0FBYkEsYUFKVUYsV0FBQUEsV0FNVkcsYUFBZSxHQUFmQSxlQU5VSCxXQUFBQSxXQVFWSSxhQUFlLEdBQWZBLGVBUlVKLFdBQUFBLFdBVVZLLFlBQWMsR0FBZEEsY0FWVUwsV0FBQUEsV0FZVk0sU0FBVyxHQUFYQSxXQVpVTixXQUFBQSxXQWNWTyxRQUFVLEdBQVZBLFdBZFVQLGFBQUFBLDJCQWtITCxnQ0FBS1EscUJBQXFCLEVBQXJCQSxzQkFBQUEsc0JBRVZDLFNBQVcsS0FBWEEsV0FGVUQsc0JBQUFBLHNCQUlWRSwyQkFBNkIsTUFBN0JBLDZCQUpVRixzQkFBQUEsc0JBUVZHLGtCQUFvQixNQUFwQkEsb0JBUlVILHNCQUFBQSxzQkFVVkksZ0JBQWtCLE1BQWxCQSxrQkFWVUosc0JBQUFBLHNCQVlWSyxVQUFZLE1BQVpBLFlBWlVMLHNCQUFBQSxzQkFjVk0sY0FBZ0IsTUFBaEJBLGlCQWRVTix3QkFBQUEifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@discordeno/gateway",
3
- "version": "19.0.0-next.7740cfd",
3
+ "version": "19.0.0-next.7fee7aa",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
@@ -15,16 +15,17 @@
15
15
  "release-build": "yarn build && yarn build:type",
16
16
  "fmt": "eslint --fix \"src/**/*.ts*\"",
17
17
  "lint": "eslint \"src/**/*.ts*\"",
18
- "test:unit-coverage": "c8 mocha --no-warnings 'tests/**/*.spec.ts'",
19
- "test:unit": "c8 --r lcov mocha --no-warnings 'tests/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway",
20
- "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist",
21
- "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/**/*.spec.ts'",
18
+ "test:unit-coverage": "c8 mocha --no-warnings 'tests/unit/**/*.spec.ts'",
19
+ "test:unit": "c8 --r lcov mocha --no-warnings 'tests/unit/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway",
20
+ "test:deno-unit": "swc tests --delete-dir-on-start --out-dir denoTestsDist && node ../../scripts/fixDenoTestExtension.js && deno test -A --import-map ../../denoImportMap.json denoTestsDist/unit",
21
+ "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/unit/**/*.spec.ts'",
22
+ "test:integration": "c8 --r lcov mocha --no-warnings 'tests/integration/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js gateway",
22
23
  "test:type": "tsc --noEmit",
23
24
  "test:test-type": "tsc --project tsconfig.test.json"
24
25
  },
25
26
  "dependencies": {
26
- "@discordeno/types": "19.0.0-next.7740cfd",
27
- "@discordeno/utils": "19.0.0-next.7740cfd",
27
+ "@discordeno/types": "19.0.0-next.7fee7aa",
28
+ "@discordeno/utils": "19.0.0-next.7fee7aa",
28
29
  "ws": "^8.11.0"
29
30
  },
30
31
  "devDependencies": {
@@ -43,6 +44,7 @@
43
44
  "sinon": "^15.0.0",
44
45
  "ts-node": "^10.9.1",
45
46
  "tsconfig": "*",
46
- "typescript": "^4.9.3"
47
+ "typescript": "^4.9.3",
48
+ "uWebSockets.js": "uNetworking/uWebSockets.js#v20.19.0"
47
49
  }
48
50
  }