@sockethub/activity-streams 4.4.0-alpha.3 → 4.4.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,19 @@
1
- /*! For license information please see activity-streams.min.js.LICENSE.txt */
2
- !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var r=e();for(var n in r)("object"==typeof exports?exports:t)[n]=r[n]}}(self,(function(){return t={804:(t,e,r)=>{"use strict";var n=r(618),o=r(205),i=r(191),c=r(516),s=r(981),u=t.exports=function(t,e){var r,o,u,a,f;return arguments.length<2||"string"!=typeof t?(a=e,e=t,t=null):a=arguments[2],n(t)?(r=s.call(t,"c"),o=s.call(t,"e"),u=s.call(t,"w")):(r=u=!0,o=!1),f={value:e,configurable:r,enumerable:o,writable:u},a?i(c(a),f):f};u.gs=function(t,e,r){var u,a,f,l;return"string"!=typeof t?(f=r,r=e,e=t,t=null):f=arguments[3],n(e)?o(e)?n(r)?o(r)||(f=r,r=void 0):r=void 0:(f=e,e=r=void 0):e=void 0,n(t)?(u=s.call(t,"c"),a=s.call(t,"e")):(u=!0,a=!1),l={get:e,set:r,configurable:u,enumerable:a},f?i(c(f),l):l}},430:t=>{"use strict";t.exports=function(){}},191:(t,e,r)=>{"use strict";t.exports=r(560)()?Object.assign:r(346)},560:t=>{"use strict";t.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(e(t={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},346:(t,e,r)=>{"use strict";var n=r(103),o=r(745),i=Math.max;t.exports=function(t,e){var r,c,s,u=i(arguments.length,2);for(t=Object(o(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},c=1;c<u;++c)n(e=arguments[c]).forEach(s);if(void 0!==r)throw r;return t}},914:(t,e,r)=>{"use strict";var n=r(430)();t.exports=function(t){return t!==n&&null!==t}},103:(t,e,r)=>{"use strict";t.exports=r(446)()?Object.keys:r(137)},446:t=>{"use strict";t.exports=function(){try{return Object.keys("primitive"),!0}catch(t){return!1}}},137:(t,e,r)=>{"use strict";var n=r(914),o=Object.keys;t.exports=function(t){return o(n(t)?Object(t):t)}},516:(t,e,r)=>{"use strict";var n=r(914),o=Array.prototype.forEach,i=Object.create,c=function(t,e){var r;for(r in t)e[r]=t[r]};t.exports=function(t){var e=i(null);return o.call(arguments,(function(t){n(t)&&c(Object(t),e)})),e}},290:t=>{"use strict";t.exports=function(t){if("function"!=typeof t)throw new TypeError(t+" is not a function");return t}},745:(t,e,r)=>{"use strict";var n=r(914);t.exports=function(t){if(!n(t))throw new TypeError("Cannot use null or undefined");return t}},981:(t,e,r)=>{"use strict";t.exports=r(591)()?String.prototype.contains:r(42)},591:t=>{"use strict";var e="razdwatrzy";t.exports=function(){return"function"==typeof e.contains&&!0===e.contains("dwa")&&!1===e.contains("foo")}},42:t=>{"use strict";var e=String.prototype.indexOf;t.exports=function(t){return e.call(this,t,arguments[1])>-1}},370:(t,e,r)=>{"use strict";var n,o,i,c,s,u,a,f=r(804),l=r(290),p=Function.prototype.apply,y=Function.prototype.call,b=Object.create,d=Object.defineProperty,h=Object.defineProperties,v=Object.prototype.hasOwnProperty,j={configurable:!0,enumerable:!1,writable:!0};o=function(t,e){var r,o;return l(e),o=this,n.call(this,t,r=function(){i.call(o,t,r),p.call(e,this,arguments)}),r.__eeOnceListener__=e,this},c=function(t){var e,r,n,o,i;if(v.call(this,"__ee__")&&(o=this.__ee__[t]))if("object"==typeof o){for(r=arguments.length,i=new Array(r-1),e=1;e<r;++e)i[e-1]=arguments[e];for(o=o.slice(),e=0;n=o[e];++e)p.call(n,this,i)}else switch(arguments.length){case 1:y.call(o,this);break;case 2:y.call(o,this,arguments[1]);break;case 3:y.call(o,this,arguments[1],arguments[2]);break;default:for(r=arguments.length,i=new Array(r-1),e=1;e<r;++e)i[e-1]=arguments[e];p.call(o,this,i)}},s={on:n=function(t,e){var r;return l(e),v.call(this,"__ee__")?r=this.__ee__:(r=j.value=b(null),d(this,"__ee__",j),j.value=null),r[t]?"object"==typeof r[t]?r[t].push(e):r[t]=[r[t],e]:r[t]=e,this},once:o,off:i=function(t,e){var r,n,o,i;if(l(e),!v.call(this,"__ee__"))return this;if(!(r=this.__ee__)[t])return this;if("object"==typeof(n=r[t]))for(i=0;o=n[i];++i)o!==e&&o.__eeOnceListener__!==e||(2===n.length?r[t]=n[i?0:1]:n.splice(i,1));else n!==e&&n.__eeOnceListener__!==e||delete r[t];return this},emit:c},u={on:f(n),once:f(o),off:f(i),emit:f(c)},a=h({},u),t.exports=e=function(t){return null==t?b(a):h(Object(t),u)},e.methods=s},372:(t,e,r)=>{"use strict";var n=r(60);t.exports=function(t){if("function"!=typeof t)return!1;if(!hasOwnProperty.call(t,"length"))return!1;try{if("number"!=typeof t.length)return!1;if("function"!=typeof t.call)return!1;if("function"!=typeof t.apply)return!1}catch(t){return!1}return!n(t)}},940:(t,e,r)=>{"use strict";var n=r(618),o={object:!0,function:!0,undefined:!0};t.exports=function(t){return!!n(t)&&hasOwnProperty.call(o,typeof t)}},205:(t,e,r)=>{"use strict";var n=r(372),o=/^\s*class[\s{/}]/,i=Function.prototype.toString;t.exports=function(t){return!!n(t)&&!o.test(i.call(t))}},60:(t,e,r)=>{"use strict";var n=r(940);t.exports=function(t){if(!n(t))return!1;try{return!!t.constructor&&t.constructor.prototype===t}catch(t){return!1}}},618:t=>{"use strict";t.exports=function(t){return null!=t}},142:(t,e,r)=>{const n=r(370)(),o={stream:["id","type","actor","target","object","context","context","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url"]},i={"@id":"id","@type":"type",verb:"type",displayName:"name",objectType:"type",platform:"context"},c={actor:{primary:"id",props:o},target:{primary:"id",props:o},object:{primary:"content",props:o}};let s=new Map,u=!1,a=[],f={};function l(t,e){return!("object"!=typeof f[t]||!f[t].includes(e))}function p(t,e){return t[i[e]]=t[e],delete t[e],t}function y(t,e={}){const r=Object.keys(e).filter((e=>{if(!o[t].includes(e))return e}));for(let t of r)if(i[t])e=p(e,t);else if(!l(e.type,t)&&!a.includes(e.type)){const e=`invalid property: "${t}"`;if(u)throw new Error(e);console.warn(e)}}function b(t){y("stream",t),"object"==typeof t.object&&y("object",t.object);const e=function(t){let e={};for(let r of Object.keys(t))if("string"==typeof t[r])e[r]=s.get(t[r])||t[r];else if(Array.isArray(t[r])){e[r]=[];for(let n of t[r])"string"==typeof n&&e[r].push(s.get(n)||n)}else e[r]=t[r];for(let t of Object.keys(c))if("string"==typeof e[t]){let r={};r[c[t].primary]=e[t],e[t]=r}return e}(t);return n.emit("activity-stream",e),e}const d={create:function(t){return y("object",t),t=t,s.set(t.id,t),n.emit("activity-object-create",t),t},delete:function(t){const e=s.delete(t);return e&&n.emit("activity-object-delete",t),e},get:function(t,e){let r=s.get(t);if(!r){if(!e)return t;r={id:t}}return r},list:function(){return s.keys()}};function h(t={}){a=t.specialObjs||[],u="boolean"==typeof t.failOnUnknownObjectProperties&&t.failOnUnknownObjectProperties;for(let e of Object.keys(t.customProps||{}))"object"==typeof t.customProps[e]&&(f[e]=t.customProps[e]);return{Stream:b,Object:d,on:function(t,e){return n.on(t,e)},once:function(t,e){return n.once(t,e)},off:function(t,e){return n.off(t,e)}}}t.exports&&(t.exports=h),"object"==typeof window&&(window.ASFactory=h)}},e={},function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n](i,i.exports,r),i.exports}(142);var t,e}));
1
+ var g=Object.create;var{getPrototypeOf:O,defineProperty:N,getOwnPropertyNames:E}=Object;var y=Object.prototype.hasOwnProperty;var b=(B,z,D)=>{D=B!=null?g(O(B)):{};let G=z||!B||!B.__esModule?N(D,"default",{value:B,enumerable:!0}):D;for(let Q of E(B))if(!y.call(G,Q))N(G,Q,{get:()=>B[Q],enumerable:!0});return G};var j=(B,z)=>()=>(z||B((z={exports:{}}).exports,z),z.exports);var w=j((i,I)=>{var c=Object.prototype.hasOwnProperty,X="~";function T(){}if(Object.create){if(T.prototype=Object.create(null),!new T().__proto__)X=!1}function p(B,z,D){this.fn=B,this.context=z,this.once=D||!1}function U(B,z,D,G,Q){if(typeof D!=="function")throw TypeError("The listener must be a function");var M=new p(D,G||B,Q),J=X?X+z:z;if(!B._events[J])B._events[J]=M,B._eventsCount++;else if(!B._events[J].fn)B._events[J].push(M);else B._events[J]=[B._events[J],M];return B}function _(B,z){if(--B._eventsCount===0)B._events=new T;else delete B._events[z]}function W(){this._events=new T,this._eventsCount=0}W.prototype.eventNames=function(){var z=[],D,G;if(this._eventsCount===0)return z;for(G in D=this._events)if(c.call(D,G))z.push(X?G.slice(1):G);if(Object.getOwnPropertySymbols)return z.concat(Object.getOwnPropertySymbols(D));return z};W.prototype.listeners=function(z){var D=X?X+z:z,G=this._events[D];if(!G)return[];if(G.fn)return[G.fn];for(var Q=0,M=G.length,J=Array(M);Q<M;Q++)J[Q]=G[Q].fn;return J};W.prototype.listenerCount=function(z){var D=X?X+z:z,G=this._events[D];if(!G)return 0;if(G.fn)return 1;return G.length};W.prototype.emit=function(z,D,G,Q,M,J){var Y=X?X+z:z;if(!this._events[Y])return!1;var H=this._events[Y],Z=arguments.length,$,R;if(H.fn){if(H.once)this.removeListener(z,H.fn,void 0,!0);switch(Z){case 1:return H.fn.call(H.context),!0;case 2:return H.fn.call(H.context,D),!0;case 3:return H.fn.call(H.context,D,G),!0;case 4:return H.fn.call(H.context,D,G,Q),!0;case 5:return H.fn.call(H.context,D,G,Q,M),!0;case 6:return H.fn.call(H.context,D,G,Q,M,J),!0}for(R=1,$=Array(Z-1);R<Z;R++)$[R-1]=arguments[R];H.fn.apply(H.context,$)}else{var x=H.length,K;for(R=0;R<x;R++){if(H[R].once)this.removeListener(z,H[R].fn,void 0,!0);switch(Z){case 1:H[R].fn.call(H[R].context);break;case 2:H[R].fn.call(H[R].context,D);break;case 3:H[R].fn.call(H[R].context,D,G);break;case 4:H[R].fn.call(H[R].context,D,G,Q);break;default:if(!$)for(K=1,$=Array(Z-1);K<Z;K++)$[K-1]=arguments[K];H[R].fn.apply(H[R].context,$)}}}return!0};W.prototype.on=function(z,D,G){return U(this,z,D,G,!1)};W.prototype.once=function(z,D,G){return U(this,z,D,G,!0)};W.prototype.removeListener=function(z,D,G,Q){var M=X?X+z:z;if(!this._events[M])return this;if(!D)return _(this,M),this;var J=this._events[M];if(J.fn){if(J.fn===D&&(!Q||J.once)&&(!G||J.context===G))_(this,M)}else{for(var Y=0,H=[],Z=J.length;Y<Z;Y++)if(J[Y].fn!==D||Q&&!J[Y].once||G&&J[Y].context!==G)H.push(J[Y]);if(H.length)this._events[M]=H.length===1?H[0]:H;else _(this,M)}return this};W.prototype.removeAllListeners=function(z){var D;if(z){if(D=X?X+z:z,this._events[D])_(this,D)}else this._events=new T,this._eventsCount=0;return this};W.prototype.off=W.prototype.removeListener;W.prototype.addListener=W.prototype.on;W.prefixed=X;W.EventEmitter=W;if(typeof I<"u")I.exports=W});var h=b(w(),1);var P=h.default;/*!
2
+ * activity-streams
3
+ * https://github.com/silverbucket/activity-streams
4
+ *
5
+ * Developed and Maintained by:
6
+ * Nick Jennings <nick@silverbucket.net>
7
+ *
8
+ * activity-streams is released under the MIT (see LICENSE).
9
+ *
10
+ * You don't have to do anything special to choose one license or the other
11
+ * and you don't have to notify anyone which license you are using.
12
+ * Please see the corresponding license file for details of these licenses.
13
+ * You are free to use, modify and distribute this software, but all copyright
14
+ * information must remain.
15
+ *
16
+ */var F=new P,q={stream:["id","type","actor","target","object","context","context","published","error"],object:["id","type","context","alias","attachedTo","attachment","attributedTo","attributedWith","condition","content","contentMap","context","contextOf","name","endTime","generator","generatorOf","group","icon","image","inReplyTo","members","memberOf","message","location","locationOf","objectOf","originOf","presence","preview","previewOf","provider","providerOf","published","rating","relationship","resultOf","replies","role","scope","scopeOf","startTime","status","summary","topic","tag","tagOf","targetOf","title","titleMap","updated","url","xmpp:stanza-id"]},f={"@id":"id","@type":"type",verb:"type",displayName:"name",objectType:"type",platform:"context"},u={actor:{primary:"id",props:q},target:{primary:"id",props:q},object:{primary:"content",props:q}},C=new Map,L={},V=!1,A=!0,k=[];function l(B,z){if(L[B]instanceof Object){if(L[B].includes(z))return!0}return!1}function v(B,z){return B[f[z]]=B[z],delete B[z],B}function S(B,z,D=!1){if(z===null)throw Error(`ActivityStreams validation failed: the "${B}" property is null. Example: { id: "user@example.com", type: "person" }`);if(z===void 0)throw Error(`ActivityStreams validation failed: the "${B}" property is undefined. Example: { id: "user@example.com", type: "person" }`);if(typeof z==="string")throw Error(`ActivityStreams validation failed: the "${B}" property received string "${z}" but expected an object. Use: { id: "${z}", type: "person" }`);if(typeof z!=="object"||Array.isArray(z)){let M=Array.isArray(z)?"array":typeof z,J=String(z);throw Error(`ActivityStreams validation failed: the "${B}" property must be an object, received ${M} (${J}). Example: { id: "user@example.com", type: "person" }`)}if(D&&!z.id)throw Error(`ActivityStreams validation failed: the "${B}" property requires an 'id' property. Example: { id: "user@example.com", type: "person" }`);let Q=Object.keys(z).filter((M)=>{return!q[B].includes(M)});for(let M of Q){let J=z;if(f[M]){J=v(J,M);continue}if(l(J.type,M))continue;if(!k.includes(J.type)){console.log(J);let Y=typeof J[M]==="string"?`"${J[M]}"`:String(J[M]),H=`ActivityStreams validation failed: property "${M}" with value ${Y} is not allowed on the "${B}" object of type "${J.type}".`;if(V)throw Error(H);if(A)console.warn(H)}}}function d(B){return B}function m(B){let z={};for(let D of Object.keys(B))if(typeof B[D]==="string")z[D]=C.get(B[D])||B[D];else if(Array.isArray(B[D])){z[D]=[];for(let G of B[D])if(typeof G==="string")z[D].push(C.get(G)||G)}else z[D]=B[D];for(let D of Object.keys(u))if(typeof z[D]==="string"){let G=u[D].primary,Q={};Q[G]=z[D],z[D]=Q}return z}function o(B){if(S("stream",B),typeof B.object==="object")S("object",B.object);let z=m(B);return F.emit("activity-stream",z),z}var a={create:(B)=>{S("object",B,!0);let z=d(B);return C.set(z.id,z),F.emit("activity-object-create",z),z},delete:(B)=>{let z=C.delete(B);if(z)F.emit("activity-object-delete",B);return z},get:(B,z)=>{let D=C.get(B);if(!D){if(!z)return B;D={id:B}}return d(D)},list:()=>C.keys()};function r(B={}){k=B?.specialObjs||[],V=typeof B.failOnUnknownObjectProperties==="boolean"?B.failOnUnknownObjectProperties:V,A=typeof B.warnOnUnknownObjectProperties==="boolean"?B.warnOnUnknownObjectProperties:A;for(let z of Object.keys(B.customProps||{}))if(typeof B.customProps[z]==="object")L[z]=B.customProps[z];return{Stream:o,Object:a,on:(z,D)=>F.on(z,D),once:(z,D)=>F.once(z,D),off:(z,D)=>F.off(z,D)}}((B)=>{B.ASFactor=r})(typeof window==="object"?window:{});export{r as ASFactory};
17
+
18
+ //# debugId=18C67BBDFA85BE7B64756E2164756E21
19
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgInNyYy9hY3Rpdml0eS1zdHJlYW1zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgLCBwcmVmaXggPSAnfic7XG5cbi8qKlxuICogQ29uc3RydWN0b3IgdG8gY3JlYXRlIGEgc3RvcmFnZSBmb3Igb3VyIGBFRWAgb2JqZWN0cy5cbiAqIEFuIGBFdmVudHNgIGluc3RhbmNlIGlzIGEgcGxhaW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYXJlIGV2ZW50IG5hbWVzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gRXZlbnRzKCkge31cblxuLy9cbi8vIFdlIHRyeSB0byBub3QgaW5oZXJpdCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC4gSW4gc29tZSBlbmdpbmVzIGNyZWF0aW5nIGFuXG4vLyBpbnN0YW5jZSBpbiB0aGlzIHdheSBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nIGBPYmplY3QuY3JlYXRlKG51bGwpYCBkaXJlY3RseS5cbi8vIElmIGBPYmplY3QuY3JlYXRlKG51bGwpYCBpcyBub3Qgc3VwcG9ydGVkIHdlIHByZWZpeCB0aGUgZXZlbnQgbmFtZXMgd2l0aCBhXG4vLyBjaGFyYWN0ZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGJ1aWx0LWluIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBub3Rcbi8vIG92ZXJyaWRkZW4gb3IgdXNlZCBhcyBhbiBhdHRhY2sgdmVjdG9yLlxuLy9cbmlmIChPYmplY3QuY3JlYXRlKSB7XG4gIEV2ZW50cy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vXG4gIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgYF9fcHJvdG9fX2AgcHJvcGVydHkgaXMgc3RpbGwgaW5oZXJpdGVkIGluXG4gIC8vIHNvbWUgb2xkIGJyb3dzZXJzIGxpa2UgQW5kcm9pZCA0LCBpUGhvbmUgNS4xLCBPcGVyYSAxMSBhbmQgU2FmYXJpIDUuXG4gIC8vXG4gIGlmICghbmV3IEV2ZW50cygpLl9fcHJvdG9fXykgcHJlZml4ID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29uY2U9ZmFsc2VdIFNwZWNpZnkgaWYgdGhlIGxpc3RlbmVyIGlzIGEgb25lLXRpbWUgbGlzdGVuZXIuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEVFKGZuLCBjb250ZXh0LCBvbmNlKSB7XG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5vbmNlID0gb25jZSB8fCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGxpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVyID0gbmV3IEVFKGZuLCBjb250ZXh0IHx8IGVtaXR0ZXIsIG9uY2UpXG4gICAgLCBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0pIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gbGlzdGVuZXIsIGVtaXR0ZXIuX2V2ZW50c0NvdW50Kys7XG4gIGVsc2UgaWYgKCFlbWl0dGVyLl9ldmVudHNbZXZ0XS5mbikgZW1pdHRlci5fZXZlbnRzW2V2dF0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2UgZW1pdHRlci5fZXZlbnRzW2V2dF0gPSBbZW1pdHRlci5fZXZlbnRzW2V2dF0sIGxpc3RlbmVyXTtcblxuICByZXR1cm4gZW1pdHRlcjtcbn1cblxuLyoqXG4gKiBDbGVhciBldmVudCBieSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyIFJlZmVyZW5jZSB0byB0aGUgYEV2ZW50RW1pdHRlcmAgaW5zdGFuY2UuXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZ0IFRoZSBFdmVudCBuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJFdmVudChlbWl0dGVyLCBldnQpIHtcbiAgaWYgKC0tZW1pdHRlci5fZXZlbnRzQ291bnQgPT09IDApIGVtaXR0ZXIuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgZWxzZSBkZWxldGUgZW1pdHRlci5fZXZlbnRzW2V2dF07XG59XG5cbi8qKlxuICogTWluaW1hbCBgRXZlbnRFbWl0dGVyYCBpbnRlcmZhY2UgdGhhdCBpcyBtb2xkZWQgYWdhaW5zdCB0aGUgTm9kZS5qc1xuICogYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IG5ldyBFdmVudHMoKTtcbiAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xufVxuXG4vKipcbiAqIFJldHVybiBhbiBhcnJheSBsaXN0aW5nIHRoZSBldmVudHMgZm9yIHdoaWNoIHRoZSBlbWl0dGVyIGhhcyByZWdpc3RlcmVkXG4gKiBsaXN0ZW5lcnMuXG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICB2YXIgbmFtZXMgPSBbXVxuICAgICwgZXZlbnRzXG4gICAgLCBuYW1lO1xuXG4gIGlmICh0aGlzLl9ldmVudHNDb3VudCA9PT0gMCkgcmV0dXJuIG5hbWVzO1xuXG4gIGZvciAobmFtZSBpbiAoZXZlbnRzID0gdGhpcy5fZXZlbnRzKSkge1xuICAgIGlmIChoYXMuY2FsbChldmVudHMsIG5hbWUpKSBuYW1lcy5wdXNoKHByZWZpeCA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lKTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgcmV0dXJuIG5hbWVzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGV2ZW50cykpO1xuICB9XG5cbiAgcmV0dXJuIG5hbWVzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgaGFuZGxlcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWhhbmRsZXJzKSByZXR1cm4gW107XG4gIGlmIChoYW5kbGVycy5mbikgcmV0dXJuIFtoYW5kbGVycy5mbl07XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBoYW5kbGVycy5sZW5ndGgsIGVlID0gbmV3IEFycmF5KGwpOyBpIDwgbDsgaSsrKSB7XG4gICAgZWVbaV0gPSBoYW5kbGVyc1tpXS5mbjtcbiAgfVxuXG4gIHJldHVybiBlZTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1iZXIgb2YgbGlzdGVuZXJzLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50XG4gICAgLCBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAoIWxpc3RlbmVycykgcmV0dXJuIDA7XG4gIGlmIChsaXN0ZW5lcnMuZm4pIHJldHVybiAxO1xuICByZXR1cm4gbGlzdGVuZXJzLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQ2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZXZlbnQgaGFkIGxpc3RlbmVycywgZWxzZSBgZmFsc2VgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBhMSwgYTIsIGEzLCBhNCwgYTUpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XVxuICAgICwgbGVuID0gYXJndW1lbnRzLmxlbmd0aFxuICAgICwgYXJnc1xuICAgICwgaTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKGxpc3RlbmVycy5vbmNlKSB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcnMuZm4sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQpLCB0cnVlO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExKSwgdHJ1ZTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIpLCB0cnVlO1xuICAgICAgY2FzZSA0OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMpLCB0cnVlO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbGlzdGVuZXJzLmZuLmNhbGwobGlzdGVuZXJzLmNvbnRleHQsIGExLCBhMiwgYTMsIGE0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgNjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCwgYTUpLCB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDEsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0xKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm4uYXBwbHkobGlzdGVuZXJzLmNvbnRleHQsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoXG4gICAgICAsIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0ZW5lcnNbaV0ub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzW2ldLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgICBjYXNlIDE6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0KTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMjogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgMzogbGlzdGVuZXJzW2ldLmZuLmNhbGwobGlzdGVuZXJzW2ldLmNvbnRleHQsIGExLCBhMik7IGJyZWFrO1xuICAgICAgICBjYXNlIDQ6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIsIGEzKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKCFhcmdzKSBmb3IgKGogPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgYXJnc1tqIC0gMV0gPSBhcmd1bWVudHNbal07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGlzdGVuZXJzW2ldLmZuLmFwcGx5KGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbihldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBvbmUtdGltZSBsaXN0ZW5lciBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgbGlzdGVuZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFtjb250ZXh0PXRoaXNdIFRoZSBjb250ZXh0IHRvIGludm9rZSB0aGUgbGlzdGVuZXIgd2l0aC5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZShldmVudCwgZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGFkZExpc3RlbmVyKHRoaXMsIGV2ZW50LCBmbiwgY29udGV4dCwgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIG9mIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IG1hdGNoIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgT25seSByZW1vdmUgdGhlIGxpc3RlbmVycyB0aGF0IGhhdmUgdGhpcyBjb250ZXh0LlxuICogQHBhcmFtIHtCb29sZWFufSBvbmNlIE9ubHkgcmVtb3ZlIG9uZS10aW1lIGxpc3RlbmVycy5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IGB0aGlzYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBmbiwgY29udGV4dCwgb25jZSkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1tldnRdKSByZXR1cm4gdGhpcztcbiAgaWYgKCFmbikge1xuICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbZXZ0XTtcblxuICBpZiAobGlzdGVuZXJzLmZuKSB7XG4gICAgaWYgKFxuICAgICAgbGlzdGVuZXJzLmZuID09PSBmbiAmJlxuICAgICAgKCFvbmNlIHx8IGxpc3RlbmVycy5vbmNlKSAmJlxuICAgICAgKCFjb250ZXh0IHx8IGxpc3RlbmVycy5jb250ZXh0ID09PSBjb250ZXh0KVxuICAgICkge1xuICAgICAgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMCwgZXZlbnRzID0gW10sIGxlbmd0aCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBsaXN0ZW5lcnNbaV0uZm4gIT09IGZuIHx8XG4gICAgICAgIChvbmNlICYmICFsaXN0ZW5lcnNbaV0ub25jZSkgfHxcbiAgICAgICAgKGNvbnRleHQgJiYgbGlzdGVuZXJzW2ldLmNvbnRleHQgIT09IGNvbnRleHQpXG4gICAgICApIHtcbiAgICAgICAgZXZlbnRzLnB1c2gobGlzdGVuZXJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIFJlc2V0IHRoZSBhcnJheSwgb3IgcmVtb3ZlIGl0IGNvbXBsZXRlbHkgaWYgd2UgaGF2ZSBubyBtb3JlIGxpc3RlbmVycy5cbiAgICAvL1xuICAgIGlmIChldmVudHMubGVuZ3RoKSB0aGlzLl9ldmVudHNbZXZ0XSA9IGV2ZW50cy5sZW5ndGggPT09IDEgPyBldmVudHNbMF0gOiBldmVudHM7XG4gICAgZWxzZSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBsaXN0ZW5lcnMsIG9yIHRob3NlIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IFtldmVudF0gVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKGV2ZW50KSB7XG4gIHZhciBldnQ7XG5cbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRzW2V2dF0pIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vL1xuLy8gQWxpYXMgbWV0aG9kcyBuYW1lcyBiZWNhdXNlIHBlb3BsZSByb2xsIGxpa2UgdGhhdC5cbi8vXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgcHJlZml4LlxuLy9cbkV2ZW50RW1pdHRlci5wcmVmaXhlZCA9IHByZWZpeDtcblxuLy9cbi8vIEFsbG93IGBFdmVudEVtaXR0ZXJgIHRvIGJlIGltcG9ydGVkIGFzIG1vZHVsZSBuYW1lc3BhY2UuXG4vL1xuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuLy9cbi8vIEV4cG9zZSB0aGUgbW9kdWxlLlxuLy9cbmlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG1vZHVsZSkge1xuICBtb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbn1cbiIsCiAgICAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL2luZGV4LmpzJ1xuXG5leHBvcnQgeyBFdmVudEVtaXR0ZXIgfVxuZXhwb3J0IGRlZmF1bHQgRXZlbnRFbWl0dGVyXG4iLAogICAgIi8qIVxuICogYWN0aXZpdHktc3RyZWFtc1xuICogICBodHRwczovL2dpdGh1Yi5jb20vc2lsdmVyYnVja2V0L2FjdGl2aXR5LXN0cmVhbXNcbiAqXG4gKiBEZXZlbG9wZWQgYW5kIE1haW50YWluZWQgYnk6XG4gKiAgIE5pY2sgSmVubmluZ3MgPG5pY2tAc2lsdmVyYnVja2V0Lm5ldD5cbiAqXG4gKiBhY3Rpdml0eS1zdHJlYW1zIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgKHNlZSBMSUNFTlNFKS5cbiAqXG4gKiBZb3UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIHRvIGNob29zZSBvbmUgbGljZW5zZSBvciB0aGUgb3RoZXJcbiAqIGFuZCB5b3UgZG9uJ3QgaGF2ZSB0byBub3RpZnkgYW55b25lIHdoaWNoIGxpY2Vuc2UgeW91IGFyZSB1c2luZy5cbiAqIFBsZWFzZSBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgbGljZW5zZSBmaWxlIGZvciBkZXRhaWxzIG9mIHRoZXNlIGxpY2Vuc2VzLlxuICogWW91IGFyZSBmcmVlIHRvIHVzZSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIGJ1dCBhbGwgY29weXJpZ2h0XG4gKiBpbmZvcm1hdGlvbiBtdXN0IHJlbWFpbi5cbiAqXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eU9iamVjdCwgQWN0aXZpdHlTdHJlYW0gfSBmcm9tIFwiQHNvY2tldGh1Yi9zY2hlbWFzXCI7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudGVtaXR0ZXIzXCI7XG5cbmNvbnN0IGVlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuY29uc3QgYmFzZVByb3BzID0ge1xuICAgIHN0cmVhbTogW1xuICAgICAgICBcImlkXCIsXG4gICAgICAgIFwidHlwZVwiLFxuICAgICAgICBcImFjdG9yXCIsXG4gICAgICAgIFwidGFyZ2V0XCIsXG4gICAgICAgIFwib2JqZWN0XCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcImNvbnRleHRcIixcbiAgICAgICAgXCJwdWJsaXNoZWRcIixcbiAgICAgICAgXCJlcnJvclwiLFxuICAgIF0sXG4gICAgb2JqZWN0OiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcImFsaWFzXCIsXG4gICAgICAgIFwiYXR0YWNoZWRUb1wiLFxuICAgICAgICBcImF0dGFjaG1lbnRcIixcbiAgICAgICAgXCJhdHRyaWJ1dGVkVG9cIixcbiAgICAgICAgXCJhdHRyaWJ1dGVkV2l0aFwiLFxuICAgICAgICBcImNvbmRpdGlvblwiLFxuICAgICAgICBcImNvbnRlbnRcIixcbiAgICAgICAgXCJjb250ZW50TWFwXCIsXG4gICAgICAgIFwiY29udGV4dFwiLFxuICAgICAgICBcImNvbnRleHRPZlwiLFxuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJlbmRUaW1lXCIsXG4gICAgICAgIFwiZ2VuZXJhdG9yXCIsXG4gICAgICAgIFwiZ2VuZXJhdG9yT2ZcIixcbiAgICAgICAgXCJncm91cFwiLFxuICAgICAgICBcImljb25cIixcbiAgICAgICAgXCJpbWFnZVwiLFxuICAgICAgICBcImluUmVwbHlUb1wiLFxuICAgICAgICBcIm1lbWJlcnNcIixcbiAgICAgICAgXCJtZW1iZXJPZlwiLFxuICAgICAgICBcIm1lc3NhZ2VcIixcbiAgICAgICAgXCJsb2NhdGlvblwiLFxuICAgICAgICBcImxvY2F0aW9uT2ZcIixcbiAgICAgICAgXCJvYmplY3RPZlwiLFxuICAgICAgICBcIm9yaWdpbk9mXCIsXG4gICAgICAgIFwicHJlc2VuY2VcIixcbiAgICAgICAgXCJwcmV2aWV3XCIsXG4gICAgICAgIFwicHJldmlld09mXCIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgXCJwcm92aWRlck9mXCIsXG4gICAgICAgIFwicHVibGlzaGVkXCIsXG4gICAgICAgIFwicmF0aW5nXCIsXG4gICAgICAgIFwicmVsYXRpb25zaGlwXCIsXG4gICAgICAgIFwicmVzdWx0T2ZcIixcbiAgICAgICAgXCJyZXBsaWVzXCIsXG4gICAgICAgIFwicm9sZVwiLFxuICAgICAgICBcInNjb3BlXCIsXG4gICAgICAgIFwic2NvcGVPZlwiLFxuICAgICAgICBcInN0YXJ0VGltZVwiLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgICBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0b3BpY1wiLFxuICAgICAgICBcInRhZ1wiLFxuICAgICAgICBcInRhZ09mXCIsXG4gICAgICAgIFwidGFyZ2V0T2ZcIixcbiAgICAgICAgXCJ0aXRsZVwiLFxuICAgICAgICBcInRpdGxlTWFwXCIsXG4gICAgICAgIFwidXBkYXRlZFwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcInhtcHA6c3RhbnphLWlkXCIsXG4gICAgXSxcbn07XG5jb25zdCByZW5hbWUgPSB7XG4gICAgXCJAaWRcIjogXCJpZFwiLFxuICAgIFwiQHR5cGVcIjogXCJ0eXBlXCIsXG4gICAgdmVyYjogXCJ0eXBlXCIsXG4gICAgZGlzcGxheU5hbWU6IFwibmFtZVwiLFxuICAgIG9iamVjdFR5cGU6IFwidHlwZVwiLFxuICAgIHBsYXRmb3JtOiBcImNvbnRleHRcIixcbn07XG5jb25zdCBleHBhbmQgPSB7XG4gICAgYWN0b3I6IHtcbiAgICAgICAgcHJpbWFyeTogXCJpZFwiLFxuICAgICAgICBwcm9wczogYmFzZVByb3BzLFxuICAgIH0sXG4gICAgdGFyZ2V0OiB7XG4gICAgICAgIHByaW1hcnk6IFwiaWRcIixcbiAgICAgICAgcHJvcHM6IGJhc2VQcm9wcyxcbiAgICB9LFxuICAgIG9iamVjdDoge1xuICAgICAgICBwcmltYXJ5OiBcImNvbnRlbnRcIixcbiAgICAgICAgcHJvcHM6IGJhc2VQcm9wcyxcbiAgICB9LFxufTtcblxudHlwZSBDdXN0b21Qcm9wcyA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0IHwgc3RyaW5nW107XG59O1xuXG5jb25zdCBvYmpzID0gbmV3IE1hcCgpO1xuY29uc3QgY3VzdG9tUHJvcHM6IEN1c3RvbVByb3BzID0ge307XG5cbmxldCBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9IGZhbHNlO1xubGV0IHdhcm5PblVua25vd25PYmplY3RQcm9wZXJ0aWVzID0gdHJ1ZTtcbmxldCBzcGVjaWFsT2JqcyA9IFtdOyAvLyB0aGUgb2JqZWN0cyBkb24ndCBnZXQgcmVqZWN0ZWQgZm9yIGJhZCBwcm9wc1xuXG5mdW5jdGlvbiBtYXRjaGVzQ3VzdG9tUHJvcCh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGN1c3RvbVByb3BzW3R5cGVdIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGN1c3RvbVByb3BzW3R5cGVdIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAob2JqLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVuYW1lUHJvcDxUPihvYmo6IFQsIGtleTogc3RyaW5nKTogVCB7XG4gICAgb2JqW3JlbmFtZVtrZXldXSA9IG9ialtrZXldO1xuICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdDxUPih0eXBlOiBzdHJpbmcsIGluY29taW5nT2JqOiBULCByZXF1aXJlSWQgPSBmYWxzZSkge1xuICAgIC8vIElucHV0IHZhbGlkYXRpb24gd2l0aCBjbGVhciBlcnJvciBtZXNzYWdlc1xuICAgIGlmIChpbmNvbWluZ09iaiA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgaXMgbnVsbC4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGluY29taW5nT2JqID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEFjdGl2aXR5U3RyZWFtcyB2YWxpZGF0aW9uIGZhaWxlZDogdGhlIFwiJHt0eXBlfVwiIHByb3BlcnR5IGlzIHVuZGVmaW5lZC4gRXhhbXBsZTogeyBpZDogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIHR5cGU6IFwicGVyc29uXCIgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbmNvbWluZ09iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgcmVjZWl2ZWQgc3RyaW5nIFwiJHtpbmNvbWluZ09ian1cIiBidXQgZXhwZWN0ZWQgYW4gb2JqZWN0LiBVc2U6IHsgaWQ6IFwiJHtpbmNvbWluZ09ian1cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluY29taW5nT2JqICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoaW5jb21pbmdPYmopKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IEFycmF5LmlzQXJyYXkoaW5jb21pbmdPYmopXG4gICAgICAgICAgICA/IFwiYXJyYXlcIlxuICAgICAgICAgICAgOiB0eXBlb2YgaW5jb21pbmdPYmo7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkVmFsdWUgPSBTdHJpbmcoaW5jb21pbmdPYmopO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiB0aGUgXCIke3R5cGV9XCIgcHJvcGVydHkgbXVzdCBiZSBhbiBvYmplY3QsIHJlY2VpdmVkICR7cmVjZWl2ZWRUeXBlfSAoJHtyZWNlaXZlZFZhbHVlfSkuIEV4YW1wbGU6IHsgaWQ6IFwidXNlckBleGFtcGxlLmNvbVwiLCB0eXBlOiBcInBlcnNvblwiIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlcXVpcmUgJ2lkJyBwcm9wZXJ0eSB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIChlLmcuLCBPYmplY3QuY3JlYXRlKCkpXG4gICAgY29uc3Qgb2JqID0gaW5jb21pbmdPYmogYXMgQWN0aXZpdHlPYmplY3Q7XG4gICAgaWYgKHJlcXVpcmVJZCAmJiAhb2JqLmlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBBY3Rpdml0eVN0cmVhbXMgdmFsaWRhdGlvbiBmYWlsZWQ6IHRoZSBcIiR7dHlwZX1cIiBwcm9wZXJ0eSByZXF1aXJlcyBhbiAnaWQnIHByb3BlcnR5LiBFeGFtcGxlOiB7IGlkOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgdHlwZTogXCJwZXJzb25cIiB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1bmtub3duS2V5cyA9IE9iamVjdC5rZXlzKGluY29taW5nT2JqKS5maWx0ZXIoXG4gICAgICAgIChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFiYXNlUHJvcHNbdHlwZV0uaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgfSxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdW5rbm93bktleXMpIHtcbiAgICAgICAgbGV0IGFvOiBBY3Rpdml0eU9iamVjdCA9IGluY29taW5nT2JqIGFzIEFjdGl2aXR5T2JqZWN0O1xuICAgICAgICBpZiAocmVuYW1lW2tleV0pIHtcbiAgICAgICAgICAgIC8vIHJlbmFtZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGZhaWxcbiAgICAgICAgICAgIGFvID0gcmVuYW1lUHJvcChhbywga2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZXNDdXN0b21Qcm9wKGFvLnR5cGUsIGtleSkpIHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSBwcm9wZXJ0eSBtYXRjaGVzLCBjb250aW51ZVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNwZWNpYWxPYmpzLmluY2x1ZGVzKGFvLnR5cGUpKSB7XG4gICAgICAgICAgICAvLyBub3QgZGVmaW5lZCBhcyBhIHNwZWNpYWwgcHJvcFxuICAgICAgICAgICAgLy8gZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggaXQsIHNvIHRocm93IGVycm9yXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhhbyk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlZFZhbHVlID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgYW9ba2V5XSA9PT0gXCJzdHJpbmdcIiA/IGBcIiR7YW9ba2V5XX1cImAgOiBTdHJpbmcoYW9ba2V5XSk7XG4gICAgICAgICAgICBjb25zdCBlcnIgPSBgQWN0aXZpdHlTdHJlYW1zIHZhbGlkYXRpb24gZmFpbGVkOiBwcm9wZXJ0eSBcIiR7a2V5fVwiIHdpdGggdmFsdWUgJHtyZWNlaXZlZFZhbHVlfSBpcyBub3QgYWxsb3dlZCBvbiB0aGUgXCIke3R5cGV9XCIgb2JqZWN0IG9mIHR5cGUgXCIke2FvLnR5cGV9XCIuYDtcbiAgICAgICAgICAgIGlmIChmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHdhcm5PblVua25vd25PYmplY3RQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZVByb3BzKG9iajogQWN0aXZpdHlPYmplY3QpOiBBY3Rpdml0eU9iamVjdCB7XG4gICAgLy8gZW5zdXJlIHRoZSBuYW1lIHByb3BlcnR5LCB3aGljaCBjYW4gZ2VuZXJhbGx5IGJlIGluZmVycmVkIGZyb20gdGhlIGlkXG4gICAgLy8gbmFtZSA9IG9iai5tYXRjaCgvKD8oP1xcdyspOlxcL1xcLykoPzouK0ApPyguKz8pKD86XFwvfCQpLylbMV1cbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBleHBhbmRTdHJlYW0obWV0YTogQWN0aXZpdHlTdHJlYW0pIHtcbiAgICBjb25zdCBzdHJlYW0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhKSkge1xuICAgICAgICBpZiAodHlwZW9mIG1ldGFba2V5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc3RyZWFtW2tleV0gPSBvYmpzLmdldChtZXRhW2tleV0pIHx8IG1ldGFba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1ldGFba2V5XSkpIHtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1ldGFba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtW2tleV0ucHVzaChvYmpzLmdldChlbnRyeSkgfHwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbVtrZXldID0gbWV0YVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gb25seSBleHBhbmQgc3RyaW5nIGludG8gb2JqZWN0cyBpZiB0aGV5IGFyZSBpbiB0aGUgZXhwYW5kIGxpc3RcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhleHBhbmQpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RyZWFtW2tleV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGV4cGFuZFtrZXldLnByaW1hcnk7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICAgIG9ialtpZHhdID0gc3RyZWFtW2tleV07XG4gICAgICAgICAgICBzdHJlYW1ba2V5XSA9IG9iajtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyZWFtO1xufVxuXG5mdW5jdGlvbiBTdHJlYW0oXG4gICAgbWV0YTogQWN0aXZpdHlTdHJlYW0sXG4pOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0IHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+IHtcbiAgICB2YWxpZGF0ZU9iamVjdChcInN0cmVhbVwiLCBtZXRhKTtcbiAgICBpZiAodHlwZW9mIG1ldGEub2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhbGlkYXRlT2JqZWN0KFwib2JqZWN0XCIsIG1ldGEub2JqZWN0KTtcbiAgICB9XG4gICAgY29uc3Qgc3RyZWFtID0gZXhwYW5kU3RyZWFtKG1ldGEpO1xuICAgIGVlLmVtaXQoXCJhY3Rpdml0eS1zdHJlYW1cIiwgc3RyZWFtKTtcbiAgICByZXR1cm4gc3RyZWFtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5T2JqZWN0TWFuYWdlciB7XG4gICAgY3JlYXRlKG9iajogdW5rbm93bik6IHVua25vd247XG4gICAgZGVsZXRlKGlkOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGxpc3QoKTogSXRlcmFibGVJdGVyYXRvcjx1bmtub3duPjtcbiAgICBnZXQoaWQ6IHN0cmluZywgZXhwYW5kPzogYm9vbGVhbik6IHVua25vd247XG59XG5cbmNvbnN0IF9PYmplY3Q6IEFjdGl2aXR5T2JqZWN0TWFuYWdlciA9IHtcbiAgICBjcmVhdGU6IChvYmo6IEFjdGl2aXR5T2JqZWN0KSA9PiB7XG4gICAgICAgIHZhbGlkYXRlT2JqZWN0KFwib2JqZWN0XCIsIG9iaiwgdHJ1ZSk7IC8vIHJlcXVpcmUgSUQgZm9yIE9iamVjdC5jcmVhdGUoKVxuICAgICAgICBjb25zdCBhbyA9IGVuc3VyZVByb3BzKG9iaik7XG4gICAgICAgIG9ianMuc2V0KGFvLmlkLCBhbyk7XG4gICAgICAgIGVlLmVtaXQoXCJhY3Rpdml0eS1vYmplY3QtY3JlYXRlXCIsIGFvKTtcbiAgICAgICAgcmV0dXJuIGFvO1xuICAgIH0sXG5cbiAgICBkZWxldGU6IChpZCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBvYmpzLmRlbGV0ZShpZCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGVlLmVtaXQoXCJhY3Rpdml0eS1vYmplY3QtZGVsZXRlXCIsIGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBnZXQ6IChpZCwgZXhwYW5kKSA9PiB7XG4gICAgICAgIGxldCBvYmogPSBvYmpzLmdldChpZCk7XG4gICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICBpZiAoIWV4cGFuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9iaiA9IHsgaWQ6IGlkIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuc3VyZVByb3BzKG9iaik7XG4gICAgfSxcblxuICAgIGxpc3Q6ICgpOiBJdGVyYWJsZUl0ZXJhdG9yPHVua25vd24+ID0+IG9ianMua2V5cygpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBBU0ZhY3RvcnlPcHRpb25zIHtcbiAgICBzcGVjaWFsT2Jqcz86IEFycmF5PHN0cmluZz47XG4gICAgZmFpbE9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM/OiBib29sZWFuO1xuICAgIHdhcm5PblVua25vd25PYmplY3RQcm9wZXJ0aWVzPzogYm9vbGVhbjtcbiAgICBjdXN0b21Qcm9wcz86IEN1c3RvbVByb3BzO1xufVxuXG50eXBlIEV2ZW50Q2FsbGJhY2sgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFTTWFuYWdlciB7XG4gICAgU3RyZWFtKG1ldGE6IHVua25vd24pOiBBY3Rpdml0eVN0cmVhbSB8IEFjdGl2aXR5T2JqZWN0O1xuICAgIE9iamVjdDogQWN0aXZpdHlPYmplY3RNYW5hZ2VyO1xuICAgIG9uKGV2ZW50OiBzdHJpbmcsIGZ1bmM6IEV2ZW50Q2FsbGJhY2spOiB2b2lkO1xuICAgIG9uY2UoZXZlbnQ6IHN0cmluZywgZnVuYzogRXZlbnRDYWxsYmFjayk6IHZvaWQ7XG4gICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGZ1bmM6IEV2ZW50Q2FsbGJhY2spOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQVNGYWN0b3J5KG9wdHM6IEFTRmFjdG9yeU9wdGlvbnMgPSB7fSk6IEFTTWFuYWdlciB7XG4gICAgc3BlY2lhbE9ianMgPSBvcHRzPy5zcGVjaWFsT2JqcyB8fCBbXTtcbiAgICBmYWlsT25Vbmtub3duT2JqZWN0UHJvcGVydGllcyA9XG4gICAgICAgIHR5cGVvZiBvcHRzLmZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzID09PSBcImJvb2xlYW5cIlxuICAgICAgICAgICAgPyBvcHRzLmZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzXG4gICAgICAgICAgICA6IGZhaWxPblVua25vd25PYmplY3RQcm9wZXJ0aWVzO1xuICAgIHdhcm5PblVua25vd25PYmplY3RQcm9wZXJ0aWVzID1cbiAgICAgICAgdHlwZW9mIG9wdHMud2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXMgPT09IFwiYm9vbGVhblwiXG4gICAgICAgICAgICA/IG9wdHMud2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXNcbiAgICAgICAgICAgIDogd2Fybk9uVW5rbm93bk9iamVjdFByb3BlcnRpZXM7XG4gICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhvcHRzLmN1c3RvbVByb3BzIHx8IHt9KSkge1xuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY3VzdG9tUHJvcHNbcHJvcE5hbWVdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBjdXN0b21Qcm9wc1twcm9wTmFtZV0gPSBvcHRzLmN1c3RvbVByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIFN0cmVhbTogU3RyZWFtLFxuICAgICAgICBPYmplY3Q6IF9PYmplY3QsXG4gICAgICAgIG9uOiAoZXZlbnQsIGZ1bmMpID0+IGVlLm9uKGV2ZW50LCBmdW5jKSxcbiAgICAgICAgb25jZTogKGV2ZW50LCBmdW5jKSA9PiBlZS5vbmNlKGV2ZW50LCBmdW5jKSxcbiAgICAgICAgb2ZmOiAoZXZlbnQsIGZ1bmNOYW1lKSA9PiBlZS5vZmYoZXZlbnQsIGZ1bmNOYW1lKSxcbiAgICB9IGFzIEFTTWFuYWdlcjtcbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA8ZXhwbGFuYXRpb24+XG4oKGdsb2JhbDogYW55KSA9PiB7XG4gICAgZ2xvYmFsLkFTRmFjdG9yID0gQVNGYWN0b3J5O1xufSkodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHt9KTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICJxWUFFQSxJQUFJLEVBQU0sT0FBTyxVQUFVLGVBQ3ZCLEVBQVMsSUFTYixTQUFTLENBQU0sRUFBRyxFQVNsQixHQUFJLE9BQU8sUUFPVCxHQU5BLEVBQU8sVUFBWSxPQUFPLE9BQU8sSUFBSSxFQU1qQyxDQUFDLElBQUksRUFBTyxFQUFFLFVBQVcsRUFBUyxHQVl4QyxTQUFTLENBQUUsQ0FBQyxFQUFJLEVBQVMsRUFBTSxDQUM3QixLQUFLLEdBQUssRUFDVixLQUFLLFFBQVUsRUFDZixLQUFLLEtBQU8sR0FBUSxHQWN0QixTQUFTLENBQVcsQ0FBQyxFQUFTLEVBQU8sRUFBSSxFQUFTLEVBQU0sQ0FDdEQsR0FBSSxPQUFPLElBQU8sV0FDaEIsTUFBVSxVQUFVLGlDQUFpQyxFQUd2RCxJQUFJLEVBQVcsSUFBSSxFQUFHLEVBQUksR0FBVyxFQUFTLENBQUksRUFDOUMsRUFBTSxFQUFTLEVBQVMsRUFBUSxFQUVw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Z0NBQWtDLFVBQ3hDLEVBQUssOEJBQ0wsRUFDVixFQUNJLE9BQU8sRUFBSyxnQ0FBa0MsVUFDeEMsRUFBSyw4QkFDTCxFQUNWLFFBQVcsS0FBWSxPQUFPLEtBQUssRUFBSyxhQUFlLENBQUMsQ0FBQyxFQUNyRCxHQUFJLE9BQU8sRUFBSyxZQUFZLEtBQWMsU0FDdEMsRUFBWSxHQUFZLEVBQUssWUFBWSxHQUlqRCxNQUFPLENBQ0gsT0FBUSxFQUNSLE9BQVEsRUFDUixHQUFJLENBQUMsRUFBTyxJQUFTLEVBQUcsR0FBRyxFQUFPLENBQUksRUFDdEMsS0FBTSxDQUFDLEVBQU8sSUFBUyxFQUFHLEtBQUssRUFBTyxDQUFJLEVBQzFDLElBQUssQ0FBQyxFQUFPLElBQWEsRUFBRyxJQUFJLEVBQU8sQ0FBUSxDQUNwRCxHQUlILENBQUMsSUFBZ0IsQ0FDZCxFQUFPLFNBQVcsSUFDbkIsT0FBTyxTQUFXLFNBQVcsT0FBUyxDQUFDLENBQUMiLAogICJkZWJ1Z0lkIjogIjE4QzY3QkJERkE4NUJFN0I2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
package/package.json CHANGED
@@ -1,39 +1,19 @@
1
1
  {
2
2
  "name": "@sockethub/activity-streams",
3
- "version": "4.4.0-alpha.3",
3
+ "version": "4.4.0-alpha.5",
4
4
  "description": "A simple tool to facilitate handling and referencing activity streams without unnecessary verbosity",
5
- "main": "./src/activity-streams.js",
6
- "dependencies": {
7
- "event-emitter": "^0.3.5"
8
- },
9
- "devDependencies": {
10
- "c8": "7.11.0",
11
- "chai": "4.3.6",
12
- "karma": "6.3.16",
13
- "karma-chai": "0.1.0",
14
- "karma-chrome-launcher": "3.1.0",
15
- "karma-firefox-launcher": "2.1.2",
16
- "karma-mocha": "2.0.1",
17
- "mocha": "9.2.1",
18
- "webpack": "5.69.1",
19
- "webpack-cli": "4.9.2"
5
+ "type": "module",
6
+ "main": "./src/activity-streams.ts",
7
+ "files": [
8
+ "dist/"
9
+ ],
10
+ "engines": {
11
+ "bun": ">=1.2"
20
12
  },
21
13
  "repository": {
22
14
  "type": "git",
23
15
  "url": "git+https://github.com/sockethub/sockethub.git",
24
- "directory": "packages/activity-streams.js"
25
- },
26
- "scripts": {
27
- "clean": "npx rimraf browser coverage",
28
- "clean:deps": "npx rimraf node_modules",
29
- "compliance": "yarn run test && yarn run coverage",
30
- "test:node": "c8 -r text mocha ./src/**/*.test.js",
31
- "test:node:lcov": "c8 -r lcov mocha ./src/**/*.test.js",
32
- "test:browser": "karma start --single-run --browsers ChromeHeadless,FirefoxHeadless ./karma.config.js",
33
- "coverage": "c8 check-coverage --statements 95 --branches 95 --functions 85 --lines 95",
34
- "build": "webpack --mode production",
35
- "release": "yarn run build && yarn run test",
36
- "test": "yarn run build && yarn run test:node && yarn run test:browser"
16
+ "directory": "packages/activity-streams"
37
17
  },
38
18
  "keywords": [
39
19
  "activity",
@@ -46,6 +26,22 @@
46
26
  "bugs": {
47
27
  "url": "https://github.com/sockethub/sockethub/issues"
48
28
  },
49
- "homepage": "https://github.com/sockethub/sockethub/tree/master/packages/activity-streams.js",
50
- "gitHead": "f02238a478b7ffd3f31d8deea292eb67e630a86b"
29
+ "homepage": "https://github.com/sockethub/sockethub/tree/master/packages/activity-streams",
30
+ "scripts": {
31
+ "build": "bun run clean && bun run build:js && bun run build:minify",
32
+ "build:js": "bun build ./src/activity-streams.ts --target=browser --sourcemap=inline --format=esm --outdir=dist/",
33
+ "build:minify": "bun build ./src/activity-streams.ts --target=browser --sourcemap=inline --format=esm --outfile=dist/activity-streams.min.js --minify",
34
+ "clean": "rm -rf dist",
35
+ "test:browser": "wtr dist/**/*.test.js --node-resolve --puppeteer"
36
+ },
37
+ "dependencies": {
38
+ "eventemitter3": "5.0.1"
39
+ },
40
+ "devDependencies": {
41
+ "@sockethub/schemas": "3.0.0-alpha.5",
42
+ "@types/bun": "latest",
43
+ "@web/test-runner": "^0.19.0",
44
+ "@web/test-runner-puppeteer": "^0.17.0"
45
+ },
46
+ "gitHead": "341ea9eeca6afd1442fe6e01457bc21d112b91a4"
51
47
  }